From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: Long lines and bidi Date: Fri, 08 Feb 2013 19:34:20 -0800 Organization: UCLA Computer Science Department Message-ID: <5115C3BC.8020203@cs.ucla.edu> References: <877gmp5a04.fsf@ed.ac.uk> <83vca89izh.fsf@gnu.org> <5110906D.7020406@yandex.ru> <83fw1aac3d.fsf@gnu.org> <51120360.4060104@yandex.ru> <51127363.5030203@yandex.ru> <834nhp9u9j.fsf@gnu.org> <5114FEBB.8020201@yandex.ru> <838v6y99wk.fsf@gnu.org> <836222983u.fsf@gnu.org> <51152A00.6070101@yandex.ru> <83y5ey7npl.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070008010200060001000104" X-Trace: ger.gmane.org 1360380908 22150 80.91.229.3 (9 Feb 2013 03:35:08 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 9 Feb 2013 03:35:08 +0000 (UTC) Cc: Dmitry Antipov , emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Feb 09 04:35:27 2013 Return-path: Envelope-to: ged-emacs-devel@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 1U41Dh-0002uN-AW for ged-emacs-devel@m.gmane.org; Sat, 09 Feb 2013 04:35:17 +0100 Original-Received: from localhost ([::1]:52921 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U41DO-0002r4-Ah for ged-emacs-devel@m.gmane.org; Fri, 08 Feb 2013 22:34:58 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:55335) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U41DE-0002qs-UO for emacs-devel@gnu.org; Fri, 08 Feb 2013 22:34:55 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U41D6-0001z6-At for emacs-devel@gnu.org; Fri, 08 Feb 2013 22:34:48 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:36409) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U41Cw-0001wj-0H; Fri, 08 Feb 2013 22:34:30 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 6384A39E8105; Fri, 8 Feb 2013 19:34:25 -0800 (PST) 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 D93qOE6KgjMj; Fri, 8 Feb 2013 19:34:21 -0800 (PST) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 2458139E8008; Fri, 8 Feb 2013 19:34:21 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 In-Reply-To: <83y5ey7npl.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 131.179.128.62 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:156907 Archived-At: This is a multi-part message in MIME format. --------------070008010200060001000104 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 02/08/2013 08:52 AM, Eli Zaretskii wrote: >> > So, ~90% of time spent in scan_buffer is: >> > >> > 799 while (*cursor != target && --cursor >= ceiling_addr) >> > 800 ; > Which cannot be optimized. It can be sped up somewhat, by using memrchr. This won't solve these performance issues, but it helps: on my platform (x86-64 Ubuntu 12.10) I ran Dmitry's scroll-both benchmark on a real file (the trunk's src/xdisp.c), and it was 25% faster overall (1.19 seconds versus 1.49 seconds) when I used memrchr there and memchr for forward searches. I'll attach the patch I used. Eli, it'll need a bit of hacking to port to MS-Windows, since the substitute memrchr implementation (which is supplied) will need to be compiled. Dmitry, is this something you can easily try with your benchmarks? Most of the attached patch is boilerplate taken unmodified from gnulib, to support memrchr on non-GNU platforms. The key part of the change is at the end, to src/search.c. --------------070008010200060001000104 Content-Type: text/plain; charset=UTF-8; name="memchr.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="memchr.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTMtMDIt MDEgMDY6MzA6NTEgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMy0wMi0wOSAwMzoxMjo0OCAr MDAwMApAQCAtOTcsNiArOTcsNyBAQAogbGliL3N0ZGlvLmgKIGxpYi9zdGRpbnQuaAogbGli L3N0ZGxpYi5oCitsaWIvc3RyaW5nLmgKIGxpYi9zeXMvCiBsaWIvU1lTCiBsaWIvdGltZS5o Cgo9PT0gbW9kaWZpZWQgZmlsZSAnQ2hhbmdlTG9nJwotLS0gQ2hhbmdlTG9nCTIwMTMtMDIt MDggMjM6Mzc6MTcgKzAwMDAKKysrIENoYW5nZUxvZwkyMDEzLTAyLTA5IDAzOjEyOjQ4ICsw MDAwCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTMtMDItMDkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0 QGNzLnVjbGEuZWR1PgorCisJVHVuZSByZWRpc3BsYXkgYnkgdXNpbmcgbWVtY2hyIGFuZCBt ZW1yY2hyLgorCSogLmJ6cmlnbm9yZTogQWRkIHN0cmluZy5oLgorCSogbGliL2dudWxpYi5t aywgbTQvZ251bGliLWNvbXAubTQ6IFJlZ2VuZXJhdGUuCisJKiBsaWIvbWVtcmNoci5jLCBs aWIvc3RyaW5nLmluLmgsIG00L21lbXJjaHIubTQsIG00L3N0cmluZ19oLm00OgorCU5ldyBm aWxlcywgZnJvbSBnbnVsaWIuCisKIDIwMTMtMDItMDggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0 QGNzLnVjbGEuZWR1PgogCiAJTWVyZ2UgZnJvbSBnbnVsaWIsIGluY29ycG9yYXRpbmc6Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwotLS0gYWRtaW4vQ2hhbmdlTG9n CTIwMTMtMDItMDEgMDY6MzA6NTEgKzAwMDAKKysrIGFkbWluL0NoYW5nZUxvZwkyMDEzLTAy LTA5IDAzOjEyOjQ4ICswMDAwCkBAIC0xLDMgKzEsOCBAQAorMjAxMy0wMi0wOSAgUGF1bCBF Z2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlUdW5lIHJlZGlzcGxheSBieSB1c2lu ZyBtZW1jaHIgYW5kIG1lbXJjaHIuCisJKiBtZXJnZS1nbnVsaWIgKEdOVUxJQl9NT0RVTEVT KTogQWRkIG1lbXJjaHIuCisKIDIwMTMtMDItMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNz LnVjbGEuZWR1PgogCiAJVXNlIGZkb3BlbmRpciwgZnN0YXRhdCBhbmQgcmVhZGxpbmthdCwg Zm9yIGVmZmljaWVuY3kgKEJ1ZyMxMzUzOSkuCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4v bWVyZ2UtZ251bGliJwotLS0gYWRtaW4vbWVyZ2UtZ251bGliCTIwMTMtMDItMDEgMDY6MzA6 NTEgKzAwMDAKKysrIGFkbWluL21lcmdlLWdudWxpYgkyMDEzLTAyLTA5IDAzOjEyOjQ4ICsw MDAwCkBAIC0zMSw3ICszMSw4IEBACiAgIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZp cm9uIGV4ZWNpbmZvIGZhY2Nlc3NhdAogICBmY250bC1oIGZkb3BlbmRpciBmaWxlbW9kZSBm c3RhdGF0IGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheQogICBp Z25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0Ci0gIG1hbnl3YXJuaW5ncyBt a3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5r YXQKKyAgbWFueXdhcm5pbmdzIG1lbXJjaHIgbWt0aW1lCisgIHBzZWxlY3QgcHRocmVhZF9z aWdtYXNrIHB1dGVudiByZWFkbGluayByZWFkbGlua2F0CiAgIHNpZzJzdHIgc29ja2xlbiBz dGF0LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8KICAgc3RyZnRpbWUgc3Ry dG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0CiAgIHN5c190aW1lIHRpbWUgdGlt ZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0ZW52IHV0aW1lbnMKCj09 PSBtb2RpZmllZCBmaWxlICdsaWIvZ251bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEz LTAyLTA4IDIzOjM3OjE3ICswMDAwCisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDItMDkgMDM6 MTI6NDggKzAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9u IHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5 IGdudWxpYi10b29sLgotIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0t ZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRv Yy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2 b2lkPWR1cCAtLWF2b2lkPWVycm5vIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1h dm9pZD1mc3RhdCAtLWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1h dm9pZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2 b2lkPW9wZW5kaXIgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2Vs ZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJl YWRsaWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVu Y2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxv Y2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5 cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0 ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWgg ZmRvcGVuZGlyIGZpbGVtb2RlIGZzdGF0YXQgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRp bWUgZ2V0dGltZW9mZGF5IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQg bWFueXdhcm5pbmdzIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYgcmVh ZGxpbmsgcmVhZGxpbmthdCBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0 ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGlu ayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVz cGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTogZ251 bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFzZT1s aWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1 eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hk aXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4IC0t YXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4gLS1h dm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZvaWQ9 c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lkPXN5 c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1rIC0t Y29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1n bCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFkbGlu a2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEyNTYg Y3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVjaW5m byBmYWNjZXNzYXQgZmNudGwtaCBmZG9wZW5kaXIgZmlsZW1vZGUgZnN0YXRhdCBnZXRsb2Fk YXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHBy b3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55d2FybmluZ3MgbWVtcmNociBta3RpbWUgcHNlbGVj dCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBz b2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbyBzdHJmdGlt ZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0 aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3 YXJuaW5ncwogCiAKIE1PU1RMWUNMRUFORklMRVMgKz0gY29yZSAqLnN0YWNrZHVtcApAQCAt NDgwLDYgKzQ4MCwxNSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGxzdGF0CiAKKyMj IGJlZ2luIGdudWxpYiBtb2R1bGUgbWVtcmNocgorCisKK0VYVFJBX0RJU1QgKz0gbWVtcmNo ci5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gbWVtcmNoci5jCisKKyMjIGVuZCAg IGdudWxpYiBtb2R1bGUgbWVtcmNocgorCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1rdGlt ZQogCiAKQEAgLTExMDUsNiArMTExNCwxMDYgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVs ZSBzdHJmdGltZQogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmluZworCitCVUlMVF9T T1VSQ0VTICs9IHN0cmluZy5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVy IHRvIGNyZWF0ZSA8c3RyaW5nLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUg b25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdHJpbmcuaDogc3Ry aW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQo QVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9HRU4pcm0gLWYgJEAt dCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJ Q0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcn IFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcn IFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZ U1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxA UFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhUX1NUUklOR19IJydA fCQoTkVYVF9TVFJJTkdfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydA LyQoR05VTElCX0ZGU0wpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTEwnJ0Av JChHTlVMSUJfRkZTTEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTEVOJydA LyQoR05VTElCX01CU0xFTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVO JydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJT Q0hSJydALyQoR05VTElCX01CU0NIUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9N QlNSQ0hSJydALyQoR05VTElCX01CU1JDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dO VUxJQl9NQlNDQVNFQ01QJydALyQoR05VTElCX01CU0NBU0VDTVApL2cnIFwKKwkgICAgICAt ZSAncy9AJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0AvJChHTlVMSUJfTUJTTkNBU0VDTVApL2cn IFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJT UENBU0VDTVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRVNUUicnQC8k KEdOVUxJQl9NQlNDQVNFU1RSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NT UE4nJ0AvJChHTlVMSUJfTUJTQ1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9N QlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfTUJTU1BOJydALyQoR05VTElCX01CU1NQTikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dO VUxJQl9NQlNTRVAnJ0AvJChHTlVMSUJfTUJTU0VQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcn R05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCisJICAgICAgLWUg J3MvQCcnR05VTElCX01FTUNIUicnQC8kKEdOVUxJQl9NRU1DSFIpL2cnIFwKKwkgICAgICAt ZSAncy9AJydHTlVMSUJfTUVNTUVNJydALyQoR05VTElCX01FTU1FTSkvZycgXAorCSAgICAg IC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKwkg ICAgICAtZSAncy9AJydHTlVMSUJfTUVNUkNIUicnQC8kKEdOVUxJQl9NRU1SQ0hSKS9nJyBc CisJICAgICAgLWUgJ3MvQCcnR05VTElCX1JBV01FTUNIUicnQC8kKEdOVUxJQl9SQVdNRU1D SFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NU UENQWSkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBOQ1BZJydALyQoR05VTElC X1NUUE5DUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0hSTlVMJydALyQo R05VTElCX1NUUkNIUk5VTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAn J0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5D QVQnJ0AvJChHTlVMSUJfU1RSTkNBVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9T VFJORFVQJydALyQoR05VTElCX1NUUk5EVVApL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcn R05VTElCX1NUUlBCUksnJ0AvJChHTlVMSUJfU1RSUEJSSykvZycgXAorCSAgICAgIC1lICdz L0AnJ0dOVUxJQl9TVFJTRVAnJ0AvJChHTlVMSUJfU1RSU0VQKS9nJyBcCisJICAgICAgLWUg J3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKwkgICAgICAt ZSAncy9AJydHTlVMSUJfU1RSQ0FTRVNUUicnQC8kKEdOVUxJQl9TVFJDQVNFU1RSKS9nJyBc CisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPS19SJydALyQoR05VTElCX1NUUlRPS19S KS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NU UkVSUk9SKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SX1InJ0AvJChH TlVMSUJfU1RSRVJST1JfUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTSUdO QUwnJ0AvJChHTlVMSUJfU1RSU0lHTkFMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElC X1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorCSAgICAgIDwgJChz cmNkaXIpL3N0cmluZy5pbi5oIHwgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwk KEhBVkVfRkZTTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRkZTTEwnJ0B8JChIQVZF X0ZGU0xMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01C U0xFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNQ0hSJydAfCQoSEFWRV9NRU1D SFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9E RUNMX01FTU1FTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhB VkVfTUVNUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1SQ0hSJydA fCQoSEFWRV9ERUNMX01FTVJDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JBV01F TUNIUicnQHwkKEhBVkVfUkFXTUVNQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9T VFBDUFknJ0B8JChIQVZFX1NUUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RQ TkNQWScnQHwkKEhBVkVfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RS Q0hSTlVMJydAfCQoSEFWRV9TVFJDSFJOVUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZF X0RFQ0xfU1RSRFVQJydAfCQoSEFWRV9ERUNMX1NUUkRVUCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ0hBVkVfREVDTF9TVFJORFVQJydAfCQoSEFWRV9ERUNMX1NUUk5EVVApfGcnIFwKKwkg ICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSTkxFTicnQHwkKEhBVkVfREVDTF9TVFJOTEVO KXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQQlJLJydAfCQoSEFWRV9TVFJQQlJL KXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJTRVAnJ0B8JChIQVZFX1NUUlNFUCl8 ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0FTRVNUUicnQHwkKEhBVkVfU1RSQ0FT RVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJUT0tfUicnQHwkKEhB VkVfREVDTF9TVFJUT0tfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJF UlJPUl9SJydAfCQoSEFWRV9ERUNMX1NUUkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xA JydIQVZFX0RFQ0xfU1RSU0lHTkFMJydAfCQoSEFWRV9ERUNMX1NUUlNJR05BTCl8ZycgXAor CSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVkVSU0NNUCcnQHwkKEhBVkVfU1RSVkVSU0NNUCl8 ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RQTkNQWScnQHwkKFJFUExBQ0VfU1RQ TkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUVNQ0hSJydAfCQoUkVQTEFD RV9NRU1DSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01FTU1FTScnQHwkKFJF UExBQ0VfTUVNTUVNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJDQVNFU1RS JydAfCQoUkVQTEFDRV9TVFJDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFD RV9TVFJDSFJOVUwnJ0B8JChSRVBMQUNFX1NUUkNIUk5VTCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ1JFUExBQ0VfU1RSRFVQJydAfCQoUkVQTEFDRV9TVFJEVVApfGcnIFwKKwkgICAgICAt ZSAnc3xAJydSRVBMQUNFX1NUUlNUUicnQHwkKFJFUExBQ0VfU1RSU1RSKXxnJyBcCisJICAg ICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJFUlJPUicnQHwkKFJFUExBQ0VfU1RSRVJST1IpfGcn IFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUkVSUk9SX1InJ0B8JChSRVBMQUNFX1NU UkVSUk9SX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5DQVQnJ0B8JChS RVBMQUNFX1NUUk5DQVQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUk5EVVAn J0B8JChSRVBMQUNFX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NU Uk5MRU4nJ0B8JChSRVBMQUNFX1NUUk5MRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBM QUNFX1NUUlNJR05BTCcnQHwkKFJFUExBQ0VfU1RSU0lHTkFMKXxnJyBcCisJICAgICAgLWUg J3N8QCcnUkVQTEFDRV9TVFJUT0tfUicnQHwkKFJFUExBQ0VfU1RSVE9LX1IpfGcnIFwKKwkg ICAgICAtZSAnc3xAJydVTkRFRklORV9TVFJUT0tfUicnQHwkKFVOREVGSU5FX1NUUlRPS19S KXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3Ig JChDWFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9O TlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2Yg X0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKwkgICAgICA8ICQoc3Jj ZGlyKS9zdHJpbmcuaW4uaDsgXAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NU TFlDTEVBTkZJTEVTICs9IHN0cmluZy5oIHN0cmluZy5oLXQKKworRVhUUkFfRElTVCArPSBz dHJpbmcuaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmluZworCiAjIyBiZWdp biBnbnVsaWIgbW9kdWxlIHN0cnRvaW1heAogCiAKCj09PSBhZGRlZCBmaWxlICdsaWIvbWVt cmNoci5jJwotLS0gbGliL21lbXJjaHIuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBsaWIvbWVtcmNoci5jCTIwMTMtMDItMDkgMDM6MTI6NDggKzAwMDAKQEAgLTAsMCArMSwx NjEgQEAKKy8qIG1lbXJjaHIgLS0gZmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgYnl0 ZSBpbiBhIG1lbW9yeSBibG9jaworCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMsIDE5 OTYtMTk5NywgMTk5OS0yMDAwLCAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRh dGlvbiwgSW5jLgorCisgICBCYXNlZCBvbiBzdHJsZW4gaW1wbGVtZW50YXRpb24gYnkgVG9y Ympvcm4gR3Jhbmx1bmQgKHRlZ2VAc2ljcy5zZSksCisgICB3aXRoIGhlbHAgZnJvbSBEYW4g U2FobGluIChkYW5Ac2ljcy5zZSkgYW5kCisgICBjb21tZW50YXJ5IGJ5IEppbSBCbGFuZHkg KGppbWJAYWkubWl0LmVkdSk7CisgICBhZGFwdGF0aW9uIHRvIG1lbWNociBzdWdnZXN0ZWQg YnkgRGljayBLYXJwaW5za2kgKGRpY2tAY2NhLnVjc2YuZWR1KSwKKyAgIGFuZCBpbXBsZW1l bnRlZCBieSBSb2xhbmQgTWNHcmF0aCAocm9sYW5kQGFpLm1pdC5lZHUpLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaWYgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxtZW1jb3B5Lmg+CisjZWxzZQor IyBpbmNsdWRlIDxjb25maWcuaD4KKyMgZGVmaW5lIHJlZ19jaGFyIGNoYXIKKyNlbmRpZgor CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyN1bmRlZiBf X21lbXJjaHIKKyNpZmRlZiBfTElCQworIyB1bmRlZiBtZW1yY2hyCisjZW5kaWYKKworI2lm bmRlZiB3ZWFrX2FsaWFzCisjIGRlZmluZSBfX21lbXJjaHIgbWVtcmNocgorI2VuZGlmCisK Ky8qIFNlYXJjaCBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBTIGZvciBDLiAgKi8KK3ZvaWQg KgorX19tZW1yY2hyICh2b2lkIGNvbnN0ICpzLCBpbnQgY19pbiwgc2l6ZV90IG4pCit7Cisg IC8qIE9uIDMyLWJpdCBoYXJkd2FyZSwgY2hvb3NpbmcgbG9uZ3dvcmQgdG8gYmUgYSAzMi1i aXQgdW5zaWduZWQKKyAgICAgbG9uZyBpbnN0ZWFkIG9mIGEgNjQtYml0IHVpbnRtYXhfdCB0 ZW5kcyB0byBnaXZlIGJldHRlcgorICAgICBwZXJmb3JtYW5jZS4gIE9uIDY0LWJpdCBoYXJk d2FyZSwgdW5zaWduZWQgbG9uZyBpcyBnZW5lcmFsbHkgNjQKKyAgICAgYml0cyBhbHJlYWR5 LiAgQ2hhbmdlIHRoaXMgdHlwZWRlZiB0byBleHBlcmltZW50IHdpdGgKKyAgICAgcGVyZm9y bWFuY2UuICAqLworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGxvbmd3b3JkOworCisg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJfcHRyOworICBjb25zdCBsb25nd29yZCAqbG9u Z3dvcmRfcHRyOworICBsb25nd29yZCByZXBlYXRlZF9vbmU7CisgIGxvbmd3b3JkIHJlcGVh dGVkX2M7CisgIHVuc2lnbmVkIHJlZ19jaGFyIGM7CisKKyAgYyA9ICh1bnNpZ25lZCBjaGFy KSBjX2luOworCisgIC8qIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgYnkgcmVhZGluZyBv bmUgYnl0ZSBhdCBhIHRpbWUuCisgICAgIERvIHRoaXMgdW50aWwgQ0hBUl9QVFIgaXMgYWxp Z25lZCBvbiBhIGxvbmd3b3JkIGJvdW5kYXJ5LiAgKi8KKyAgZm9yIChjaGFyX3B0ciA9IChj b25zdCB1bnNpZ25lZCBjaGFyICopIHMgKyBuOworICAgICAgIG4gPiAwICYmIChzaXplX3Qp IGNoYXJfcHRyICUgc2l6ZW9mIChsb25nd29yZCkgIT0gMDsKKyAgICAgICAtLW4pCisgICAg aWYgKCotLWNoYXJfcHRyID09IGMpCisgICAgICByZXR1cm4gKHZvaWQgKikgY2hhcl9wdHI7 CisKKyAgbG9uZ3dvcmRfcHRyID0gKGNvbnN0IGxvbmd3b3JkICopIGNoYXJfcHRyOworCisg IC8qIEFsbCB0aGVzZSBlbHVjaWRhdG9yeSBjb21tZW50cyByZWZlciB0byA0LWJ5dGUgbG9u Z3dvcmRzLAorICAgICBidXQgdGhlIHRoZW9yeSBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBh bnkgc2l6ZSBsb25nd29yZHMuICAqLworCisgIC8qIENvbXB1dGUgYXV4aWxpYXJ5IGxvbmd3 b3JkIHZhbHVlczoKKyAgICAgcmVwZWF0ZWRfb25lIGlzIGEgdmFsdWUgd2hpY2ggaGFzIGEg MSBpbiBldmVyeSBieXRlLgorICAgICByZXBlYXRlZF9jIGhhcyBjIGluIGV2ZXJ5IGJ5dGUu ICAqLworICByZXBlYXRlZF9vbmUgPSAweDAxMDEwMTAxOworICByZXBlYXRlZF9jID0gYyB8 IChjIDw8IDgpOworICByZXBlYXRlZF9jIHw9IHJlcGVhdGVkX2MgPDwgMTY7CisgIGlmICgw eGZmZmZmZmZmVSA8IChsb25nd29yZCkgLTEpCisgICAgeworICAgICAgcmVwZWF0ZWRfb25l IHw9IHJlcGVhdGVkX29uZSA8PCAzMSA8PCAxOworICAgICAgcmVwZWF0ZWRfYyB8PSByZXBl YXRlZF9jIDw8IDMxIDw8IDE7CisgICAgICBpZiAoOCA8IHNpemVvZiAobG9uZ3dvcmQpKQor ICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgICBmb3IgKGkgPSA2 NDsgaSA8IHNpemVvZiAobG9uZ3dvcmQpICogODsgaSAqPSAyKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICByZXBlYXRlZF9vbmUgfD0gcmVwZWF0ZWRfb25lIDw8IGk7CisgICAg ICAgICAgICAgIHJlcGVhdGVkX2MgfD0gcmVwZWF0ZWRfYyA8PCBpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgIC8qIEluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFs IGxvb3Agd2hpY2ggdGVzdHMgZWFjaCBieXRlLCB3ZSB3aWxsIHRlc3QgYQorICAgICBsb25n d29yZCBhdCBhIHRpbWUuICBUaGUgdHJpY2t5IHBhcnQgaXMgdGVzdGluZyBpZiAqYW55IG9m IHRoZSBmb3VyKgorICAgICBieXRlcyBpbiB0aGUgbG9uZ3dvcmQgaW4gcXVlc3Rpb24gYXJl IGVxdWFsIHRvIGMuICBXZSBmaXJzdCB1c2UgYW4geG9yCisgICAgIHdpdGggcmVwZWF0ZWRf Yy4gIFRoaXMgcmVkdWNlcyB0aGUgdGFzayB0byB0ZXN0aW5nIHdoZXRoZXIgKmFueSBvZiB0 aGUKKyAgICAgZm91ciogYnl0ZXMgaW4gbG9uZ3dvcmQxIGlzIHplcm8uCisKKyAgICAgV2Ug Y29tcHV0ZSB0bXAgPQorICAgICAgICgobG9uZ3dvcmQxIC0gcmVwZWF0ZWRfb25lKSAmIH5s b25nd29yZDEpICYgKHJlcGVhdGVkX29uZSA8PCA3KS4KKyAgICAgVGhhdCBpcywgd2UgcGVy Zm9ybSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisgICAgICAgMS4gU3VidHJhY3QgcmVw ZWF0ZWRfb25lLgorICAgICAgIDIuICYgfmxvbmd3b3JkMS4KKyAgICAgICAzLiAmIGEgbWFz ayBjb25zaXN0aW5nIG9mIDB4ODAgaW4gZXZlcnkgYnl0ZS4KKyAgICAgQ29uc2lkZXIgd2hh dCBoYXBwZW5zIGluIGVhY2ggYnl0ZToKKyAgICAgICAtIElmIGEgYnl0ZSBvZiBsb25nd29y ZDEgaXMgemVybywgc3RlcCAxIGFuZCAyIHRyYW5zZm9ybSBpdCBpbnRvIDB4ZmYsCisgICAg ICAgICBhbmQgc3RlcCAzIHRyYW5zZm9ybXMgaXQgaW50byAweDgwLiAgQSBjYXJyeSBjYW4g YWxzbyBiZSBwcm9wYWdhdGVkCisgICAgICAgICB0byBtb3JlIHNpZ25pZmljYW50IGJ5dGVz LgorICAgICAgIC0gSWYgYSBieXRlIG9mIGxvbmd3b3JkMSBpcyBub256ZXJvLCBsZXQgaXRz IGxvd2VzdCAxIGJpdCBiZSBhdAorICAgICAgICAgcG9zaXRpb24gayAoMCA8PSBrIDw9IDcp OyBzbyB0aGUgbG93ZXN0IGsgYml0cyBhcmUgMC4gIEFmdGVyIHN0ZXAgMSwKKyAgICAgICAg IHRoZSBieXRlIGVuZHMgaW4gYSBzaW5nbGUgYml0IG9mIHZhbHVlIDAgYW5kIGsgYml0cyBv ZiB2YWx1ZSAxLgorICAgICAgICAgQWZ0ZXIgc3RlcCAyLCB0aGUgcmVzdWx0IGlzIGp1c3Qg ayBiaXRzIG9mIHZhbHVlIDE6IDJeayAtIDEuICBBZnRlcgorICAgICAgICAgc3RlcCAzLCB0 aGUgcmVzdWx0IGlzIDAuICBBbmQgbm8gY2FycnkgaXMgcHJvZHVjZWQuCisgICAgIFNvLCBp ZiBsb25nd29yZDEgaGFzIG9ubHkgbm9uLXplcm8gYnl0ZXMsIHRtcCBpcyB6ZXJvLgorICAg ICBXaGVyZWFzIGlmIGxvbmd3b3JkMSBoYXMgYSB6ZXJvIGJ5dGUsIGNhbGwgaiB0aGUgcG9z aXRpb24gb2YgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IHplcm8gYnl0ZS4gIFRoZW4g dGhlIHJlc3VsdCBoYXMgYSB6ZXJvIGF0IHBvc2l0aW9ucyAwLCAuLi4sCisgICAgIGotMSBh bmQgYSAweDgwIGF0IHBvc2l0aW9uIGouICBXZSBjYW5ub3QgcHJlZGljdCB0aGUgcmVzdWx0 IGF0IHRoZSBtb3JlCisgICAgIHNpZ25pZmljYW50IGJ5dGVzIChwb3NpdGlvbnMgaisxLi4z KSwgYnV0IGl0IGRvZXMgbm90IG1hdHRlciBzaW5jZSB3ZQorICAgICBhbHJlYWR5IGhhdmUg YSBub24temVybyBiaXQgYXQgcG9zaXRpb24gOCpqKzcuCisKKyAgICAgU28sIHRoZSB0ZXN0 IHdoZXRoZXIgYW55IGJ5dGUgaW4gbG9uZ3dvcmQxIGlzIHplcm8gaXMgZXF1aXZhbGVudCB0 bworICAgICB0ZXN0aW5nIHdoZXRoZXIgdG1wIGlzIG5vbnplcm8uICAqLworCisgIHdoaWxl IChuID49IHNpemVvZiAobG9uZ3dvcmQpKQorICAgIHsKKyAgICAgIGxvbmd3b3JkIGxvbmd3 b3JkMSA9ICotLWxvbmd3b3JkX3B0ciBeIHJlcGVhdGVkX2M7CisKKyAgICAgIGlmICgoKChs b25nd29yZDEgLSByZXBlYXRlZF9vbmUpICYgfmxvbmd3b3JkMSkKKyAgICAgICAgICAgJiAo cmVwZWF0ZWRfb25lIDw8IDcpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgbG9uZ3dv cmRfcHRyKys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIG4gLT0gc2l6 ZW9mIChsb25nd29yZCk7CisgICAgfQorCisgIGNoYXJfcHRyID0gKGNvbnN0IHVuc2lnbmVk IGNoYXIgKikgbG9uZ3dvcmRfcHRyOworCisgIC8qIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cg dGhhdCBlaXRoZXIgbiA8IHNpemVvZiAobG9uZ3dvcmQpLCBvciBvbmUgb2YgdGhlCisgICAg IHNpemVvZiAobG9uZ3dvcmQpIGJ5dGVzIHN0YXJ0aW5nIGF0IGNoYXJfcHRyIGlzID09IGMu ICBPbiBsaXR0bGUtZW5kaWFuCisgICAgIG1hY2hpbmVzLCB3ZSBjb3VsZCBkZXRlcm1pbmUg dGhlIGZpcnN0IHN1Y2ggYnl0ZSB3aXRob3V0IGFueSBmdXJ0aGVyCisgICAgIG1lbW9yeSBh Y2Nlc3NlcywganVzdCBieSBsb29raW5nIGF0IHRoZSB0bXAgcmVzdWx0IGZyb20gdGhlIGxh c3QgbG9vcAorICAgICBpdGVyYXRpb24uICBCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIG9uIGJp Zy1lbmRpYW4gbWFjaGluZXMuICBDaG9vc2UgY29kZQorICAgICB0aGF0IHdvcmtzIGluIGJv dGggY2FzZXMuICAqLworCisgIHdoaWxlIChuLS0gPiAwKQorICAgIHsKKyAgICAgIGlmICgq LS1jaGFyX3B0ciA9PSBjKQorICAgICAgICByZXR1cm4gKHZvaWQgKikgY2hhcl9wdHI7Cisg ICAgfQorCisgIHJldHVybiBOVUxMOworfQorI2lmZGVmIHdlYWtfYWxpYXMKK3dlYWtfYWxp YXMgKF9fbWVtcmNociwgbWVtcmNocikKKyNlbmRpZgoKPT09IGFkZGVkIGZpbGUgJ2xpYi9z dHJpbmcuaW4uaCcKLS0tIGxpYi9zdHJpbmcuaW4uaAkxOTcwLTAxLTAxIDAwOjAwOjAwICsw MDAwCisrKyBsaWIvc3RyaW5nLmluLmgJMjAxMy0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAt MCwwICsxLDEwMjkgQEAKKy8qIEEgR05VLWxpa2UgPHN0cmluZy5oPi4KKworICAgQ29weXJp Z2h0IChDKSAxOTk1LTE5OTYsIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorCisjaWYgX19HTlVDX18g Pj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01BX0NPTFVNTlNA CisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVz aW9uIGd1YXJkLiAgKi8KKyNASU5DTFVERV9ORVhUQCBATkVYVF9TVFJJTkdfSEAKKworI2lm bmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhA X1NUUklOR19ICisKKy8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCisjaW5j bHVkZSA8c3RkZGVmLmg+CisKKy8qIE1pckJTRCBkZWZpbmVzIG1ic2xlbiBhcyBhIG1hY3Jv LiAgKi8KKyNpZiBAR05VTElCX01CU0xFTkAgJiYgZGVmaW5lZCBfX01pckJTRF9fCisjIGlu Y2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYKKworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVy ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUg YXR0cmlidXRlIF9fcHVyZV9fIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19H TlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQor IyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp CisjZWxzZQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5k aWYKKworLyogTmV0QlNEIDUuMCBkZWNsYXJlcyBzdHJzaWduYWwgaW4gPHVuaXN0ZC5oPiwg bm90IGluIDxzdHJpbmcuaD4uICAqLworLyogQnV0IGluIGFueSBjYXNlIGF2b2lkIG5hbWVz cGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisjaWYgKEBHTlVMSUJfU1RS U0lHTkFMQCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSAmJiBkZWZpbmVkIF9fTmV0 QlNEX18gXAorICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKyMgaW5jbHVkZSA8dW5pc3Rk Lmg+CisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwg ZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xf QVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlvbiBv ZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8qIEZpbmQgdGhl IGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKyNpZiBAR05V TElCX0ZGU0xACisjIGlmICFASEFWRV9GRlNMQAorX0dMX0ZVTkNERUNMX1NZUyAoZmZzbCwg aW50LCAobG9uZyBpbnQgaSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmZzbCwg aW50LCAobG9uZyBpbnQgaSkpOworX0dMX0NYWEFMSUFTV0FSTiAoZmZzbCk7CisjZWxpZiBk ZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZmc2wKKyMgaWYgSEFWRV9SQVdf REVDTF9GRlNMCitfR0xfV0FSTl9PTl9VU0UgKGZmc2wsICJmZnNsIGlzIG5vdCBwb3J0YWJs ZSAtIHVzZSB0aGUgZmZzbCBtb2R1bGUiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEZp bmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKyNp ZiBAR05VTElCX0ZGU0xMQAorIyBpZiAhQEhBVkVfRkZTTExACitfR0xfRlVOQ0RFQ0xfU1lT IChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJ QVNfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CitfR0xfQ1hYQUxJQVNX QVJOIChmZnNsbCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVm IGZmc2xsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTEwKK19HTF9XQVJOX09OX1VTRSAoZmZz bGwsICJmZnNsbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2xsIG1vZHVsZSIpOwor IyBlbmRpZgorI2VuZGlmCisKKworLyogUmV0dXJuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBD IHdpdGhpbiBOIGJ5dGVzIG9mIFMsIG9yIE5VTEwuICAqLworI2lmIEBHTlVMSUJfTUVNQ0hS QAorIyBpZiBAUkVQTEFDRV9NRU1DSFJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMg JiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtZW1jaHIgcnBsX21l bWNocgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1lbWNociwgdm9pZCAqLCAodm9p ZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNf UlBMIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90 IF9fbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX01FTUNIUkAKK19HTF9GVU5DREVDTF9T WVMgKG1lbWNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3Qg X19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVf UFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVM TCAoKDEpKSk7CisjICBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rp b24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVy biAiQyIgeyBjb25zdCB2b2lkICogc3RkOjptZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBz aXplX3QpOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtY2hyICh2 b2lkICosIGludCwgc2l6ZV90KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKG1l bWNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9f cywgaW50IF9fYywgc2l6ZV90IF9fbiksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMg ZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTAp ICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAo X19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dB Uk4xIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikp OworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbWNociwgdm9pZCBjb25zdCAqLAorICAgICAgICAg ICAgICAgICAgICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pKTsKKyMg ZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAobWVtY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmlu ZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWVtY2hyCisvKiBBc3N1bWUgbWVtY2hy IGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKG1lbWNociwgIm1l bWNociBoYXMgcGxhdGZvcm0tc3BlY2lmaWMgYnVncyAtICIKKyAgICAgICAgICAgICAgICAg InVzZSBnbnVsaWIgbW9kdWxlIG1lbWNociBmb3IgcG9ydGFiaWxpdHkiICk7CisjZW5kaWYK KworLyogUmV0dXJuIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFD Sy4gICovCisjaWYgQEdOVUxJQl9NRU1NRU1ACisjIGlmIEBSRVBMQUNFX01FTU1FTUAKKyMg IGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0Up CisjICAgZGVmaW5lIG1lbW1lbSBycGxfbWVtbWVtCisjICBlbmRpZgorX0dMX0ZVTkNERUNM X1JQTCAobWVtbWVtLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCAq X19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tfbGVuLAorICAgICAgICAgICAgICAgICAg IHZvaWQgY29uc3QgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVfbGVuKQorICAgICAgICAg ICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICBfR0xfQVJH X05PTk5VTEwgKCgxLCAzKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWVtbWVtLCB2b2lkICos CisgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCAqX19oYXlzdGFjaywgc2l6ZV90IF9f aGF5c3RhY2tfbGVuLAorICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKl9fbmVlZGxl LCBzaXplX3QgX19uZWVkbGVfbGVuKSk7CisjIGVsc2UKKyMgIGlmICEgQEhBVkVfREVDTF9N RU1NRU1ACitfR0xfRlVOQ0RFQ0xfU1lTIChtZW1tZW0sIHZvaWQgKiwKKyAgICAgICAgICAg ICAgICAgICh2b2lkIGNvbnN0ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja19sZW4s CisgICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19uZWVkbGUsIHNpemVfdCBfX25l ZWRsZV9sZW4pCisgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAg ICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDMpKSk7CisjICBlbmRpZgorX0dM X0NYWEFMSUFTX1NZUyAobWVtbWVtLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9p ZCBjb25zdCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tfbGVuLAorICAgICAgICAg ICAgICAgICAgIHZvaWQgY29uc3QgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVfbGVuKSk7 CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtZW1tZW0pOworI2VsaWYgZGVmaW5lZCBH TlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBtZW1tZW0KKyMgaWYgSEFWRV9SQVdfREVDTF9N RU1NRU0KK19HTF9XQVJOX09OX1VTRSAobWVtbWVtLCAibWVtbWVtIGlzIHVucG9ydGFibGUg YW5kIG9mdGVuIHF1YWRyYXRpYyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIg bW9kdWxlIG1lbW1lbS1zaW1wbGUgZm9yIHBvcnRhYmlsaXR5LCAiCisgICAgICAgICAgICAg ICAgICJhbmQgbW9kdWxlIG1lbW1lbSBmb3Igc3BlZWQiICk7CisjIGVuZGlmCisjZW5kaWYK KworLyogQ29weSBOIGJ5dGVzIG9mIFNSQyB0byBERVNULCByZXR1cm4gcG9pbnRlciB0byBi eXRlcyBhZnRlciB0aGUKKyAgIGxhc3Qgd3JpdHRlbiBieXRlLiAgKi8KKyNpZiBAR05VTElC X01FTVBDUFlACisjIGlmICEgQEhBVkVfTUVNUENQWUAKK19HTF9GVU5DREVDTF9TWVMgKG1l bXBjcHksIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICh2b2lkICpyZXN0cmljdCBfX2Rl c3QsIHZvaWQgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkp OworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAobWVtcGNweSwgdm9pZCAqLAorICAgICAg ICAgICAgICAgICAgKHZvaWQgKnJlc3RyaWN0IF9fZGVzdCwgdm9pZCBjb25zdCAqcmVzdHJp Y3QgX19zcmMsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikpOworX0dMX0NYWEFM SUFTV0FSTiAobWVtcGNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisj IHVuZGVmIG1lbXBjcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9NRU1QQ1BZCitfR0xfV0FSTl9P Tl9VU0UgKG1lbXBjcHksICJtZW1wY3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAg ICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1wY3B5IGZvciBwb3J0YWJpbGl0eSIpOwor IyBlbmRpZgorI2VuZGlmCisKKy8qIFNlYXJjaCBiYWNrd2FyZHMgdGhyb3VnaCBhIGJsb2Nr IGZvciBhIGJ5dGUgKHNwZWNpZmllZCBhcyBhbiBpbnQpLiAgKi8KKyNpZiBAR05VTElCX01F TVJDSFJACisjIGlmICEgQEhBVkVfREVDTF9NRU1SQ0hSQAorX0dMX0ZVTkNERUNMX1NZUyAo bWVtcmNociwgdm9pZCAqLCAodm9pZCBjb25zdCAqLCBpbnQsIHNpemVfdCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7Cisj IGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVk IGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29u c3Qgdm9pZCAqIHN0ZDo6bWVtcmNociAoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7IH0K KyAgICAgICBleHRlcm4gIkMrKyIgeyB2b2lkICogc3RkOjptZW1yY2hyICh2b2lkICosIGlu dCwgc2l6ZV90KTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKG1lbXJjaHIsCisg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosICh2b2lkIGNvbnN0ICosIGludCwgc2l6 ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKiwgKHZvaWQgY29u c3QgKiwgaW50LCBzaXplX3QpKTsKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJD X01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9f R05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkK K19HTF9DWFhBTElBU1dBUk4xIChtZW1yY2hyLCB2b2lkICosICh2b2lkICosIGludCwgc2l6 ZV90KSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtcmNociwgdm9pZCBjb25zdCAqLCAodm9p ZCBjb25zdCAqLCBpbnQsIHNpemVfdCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOICht ZW1yY2hyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMg dW5kZWYgbWVtcmNocgorIyBpZiBIQVZFX1JBV19ERUNMX01FTVJDSFIKK19HTF9XQVJOX09O X1VTRSAobWVtcmNociwgIm1lbXJjaHIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAg ICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1lbXJjaHIgZm9yIHBvcnRhYmlsaXR5Iik7Cisj IGVuZGlmCisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBDIGlu IFMuICBNb3JlIGVmZmljaWVudCB0aGFuCisgICBtZW1jaHIoUyxDLE4pLCBhdCB0aGUgZXhw ZW5zZSBvZiB1bmRlZmluZWQgYmVoYXZpb3IgaWYgQyBkb2VzIG5vdAorICAgb2NjdXIgd2l0 aGluIE4gYnl0ZXMuICAqLworI2lmIEBHTlVMSUJfUkFXTUVNQ0hSQAorIyBpZiAhIEBIQVZF X1JBV01FTUNIUkAKK19HTF9GVU5DREVDTF9TWVMgKHJhd21lbWNociwgdm9pZCAqLCAodm9p ZCBjb25zdCAqX19zLCBpbnQgX19jX2luKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCisgIC8qIE9u IHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2Fk ZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3Qgdm9pZCAqIHN0ZDo6 cmF3bWVtY2hyIChjb25zdCB2b2lkICosIGludCk7IH0KKyAgICAgICBleHRlcm4gIkMrKyIg eyB2b2lkICogc3RkOjpyYXdtZW1jaHIgKHZvaWQgKiwgaW50KTsgfSAgKi8KK19HTF9DWFhB TElBU19TWVNfQ0FTVDIgKHJhd21lbWNociwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fY19pbiksCisgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsK KyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFk ZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVD X18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChy YXdtZW1jaHIsIHZvaWQgKiwgKHZvaWQgKl9fcywgaW50IF9fY19pbikpOworX0dMX0NYWEFM SUFTV0FSTjEgKHJhd21lbWNociwgdm9pZCBjb25zdCAqLCAodm9pZCBjb25zdCAqX19zLCBp bnQgX19jX2luKSk7CisjIGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKHJhd21lbWNocik7Cisj IGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJhd21l bWNocgorIyBpZiBIQVZFX1JBV19ERUNMX1JBV01FTUNIUgorX0dMX1dBUk5fT05fVVNFIChy YXdtZW1jaHIsICJyYXdtZW1jaHIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAg ICAgInVzZSBnbnVsaWIgbW9kdWxlIHJhd21lbWNociBmb3IgcG9ydGFiaWxpdHkiKTsKKyMg ZW5kaWYKKyNlbmRpZgorCisvKiBDb3B5IFNSQyB0byBEU1QsIHJldHVybmluZyB0aGUgYWRk cmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbiBEU1QuICAqLworI2lmIEBHTlVMSUJf U1RQQ1BZQAorIyBpZiAhIEBIQVZFX1NUUENQWUAKK19HTF9GVU5DREVDTF9TWVMgKHN0cGNw eSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBj aGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYykKKyAgICAgICAgICAgICAgICAgIF9HTF9BUkdf Tk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBjcHks IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hh ciBjb25zdCAqcmVzdHJpY3QgX19zcmMpKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cGNweSk7 CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cGNweQorIyBp ZiBIQVZFX1JBV19ERUNMX1NUUENQWQorX0dMX1dBUk5fT05fVVNFIChzdHBjcHksICJzdHBj cHkgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9k dWxlIHN0cGNweSBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBD b3B5IG5vIG1vcmUgdGhhbiBOIGJ5dGVzIG9mIFNSQyB0byBEU1QsIHJldHVybmluZyBhIHBv aW50ZXIgcGFzdCB0aGUKKyAgIGxhc3Qgbm9uLU5VTCBieXRlIHdyaXR0ZW4gaW50byBEU1Qu ICAqLworI2lmIEBHTlVMSUJfU1RQTkNQWUAKKyMgaWYgQFJFUExBQ0VfU1RQTkNQWUAKKyMg IGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0Up CisjICAgdW5kZWYgc3RwbmNweQorIyAgIGRlZmluZSBzdHBuY3B5IHJwbF9zdHBuY3B5Cisj ICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAg ICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBf X3NyYywKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAg ICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cG5j cHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwg Y2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX1NUUE5DUFlACitfR0xfRlVOQ0RFQ0xf U1lTIChzdHBuY3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJp Y3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgx LCAyKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cG5jcHksIGNoYXIgKiwK KyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAq cmVzdHJpY3QgX19zcmMsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikpOworIyBl bmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RwbmNweSk7CisjZWxpZiBkZWZpbmVkIEdOVUxJ Ql9QT1NJWENIRUNLCisjIHVuZGVmIHN0cG5jcHkKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFBO Q1BZCitfR0xfV0FSTl9PTl9VU0UgKHN0cG5jcHksICJzdHBuY3B5IGlzIHVucG9ydGFibGUg LSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHBuY3B5IGZvciBw b3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEdOVUxJQl9Q T1NJWENIRUNLCisvKiBzdHJjaHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0 cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBpcworICAgR0IxODAzMCBhbmQgdGhlIGNo YXJhY3RlciB0byBiZSBzZWFyY2hlZCBpcyBhIGRpZ2l0LiAgKi8KKyMgdW5kZWYgc3RyY2hy CisvKiBBc3N1bWUgc3RyY2hyIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9P Tl9VU0UgKHN0cmNociwgInN0cmNociBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFj dGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gc29tZSBtdWx0aWJ5dGUgbG9j YWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjaHIgaWYgeW91IGNhcmUgYWJv dXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBmaXJz dCBvY2N1cnJlbmNlIG9mIEMgaW4gUyBvciB0aGUgZmluYWwgTlVMIGJ5dGUuICAqLworI2lm IEBHTlVMSUJfU1RSQ0hSTlVMQAorIyBpZiBAUkVQTEFDRV9TVFJDSFJOVUxACisjICBpZiAh KGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAg IGRlZmluZSBzdHJjaHJudWwgcnBsX3N0cmNocm51bAorIyAgZW5kaWYKK19HTF9GVU5DREVD TF9SUEwgKHN0cmNocm51bCwgY2hhciAqLCAoY29uc3QgY2hhciAqX19zLCBpbnQgX19jX2lu KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVf UFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9O TlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJjaHJudWwsIGNoYXIgKiwKKyAg ICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpzdHIsIGludCBjaCkpOworIyBlbHNlCisj ICBpZiAhIEBIQVZFX1NUUkNIUk5VTEAKK19HTF9GVU5DREVDTF9TWVMgKHN0cmNocm51bCwg Y2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBl bmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBh cyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0 IGNoYXIgKiBzdGQ6OnN0cmNocm51bCAoY29uc3QgY2hhciAqLCBpbnQpOyB9CisgICAgICAg ZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0ZDo6c3RyY2hybnVsIChjaGFyICosIGludCk7IH0g ICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChzdHJjaHJudWwsCisgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pLAorICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqLCAoY2hhciBjb25zdCAqX19zLCBp bnQgX19jX2luKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElC Q19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChf X0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkp CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2hybnVsLCBjaGFyICosIChjaGFyICpfX3MsIGlu dCBfX2NfaW4pKTsKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjaHJudWwsIGNoYXIgY29uc3Qg KiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbikpOworIyBlbHNlCitfR0xfQ1hYQUxJ QVNXQVJOIChzdHJjaHJudWwpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9T SVhDSEVDSworIyB1bmRlZiBzdHJjaHJudWwKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJDSFJO VUwKK19HTF9XQVJOX09OX1VTRSAoc3RyY2hybnVsLCAic3RyY2hybnVsIGlzIHVucG9ydGFi bGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJjaHJudWwg Zm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogRHVwbGljYXRlIFMs IHJldHVybmluZyBhbiBpZGVudGljYWwgbWFsbG9jJ2Qgc3RyaW5nLiAgKi8KKyNpZiBAR05V TElCX1NUUkRVUEAKKyMgaWYgQFJFUExBQ0VfU1RSRFVQQAorIyAgaWYgIShkZWZpbmVkIF9f Y3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJk dXAKKyMgICBkZWZpbmUgc3RyZHVwIHJwbF9zdHJkdXAKKyMgIGVuZGlmCitfR0xfRlVOQ0RF Q0xfUlBMIChzdHJkdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcykgX0dMX0FSR19OT05O VUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBj b25zdCAqX19zKSk7CisjIGVsc2UKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVm aW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmIGRlZmluZWQgc3RyZHVwCisgICAgLyogc3RyZHVw IGV4aXN0cyBhcyBhIGZ1bmN0aW9uIGFuZCBhcyBhIG1hY3JvLiAgR2V0IHJpZCBvZiB0aGUg bWFjcm8uICAqLworIyAgIHVuZGVmIHN0cmR1cAorIyAgZW5kaWYKKyMgIGlmICEoQEhBVkVf REVDTF9TVFJEVVBAIHx8IGRlZmluZWQgc3RyZHVwKQorX0dMX0ZVTkNERUNMX1NZUyAoc3Ry ZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7 CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RyZHVwLCBjaGFyICosIChjaGFyIGNv bnN0ICpfX3MpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cmR1cCk7CisjZWxp ZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmR1cAorIyBpZiBIQVZF X1JBV19ERUNMX1NUUkRVUAorX0dMX1dBUk5fT05fVVNFIChzdHJkdXAsICJzdHJkdXAgaXMg dW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0 cmR1cCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBBcHBlbmQg bm8gbW9yZSB0aGFuIE4gY2hhcmFjdGVycyBmcm9tIFNSQyBvbnRvIERFU1QuICAqLworI2lm IEBHTlVMSUJfU1RSTkNBVEAKKyMgaWYgQFJFUExBQ0VfU1RSTkNBVEAKKyMgIGlmICEoZGVm aW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5k ZWYgc3RybmNhdAorIyAgIGRlZmluZSBzdHJuY2F0IHJwbF9zdHJuY2F0CisjICBlbmRpZgor X0dMX0ZVTkNERUNMX1JQTCAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVzdCwgY29uc3Qg Y2hhciAqc3JjLCBzaXplX3QgbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cm5j YXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pKTsK KyMgZWxzZQorX0dMX0NYWEFMSUFTX1NZUyAoc3RybmNhdCwgY2hhciAqLCAoY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFT V0FSTiAoc3RybmNhdCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVu ZGVmIHN0cm5jYXQKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJOQ0FUCitfR0xfV0FSTl9PTl9V U0UgKHN0cm5jYXQsICJzdHJuY2F0IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAg ICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJuY2F0IGZvciBwb3J0YWJpbGl0eSIpOworIyBl bmRpZgorI2VuZGlmCisKKy8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0 IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuICAqLworI2lmIEBHTlVMSUJfU1RSTkRVUEAKKyMg aWYgQFJFUExBQ0VfU1RSTkRVUEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBk ZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RybmR1cAorIyAgIGRlZmlu ZSBzdHJuZHVwIHJwbF9zdHJuZHVwCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3Ry bmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX24pCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7 CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0 cmluZywgc2l6ZV90IF9fbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX0RFQ0xfU1RSTkRV UEAKK19HTF9GVU5DREVDTF9TWVMgKHN0cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9f c3RyaW5nLCBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMg KHN0cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKSk7 CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJuZHVwKTsKKyNlbGlmIGRlZmluZWQg R05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RybmR1cAorIyBpZiBIQVZFX1JBV19ERUNM X1NUUk5EVVAKK19HTF9XQVJOX09OX1VTRSAoc3RybmR1cCwgInN0cm5kdXAgaXMgdW5wb3J0 YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cm5kdXAg Zm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogRmluZCB0aGUgbGVu Z3RoIChudW1iZXIgb2YgYnl0ZXMpIG9mIFNUUklORywgYnV0IHNjYW4gYXQgbW9zdAorICAg TUFYTEVOIGJ5dGVzLiAgSWYgbm8gJ1wwJyB0ZXJtaW5hdG9yIGlzIGZvdW5kIGluIHRoYXQg bWFueSBieXRlcywKKyAgIHJldHVybiBNQVhMRU4uICAqLworI2lmIEBHTlVMSUJfU1RSTkxF TkAKKyMgaWYgQFJFUExBQ0VfU1RSTkxFTkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1 cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RybmxlbgorIyAg IGRlZmluZSBzdHJubGVuIHJwbF9zdHJubGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQ TCAoc3Rybmxlbiwgc2l6ZV90LCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21h eGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVU RV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9O TlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJubGVuLCBzaXplX3QsIChjaGFy IGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKSk7CisjIGVsc2UKKyMgIGlmICEg QEhBVkVfREVDTF9TVFJOTEVOQAorX0dMX0ZVTkNERUNMX1NZUyAoc3Rybmxlbiwgc2l6ZV90 LCAoY2hhciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBl bmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3Rybmxlbiwgc2l6ZV90LCAoY2hhciBjb25zdCAq X19zdHJpbmcsIHNpemVfdCBfX21heGxlbikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FS TiAoc3Rybmxlbik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVm IHN0cm5sZW4KKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJOTEVOCitfR0xfV0FSTl9PTl9VU0Ug KHN0cm5sZW4sICJzdHJubGVuIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAg ICJ1c2UgZ251bGliIG1vZHVsZSBzdHJubGVuIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRp ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJjc3Bu KCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBzaW5nbGUtYnl0 ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBpbiB0aGlzIHNpbXBsZSBjYXNlLCBpdCBkb2VzIG5v dCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlCisgICBsb2NhbGUgZW5jb2Rp bmcgaXMgR0IxODAzMCBhbmQgb25lIG9mIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIHNlYXJjaGVk IGlzIGEKKyAgIGRpZ2l0LiAgKi8KKyMgdW5kZWYgc3RyY3NwbgorLyogQXNzdW1lIHN0cmNz cG4gaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RyY3Nwbiwg InN0cmNzcG4gY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIK KyAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAg ICAgICAgICAidXNlIG1ic2NzcG4gaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6 YXRpb24iKTsKKyNlbmRpZgorCisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIFMg b2YgYW55IGNoYXJhY3RlciBpbiBBQ0NFUFQuICAqLworI2lmIEBHTlVMSUJfU1RSUEJSS0AK KyMgaWYgISBASEFWRV9TVFJQQlJLQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RycGJyaywgY2hh ciAqLCAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7 CisjIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZp bmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246CisgICAgICAgZXh0ZXJuICJDIiB7IGNv bnN0IGNoYXIgKiBzdHJwYnJrIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7IH0KKyAg ICAgICBleHRlcm4gIkMrKyIgeyBjaGFyICogc3RycGJyayAoY2hhciAqLCBjb25zdCBjaGFy ICopOyB9ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3RycGJyaywKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAq X19hY2NlcHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCAoY2hh ciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCkpOworIyBpZiAoKF9fR0xJQkNf XyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNf XykgXAorICAgICAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05V Q19NSU5PUl9fID49IDQpKQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cnBicmssIGNoYXIgKiwg KGNoYXIgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKK19HTF9DWFhBTElBU1dBUk4x IChzdHJwYnJrLCBjaGFyIGNvbnN0ICosCisgICAgICAgICAgICAgICAgICAgKGNoYXIgY29u c3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFT V0FSTiAoc3RycGJyayk7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hF Q0sKKy8qIHN0cnBicmsoKSBhc3N1bWVzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0 IG9mIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuCisgICBFdmVuIGluIHRoaXMgc2ltcGxlIGNh c2UsIGl0IGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUKKyAg IGxvY2FsZSBlbmNvZGluZyBpcyBHQjE4MDMwIGFuZCBvbmUgb2YgdGhlIGNoYXJhY3RlcnMg dG8gYmUgc2VhcmNoZWQgaXMgYQorICAgZGlnaXQuICAqLworIyAgdW5kZWYgc3RycGJyawor X0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBjYW5ub3Qgd29yayBjb3JyZWN0 bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAgICAiaW4gbXVsdGli eXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzcGJyayBpZiB5b3Ug Y2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworIyBlbmRpZgorI2VsaWYgZGVm aW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJwYnJrCisjIGlmIEhBVkVfUkFX X0RFQ0xfU1RSUEJSSworX0dMX1dBUk5fT05fVVNFIChzdHJwYnJrLCAic3RycGJyayBpcyB1 bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ry cGJyayBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5l ZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3Ryc3BuKCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFy Z3VtZW50IGlzIGEgbGlzdCBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBp biB0aGlzIHNpbXBsZSBjYXNlLCBpdCBjYW5ub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJp bmdzLiAgKi8KKyMgdW5kZWYgc3Ryc3BuCisvKiBBc3N1bWUgc3Ryc3BuIGlzIGFsd2F5cyBk ZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNwbiwgInN0cnNwbiBjYW5ub3Qg d29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIgorICAgICAgICAgICAgICAg ICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJz c3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYK KworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnJjaHIoKSBkb2VzIG5v dCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlIGxvY2FsZSBlbmNvZGluZyBp cworICAgR0IxODAzMCBhbmQgdGhlIGNoYXJhY3RlciB0byBiZSBzZWFyY2hlZCBpcyBhIGRp Z2l0LiAgKi8KKyMgdW5kZWYgc3RycmNocgorLyogQXNzdW1lIHN0cnJjaHIgaXMgYWx3YXlz IGRlY2xhcmVkLiAgKi8KK19HTF9XQVJOX09OX1VTRSAoc3RycmNociwgInN0cnJjaHIgY2Fu bm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAg ICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAg ICJ1c2UgbWJzcmNociBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIp OworI2VuZGlmCisKKy8qIFNlYXJjaCB0aGUgbmV4dCBkZWxpbWl0ZXIgKGNoYXIgbGlzdGVk IGluIERFTElNKSBzdGFydGluZyBhdCAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwg b3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQCisgICB0byBw b2ludCB0byB0aGUgbmV4dCBjaGFyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklO R1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcg aGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBU aGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUg YW5kIHN1cHBvcnRzCisgICBlbXB0eSBmaWVsZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZp ZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNh bm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVu dGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDog SXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0 aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3Rl cnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJ0b2tfcigpLiAgKi8KKyNpZiBAR05VTElC X1NUUlNFUEAKKyMgaWYgISBASEFWRV9TVFJTRVBACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJz ZXAsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdHJpY3QgX19zdHJp bmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKQorICAgICAgICAgICAgICAgICAg X0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMg KHN0cnNlcCwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKipyZXN0cmljdCBf X3N0cmluZ3AsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fZGVsaW0pKTsKK19HTF9DWFhBTElB U1dBUk4gKHN0cnNlcCk7CisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgIHVu ZGVmIHN0cnNlcAorX0dMX1dBUk5fT05fVVNFIChzdHJzZXAsICJzdHJzZXAgY2Fubm90IHdv cmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAg ImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3Nl cCBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworIyBlbmRpZgor I2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJzZXAKKyMgaWYg SEFWRV9SQVdfREVDTF9TVFJTRVAKK19HTF9XQVJOX09OX1VTRSAoc3Ryc2VwLCAic3Ryc2Vw IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVs ZSBzdHJzZXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBH TlVMSUJfU1RSU1RSQAorIyBpZiBAUkVQTEFDRV9TVFJTVFJACisjICBpZiAhKGRlZmluZWQg X19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBz dHJzdHIgcnBsX3N0cnN0cgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnN0ciwg Y2hhciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAy KSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Ryc3RyLCBjaGFyICosIChjb25zdCBjaGFyICpo YXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKKyAgLyogT24gc29tZSBz eXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5j dGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCBjaGFyICogc3Ryc3RyIChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7IH0KKyAgICAgICBleHRlcm4gIkMrKyIgeyBjaGFy ICogc3Ryc3RyIChjaGFyICosIGNvbnN0IGNoYXIgKik7IH0gICovCitfR0xfQ1hYQUxJQVNf U1lTX0NBU1QyIChzdHJzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIChj b25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25z dCBjaGFyICpuZWVkbGUpKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0gMiAmJiBf X0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwKKyAgICAg JiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+ PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJzdHIsIGNoYXIgKiwgKGNoYXIgKmhheXN0 YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKK19HTF9DWFhBTElBU1dBUk4xIChzdHJzdHIs IGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3Rh Y2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOIChz dHJzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyog c3Ryc3RyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBs b2NhbGUgZW5jb2RpbmcgaXMKKyAgIGRpZmZlcmVudCBmcm9tIFVURi04OgorICAgUE9TSVgg c2F5cyB0aGF0IGl0IG9wZXJhdGVzIG9uICJzdHJpbmdzIiwgYW5kICJzdHJpbmciIGluIFBP U0lYIGlzIGRlZmluZWQKKyAgIGFzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMsIG5vdCBvZiBjaGFy YWN0ZXJzLiAgKi8KKyMgdW5kZWYgc3Ryc3RyCisvKiBBc3N1bWUgc3Ryc3RyIGlzIGFsd2F5 cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnN0ciwgInN0cnN0ciBpcyBx dWFkcmF0aWMgb24gbWFueSBzeXN0ZW1zLCBhbmQgY2Fubm90ICIKKyAgICAgICAgICAgICAg ICAgIndvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzIGluIG1vc3QgIgorICAg ICAgICAgICAgICAgICAibXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAg ICJ1c2UgbWJzc3RyIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uLCAi CisgICAgICAgICAgICAgICAgICJvciB1c2Ugc3Ryc3RyIGlmIHlvdSBjYXJlIGFib3V0IHNw ZWVkIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVE TEUgaW4gSEFZU1RBQ0ssIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUKKyAgIGNvbXBhcmlzb24u ICAqLworI2lmIEBHTlVMSUJfU1RSQ0FTRVNUUkAKKyMgaWYgQFJFUExBQ0VfU1RSQ0FTRVNU UkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1F U1BBQ0UpCisjICAgZGVmaW5lIHN0cmNhc2VzdHIgcnBsX3N0cmNhc2VzdHIKKyMgIGVuZGlm CitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAg ICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAgICAg ICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dM X0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmNhc2VzdHIs IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29u c3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKKyMgIGlmICEgQEhBVkVfU1RSQ0FTRVNUUkAK K19HTF9GVU5DREVDTF9TWVMgKHN0cmNhc2VzdHIsIGNoYXIgKiwKKyAgICAgICAgICAgICAg ICAgIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICAg ICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICBfR0xf QVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1z LCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoK KyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25zdCBjaGFyICogc3RyY2FzZXN0ciAoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAq IHN0cmNhc2VzdHIgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfSAgKi8KK19HTF9DWFhBTElB U19TWVNfQ0FTVDIgKHN0cmNhc2VzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNr LCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZW5kaWYKKyMgaWYgKChfX0dMSUJDX18gPT0g MiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJDX18pIFwK KyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlO T1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJjYXNlc3RyLCBjaGFyICosIChj aGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CitfR0xfQ1hYQUxJQVNXQVJO MSAoc3RyY2FzZXN0ciwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgIChjb25z dCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVsc2UKK19HTF9D WFhBTElBU1dBUk4gKHN0cmNhc2VzdHIpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVM SUJfUE9TSVhDSEVDSworLyogc3RyY2FzZXN0cigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0 aWJ5dGUgc3RyaW5nczoKKyAgIEl0IGlzIGEgZ2xpYmMgZXh0ZW5zaW9uLCBhbmQgZ2xpYmMg aW1wbGVtZW50cyBpdCBvbmx5IGZvciB1bmlieXRlCisgICBsb2NhbGVzLiAgKi8KKyMgdW5k ZWYgc3RyY2FzZXN0cgorIyBpZiBIQVZFX1JBV19ERUNMX1NUUkNBU0VTVFIKK19HTF9XQVJO X09OX1VTRSAoc3RyY2FzZXN0ciwgInN0cmNhc2VzdHIgZG9lcyB3b3JrIGNvcnJlY3RseSBv biBjaGFyYWN0ZXIgIgorICAgICAgICAgICAgICAgICAic3RyaW5ncyBpbiBtdWx0aWJ5dGUg bG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNjYXNlc3RyIGlmIHlvdSBj YXJlIGFib3V0ICIKKyAgICAgICAgICAgICAgICAgImludGVybmF0aW9uYWxpemF0aW9uLCBv ciB1c2UgYy1zdHJjYXNlc3RyIGlmIHlvdSB3YW50ICIKKyAgICAgICAgICAgICAgICAgImEg bG9jYWxlIGluZGVwZW5kZW50IGZ1bmN0aW9uIik7CisjIGVuZGlmCisjZW5kaWYKKworLyog UGFyc2UgUyBpbnRvIHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbiBERUxJTS4K KyAgIElmIFMgaXMgTlVMTCwgdGhlIHNhdmVkIHBvaW50ZXIgaW4gU0FWRV9QVFIgaXMgdXNl ZCBhcworICAgdGhlIG5leHQgc3RhcnRpbmcgcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAg ICAgY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisgICAgICAgIGNoYXIgKnNwOworICAgICAg ICB4ID0gc3RydG9rX3IocywgIi0iLCAmc3ApOyAgICAgIC8vIHggPSAiYWJjIiwgc3AgPSAi PS1kZWYiCisgICAgICAgIHggPSBzdHJ0b2tfcihOVUxMLCAiLT0iLCAmc3ApOyAgLy8geCA9 ICJkZWYiLCBzcCA9IE5VTEwKKyAgICAgICAgeCA9IHN0cnRva19yKE5VTEwsICI9IiwgJnNw KTsgICAvLyB4ID0gTlVMTAorICAgICAgICAgICAgICAgIC8vIHMgPSAiYWJjXDAtZGVmXDAi CisKKyAgIFRoaXMgaXMgYSB2YXJpYW50IG9mIHN0cnRvaygpIHRoYXQgaXMgbXVsdGl0aHJl YWQtc2FmZS4KKworICAgRm9yIHRoZSBQT1NJWCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGZ1 bmN0aW9uLCBzZWU6CisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvc3Ry dG9rLmh0bWwKKworICAgQ2F2ZWF0OiBJdCBtb2RpZmllcyB0aGUgb3JpZ2luYWwgc3RyaW5n LgorICAgQ2F2ZWF0OiBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQgb24gY29uc3Rh bnQgc3RyaW5ncy4KKyAgIENhdmVhdDogVGhlIGlkZW50aXR5IG9mIHRoZSBkZWxpbWl0aW5n IGNoYXJhY3RlciBpcyBsb3N0LgorICAgQ2F2ZWF0OiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBt dWx0aWJ5dGUgc3RyaW5ncyB1bmxlc3MgYWxsIG9mIHRoZSBkZWxpbWl0ZXIKKyAgICAgICAg ICAgY2hhcmFjdGVycyBhcmUgQVNDSUkgY2hhcmFjdGVycyA8IDB4MzAuCisKKyAgIFNlZSBh bHNvIHN0cnNlcCgpLiAgKi8KKyNpZiBAR05VTElCX1NUUlRPS19SQAorIyBpZiBAUkVQTEFD RV9TVFJUT0tfUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdO VUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RydG9rX3IKKyMgICBkZWZpbmUgc3RydG9r X3IgcnBsX3N0cnRva19yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RydG9rX3Is IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNv bnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJp Y3Qgc2F2ZV9wdHIpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCAz KSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAg ICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwK KyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpKTsKKyMgZWxz ZQorIyAgaWYgQFVOREVGSU5FX1NUUlRPS19SQCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENI RUNLCisjICAgdW5kZWYgc3RydG9rX3IKKyMgIGVuZGlmCisjICBpZiAhIEBIQVZFX0RFQ0xf U1RSVE9LX1JACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJ0b2tfciwgY2hhciAqLAorICAgICAg ICAgICAgICAgICAgKGNoYXIgKnJlc3RyaWN0IHMsIGNoYXIgY29uc3QgKnJlc3RyaWN0IGRl bGltLAorICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN0cmljdCBzYXZlX3B0cikKKyAg ICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIsIDMpKSk7CisjICBlbmRpZgor X0dMX0NYWEFMSUFTX1NZUyAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAg IChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKyAgICAg ICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpKTsKKyMgZW5kaWYKK19H TF9DWFhBTElBU1dBUk4gKHN0cnRva19yKTsKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhD SEVDSworX0dMX1dBUk5fT05fVVNFIChzdHJ0b2tfciwgInN0cnRva19yIGNhbm5vdCB3b3Jr IGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgIgorICAgICAgICAgICAgICAgICAic3RyaW5ncyBp biBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnN0b2tf ciBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworIyBlbmRpZgor I2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2tfcgorIyBp ZiBIQVZFX1JBV19ERUNMX1NUUlRPS19SCitfR0xfV0FSTl9PTl9VU0UgKHN0cnRva19yLCAi c3RydG9rX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVs aWIgbW9kdWxlIHN0cnRva19yIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlm CisKKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5vdCBzcGVjaWZpZWQgYnkg UE9TSVguICBUaGV5IGFyZSBnbnVsaWIKKyAgIGV4dGVuc2lvbnMuICAqLworCisjaWYgQEdO VUxJQl9NQlNMRU5ACisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtdWx0aWJ5dGUgY2hhcmFj dGVycyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcuCisgICBUaGlzIGNvbnNpZGVy cyBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdW5saWtlIHN0cmxlbiwgd2hpY2ggY291bnRzIGJ5 dGVzLiAgKi8KKyMgaWZkZWYgX19NaXJCU0RfXyAgLyogTWlyQlNEIGRlZmluZXMgbWJzbGVu IGFzIGEgbWFjcm8uICBPdmVycmlkZSBpdC4gICovCisjICB1bmRlZiBtYnNsZW4KKyMgZW5k aWYKKyMgaWYgQEhBVkVfTUJTTEVOQCAgLyogQUlYLCBPU0YvMSwgTWlyQlNEIGRlZmluZSBt YnNsZW4gYWxyZWFkeSBpbiBsaWJjLiAgKi8KKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1 cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic2xlbiBycGxf bWJzbGVuCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzbGVuLCBzaXplX3QsIChj b25zdCBjaGFyICpzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG1ic2xlbiwgc2l6 ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMg KG1ic2xlbiwgc2l6ZV90LCAoY29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJ QVNfU1lTIChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbmRp ZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzbGVuKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9N QlNOTEVOQAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMg aW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgc3RhcnRpbmcKKyAgIGF0IFNUUklORyBhbmQgZW5k aW5nIGF0IFNUUklORyArIExFTi4gICovCitfR0xfRVhURVJOX0Mgc2l6ZV90IG1ic25sZW4g KGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbikKKyAgICAgX0dMX0FUVFJJQlVURV9Q VVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJ Ql9NQlNDSFJACisvKiBMb2NhdGUgdGhlIGZpcnN0IHNpbmdsZS1ieXRlIGNoYXJhY3RlciBD IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORywKKyAgIGFuZCByZXR1cm4gYSBwb2lu dGVyIHRvIGl0LiAgUmV0dXJuIE5VTEwgaWYgQyBpcyBub3QgZm91bmQgaW4gU1RSSU5HLgor ICAgVW5saWtlIHN0cmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBt dWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBhcyBHQjE4MDMwLiAg Ki8KKyMgaWYgZGVmaW5lZCBfX2hwdXgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAm JiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic2NociBycGxfbWJz Y2hyIC8qIGF2b2lkIGNvbGxpc2lvbiB3aXRoIEhQLVVYIGZ1bmN0aW9uICovCisjICBlbmRp ZgorX0dMX0ZVTkNERUNMX1JQTCAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJp bmcsIGludCBjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRS SUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdf Tk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNjaHIsIGNoYXIgKiwgKGNv bnN0IGNoYXIgKnN0cmluZywgaW50IGMpKTsKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAo bWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xf Q1hYQUxJQVNfU1lTIChtYnNjaHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50 IGMpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic2Nocik7CisjZW5kaWYKKwor I2lmIEBHTlVMSUJfTUJTUkNIUkAKKy8qIExvY2F0ZSB0aGUgbGFzdCBzaW5nbGUtYnl0ZSBj aGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0 dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGlu IFNUUklORy4KKyAgIFVubGlrZSBzdHJyY2hyKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29y cmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzIHdpdGgKKyAgIGVuY29kaW5ncyBzdWNoIGFz IEdCMTgwMzAuICAqLworIyBpZiBkZWZpbmVkIF9faHB1eCB8fCBkZWZpbmVkIF9fSU5URVJJ WAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVT UEFDRSkKKyMgICBkZWZpbmUgbWJzcmNociBycGxfbWJzcmNociAvKiBhdm9pZCBjb2xsaXNp b24gd2l0aCBzeXN0ZW0gZnVuY3Rpb24gKi8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBM IChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsK K19HTF9DWFhBTElBU19SUEwgKG1ic3JjaHIsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmlu ZywgaW50IGMpKTsKKyMgZWxzZQorX0dMX0ZVTkNERUNMX1NZUyAobWJzcmNociwgY2hhciAq LCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfU1lT IChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVu ZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNyY2hyKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJ Ql9NQlNTVFJACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0 ZXIgc3RyaW5nIE5FRURMRSBpbiB0aGUgY2hhcmFjdGVyCisgICBzdHJpbmcgSEFZU1RBQ0su ICBSZXR1cm4gTlVMTCBpZiBORUVETEUgaXMgbm90IGZvdW5kIGluIEhBWVNUQUNLLgorICAg VW5saWtlIHN0cnN0cigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0 aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3MgZGlmZmVyZW50IGZyb20gVVRGLTgu ICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNzdHIgKGNvbnN0IGNoYXIgKmhheXN0YWNr LCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBf R0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTQ0FT RUNNUEAKKy8qIENvbXBhcmUgdGhlIGNoYXJhY3RlciBzdHJpbmdzIFMxIGFuZCBTMiwgaWdu b3JpbmcgY2FzZSwgcmV0dXJuaW5nIGxlc3MgdGhhbiwKKyAgIGVxdWFsIHRvIG9yIGdyZWF0 ZXIgdGhhbiB6ZXJvIGlmIFMxIGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiwgZXF1 YWwgdG8KKyAgIG9yIGdyZWF0ZXIgdGhhbiBTMi4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24g bWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIDAgZm9yIHN0cmluZ3Mgb2YKKyAg IGRpZmZlcmVudCBsZW5ndGhzIQorICAgVW5saWtlIHN0cmNhc2VjbXAoKSwgdGhpcyBmdW5j dGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VY VEVSTl9DIGludCBtYnNjYXNlY21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIp CisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAy KSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTTkNBU0VDTVBACisvKiBDb21wYXJlIHRo ZSBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgUzEgY29uc2lzdGlu ZyBvZiBhdCBtb3N0CisgICBOIGNoYXJhY3RlcnMgd2l0aCB0aGUgaW5pdGlhbCBzZWdtZW50 IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMyIGNvbnNpc3RpbmcKKyAgIG9mIGF0IG1vc3Qg TiBjaGFyYWN0ZXJzLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVh bCB0byBvcgorICAgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlIGluaXRpYWwgc2VnbWVudCBv ZiBTMSBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzCisgICB0aGFuLCBlcXVhbCB0byBvciBn cmVhdGVyIHRoYW4gdGhlIGluaXRpYWwgc2VnbWVudCBvZiBTMi4KKyAgIE5vdGU6IFRoaXMg ZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIDAgZm9yIGluaXRp YWwgc2VnbWVudHMKKyAgIG9mIGRpZmZlcmVudCBsZW5ndGhzIQorICAgVW5saWtlIHN0cm5j YXNlY21wKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBs b2NhbGVzLgorICAgQnV0IGJld2FyZSB0aGF0IE4gaXMgbm90IGEgYnl0ZSBjb3VudCBidXQg YSBjaGFyYWN0ZXIgY291bnQhICAqLworX0dMX0VYVEVSTl9DIGludCBtYnNuY2FzZWNtcCAo Y29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbikKKyAgICAgX0dMX0FU VFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgor CisjaWYgQEdOVUxJQl9NQlNQQ0FTRUNNUEAKKy8qIENvbXBhcmUgdGhlIGluaXRpYWwgc2Vn bWVudCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgY29uc2lzdGluZyBvZgorICAg YXQgbW9zdCBtYnNsZW4gKFBSRUZJWCkgY2hhcmFjdGVycyB3aXRoIHRoZSBjaGFyYWN0ZXIg c3RyaW5nIFBSRUZJWCwKKyAgIGlnbm9yaW5nIGNhc2UuICBJZiB0aGUgdHdvIG1hdGNoLCBy ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisgICBhZnRlciB0aGlzIHByZWZp eCBpbiBTVFJJTkcuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAgTm90ZTogVGhpcyBm dW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gbm9uLU5VTEwgaWYg U1RSSU5HCisgICBpcyBvZiBzbWFsbGVyIGxlbmd0aCB0aGFuIFBSRUZJWCEKKyAgIFVubGlr ZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0 aWJ5dGUKKyAgIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnNwY2FzZWNt cCAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpwcmVmaXgpCisgICAgIF9HTF9B VFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYK KworI2lmIEBHTlVMSUJfTUJTQ0FTRVNUUkAKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVu Y2Ugb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgTkVFRExFIGluIHRoZSBjaGFyYWN0ZXIKKyAg IHN0cmluZyBIQVlTVEFDSywgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgor ICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1 cm4gc3VjY2VzcyBldmVuIGlmCisgICBzdHJsZW4gKGhheXN0YWNrKSA8IHN0cmxlbiAobmVl ZGxlKSAhCisgICBVbmxpa2Ugc3RyY2FzZXN0cigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNv cnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0MgY2hhciAq IG1ic2Nhc2VzdHIgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUp CisgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAy KSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTQ1NQTkAKKy8qIEZpbmQgdGhlIGZpcnN0 IG9jY3VycmVuY2UgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIG9mIGFueSBjaGFy YWN0ZXIKKyAgIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIEFDQ0VQVC4gIFJldHVybiB0aGUg bnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0 byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYg bm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3RyY3NwbigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtz IGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitfR0xfRVhURVJOX0Mgc2l6 ZV90IG1ic2NzcG4gKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQor ICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikp OworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU1BCUktACisvKiBGaW5kIHRoZSBmaXJzdCBv Y2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hhcmFj dGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhlIHBv aW50ZXIgdG8gaXQsIG9yIE5VTEwgaWYgbm9uZQorICAgZXhpc3RzLgorICAgVW5saWtlIHN0 cnBicmsoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxv Y2FsZXMuICAqLworIyBpZiBkZWZpbmVkIF9faHB1eAorIyAgaWYgIShkZWZpbmVkIF9fY3Bs dXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWJzcGJy ayBycGxfbWJzcGJyayAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAq LworIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0 IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKK19HTF9DWFhB TElBU19SUEwgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3Qg Y2hhciAqYWNjZXB0KSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3BicmssIGNo YXIgKiwgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYWNjZXB0KQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikp KTsKK19HTF9DWFhBTElBU19TWVMgKG1ic3BicmssIGNoYXIgKiwgKGNvbnN0IGNoYXIgKnN0 cmluZywgY29uc3QgY2hhciAqYWNjZXB0KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJO IChtYnNwYnJrKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNTUE5ACisvKiBGaW5kIHRo ZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBh bnkgY2hhcmFjdGVyCisgICBub3QgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgUkVKRUNULiAg UmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUKKyAgIGJlZ2lubmluZyBvZiB0 aGUgc3RyaW5nIHRvIHRoaXMgb2NjdXJyZW5jZSwgb3IgdG8gdGhlIGVuZCBvZiB0aGUgc3Ry aW5nCisgICBpZiBub25lIGV4aXN0cy4KKyAgIFVubGlrZSBzdHJzcG4oKSwgdGhpcyBmdW5j dGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VY VEVSTl9DIHNpemVfdCBtYnNzcG4gKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAq cmVqZWN0KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxM ICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU1NFUEAKKy8qIFNlYXJjaCB0 aGUgbmV4dCBkZWxpbWl0ZXIgKG11bHRpYnl0ZSBjaGFyYWN0ZXIgbGlzdGVkIGluIHRoZSBj aGFyYWN0ZXIKKyAgIHN0cmluZyBERUxJTSkgc3RhcnRpbmcgYXQgdGhlIGNoYXJhY3RlciBz dHJpbmcgKlNUUklOR1AuCisgICBJZiBvbmUgaXMgZm91bmQsIG92ZXJ3cml0ZSBpdCB3aXRo IGEgTlVMLCBhbmQgYWR2YW5jZSAqU1RSSU5HUCB0byBwb2ludAorICAgdG8gdGhlIG5leHQg bXVsdGlieXRlIGNoYXJhY3RlciBhZnRlciBpdC4gIE90aGVyd2lzZSwgc2V0ICpTVFJJTkdQ IHRvIE5VTEwuCisgICBJZiAqU1RSSU5HUCB3YXMgYWxyZWFkeSBOVUxMLCBub3RoaW5nIGhh cHBlbnMuCisgICBSZXR1cm4gdGhlIG9sZCB2YWx1ZSBvZiAqU1RSSU5HUC4KKworICAgVGhp cyBpcyBhIHZhcmlhbnQgb2YgbWJzdG9rX3IoKSB0aGF0IHN1cHBvcnRzIGVtcHR5IGZpZWxk cy4KKworICAgQ2F2ZWF0OiBJdCBtb2RpZmllcyB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICAg Q2F2ZWF0OiBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQgb24gY29uc3RhbnQgc3Ry aW5ncy4KKyAgIENhdmVhdDogVGhlIGlkZW50aXR5IG9mIHRoZSBkZWxpbWl0aW5nIGNoYXJh Y3RlciBpcyBsb3N0LgorCisgICBTZWUgYWxzbyBtYnN0b2tfcigpLiAgKi8KK19HTF9FWFRF Uk5fQyBjaGFyICogbWJzc2VwIChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0p CisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJ Ql9NQlNUT0tfUkAKKy8qIFBhcnNlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBpbnRv IHRva2VucyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBpbgorICAgdGhlIGNoYXJhY3RlciBz dHJpbmcgREVMSU0uCisgICBJZiBTVFJJTkcgaXMgTlVMTCwgdGhlIHNhdmVkIHBvaW50ZXIg aW4gU0FWRV9QVFIgaXMgdXNlZCBhcworICAgdGhlIG5leHQgc3RhcnRpbmcgcG9pbnQuICBG b3IgZXhhbXBsZToKKyAgICAgICAgY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisgICAgICAg IGNoYXIgKnNwOworICAgICAgICB4ID0gbWJzdG9rX3IocywgIi0iLCAmc3ApOyAgICAgIC8v IHggPSAiYWJjIiwgc3AgPSAiPS1kZWYiCisgICAgICAgIHggPSBtYnN0b2tfcihOVUxMLCAi LT0iLCAmc3ApOyAgLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKyAgICAgICAgeCA9IG1ic3Rv a19yKE5VTEwsICI9IiwgJnNwKTsgICAvLyB4ID0gTlVMTAorICAgICAgICAgICAgICAgIC8v IHMgPSAiYWJjXDAtZGVmXDAiCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdp bmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2Vk IG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUg ZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKworICAgU2VlIGFsc28gbWJzc2VwKCku ICAqLworX0dMX0VYVEVSTl9DIGNoYXIgKiBtYnN0b2tfciAoY2hhciAqc3RyaW5nLCBjb25z dCBjaGFyICpkZWxpbSwgY2hhciAqKnNhdmVfcHRyKQorICAgICBfR0xfQVJHX05PTk5VTEwg KCgyLCAzKSk7CisjZW5kaWYKKworLyogTWFwIGFueSBpbnQsIHR5cGljYWxseSBmcm9tIGVy cm5vLCBpbnRvIGFuIGVycm9yIG1lc3NhZ2UuICAqLworI2lmIEBHTlVMSUJfU1RSRVJST1JA CisjIGlmIEBSRVBMQUNFX1NUUkVSUk9SQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVz ICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBzdHJlcnJvcgorIyAg IGRlZmluZSBzdHJlcnJvciBycGxfc3RyZXJyb3IKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xf UlBMIChzdHJlcnJvciwgY2hhciAqLCAoaW50KSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJl cnJvciwgY2hhciAqLCAoaW50KSk7CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHN0cmVy cm9yLCBjaGFyICosIChpbnQpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cmVy cm9yKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RyZXJy b3IKKy8qIEFzc3VtZSBzdHJlcnJvciBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dB Uk5fT05fVVNFIChzdHJlcnJvciwgInN0cmVycm9yIGlzIHVucG9ydGFibGUgLSAiCisgICAg ICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJlcnJvciB0byBndWFyYW50ZWUg bm9uLU5VTEwgcmVzdWx0Iik7CisjZW5kaWYKKworLyogTWFwIGFueSBpbnQsIHR5cGljYWxs eSBmcm9tIGVycm5vLCBpbnRvIGFuIGVycm9yIG1lc3NhZ2UuICBNdWx0aXRocmVhZC1zYWZl LgorICAgVXNlcyB0aGUgUE9TSVggZGVjbGFyYXRpb24sIG5vdCB0aGUgZ2xpYmMgZGVjbGFy YXRpb24uICAqLworI2lmIEBHTlVMSUJfU1RSRVJST1JfUkAKKyMgaWYgQFJFUExBQ0VfU1RS RVJST1JfUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJ Ql9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3JfcgorIyAgIGRlZmluZSBzdHJlcnJv cl9yIHJwbF9zdHJlcnJvcl9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyZXJy b3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkp OworX0dMX0NYWEFMSUFTX1JQTCAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hh ciAqYnVmLCBzaXplX3QgYnVmbGVuKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9ERUNMX1NU UkVSUk9SX1JACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJlcnJvcl9yLCBpbnQsIChpbnQgZXJy bnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NY WEFMSUFTX1NZUyAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVycm51bSwgY2hhciAqYnVmLCBz aXplX3QgYnVmbGVuKSk7CisjIGVuZGlmCisjIGlmIEBIQVZFX0RFQ0xfU1RSRVJST1JfUkAK K19HTF9DWFhBTElBU1dBUk4gKHN0cmVycm9yX3IpOworIyBlbmRpZgorI2VsaWYgZGVmaW5l ZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJlcnJvcl9yCisjIGlmIEhBVkVfUkFX X0RFQ0xfU1RSRVJST1JfUgorX0dMX1dBUk5fT05fVVNFIChzdHJlcnJvcl9yLCAic3RyZXJy b3JfciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBt b2R1bGUgc3RyZXJyb3Jfci1wb3NpeCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNl bmRpZgorCisjaWYgQEdOVUxJQl9TVFJTSUdOQUxACisjIGlmIEBSRVBMQUNFX1NUUlNJR05B TEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1F U1BBQ0UpCisjICAgZGVmaW5lIHN0cnNpZ25hbCBycGxfc3Ryc2lnbmFsCisjICBlbmRpZgor X0dMX0ZVTkNERUNMX1JQTCAoc3Ryc2lnbmFsLCBjaGFyICosIChpbnQgX19zaWcpKTsKK19H TF9DWFhBTElBU19SUEwgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CisjIGVs c2UKKyMgIGlmICEgQEhBVkVfREVDTF9TVFJTSUdOQUxACitfR0xfRlVOQ0RFQ0xfU1lTIChz dHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyAgZW5kaWYKKy8qIE5lZWQgdG8g Y2FzdCwgYmVjYXVzZSBvbiBDeWd3aW4gMS41Lnggc3lzdGVtcywgdGhlIHJldHVybiB0eXBl IGlzCisgICAnY29uc3QgY2hhciAqJy4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKHN0 cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNX QVJOIChzdHJzaWduYWwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1 bmRlZiBzdHJzaWduYWwKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJTSUdOQUwKK19HTF9XQVJO X09OX1VTRSAoc3Ryc2lnbmFsLCAic3Ryc2lnbmFsIGlzIHVucG9ydGFibGUgLSAiCisgICAg ICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJzaWduYWwgZm9yIHBvcnRhYmls aXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSVkVSU0NNUEAKKyMg aWYgIUBIQVZFX1NUUlZFUlNDTVBACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJ2ZXJzY21wLCBp bnQsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitf R0xfQ1hYQUxJQVNfU1lTIChzdHJ2ZXJzY21wLCBpbnQsIChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKikpOworX0dMX0NYWEFMSUFTV0FSTiAoc3RydmVyc2NtcCk7CisjZWxpZiBkZWZp bmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnZlcnNjbXAKKyMgaWYgSEFWRV9S QVdfREVDTF9TVFJWRVJTQ01QCitfR0xfV0FSTl9PTl9VU0UgKHN0cnZlcnNjbXAsICJzdHJ2 ZXJzY21wIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGli IG1vZHVsZSBzdHJ2ZXJzY21wIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlm CisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLworI2VuZGlmIC8q IF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2du dWxpYi1jb21wLm00JwotLS0gbTQvZ251bGliLWNvbXAubTQJMjAxMy0wMi0wMSAwNjozMDo1 MSArMDAwMAorKysgbTQvZ251bGliLWNvbXAubTQJMjAxMy0wMi0wOSAwMzoxMjo0OCArMDAw MApAQCAtODMsNiArODMsNyBAQAogICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkK ICAgIyBDb2RlIGZyb20gbW9kdWxlIGxzdGF0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgbWFu eXdhcm5pbmdzOgorICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtcmNocjoKICAgIyBDb2RlIGZy b20gbW9kdWxlIG1rdGltZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIG11bHRpYXJjaDoKICAg IyBDb2RlIGZyb20gbW9kdWxlIG5vY3Jhc2g6CkBAIC0xMTcsNiArMTE4LDcgQEAKICAgIyBD b2RlIGZyb20gbW9kdWxlIHN0ZGlvOgogICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkbGliOgog ICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZnRpbWU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBz dHJpbmc6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJ0b2ltYXg6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBzdHJ0b2xsOgogICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bGw6CkBAIC0y NDIsNiArMjQ0LDEyIEBACiAgICAgZ2xfUFJFUkVRX0xTVEFUCiAgIGZpCiAgIGdsX1NZU19T VEFUX01PRFVMRV9JTkRJQ0FUT1IoW2xzdGF0XSkKKyAgZ2xfRlVOQ19NRU1SQ0hSCisgIGlm IHRlc3QgJGFjX2N2X2Z1bmNfbWVtcmNociA9IG5vOyB0aGVuCisgICAgQUNfTElCT0JKKFtt ZW1yY2hyXSkKKyAgICBnbF9QUkVSRVFfTUVNUkNIUgorICBmaQorICBnbF9TVFJJTkdfTU9E VUxFX0lORElDQVRPUihbbWVtcmNocl0pCiAgIGdsX0ZVTkNfTUtUSU1FCiAgIGlmIHRlc3Qg JFJFUExBQ0VfTUtUSU1FID0gMTsgdGhlbgogICAgIEFDX0xJQk9CSihbbWt0aW1lXSkKQEAg LTI5NCw2ICszMDIsNyBAQAogICBnbF9TVERJT19ICiAgIGdsX1NURExJQl9ICiAgIGdsX0ZV TkNfR05VX1NUUkZUSU1FCisgIGdsX0hFQURFUl9TVFJJTkdfSAogICBnbF9GVU5DX1NUUlRP SU1BWAogICBpZiB0ZXN0ICRIQVZFX1NUUlRPSU1BWCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9T VFJUT0lNQVggPSAxOyB0aGVuCiAgICAgQUNfTElCT0JKKFtzdHJ0b2ltYXhdKQpAQCAtNzU3 LDYgKzc2Niw3IEBACiAgIGxpYi9sc3RhdC5jCiAgIGxpYi9tZDUuYwogICBsaWIvbWQ1LmgK KyAgbGliL21lbXJjaHIuYwogICBsaWIvbWt0aW1lLWludGVybmFsLmgKICAgbGliL21rdGlt ZS5jCiAgIGxpYi9vcGVuYXQtcHJpdi5oCkBAIC03OTAsNiArODAwLDcgQEAKICAgbGliL3N0 ZGxpYi5pbi5oCiAgIGxpYi9zdHJmdGltZS5jCiAgIGxpYi9zdHJmdGltZS5oCisgIGxpYi9z dHJpbmcuaW4uaAogICBsaWIvc3RydG9pbWF4LmMKICAgbGliL3N0cnRvbC5jCiAgIGxpYi9z dHJ0b2xsLmMKQEAgLTg0OCw2ICs4NTksNyBAQAogICBtNC9sc3RhdC5tNAogICBtNC9tYW55 d2FybmluZ3MubTQKICAgbTQvbWQ1Lm00CisgIG00L21lbXJjaHIubTQKICAgbTQvbWt0aW1l Lm00CiAgIG00L211bHRpYXJjaC5tNAogICBtNC9ub2NyYXNoLm00CkBAIC04NzcsNiArODg5 LDcgQEAKICAgbTQvc3RkaW9faC5tNAogICBtNC9zdGRsaWJfaC5tNAogICBtNC9zdHJmdGlt ZS5tNAorICBtNC9zdHJpbmdfaC5tNAogICBtNC9zdHJ0b2ltYXgubTQKICAgbTQvc3RydG9s bC5tNAogICBtNC9zdHJ0b3VsbC5tNAoKPT09IGFkZGVkIGZpbGUgJ200L21lbXJjaHIubTQn Ci0tLSBtNC9tZW1yY2hyLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L21l bXJjaHIubTQJMjAxMy0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAtMCwwICsxLDIzIEBACisj IG1lbXJjaHIubTQgc2VyaWFsIDEwCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIw MDUtMjAwNywgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMu CitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9v ciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBh cyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZV TkNfTUVNUkNIUl0sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRl Y2xhcmUgbWVtcmNocigpLgorICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lP TlNdKQorCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisg IEFDX0NIRUNLX0RFQ0xTX09OQ0UoW21lbXJjaHJdKQorICBpZiB0ZXN0ICRhY19jdl9oYXZl X2RlY2xfbWVtcmNociA9IG5vOyB0aGVuCisgICAgSEFWRV9ERUNMX01FTVJDSFI9MAorICBm aQorCisgIEFDX0NIRUNLX0ZVTkNTKFttZW1yY2hyXSkKK10pCisKKyMgUHJlcmVxdWlzaXRl cyBvZiBsaWIvbWVtcmNoci5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9NRU1SQ0hSXSwgWzpd KQoKPT09IGFkZGVkIGZpbGUgJ200L3N0cmluZ19oLm00JwotLS0gbTQvc3RyaW5nX2gubTQJ MTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbTQvc3RyaW5nX2gubTQJMjAxMy0wMi0w OSAwMzoxMjo0OCArMDAwMApAQCAtMCwwICsxLDEyMCBAQAorIyBDb25maWd1cmUgYSBHTlUt bGlrZSByZXBsYWNlbWVudCBmb3IgPHN0cmluZy5oPi4KKworIyBDb3B5cmlnaHQgKEMpIDIw MDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlz IGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMg dW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMg d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2Ug aXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyMQorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dl cnQuCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hdLAorWworICBkbmwgVXNlIEFD X1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBiZWxvdyBpcyBl eHBhbmRlZAorICBkbmwgb25jZSBvbmx5LCBiZWZvcmUgYWxsIHN0YXRlbWVudHMgdGhhdCBv Y2N1ciBpbiBvdGhlciBtYWNyb3MuCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdf SF9CT0RZXSkKK10pCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCitb CisgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFE RVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBnbF9ORVhUX0hFQURFUlMoW3N0cmluZy5oXSkK KworICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRv IHBvaXNvbiBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBu b3QgaW4gdXNlLCBhbmQgd2hpY2ggaXMgbm90CisgIGRubCBndWFyYW50ZWVkIGJ5IEM4OS4K KyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICBd XSwKKyAgICBbZmZzbCBmZnNsbCBtZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBz dHBjcHkgc3RwbmNweSBzdHJjaHJudWwKKyAgICAgc3RyZHVwIHN0cm5jYXQgc3RybmR1cCBz dHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3IKKyAgICAgc3RyZXJy b3JfciBzdHJzaWduYWwgc3RydmVyc2NtcF0pCitdKQorCitBQ19ERUZVTihbZ2xfU1RSSU5H X01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28g dGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBB Q19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBnbF9NT0RVTEVf SU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorICBkbmwgRGVmaW5lIGl0IGFsc28gYXMg YSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCisgIGdsX01P RFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCitdKQorCitBQ19ERUZVTihbZ2xfSEVB REVSX1NUUklOR19IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0ZGU0w9MDsgICAgICAgIEFD X1NVQlNUKFtHTlVMSUJfRkZTTF0pCisgIEdOVUxJQl9GRlNMTD0wOyAgICAgICBBQ19TVUJT VChbR05VTElCX0ZGU0xMXSkKKyAgR05VTElCX01FTUNIUj0wOyAgICAgIEFDX1NVQlNUKFtH TlVMSUJfTUVNQ0hSXSkKKyAgR05VTElCX01FTU1FTT0wOyAgICAgIEFDX1NVQlNUKFtHTlVM SUJfTUVNTUVNXSkKKyAgR05VTElCX01FTVBDUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJf TUVNUENQWV0pCisgIEdOVUxJQl9NRU1SQ0hSPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01F TVJDSFJdKQorICBHTlVMSUJfUkFXTUVNQ0hSPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9SQVdN RU1DSFJdKQorICBHTlVMSUJfU1RQQ1BZPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFBD UFldKQorICBHTlVMSUJfU1RQTkNQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFBOQ1BZ XSkKKyAgR05VTElCX1NUUkNIUk5VTD0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSQ0hSTlVM XSkKKyAgR05VTElCX1NUUkRVUD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSRFVQXSkK KyAgR05VTElCX1NUUk5DQVQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSTkNBVF0pCisg IEdOVUxJQl9TVFJORFVQPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUk5EVVBdKQorICBH TlVMSUJfU1RSTkxFTj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJOTEVOXSkKKyAgR05V TElCX1NUUlBCUks9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSUEJSS10pCisgIEdOVUxJ Ql9TVFJTRVA9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUlNFUF0pCisgIEdOVUxJQl9T VFJTVFI9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUlNUUl0pCisgIEdOVUxJQl9TVFJD QVNFU1RSPTA7ICBBQ19TVUJTVChbR05VTElCX1NUUkNBU0VTVFJdKQorICBHTlVMSUJfU1RS VE9LX1I9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT0tfUl0pCisgIEdOVUxJQl9NQlNM RU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX01CU0xFTl0pCisgIEdOVUxJQl9NQlNOTEVO PTA7ICAgICBBQ19TVUJTVChbR05VTElCX01CU05MRU5dKQorICBHTlVMSUJfTUJTQ0hSPTA7 ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDSFJdKQorICBHTlVMSUJfTUJTUkNIUj0wOyAg ICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNSQ0hSXSkKKyAgR05VTElCX01CU1NUUj0wOyAgICAg IEFDX1NVQlNUKFtHTlVMSUJfTUJTU1RSXSkKKyAgR05VTElCX01CU0NBU0VDTVA9MDsgIEFD X1NVQlNUKFtHTlVMSUJfTUJTQ0FTRUNNUF0pCisgIEdOVUxJQl9NQlNOQ0FTRUNNUD0wOyBB Q19TVUJTVChbR05VTElCX01CU05DQVNFQ01QXSkKKyAgR05VTElCX01CU1BDQVNFQ01QPTA7 IEFDX1NVQlNUKFtHTlVMSUJfTUJTUENBU0VDTVBdKQorICBHTlVMSUJfTUJTQ0FTRVNUUj0w OyAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDQVNFU1RSXSkKKyAgR05VTElCX01CU0NTUE49MDsg ICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ1NQTl0pCisgIEdOVUxJQl9NQlNQQlJLPTA7ICAg ICBBQ19TVUJTVChbR05VTElCX01CU1BCUktdKQorICBHTlVMSUJfTUJTU1BOPTA7ICAgICAg QUNfU1VCU1QoW0dOVUxJQl9NQlNTUE5dKQorICBHTlVMSUJfTUJTU0VQPTA7ICAgICAgQUNf U1VCU1QoW0dOVUxJQl9NQlNTRVBdKQorICBHTlVMSUJfTUJTVE9LX1I9MDsgICAgQUNfU1VC U1QoW0dOVUxJQl9NQlNUT0tfUl0pCisgIEdOVUxJQl9TVFJFUlJPUj0wOyAgICBBQ19TVUJT VChbR05VTElCX1NUUkVSUk9SXSkKKyAgR05VTElCX1NUUkVSUk9SX1I9MDsgIEFDX1NVQlNU KFtHTlVMSUJfU1RSRVJST1JfUl0pCisgIEdOVUxJQl9TVFJTSUdOQUw9MDsgICBBQ19TVUJT VChbR05VTElCX1NUUlNJR05BTF0pCisgIEdOVUxJQl9TVFJWRVJTQ01QPTA7ICBBQ19TVUJT VChbR05VTElCX1NUUlZFUlNDTVBdKQorICBIQVZFX01CU0xFTj0wOyAgICAgICAgQUNfU1VC U1QoW0hBVkVfTUJTTEVOXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVu bGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9GRlNMPTE7ICAg ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTF0pCisgIEhBVkVfRkZTTEw9MTsg ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xMXSkKKyAgSEFWRV9NRU1DSFI9 MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNQ0hSXSkKKyAgSEFWRV9ERUNM X01FTU1FTT0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9NRU1NRU1dKQorICBI QVZFX01FTVBDUFk9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkK KyAgSEFWRV9ERUNMX01FTVJDSFI9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9N RU1SQ0hSXSkKKyAgSEFWRV9SQVdNRU1DSFI9MTsgICAgICAgICAgICAgQUNfU1VCU1QoW0hB VkVfUkFXTUVNQ0hSXSkKKyAgSEFWRV9TVFBDUFk9MTsgICAgICAgICAgICAgICAgQUNfU1VC U1QoW0hBVkVfU1RQQ1BZXSkKKyAgSEFWRV9TVFBOQ1BZPTE7ICAgICAgICAgICAgICAgQUNf U1VCU1QoW0hBVkVfU1RQTkNQWV0pCisgIEhBVkVfU1RSQ0hSTlVMPTE7ICAgICAgICAgICAg IEFDX1NVQlNUKFtIQVZFX1NUUkNIUk5VTF0pCisgIEhBVkVfREVDTF9TVFJEVVA9MTsgICAg ICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSRFVQXSkKKyAgSEFWRV9ERUNMX1NUUk5E VVA9MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJORFVQXSkKKyAgSEFWRV9E RUNMX1NUUk5MRU49MTsgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJOTEVOXSkK KyAgSEFWRV9TVFJQQlJLPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSUEJS S10pCisgIEhBVkVfU1RSU0VQPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NU UlNFUF0pCisgIEhBVkVfU1RSQ0FTRVNUUj0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZF X1NUUkNBU0VTVFJdKQorICBIQVZFX0RFQ0xfU1RSVE9LX1I9MTsgICAgICAgICBBQ19TVUJT VChbSEFWRV9ERUNMX1NUUlRPS19SXSkKKyAgSEFWRV9ERUNMX1NUUkVSUk9SX1I9MTsgICAg ICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJFUlJPUl9SXSkKKyAgSEFWRV9ERUNMX1NUUlNJ R05BTD0xOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJTSUdOQUxdKQorICBIQVZF X1NUUlZFUlNDTVA9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TVFJWRVJTQ01QXSkK KyAgUkVQTEFDRV9NRU1DSFI9MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfTUVN Q0hSXSkKKyAgUkVQTEFDRV9NRU1NRU09MDsgICAgICAgICAgICAgQUNfU1VCU1QoW1JFUExB Q0VfTUVNTUVNXSkKKyAgUkVQTEFDRV9TVFBOQ1BZPTA7ICAgICAgICAgICAgQUNfU1VCU1Qo W1JFUExBQ0VfU1RQTkNQWV0pCisgIFJFUExBQ0VfU1RSRFVQPTA7ICAgICAgICAgICAgIEFD X1NVQlNUKFtSRVBMQUNFX1NUUkRVUF0pCisgIFJFUExBQ0VfU1RSU1RSPTA7ICAgICAgICAg ICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUlNUUl0pCisgIFJFUExBQ0VfU1RSQ0FTRVNUUj0w OyAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUkNBU0VTVFJdKQorICBSRVBMQUNFX1NU UkNIUk5VTD0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJDSFJOVUxdKQorICBS RVBMQUNFX1NUUkVSUk9SPTA7ICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJFUlJP Ul0pCisgIFJFUExBQ0VfU1RSRVJST1JfUj0wOyAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNF X1NUUkVSUk9SX1JdKQorICBSRVBMQUNFX1NUUk5DQVQ9MDsgICAgICAgICAgICBBQ19TVUJT VChbUkVQTEFDRV9TVFJOQ0FUXSkKKyAgUkVQTEFDRV9TVFJORFVQPTA7ICAgICAgICAgICAg QUNfU1VCU1QoW1JFUExBQ0VfU1RSTkRVUF0pCisgIFJFUExBQ0VfU1RSTkxFTj0wOyAgICAg ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX1NUUk5MRU5dKQorICBSRVBMQUNFX1NUUlNJR05B TD0wOyAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJTSUdOQUxdKQorICBSRVBMQUNF X1NUUlRPS19SPTA7ICAgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJUT0tfUl0pCisg IFVOREVGSU5FX1NUUlRPS19SPTA7ICAgICAgICAgIEFDX1NVQlNUKFtVTkRFRklORV9TVFJU T0tfUl0pCitdKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMv Q2hhbmdlTG9nCTIwMTMtMDItMDggMTc6NDI6MDkgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJ MjAxMy0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAtMSwzICsxLDExIEBACisyMDEzLTAyLTA5 ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVR1bmUgcmVkaXNwbGF5 IGJ5IHVzaW5nIG1lbWNociBhbmQgbWVtcmNoci4KKwkqIHNlYXJjaC5jIChzY2FuX2J1ZmZl cik6IE9taXQgZmlyc3QgYXJnIFRBUkdFVCwgYXMgaXQncyBhbHdheXMgJ1xuJy4KKwlBbGwg Y2FsbGVycyBjaGFuZ2VkLgorCShzY2FuX2J1ZmZlciwgc2Nhbl9uZXdsaW5lKTogVXNlIG1l bWNociBhbmQgbWVtcmNociByYXRoZXIgdGhhbgorCXNjYW5uaW5nIGJ5dGUtYnktYnl0ZS4K KwogMjAxMy0wMi0wOCAgU3RlZmFuIE1vbm5pZXIgIDxtb25uaWVyQGlyby51bW9udHJlYWwu Y2E+CiAKIAkqIGxyZWFkLmMgKHNraXBfZHluX2J5dGVzKTogTmV3IGZ1bmN0aW9uIChidWcj MTI1OTgpLgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9lZGl0Zm5zLmMnCi0tLSBzcmMvZWRp dGZucy5jCTIwMTMtMDEtMjMgMjA6MDc6MjggKzAwMDAKKysrIHNyYy9lZGl0Zm5zLmMJMjAx My0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAtNzM1LDggKzczNSw3IEBACiAJICAgICAgLyog VGhpcyBpcyB0aGUgT05MWV9JTl9MSU5FIGNhc2UsIGNoZWNrIHRoYXQgTkVXX1BPUyBhbmQK IAkJIEZJRUxEX0JPVU5EIGFyZSBvbiB0aGUgc2FtZSBsaW5lIGJ5IHNlZWluZyB3aGV0aGVy CiAJCSB0aGVyZSdzIGFuIGludGVydmVuaW5nIG5ld2xpbmUgb3Igbm90LiAgKi8KLQkgICAg ICB8fCAoc2Nhbl9idWZmZXIgKCdcbicsCi0JCQkgICAgICAgWEZBU1RJTlQgKG5ld19wb3Mp LCBYRkFTVElOVCAoZmllbGRfYm91bmQpLAorCSAgICAgIHx8IChzY2FuX2J1ZmZlciAoWEZB U1RJTlQgKG5ld19wb3MpLCBYRkFTVElOVCAoZmllbGRfYm91bmQpLAogCQkJICAgICAgIGZ3 ZCA/IC0xIDogMSwgJnNob3J0YWdlLCAxKSwKIAkJICBzaG9ydGFnZSAhPSAwKSkpCiAJLyog Q29uc3RyYWluIE5FV19QT1MgdG8gRklFTERfQk9VTkQuICAqLwoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9saXNwLmgnCi0tLSBzcmMvbGlzcC5oCTIwMTMtMDItMDggMDU6Mjg6NTIgKzAw MDAKKysrIHNyYy9saXNwLmgJMjAxMy0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAtMzMzOCw3 ICszMzM4LDcgQEAKIGV4dGVybiBwdHJkaWZmX3QgZmFzdF9zdHJpbmdfbWF0Y2hfaWdub3Jl X2Nhc2UgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiBleHRlcm4gcHRyZGlmZl90IGZh c3RfbG9va2luZ19hdCAoTGlzcF9PYmplY3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCwgcHRyZGlmZl90LCBM aXNwX09iamVjdCk7Ci1leHRlcm4gcHRyZGlmZl90IHNjYW5fYnVmZmVyIChpbnQsIHB0cmRp ZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsCitleHRlcm4gcHRyZGlmZl90IHNjYW5fYnVm ZmVyIChwdHJkaWZmX3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90LAogCQkJICAgICAgcHRyZGlm Zl90ICosIGJvb2wpOwogZXh0ZXJuIEVNQUNTX0lOVCBzY2FuX25ld2xpbmUgKHB0cmRpZmZf dCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwKIAkJCSAgICAgICBFTUFDU19J TlQsIGJvb2wpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9zZWFyY2guYycKLS0tIHNyYy9z ZWFyY2guYwkyMDEzLTAyLTA4IDE0OjQ0OjUzICswMDAwCisrKyBzcmMvc2VhcmNoLmMJMjAx My0wMi0wOSAwMzoxMjo0OCArMDAwMApAQCAtNjE5LDcgKzYxOSw3IEBACiB9CiAKIAwKLS8q IFNlYXJjaCBmb3IgQ09VTlQgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXIgVEFSR0VUIGJl dHdlZW4gU1RBUlQgYW5kIEVORC4KKy8qIFNlYXJjaCBmb3IgQ09VTlQgbmV3bGluZXMgYmV0 d2VlbiBTVEFSVCBhbmQgRU5ELgogCiAgICBJZiBDT1VOVCBpcyBwb3NpdGl2ZSwgc2VhcmNo IGZvcndhcmRzOyBFTkQgbXVzdCBiZSA+PSBTVEFSVC4KICAgIElmIENPVU5UIGlzIG5lZ2F0 aXZlLCBzZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgLUNPVU5UdGggaW5zdGFuY2U7CkBAIC02 MzQsMTMgKzYzNCwxMyBAQAogICAgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHVzdWFs IGNvbnZlbnRpb24gZm9yIEVtYWNzIG1vdGlvbiBjb21tYW5kcy4KIAogICAgSWYgd2UgZG9u J3QgZmluZCBDT1VOVCBpbnN0YW5jZXMgYmVmb3JlIHJlYWNoaW5nIEVORCwgc2V0ICpTSE9S VEFHRQotICAgdG8gdGhlIG51bWJlciBvZiBUQVJHRVRzIGxlZnQgdW5mb3VuZCwgYW5kIHJl dHVybiBFTkQuCisgICB0byB0aGUgbnVtYmVyIG9mIG5ld2xpbmVzIGxlZnQgdW5mb3VuZCwg YW5kIHJldHVybiBFTkQuCiAKICAgIElmIEFMTE9XX1FVSVQsIHNldCBpbW1lZGlhdGVfcXVp dC4gIFRoYXQncyBnb29kIHRvIGRvCiAgICBleGNlcHQgd2hlbiBpbnNpZGUgcmVkaXNwbGF5 LiAgKi8KIAogcHRyZGlmZl90Ci1zY2FuX2J1ZmZlciAoaW50IHRhcmdldCwgcHRyZGlmZl90 IHN0YXJ0LCBwdHJkaWZmX3QgZW5kLAorc2Nhbl9idWZmZXIgKHB0cmRpZmZfdCBzdGFydCwg cHRyZGlmZl90IGVuZCwKIAkgICAgIHB0cmRpZmZfdCBjb3VudCwgcHRyZGlmZl90ICpzaG9y dGFnZSwgYm9vbCBhbGxvd19xdWl0KQogewogICBzdHJ1Y3QgcmVnaW9uX2NhY2hlICpuZXds aW5lX2NhY2hlOwpAQCAtNjU2LDcgKzY1Niw3IEBACiAgIGVsc2UKICAgICB7CiAgICAgICBk aXJlY3Rpb24gPSAtMTsKLSAgICAgIGlmICghZW5kKSAKKyAgICAgIGlmICghZW5kKQogCWVu ZCA9IEJFR1YsIGVuZF9ieXRlID0gQkVHVl9CWVRFOwogICAgIH0KICAgaWYgKGVuZF9ieXRl ID09IC0xKQpAQCAtNjg0LDcgKzY4NCw3IEBACiAKICAgICAgICAgLyogSWYgd2UncmUgbG9v a2luZyBmb3IgYSBuZXdsaW5lLCBjb25zdWx0IHRoZSBuZXdsaW5lIGNhY2hlCiAgICAgICAg ICAgIHRvIHNlZSB3aGVyZSB3ZSBjYW4gYXZvaWQgc29tZSBzY2FubmluZy4gICovCi0gICAg ICAgIGlmICh0YXJnZXQgPT0gJ1xuJyAmJiBuZXdsaW5lX2NhY2hlKQorICAgICAgICBpZiAo bmV3bGluZV9jYWNoZSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBwdHJkaWZmX3QgbmV4 dF9jaGFuZ2U7CiAgICAgICAgICAgICBpbW1lZGlhdGVfcXVpdCA9IDA7CkBAIC03MjYsMjkg KzcyNiwyOCBAQAogICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzY2FuX3N0YXJ0ID0g Y3Vyc29yOwogCiAgICAgICAgICAgICAgIC8qIFRoZSBkdW1iIGxvb3AuICAqLwotICAgICAg ICAgICAgICB3aGlsZSAoKmN1cnNvciAhPSB0YXJnZXQgJiYgKytjdXJzb3IgPCBjZWlsaW5n X2FkZHIpCi0gICAgICAgICAgICAgICAgOworCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5sID0g bWVtY2hyIChjdXJzb3IsICdcbicsIGNlaWxpbmdfYWRkciAtIGN1cnNvcik7CiAKICAgICAg ICAgICAgICAgLyogSWYgd2UncmUgbG9va2luZyBmb3IgbmV3bGluZXMsIGNhY2hlIHRoZSBm YWN0IHRoYXQKICAgICAgICAgICAgICAgICAgdGhlIHJlZ2lvbiBmcm9tIHN0YXJ0IHRvIGN1 cnNvciBpcyBmcmVlIG9mIHRoZW0uICovCi0gICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g J1xuJyAmJiBuZXdsaW5lX2NhY2hlKQorICAgICAgICAgICAgICBpZiAobmV3bGluZV9jYWNo ZSkKICAgICAgICAgICAgICAgICBrbm93X3JlZ2lvbl9jYWNoZSAoY3VycmVudF9idWZmZXIs IG5ld2xpbmVfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZ VEVfVE9fQ0hBUiAoc3RhcnRfYnl0ZSArIHNjYW5fc3RhcnQgLSBiYXNlKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV9UT19DSEFSIChzdGFydF9ieXRlICsg Y3Vyc29yIC0gYmFzZSkpOwotCi0gICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5kIHRoZSB0 YXJnZXQgY2hhcmFjdGVyPyAgKi8KLSAgICAgICAgICAgICAgaWYgKGN1cnNvciA8IGNlaWxp bmdfYWRkcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoLS1j b3VudCA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg ICAgaW1tZWRpYXRlX3F1aXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBC WVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyBjdXJzb3IgLSBiYXNlICsgMSk7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGN1cnNvcisrOwotICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV9UT19D SEFSIChzdGFydF9ieXRlICsgKG5sID8gbmwgOiBjZWlsaW5nX2FkZHIpIC0gYmFzZSkpOwor CisgICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5kIHRoZSBuZXdsaW5lPyAgKi8KKyAgICAg ICAgICAgICAgaWYgKCEgbmwpCisJCWJyZWFrOworCisJICAgICAgaWYgKC0tY291bnQgPT0g MCkKKwkJeworCQkgIGltbWVkaWF0ZV9xdWl0ID0gMDsKKwkJICByZXR1cm4gQllURV9UT19D SEFSIChzdGFydF9ieXRlICsgbmwgLSBiYXNlICsgMSk7CisJCX0KKwkgICAgICBjdXJzb3Ig PSBubCArIDE7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICBzdGFydCA9IEJZVEVfVE9f Q0hBUiAoc3RhcnRfYnl0ZSArIGN1cnNvciAtIGJhc2UpOworICAgICAgICAgIHN0YXJ0ID0g QllURV9UT19DSEFSIChzdGFydF9ieXRlICsgY2VpbGluZ19hZGRyIC0gYmFzZSk7CiAgICAg ICAgIH0KICAgICAgIH0KICAgZWxzZQpAQCAtNzYwLDcgKzc1OSw3IEBACiAJcHRyZGlmZl90 IHRlbTsKIAogICAgICAgICAvKiBDb25zdWx0IHRoZSBuZXdsaW5lIGNhY2hlLCBpZiBhcHBy b3ByaWF0ZS4gICovCi0gICAgICAgIGlmICh0YXJnZXQgPT0gJ1xuJyAmJiBuZXdsaW5lX2Nh Y2hlKQorICAgICAgICBpZiAobmV3bGluZV9jYWNoZSkKICAgICAgICAgICB7CiAgICAgICAg ICAgICBwdHJkaWZmX3QgbmV4dF9jaGFuZ2U7CiAgICAgICAgICAgICBpbW1lZGlhdGVfcXVp dCA9IDA7CkBAIC03OTUsMzAgKzc5NCwyOSBAQAogICAgICAgICAgIHdoaWxlIChjdXJzb3Ig Pj0gY2VpbGluZ19hZGRyKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICpzY2FuX3N0YXJ0ID0gY3Vyc29yOwotCi0gICAgICAgICAgICAgIHdoaWxlICgq Y3Vyc29yICE9IHRhcmdldCAmJiAtLWN1cnNvciA+PSBjZWlsaW5nX2FkZHIpCi0gICAgICAg ICAgICAgICAgOworCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5sID0gbWVtcmNociAoY2VpbGlu Z19hZGRyLCAnXG4nLAorCQkJCQkgICBjdXJzb3IgKyAxIC0gY2VpbGluZ19hZGRyKTsKIAog ICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBsb29raW5nIGZvciBuZXdsaW5lcywgY2FjaGUg dGhlIGZhY3QgdGhhdAogICAgICAgICAgICAgICAgICB0aGUgcmVnaW9uIGZyb20gYWZ0ZXIg dGhlIGN1cnNvciB0byBzdGFydCBpcyBmcmVlIG9mIHRoZW0uICAqLwotICAgICAgICAgICAg ICBpZiAodGFyZ2V0ID09ICdcbicgJiYgbmV3bGluZV9jYWNoZSkKKyAgICAgICAgICAgICAg aWYgKG5ld2xpbmVfY2FjaGUpCiAgICAgICAgICAgICAgICAga25vd19yZWdpb25fY2FjaGUg KGN1cnJlbnRfYnVmZmVyLCBuZXdsaW5lX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyBjdXJzb3IgLSBiYXNl KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV9UT19DSEFSIChz dGFydF9ieXRlICsgKG5sID8gbmwgOiBjZWlsaW5nX2FkZHIgLSAxKSAtIGJhc2UpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5 dGUgKyBzY2FuX3N0YXJ0IC0gYmFzZSkpOwogCi0gICAgICAgICAgICAgIC8qIERpZCB3ZSBm aW5kIHRoZSB0YXJnZXQgY2hhcmFjdGVyPyAgKi8KLSAgICAgICAgICAgICAgaWYgKGN1cnNv ciA+PSBjZWlsaW5nX2FkZHIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg ICAgaWYgKCsrY291bnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICAgIGltbWVkaWF0ZV9xdWl0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQllURV9UT19DSEFSIChzdGFydF9ieXRlICsgY3Vyc29yIC0gYmFzZSk7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGN1cnNvci0tOwotICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogRGlkIHdlIGZpbmQgdGhlIG5ld2xp bmU/ICAqLworICAgICAgICAgICAgICBpZiAoISBubCkKKwkJYnJlYWs7CisKKwkgICAgICBp ZiAoKytjb3VudCA+PSAwKQorCQl7CisJCSAgaW1tZWRpYXRlX3F1aXQgPSAwOworCQkgIHJl dHVybiBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyBubCAtIGJhc2UpOworCQl9CisJICAg ICAgY3Vyc29yID0gbmwgLSAxOwogICAgICAgICAgICAgfQogCi0JICBzdGFydCA9IEJZVEVf VE9fQ0hBUiAoc3RhcnRfYnl0ZSArIGN1cnNvciAtIGJhc2UpOworCSAgc3RhcnQgPSBCWVRF X1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyAoY2VpbGluZ19hZGRyIC0gMSkgLSBiYXNlKTsKICAg ICAgICAgfQogICAgICAgfQogCkBAIC04NzQsMjkgKzg3MiwyNSBAQAogCSAgY2VpbGluZyA9 IG1pbiAobGltaXRfYnl0ZSAtIDEsIGNlaWxpbmcpOwogCSAgY2VpbGluZ19hZGRyID0gQllU RV9QT1NfQUREUiAoY2VpbGluZykgKyAxOwogCSAgYmFzZSA9IChjdXJzb3IgPSBCWVRFX1BP U19BRERSIChzdGFydF9ieXRlKSk7Ci0JICB3aGlsZSAoMSkKKworCSAgZG8KIAkgICAgewot CSAgICAgIHdoaWxlICgqY3Vyc29yICE9ICdcbicgJiYgKytjdXJzb3IgIT0gY2VpbGluZ19h ZGRyKQotCQk7Ci0KLQkgICAgICBpZiAoY3Vyc29yICE9IGNlaWxpbmdfYWRkcikKKwkgICAg ICB1bnNpZ25lZCBjaGFyICpubCA9IG1lbWNociAoY3Vyc29yLCAnXG4nLCBjZWlsaW5nX2Fk ZHIgLSBjdXJzb3IpOworCSAgICAgIGlmICghIG5sKQorCQlicmVhazsKKwkgICAgICBpZiAo LS1jb3VudCA9PSAwKQogCQl7Ci0JCSAgaWYgKC0tY291bnQgPT0gMCkKLQkJICAgIHsKLQkJ ICAgICAgaW1tZWRpYXRlX3F1aXQgPSBvbGRfaW1tZWRpYXRlX3F1aXQ7Ci0JCSAgICAgIHN0 YXJ0X2J5dGUgPSBzdGFydF9ieXRlICsgY3Vyc29yIC0gYmFzZSArIDE7Ci0JCSAgICAgIHN0 YXJ0ID0gQllURV9UT19DSEFSIChzdGFydF9ieXRlKTsKLQkJICAgICAgVEVNUF9TRVRfUFRf Qk9USCAoc3RhcnQsIHN0YXJ0X2J5dGUpOwotCQkgICAgICByZXR1cm4gMDsKLQkJICAgIH0K LQkJICBlbHNlCi0JCSAgICBpZiAoKytjdXJzb3IgPT0gY2VpbGluZ19hZGRyKQotCQkgICAg ICBicmVhazsKKwkJICBpbW1lZGlhdGVfcXVpdCA9IG9sZF9pbW1lZGlhdGVfcXVpdDsKKwkJ ICBzdGFydF9ieXRlICs9IG5sIC0gYmFzZSArIDE7CisJCSAgc3RhcnQgPSBCWVRFX1RPX0NI QVIgKHN0YXJ0X2J5dGUpOworCQkgIFRFTVBfU0VUX1BUX0JPVEggKHN0YXJ0LCBzdGFydF9i eXRlKTsKKwkJICByZXR1cm4gMDsKIAkJfQotCSAgICAgIGVsc2UKLQkJYnJlYWs7CisJICAg ICAgY3Vyc29yID0gbmwgKyAxOwogCSAgICB9Ci0JICBzdGFydF9ieXRlICs9IGN1cnNvciAt IGJhc2U7CisJICB3aGlsZSAoY3Vyc29yIDwgY2VpbGluZ19hZGRyKTsKKworCSAgc3RhcnRf Ynl0ZSArPSBjZWlsaW5nX2FkZHIgLSBiYXNlOwogCX0KICAgICB9CiAgIGVsc2UKQEAgLTkw NSwzMSArODk5LDI4IEBACiAJewogCSAgY2VpbGluZyA9IEJVRkZFUl9GTE9PUl9PRiAoc3Rh cnRfYnl0ZSAtIDEpOwogCSAgY2VpbGluZyA9IG1heCAobGltaXRfYnl0ZSwgY2VpbGluZyk7 Ci0JICBjZWlsaW5nX2FkZHIgPSBCWVRFX1BPU19BRERSIChjZWlsaW5nKSAtIDE7CisJICBj ZWlsaW5nX2FkZHIgPSBCWVRFX1BPU19BRERSIChjZWlsaW5nKTsKIAkgIGJhc2UgPSAoY3Vy c29yID0gQllURV9QT1NfQUREUiAoc3RhcnRfYnl0ZSAtIDEpICsgMSk7CiAJICB3aGlsZSAo MSkKIAkgICAgewotCSAgICAgIHdoaWxlICgtLWN1cnNvciAhPSBjZWlsaW5nX2FkZHIgJiYg KmN1cnNvciAhPSAnXG4nKQotCQk7CisJICAgICAgdW5zaWduZWQgY2hhciAqbmwgPSBtZW1y Y2hyIChjZWlsaW5nX2FkZHIsICdcbicsCisJCQkJCSAgIGN1cnNvciAtIGNlaWxpbmdfYWRk cik7CisJICAgICAgaWYgKCEgbmwpCisJCWJyZWFrOwogCi0JICAgICAgaWYgKGN1cnNvciAh PSBjZWlsaW5nX2FkZHIpCisJICAgICAgaWYgKCsrY291bnQgPT0gMCkKIAkJewotCQkgIGlm ICgrK2NvdW50ID09IDApCi0JCSAgICB7Ci0JCSAgICAgIGltbWVkaWF0ZV9xdWl0ID0gb2xk X2ltbWVkaWF0ZV9xdWl0OwotCQkgICAgICAvKiBSZXR1cm4gdGhlIHBvc2l0aW9uIEFGVEVS IHRoZSBtYXRjaCB3ZSBmb3VuZC4gICovCi0JCSAgICAgIHN0YXJ0X2J5dGUgPSBzdGFydF9i eXRlICsgY3Vyc29yIC0gYmFzZSArIDE7Ci0JCSAgICAgIHN0YXJ0ID0gQllURV9UT19DSEFS IChzdGFydF9ieXRlKTsKLQkJICAgICAgVEVNUF9TRVRfUFRfQk9USCAoc3RhcnQsIHN0YXJ0 X2J5dGUpOwotCQkgICAgICByZXR1cm4gMDsKLQkJICAgIH0KKwkJICBpbW1lZGlhdGVfcXVp dCA9IG9sZF9pbW1lZGlhdGVfcXVpdDsKKwkJICAvKiBSZXR1cm4gdGhlIHBvc2l0aW9uIEFG VEVSIHRoZSBtYXRjaCB3ZSBmb3VuZC4gICovCisJCSAgc3RhcnRfYnl0ZSArPSBubCAtIGJh c2UgKyAxOworCQkgIHN0YXJ0ID0gQllURV9UT19DSEFSIChzdGFydF9ieXRlKTsKKwkJICBU RU1QX1NFVF9QVF9CT1RIIChzdGFydCwgc3RhcnRfYnl0ZSk7CisJCSAgcmV0dXJuIDA7CiAJ CX0KLQkgICAgICBlbHNlCi0JCWJyZWFrOworCisJICAgICAgY3Vyc29yID0gbmw7CiAJICAg IH0KLQkgIC8qIEhlcmUgd2UgYWRkIDEgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGxhc3QgZGVj cmVtZW50Ci0JICAgICBvZiBDVVJTT1IsIHdoaWNoIHRvb2sgaXQgcGFzdCB0aGUgdmFsaWQg cmFuZ2UuICAqLwotCSAgc3RhcnRfYnl0ZSArPSBjdXJzb3IgLSBiYXNlICsgMTsKKwkgIHN0 YXJ0X2J5dGUgKz0gY2VpbGluZ19hZGRyIC0gYmFzZTsKIAl9CiAgICAgfQogCkBAIC05NDIs NyArOTMzLDcgQEAKIHB0cmRpZmZfdAogZmluZF9uZXh0X25ld2xpbmVfbm9fcXVpdCAocHRy ZGlmZl90IGZyb20sIHB0cmRpZmZfdCBjbnQpCiB7Ci0gIHJldHVybiBzY2FuX2J1ZmZlciAo J1xuJywgZnJvbSwgMCwgY250LCAocHRyZGlmZl90ICopIDAsIDApOworICByZXR1cm4gc2Nh bl9idWZmZXIgKGZyb20sIDAsIGNudCwgKHB0cmRpZmZfdCAqKSAwLCAwKTsKIH0KIAogLyog TGlrZSBmaW5kX25leHRfbmV3bGluZSwgYnV0IHJldHVybnMgcG9zaXRpb24gYmVmb3JlIHRo ZSBuZXdsaW5lLApAQCAtOTUzLDcgKzk0NCw3IEBACiBmaW5kX2JlZm9yZV9uZXh0X25ld2xp bmUgKHB0cmRpZmZfdCBmcm9tLCBwdHJkaWZmX3QgdG8sIHB0cmRpZmZfdCBjbnQpCiB7CiAg IHB0cmRpZmZfdCBzaG9ydGFnZTsKLSAgcHRyZGlmZl90IHBvcyA9IHNjYW5fYnVmZmVyICgn XG4nLCBmcm9tLCB0bywgY250LCAmc2hvcnRhZ2UsIDEpOworICBwdHJkaWZmX3QgcG9zID0g c2Nhbl9idWZmZXIgKGZyb20sIHRvLCBjbnQsICZzaG9ydGFnZSwgMSk7CiAKICAgaWYgKHNo b3J0YWdlID09IDApCiAgICAgcG9zLS07Cgo= --------------070008010200060001000104--