From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27235 invoked by alias); 30 May 2011 13:34:14 -0000 Received: (qmail 26902 invoked by uid 22791); 30 May 2011 13:34:10 -0000 X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_40,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from ch1ehsobe006.messaging.microsoft.com (HELO CH1EHSOBE004.bigfish.com) (216.32.181.186) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 30 May 2011 13:33:45 +0000 Received: from mail63-ch1-R.bigfish.com (216.32.181.169) by CH1EHSOBE004.bigfish.com (10.43.70.54) with Microsoft SMTP Server id 14.1.225.22; Mon, 30 May 2011 13:33:42 +0000 Received: from mail63-ch1 (localhost.localdomain [127.0.0.1]) by mail63-ch1-R.bigfish.com (Postfix) with ESMTP id B654BEC01D0; Mon, 30 May 2011 13:33:42 +0000 (UTC) X-SpamScore: -13 X-BigFish: VPS-13(zz936eK1443N154dMzz1202hzz8275bh8275dhz32i2a8h668h839h34h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: CIP:220.225.38.51;KIP:(null);UIP:(null);IPVD:NLI;H:kcinpunhjhc02.kpit.com;RD:none;EFVD:NLI Received: from mail63-ch1 (localhost.localdomain [127.0.0.1]) by mail63-ch1 (MessageSwitch) id 1306762422417719_30972; Mon, 30 May 2011 13:33:42 +0000 (UTC) Received: from CH1EHSMHS009.bigfish.com (snatpool1.int.messaging.microsoft.com [10.43.68.252]) by mail63-ch1.bigfish.com (Postfix) with ESMTP id 5E41E1C0804B; Mon, 30 May 2011 13:33:42 +0000 (UTC) Received: from kcinpunhjhc02.kpit.com (220.225.38.51) by CH1EHSMHS009.bigfish.com (10.43.70.9) with Microsoft SMTP Server (TLS) id 14.1.225.22; Mon, 30 May 2011 13:33:40 +0000 Received: from Kcinpunhjcms01.kpit.com ([172.10.16.121]) by kcinpunhjhc02.kpit.com ([172.10.16.124]) with mapi; Mon, 30 May 2011 19:00:55 +0530 From: Sumanth Gundapaneni To: Joseph Myers CC: "gcc-patches@gcc.gnu.org" , "rth@redhat.com" , "Jayant R. Sonar" Date: Mon, 30 May 2011 15:44:00 -0000 Subject: RE: CR16 Port addition Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD1A249C44FA@KCINPUNHJCMS01.kpit.com> References: <371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45@KCINPUNHJCMS01.kpit.com> <371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDF@KCINPUNHJCMS01.kpit.com> In-Reply-To: Content-Type: multipart/mixed; boundary="_002_371569CBCFB2E745B891DBB88B2DFDDD1A249C44FAKCINPUNHJCMS0_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg02343.txt.bz2 --_002_371569CBCFB2E745B891DBB88B2DFDDD1A249C44FAKCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 3379 Hi Joseph and Richard, Thanks for your time in reviewing the CR16 port and once again I am grateful for your valuable suggestions. Please find attached the patch "cr16-gcc.patch" which contains modifications as suggested by Joseph in his previous mail. For your kind information, I am providing the recent posts regarding CR16 patches. Initial post : http://gcc.gnu.org/ml/gcc-patches/2010-12/msg01676.html Second post : http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00803.html Third post : http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00624.html Fourth post : http://gcc.gnu.org/ml/gcc-patches/2011-05/msg01441.html Please review the patch and let me know if there should be any modifications in it. Joseph, please go through my explanation for your comments. >Please remove the remaining top level configure changes from the patch. The top level configure changes have been removed as advised. >Now you seem to have a stray change to the generated file >libstdc++-v3/configure. Again, you can probably just eliminate this The configure changes in libtsdc++-v3 are removed too and you can find the same in the updated patch. >and make the code in unwind-dw2-* use those macros, >instead of having separate copies of the files. A new file unwind-helper.h file is created in libgcc/config/cr16 directory as per your suggestion and defined a few macros in this newly defined file which are getting called from gcc/unwind-dw2.c. Please review the same and do let me know for further modifications, if any. We have identified issues related to exception handling using prints in unwind code and will debug the same to a greater extent in near future with further development of GNU based tools. >Since you first submitted the port, a file contrib/config-list.mk "cr16-elf" is added to config-list.mk file. gcc/ChangeLog: -------------- 2011-05-28 Sumanth G Jayant R Sonar * config.gcc: Add cr16-* support. * doc/extend.texi: Document cr16 extensions. * doc/install.texi: Document cr16 install. * doc/invoke.texi: Document cr16 options. * doc/md.texi: Document cr16 constraints. * config/cr16/cr16.c: New file. * config/cr16/cr16.h: New file. * config/cr16/cr16.md: New file. * config/cr16/cr16.opt: New file. * config/cr16/cr16-libgcc.s: New file. * config/cr16/cr16-protos.h: New file. * config/cr16/divmodhi3.c: New file. * config/cr16/predicates.md: New file. * config/cr16/constraints.md: New file. * config/cr16/t-cr16: New file. libgcc/ChangeLog: ----------------- 2011-05-28 Sumanth G Jayant R Sonar * config.host: Add National Semiconductor CR16 target (cr16-*-*). * config/cr16/crti.S: New file. * config/cr16/crtlibid.S: New file. * config/cr16/crtn.S: New file. * config/cr16/t-cr16: New file. * config/cr16/unwind-helper.h: New file. contrib/ChangeLog: ---------- 2011-05-28 Sumanth G Jayant R Sonar * config-list.mk: Add National Semiconductor CR16 target. Thanks in advance, Sumanth G, PUNE (India). --_002_371569CBCFB2E745B891DBB88B2DFDDD1A249C44FAKCINPUNHJCMS0_ Content-Type: application/octet-stream; name="cr16-gcc.patch" Content-Description: cr16-gcc.patch Content-Disposition: attachment; filename="cr16-gcc.patch"; size=173284; creation-date="Mon, 30 May 2011 18:13:52 GMT"; modification-date="Mon, 30 May 2011 18:22:08 GMT" Content-Transfer-Encoding: base64 Content-length: 234899 LS0tIG9yaWcvY29udHJpYi9jb25maWctbGlzdC5tawkyMDExLTA1LTA1IDA3 OjE3OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2NvbnRyaWIvY29uZmln LWxpc3QubWsJMjAxMS0wNS0zMCAxNzoxNjozNS4wMDAwMDAwMDAgKzA1MzAK QEAgLTE3LDcgKzE3LDcgQEAgTElTVCA9IGFscGhhLWxpbnV4LWdudSBhbHBo YS1mcmVlYnNkNiBhbAogICBhcm0tbGludXgtYW5kcm9pZGVhYmkgYXJtLXVj bGludXhfZWFiaSBhcm0tZWNvcy1lbGYgYXJtLWVhYmkgXAogICBhcm0tc3lt YmlhbmVsZiBhcm0tcnRlbXMgYXJtLWVsZiBhcm0td2luY2UtcGUgYXZyLXJ0 ZW1zIGF2ci1lbGYgXAogICBiZmluLWVsZiBiZmluLXVjbGludXggYmZpbi1s aW51eC11Y2xpYmMgYmZpbi1ydGVtcyBiZmluLW9wZW5ic2QgXAotICBjcmlz LWVsZiBjcmlzLWxpbnV4IGNyaXN2MzItZWxmIGNyaXN2MzItbGludXggZmlk by1lbGYgXAorICBjcjE2LWVsZiBjcmlzLWVsZiBjcmlzLWxpbnV4IGNyaXN2 MzItZWxmIGNyaXN2MzItbGludXggZmlkby1lbGYgXAogICBmcjMwLWVsZiBm cnYtZWxmIGZydi1saW51eCBoODMwMC1lbGYgaDgzMDAtcnRlbXMgaHBwYS1s aW51eC1nbnUgXAogICBocHBhLWxpbnV4LWdudU9QVC1lbmFibGUtc2psai1l eGNlcHRpb25zPXllcyBocHBhNjQtbGludXgtZ251IFwKICAgaHBwYTIuMC1o cHV4MTAuMSBocHBhNjQtaHB1eDExLjMgXAotLS0gb3JpZy9nY2MvY29uZmln L2NyMTYvY29uc3RyYWludHMubWQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWlu dHMubWQJMjAxMS0wNS0zMCAxNzoxNjozNS4wMDAwMDAwMDAgKzA1MzAKQEAg LTAsMCArMSw4MSBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2Ny aXB0aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQgYnkg S1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIKKzs7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgR0ND IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkK Kzs7IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAorCis7 OyBDb25zdHJhaW50cworOzsgUmVnaXN0ZXIgY29uc3RyYWludHMKKyhkZWZp bmVfcmVnaXN0ZXJfY29uc3RyYWludCAiYiIgIk5PU1BfUkVHUyIKKyAgIkBu byBzcCByZWdpc3RlcnMiKQorCisoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFp bnQgImMiICJTSE9SVF9SRUdTIgorICAiQHNob3J0IHJlZ2lzdGVycyIpCisK KyhkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiZCIgIkxPTkdfUkVHUyIK KyAgIkBsb25nIHJlZ2lzdGVycyIpCisKKzs7IEludGVnZXIgY29uc3RyYWlu dHMuCisoZGVmaW5lX2NvbnN0cmFpbnQgIkkiCisgICJBIHNpZ25lZCA0LWJp dCBpbW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQi KQorICAgICAgIChtYXRjaF90ZXN0ICJTSUdORURfSU5UX0ZJVFNfTl9CSVRT IChpdmFsLCA0KSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJKIgorICAi QSBzaWduZWQgNS1iaXQgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29k ZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiU0lHTkVEX0lO VF9GSVRTX05fQklUUyAoaXZhbCwgNSkiKSkpCisKKyhkZWZpbmVfY29uc3Ry YWludCAiSyIKKyAgIkEgc2lnbmVkIDYtYml0IGltbWVkaWF0ZS4iCisgIChh bmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rl c3QgIlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGl2YWwsIDYpIikpKQorCiso ZGVmaW5lX2NvbnN0cmFpbnQgIkwiCisgICJBIHVuc2lnbmVkIDQtYml0IGlt bWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisg ICAgICAgKG1hdGNoX3Rlc3QgIlVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAo aXZhbCwgNCkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiTSIKKyAgIkEg dW5zaWduZWQgYW5kIGN1c3RvbWl6ZWQgIDQtYml0IGltbWVkaWF0ZS4iCisg IChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNo X3Rlc3QgIihJTl9SQU5HRV9QIChpdmFsLCAwLCAxNSkgJiYgKChpdmFsICE9 IDkpIHx8IChpdmFsICE9IDExKSkpICAiKSkpCisKKyhkZWZpbmVfY29uc3Ry YWludCAiTiIKKyAgIkEgc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuIgorICAo YW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgIChtYXRjaF90 ZXN0ICJJTl9SQU5HRV9QIChpdmFsLCAtMzI3NjgsIDMyNzY3KSIpKSkKKwor KGRlZmluZV9jb25zdHJhaW50ICJPIgorICAiQSB1bnNpZ25lZCAyMC1iaXQg aW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikK KyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwgMCwgMTA0 ODU3NSkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiUSIKKyAgIkEgc2hp ZnQgUUkgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwg MCwgNykiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiUiIKKyAgIkEgc2hp ZnQgSEkgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwg MCwgMTUpIikpKQorCisoZGVmaW5lX2NvbnN0cmFpbnQgIlMiCisgICJBIHNo aWZ0IFNJIGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFX1AgKGl2YWws IDAsIDMxKSIpKSkKLS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYuYwkx OTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2dj Yy9jb25maWcvY3IxNi9jcjE2LmMJMjAxMS0wNS0zMCAxNzoxNjozNS4wMDAw MDAwMDAgKzA1MzAKQEAgLTAsMCArMSwyMjEyIEBACisvKiBPdXRwdXQgcm91 dGluZXMgZm9yIENSMTYgcHJvY2Vzc29yLgorICAgQ29weXJpZ2h0IChDKSAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJp YnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisg IAorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAor ICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgi CisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAidG0uaCIKKyNp bmNsdWRlICJydGwuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAi dG1fcC5oIgorI2luY2x1ZGUgInJlZ3MuaCIKKyNpbmNsdWRlICJoYXJkLXJl Zy1zZXQuaCIKKyNpbmNsdWRlICJpbnNuLWNvbmZpZy5oIgorI2luY2x1ZGUg ImNvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJvdXRwdXQuaCIKKyNpbmNsdWRl ICJpbnNuLWNvZGVzLmgiCisjaW5jbHVkZSAiaW5zbi1hdHRyLmgiCisjaW5j bHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRlICJleGNlcHQuaCIKKyNpbmNsdWRl ICJmdW5jdGlvbi5oIgorI2luY2x1ZGUgInJlY29nLmgiCisjaW5jbHVkZSAi ZXhwci5oIgorI2luY2x1ZGUgIm9wdGFicy5oIgorI2luY2x1ZGUgImRpYWdu b3N0aWMtY29yZS5oIgorI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisjaW5j bHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAidGFyZ2V0LWRlZi5oIgorI2lu Y2x1ZGUgImRmLmgiCisKKy8qIERlZmluaXRpb25zLiAgKi8KKworLyogTWF4 aW11bSBudW1iZXIgb2YgcmVnaXN0ZXIgdXNlZCBmb3IgcGFzc2luZyBwYXJh bWV0ZXJzLiAgKi8KKyNkZWZpbmUgTUFYX1JFR19GT1JfUEFTU0lOR19BUkdT ICA2CisKKy8qIE1pbmltdW0gbnVtYmVyIHJlZ2lzdGVyIHVzZWQgZm9yIHBh c3NpbmcgcGFyYW1ldGVycy4gICovCisjZGVmaW5lIE1JTl9SRUdfRk9SX1BB U1NJTkdfQVJHUyAgMgorCisvKiBUaGUgbWF4aW11bSBjb3VudCBvZiB3b3Jk cyBzdXBwb3J0ZWQgaW4gdGhlIGFzc2VtYmx5IG9mIHRoZSBhcmNoaXRlY3R1 cmUgaW4KKyAgIGEgcHVzaC9wb3AgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmlu ZSBNQVhfQ09VTlQgIDgKKworLyogUHJlZGljYXRlIGlzIHRydWUgaWYgdGhl IGN1cnJlbnQgZnVuY3Rpb24gaXMgYSAnbm9yZXR1cm4nIGZ1bmN0aW9uLCAK KyAgIGkuZS4gaXQgaXMgcXVhbGlmaWVkIGFzIHZvbGF0aWxlLiAgKi8KKyNk ZWZpbmUgRlVOQ19JU19OT1JFVFVSTl9QKGRlY2wpIChUUkVFX1RISVNfVk9M QVRJTEUgKGRlY2wpKQorCisvKiBQcmVkaWNhdGUgdGhhdCBob2xkcyB3aGVu IHdlIG5lZWQgdG8gc2F2ZSByZWdpc3RlcnMgZXZlbiBmb3IgJ25vcmV0dXJu JworICAgZnVuY3Rpb25zLCB0byBhY2NvbW9kYXRlIGZvciB1bndpbmRpbmcu ICAqLworI2RlZmluZSBNVVNUX1NBVkVfUkVHU19QKCkgXAorICAoZmxhZ191 bndpbmRfdGFibGVzIHx8IChmbGFnX2V4Y2VwdGlvbnMgJiYgIVVJX1NKTEop KQorCisvKiBOb256ZXJvIGlmIHRoZSBydHggWCBpcyBhIHNpZ25lZCBjb25z dCBpbnQgb2YgbiBiaXRzLiAgKi8KKyNkZWZpbmUgUlRYX1NJR05FRF9JTlRf RklUU19OX0JJVFMoWCxuKSAgICAgICAgICAgICAgICBcCisgICgoR0VUX0NP REUgKFgpID09IENPTlNUX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgJiYgU0lHTkVEX0lOVF9GSVRTX05fQklUUyAoSU5UVkFMIChYKSwg bikpID8gMSA6IDApCisKKy8qIE5vbnplcm8gaWYgdGhlIHJ0eCBYIGlzIGFu IHVuc2lnbmVkIGNvbnN0IGludCBvZiBuIGJpdHMuICAqLworI2RlZmluZSBS VFhfVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKFgsIG4pICAgICAgICAgICAg ICAgXAorICAoKEdFVF9DT0RFIChYKSA9PSBDT05TVF9JTlQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgJiYgVU5TSUdORURfSU5UX0ZJVFNf Tl9CSVRTIChJTlRWQUwgKFgpLCBuKSkgPyAxIDogMCkKKworLyogU3RydWN0 dXJlIGZvciBzdGFjayBjb21wdXRhdGlvbnMuICAqLworCisvKiB2YXJpYWJs ZSBkZWZpbml0aW9ucyBpbiB0aGUgc3RydXR1cmUKKyAgIGFyZ3Nfc2l6ZSAg ICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24gdGhlIHN0YWNr IGZvciBsb2NhbCAKKwkJCSB2YXJpYWJsZXMKKworICAgcmVnX3NpemUJCSBO dW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24gdGhlIHN0YWNrIGZvciAKKwkJCSBu b24tc2NyYXRjaCByZWdpc3RlcnMKKworICAgdG90YWxfc2l6ZSAJCSBUaGUg c3VtIG9mIDIgc2l6ZXM6IGxvY2FscyB2YXJzIGFuZCBwYWRkaW5nIGJ5dGUg CisJCQkgZm9yIHNhdmluZyB0aGUgcmVnaXN0ZXJzLiBVc2VkIGluIGV4cGFu ZF9wcm9sb2d1ZSgpIAorCQkJIGFuZCBleHBhbmRfZXBpbG9ndWUoKQorCisg ICBsYXN0X3JlZ190b19zYXZlICAgICAgV2lsbCBob2xkIHRoZSBudW1iZXIg b2YgdGhlIGxhc3QgcmVnaXN0ZXIgdGhlIAorCQkJIHByb2xvZ3VlIHNhdmVz LCAtMSBpZiBubyByZWdpc3RlciBpcyBzYXZlZAorCisgICBzYXZlX3JlZ3Nb MTZdCSBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgaXMgYSByZWdpc3RlciBu dW1iZXIuIAorCQkJIE1hcmsgMSBmb3IgcmVnaXN0ZXJzIHRoYXQgbmVlZCB0 byBiZSBzYXZlZAorCisgICBudW1fcmVncwkJIE51bWJlciBvZiByZWdpc3Rl cnMgc2F2ZWQKKworICAgaW5pdGlhbGl6ZWQJCSBOb24temVybyBpZiBmcmFt ZSBzaXplIGFscmVhZHkgY2FsY3VsYXRlZCwgbm90IAorCQkJIHVzZWQgeWV0 CisKKyAgIGZ1bmN0aW9uX21ha2VzX2NhbGxzICBEb2VzIHRoZSBmdW5jdGlv biBtYWtlIGNhbGxzID8gbm90IHVzZWQgeWV0LiAgKi8KKworc3RydWN0IGNy MTZfZnJhbWVfaW5mbworeworICB1bnNpZ25lZCBsb25nIHZhcl9zaXplOwor ICB1bnNpZ25lZCBsb25nIGFyZ3Nfc2l6ZTsKKyAgdW5zaWduZWQgaW50ICBy ZWdfc2l6ZTsKKyAgdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworICBsb25n ICAgICAgICAgIGxhc3RfcmVnX3RvX3NhdmU7CisgIGxvbmcgICAgICAgICAg c2F2ZV9yZWdzW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisgIGludCAgICAg ICAgICAgbnVtX3JlZ3M7CisgIGludCAgICAgICAgICAgaW5pdGlhbGl6ZWQ7 CisgIGludCAgICAgICAgICAgZnVuY3Rpb25fbWFrZXNfY2FsbHM7Cit9Owor CisvKiBDdXJyZW50IGZyYW1lIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgYnkg Y3IxNl9jb21wdXRlX2ZyYW1lX3NpemUuICAqLworc3RhdGljIHN0cnVjdCBj cjE2X2ZyYW1lX2luZm8gY3VycmVudF9mcmFtZV9pbmZvOworCisvKiBTdGF0 aWMgVmFyaWFibGVzLiAgKi8KKworLyogRGF0YSBtb2RlbCB0aGF0IHdhcyBz dXBwbGllZCBieSB1c2VyIHZpYSBjb21tYW5kIGxpbmUgb3B0aW9uCisgICBU aGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiBpbiBjYXNlIG9mIGludmFsaWQgY29t YmluYXRpb24KKyAgIG9mIGNvcmUgYW5kIGRhdGEgbW9kZWwgb3B0aW9ucyBh cmUgc3VwcGxpZWQuICAqLworc3RhdGljIGVudW0gZGF0YV9tb2RlbF90eXBl IGRhdGFfbW9kZWwgPSBETV9ERUZBVUxUOworCisvKiBUQVJHRVRNIEZ1bmN0 aW9uIFByb3RvdHlwZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zICAqLwor c3RhdGljIHJ0eCBjcjE2X3N0cnVjdF92YWx1ZV9ydHggKHRyZWUgZm50eXBl IEFUVFJJQlVURV9VTlVTRUQsCisJCQkJICBpbnQgaW5jb21pbmcgQVRUUklC VVRFX1VOVVNFRCk7CitzdGF0aWMgYm9vbCBjcjE2X3JldHVybl9pbl9tZW1v cnkgKGNvbnN0X3RyZWUgdHlwZSwgY29uc3RfdHJlZSBmbnR5cGUgQVRUUklC VVRFX1VOVVNFRCk7CitzdGF0aWMgYm9vbCBjcjE2X2ZyYW1lX3BvaW50ZXJf cmVxdWlyZWQgKHZvaWQpOworc3RhdGljIGJvb2wgY3IxNl9jYW5fZWxpbWlu YXRlIChjb25zdCBpbnQsIGNvbnN0IGludCk7CitzdGF0aWMgcnR4IGNyMTZf bGVnaXRpbWl6ZV9hZGRyZXNzIChydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21v ZGUpOworc3RhdGljIGVudW0gbWFjaGluZV9tb2RlIGNyMTZfdW53aW5kX3dv cmRfbW9kZSAodm9pZCk7CitzdGF0aWMgdm9pZCBjcjE2X2NvbmRpdGlvbmFs X3JlZ2lzdGVyX3VzYWdlICh2b2lkKTsKK3N0YXRpYyB2b2lkIGNyMTZfb3Zl cnJpZGVfb3B0aW9ucyAodm9pZCk7CitzdGF0aWMgYm9vbCBjcjE2X2NsYXNz X2xpa2VseV9zcGlsbGVkX3AgKHJlZ19jbGFzc190KTsKK3N0YXRpYyBpbnQg IGNyMTZfcmV0dXJuX3BvcHNfYXJncyAodHJlZSwgdHJlZSwgaW50KTsKK3N0 YXRpYyBydHggY3IxNl9mdW5jdGlvbl9hcmcgKENVTVVMQVRJVkVfQVJHUyAq LCBlbnVtIG1hY2hpbmVfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3RfdHJlZSwgYm9vbCk7CitzdGF0aWMgdm9pZCBjcjE2X2Z1 bmN0aW9uX2FyZ19hZHZhbmNlIChDVU1VTEFUSVZFX0FSR1MgKiwgZW51bSBt YWNoaW5lX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0X3RyZWUsIGJvb2wpOworc3RhdGljIGJvb2wgY3IxNl9s ZWdpdGltYXRlX2NvbnN0YW50X3AgICAoZW51bSBtYWNoaW5lX21vZGUsIHJ0 eCk7CitzdGF0aWMgcnR4IGNyMTZfZnVuY3Rpb25fdmFsdWUgKGNvbnN0X3Ry ZWUsIGNvbnN0X3RyZWUsIGJvb2wpOworc3RhdGljIHJ0eCBjcjE2X2xpYmNh bGxfdmFsdWUgKGVudW0gbWFjaGluZV9tb2RlLCBjb25zdF9ydHgpOworc3Rh dGljIGJvb2wgY3IxNl9mdW5jdGlvbl92YWx1ZV9yZWdub19wIChjb25zdCB1 bnNpZ25lZCBpbnQpOworc3RhdGljIGJvb2wgY3IxNl9sZWdpdGltYXRlX2Fk ZHJlc3NfcCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgYm9vbCk7CitzdGF0 aWMgdm9pZCBjcjE2X3ByaW50X29wZXJhbmQgKEZJTEUgKiwgcnR4LCBpbnQp Oworc3RhdGljIHZvaWQgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJ TEUgKiwgcnR4KTsKK3N0YXRpYyBpbnQgY3IxNl9hZGRyZXNzX2Nvc3QgKHJ0 eCwgYm9vbCk7CitzdGF0aWMgaW50IGNyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0 IChlbnVtIG1hY2hpbmVfbW9kZSwgcmVnX2NsYXNzX3QsIHJlZ19jbGFzc190 KTsKK3N0YXRpYyBpbnQgY3IxNl9tZW1vcnlfbW92ZV9jb3N0IChlbnVtIG1h Y2hpbmVfbW9kZSwgcmVnX2NsYXNzX3QsIGJvb2wpOworCisvKiBTdGFjayBs YXlvdXQgYW5kIGNhbGxpbmcgY29udmVudGlvbnMuICAqLworI3VuZGVmICBU QVJHRVRfU1RSVUNUX1ZBTFVFX1JUWAorI2RlZmluZSBUQVJHRVRfU1RSVUNU X1ZBTFVFX1JUWCAgICAgCWNyMTZfc3RydWN0X3ZhbHVlX3J0eAorI3VuZGVm ICBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQorI2RlZmluZSBUQVJHRVRfUkVU VVJOX0lOX01FTU9SWSAgICAgCWNyMTZfcmV0dXJuX2luX21lbW9yeQorCisK Ky8qIFRhcmdldC1zcGVjaWZpYyB1c2VzIG9mICdfX2F0dHJpYnV0ZV9fJy4g ICovCisjdW5kZWYgIFRBUkdFVF9BVFRSSUJVVEVfVEFCTEUKKyNkZWZpbmUg VEFSR0VUX0FUVFJJQlVURV9UQUJMRSAJCWNyMTZfYXR0cmlidXRlX3RhYmxl CisjdW5kZWYgVEFSR0VUX05BUlJPV19WT0xBVElMRV9CSVRGSUVMRAorI2Rl ZmluZSBUQVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJRUxEIGhvb2tfYm9v bF92b2lkX2ZhbHNlCisKKy8qIEVIIHJlbGF0ZWQuICAqLworI3VuZGVmIFRB UkdFVF9VTldJTkRfV09SRF9NT0RFCisjZGVmaW5lIFRBUkdFVF9VTldJTkRf V09SRF9NT0RFCQljcjE2X3Vud2luZF93b3JkX21vZGUKKworLyogT3ZlcnJp ZGUgT3B0aW9ucy4gICovCisjdW5kZWYgVEFSR0VUX09QVElPTl9PVkVSUklE RQorI2RlZmluZSBUQVJHRVRfT1BUSU9OX09WRVJSSURFICAJY3IxNl9vdmVy cmlkZV9vcHRpb25zIAorCisvKiBDb25kaXRpb25hbCByZWdpc3RlciB1c3Vh Z2UuICAqLworI3VuZGVmIFRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9V U0FHRSAKKyNkZWZpbmUgVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VT QUdFIGNyMTZfY29uZGl0aW9uYWxfcmVnaXN0ZXJfdXNhZ2UKKworLyogQ29u dHJvbGxpbmcgcmVnaXN0ZXIgc3BpbGxzLiAgKi8KKyN1bmRlZiBUQVJHRVRf Q0xBU1NfTElLRUxZX1NQSUxMRURfUAorI2RlZmluZSBUQVJHRVRfQ0xBU1Nf TElLRUxZX1NQSUxMRURfUCBjcjE2X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AK KworLyogUGFzc2luZyBmdW5jdGlvbiBhcmd1bWVudHMuICAqLworI3VuZGVm IFRBUkdFVF9GVU5DVElPTl9BUkcKKyNkZWZpbmUgVEFSR0VUX0ZVTkNUSU9O X0FSRyBjcjE2X2Z1bmN0aW9uX2FyZworI3VuZGVmIFRBUkdFVF9GVU5DVElP Tl9BUkdfQURWQU5DRQorI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fQVJHX0FE VkFOQ0UgY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5jZQorI3VuZGVmIFRBUkdF VF9SRVRVUk5fUE9QU19BUkdTCisjZGVmaW5lIFRBUkdFVF9SRVRVUk5fUE9Q U19BUkdTIGNyMTZfcmV0dXJuX3BvcHNfYXJncworCisvKiBJbml0aWFsaXpl IHRoZSBHQ0MgdGFyZ2V0IHN0cnVjdHVyZS4gICovCisjdW5kZWYgVEFSR0VU X0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQKKyNkZWZpbmUgVEFSR0VUX0ZSQU1F X1BPSU5URVJfUkVRVUlSRUQJY3IxNl9mcmFtZV9wb2ludGVyX3JlcXVpcmVk CisjdW5kZWYgVEFSR0VUX0NBTl9FTElNSU5BVEUKKyNkZWZpbmUgVEFSR0VU X0NBTl9FTElNSU5BVEUgCQljcjE2X2Nhbl9lbGltaW5hdGUKKyN1bmRlZiBU QVJHRVRfTEVHSVRJTUlaRV9BRERSRVNTCisjZGVmaW5lIFRBUkdFVF9MRUdJ VElNSVpFX0FERFJFU1MgCWNyMTZfbGVnaXRpbWl6ZV9hZGRyZXNzCisjdW5k ZWYgVEFSR0VUX0xFR0lUSU1BVEVfQ09OU1RBTlRfUAorI2RlZmluZSBUQVJH RVRfTEVHSVRJTUFURV9DT05TVEFOVF9QICAgIGNyMTZfbGVnaXRpbWF0ZV9j b25zdGFudF9wCisjdW5kZWYgVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVTU19Q CisjZGVmaW5lIFRBUkdFVF9MRUdJVElNQVRFX0FERFJFU1NfUCAgICAgY3Ix Nl9sZWdpdGltYXRlX2FkZHJlc3NfcAorCisvKiBSZXR1cm5pbmcgZnVuY3Rp b24gdmFsdWUuICAqLworI3VuZGVmIFRBUkdFVF9GVU5DVElPTl9WQUxVRQor I2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fVkFMVUUgY3IxNl9mdW5jdGlvbl92 YWx1ZQorI3VuZGVmIFRBUkdFVF9MSUJDQUxMX1ZBTFVFCisjZGVmaW5lIFRB UkdFVF9MSUJDQUxMX1ZBTFVFIGNyMTZfbGliY2FsbF92YWx1ZQorI3VuZGVm IFRBUkdFVF9GVU5DVElPTl9WQUxVRV9SRUdOT19QCisjZGVmaW5lIFRBUkdF VF9GVU5DVElPTl9WQUxVRV9SRUdOT19QIGNyMTZfZnVuY3Rpb25fdmFsdWVf cmVnbm9fcAorCisvKiBwcmludGluZyB0aGUgdmFsdWVzLiAgKi8KKyN1bmRl ZiBUQVJHRVRfUFJJTlRfT1BFUkFORAorI2RlZmluZSBUQVJHRVRfUFJJTlRf T1BFUkFORCBjcjE2X3ByaW50X29wZXJhbmQKKyN1bmRlZiBUQVJHRVRfUFJJ TlRfT1BFUkFORF9BRERSRVNTCisjZGVmaW5lIFRBUkdFVF9QUklOVF9PUEVS QU5EX0FERFJFU1MgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MKKworLyog UmVsYXRpdmUgY29zdHMgb2Ygb3BlcmF0aW9ucy4gICovCisjdW5kZWYgIFRB UkdFVF9BRERSRVNTX0NPU1QKKyNkZWZpbmUgVEFSR0VUX0FERFJFU1NfQ09T VCAJCWNyMTZfYWRkcmVzc19jb3N0CisjdW5kZWYgVEFSR0VUX1JFR0lTVEVS X01PVkVfQ09TVAorI2RlZmluZSBUQVJHRVRfUkVHSVNURVJfTU9WRV9DT1NU IGNyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0CisjdW5kZWYgVEFSR0VUX01FTU9S WV9NT1ZFX0NPU1QKKyNkZWZpbmUgVEFSR0VUX01FTU9SWV9NT1ZFX0NPU1Qg Y3IxNl9tZW1vcnlfbW92ZV9jb3N0CisKKy8qIFRhYmxlIG9mIG1hY2hpbmUg YXR0cmlidXRlcy4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0 ZV9zcGVjIGNyMTZfYXR0cmlidXRlX3RhYmxlW10gPSB7CisgIC8qIElTUnMg aGF2ZSBzcGVjaWFsIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSByZXF1aXJlbWVu dHMuICAqLworICAvKiB7IG5hbWUsIG1pbl9sZW4sIG1heF9sZW4sIGRlY2xf cmVxLCB0eXBlX3JlcSwgZm5fdHlwZV9yZXEsIGhhbmRsZXIsCisgICAgICAg YWZmZWN0c190eXBlX2lkZW50aXR5IH0uICAqLworICB7ImludGVycnVwdCIs IDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBOVUxMLCBmYWxzZX0sCisgIHtO VUxMLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBmYWxzZX0K K307CisKKy8qIFRBUkdFVF9BU01fVU5BTElHTkVEX3h4X09QIGdlbmVyYXRl cyAuP2J5dGUgZGlyZWN0aXZlCisgICAuP2J5dGUgZGlyZWN0aXZlIGFsb25n IHdpdGggQGMgaXMgbm90IHVuZGVyc3Rvb2QgYnkgYXNzZW1ibGVyLgorICAg VGhlcmVmb3JlLCBtYWtlIGFsbCBUQVJHRVRfQVNNX1VOQUxJR05FRF94eF9P UCBzYW1lCisgICBhcyBUQVJHRVRfQVNNX0FMSUdORURfeHhfT1AuICAqLwor I3VuZGVmIFRBUkdFVF9BU01fVU5BTElHTkVEX0hJX09QCisjZGVmaW5lIFRB UkdFVF9BU01fVU5BTElHTkVEX0hJX09QIAlUQVJHRVRfQVNNX0FMSUdORURf SElfT1AKKyN1bmRlZiBUQVJHRVRfQVNNX1VOQUxJR05FRF9TSV9PUAorI2Rl ZmluZSBUQVJHRVRfQVNNX1VOQUxJR05FRF9TSV9PUCAJVEFSR0VUX0FTTV9B TElHTkVEX1NJX09QCisjdW5kZWYgVEFSR0VUX0FTTV9VTkFMSUdORURfRElf T1AKKyNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURfRElfT1AgCVRBUkdF VF9BU01fQUxJR05FRF9ESV9PUAorCisvKiBUYXJnZXQgaG9vayBpbXBsZW1l bnRhdGlvbnMuICAqLworCisvKiBJbXBsZW1lbnRzIGhvb2sgVEFSR0VUX1JF VFVSTl9JTl9NRU1PUlkuICAqLworc3RhdGljIGJvb2wKK2NyMTZfcmV0dXJu X2luX21lbW9yeSAoY29uc3RfdHJlZSB0eXBlLCBjb25zdF90cmVlIGZudHlw ZSBBVFRSSUJVVEVfVU5VU0VEKQoreworICBpZiAoVFlQRV9NT0RFICh0eXBl KSA9PSBCTEttb2RlKQorICAgIHsKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6 ZSA9IGludF9zaXplX2luX2J5dGVzICh0eXBlKTsKKyAgICAgIHJldHVybiAo KHNpemUgPT0gLTEpIHx8IChzaXplID4gOCkpOworICAgIH0KKyAgZWxzZQor ICAgIHJldHVybiBmYWxzZTsKK30KKworLyogSW1wbGVtZW50IFRBUkdFVF9D TEFTU19MSUtFTFlfU1BJTExFRF9QLiAgKi8KK3N0YXRpYyBib29sCitjcjE2 X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AgKHJlZ19jbGFzc190IHJjbGFzcykK K3sKKyAgaWYgKChyY2xhc3MpID09IFNIT1JUX1JFR1MgfHwgKHJjbGFzcykg PT0gRE9VQkxFX0JBU0VfUkVHUyAKKyAgICAgICB8fCAocmNsYXNzKSA9PSBM T05HX1JFR1MgfHwgKHJjbGFzcykgPT0gR0VORVJBTF9SRUdTKQorICAgIHJl dHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu dAorY3IxNl9yZXR1cm5fcG9wc19hcmdzICh0cmVlIGZ1bmRlY2wgQVRUUklC VVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICB0cmVlIGZ1bnR5 cGUgQVRUUklCVVRFX1VOVVNFRCwgCisJCSAgICAgIGludCBzaXplIEFUVFJJ QlVURV9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBSZXR1cm5z IHRydWUgaWYgZGF0YSBtb2RlbCBzZWxlY3RlZCB2aWEgY29tbWFuZCBsaW5l IG9wdGlvbgorICAgaXMgc2FtZSBhcyBmdW5jdGlvbiBhcmd1bWVudC4gICov Citib29sCitjcjE2X2lzX2RhdGFfbW9kZWwgKGVudW0gZGF0YV9tb2RlbF90 eXBlIG1vZGVsKQoreworICByZXR1cm4gKG1vZGVsID09IGRhdGFfbW9kZWwp OworfQorCisvKiBQYXJzZSByZWxldmFudCBvcHRpb25zIGFuZCBvdmVycmlk ZS4gICovCitzdGF0aWMgdm9pZAorY3IxNl9vdmVycmlkZV9vcHRpb25zICh2 b2lkKQoreworICAvKiBEaXNhYmxlIC1mZGVsZXRlLW51bGwtcG9pbnRlci1j aGVja3Mgb3B0aW9uIGZvciBDUjE2IHRhcmdldC4KKyAgICAgUHJvZ3JhbXMg d2hpY2ggcmVseSBvbiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIF9ub3Rf IGhhbHRpbmcgdGhlIAorICAgICBwcm9ncmFtIG1heSBub3Qgd29yayBwcm9w ZXJseSB3aXRoIHRoaXMgb3B0aW9uLiBTbyBkaXNhYmxlIHRoaXMgCisgICAg IG9wdGlvbi4gICovCisgIGZsYWdfZGVsZXRlX251bGxfcG9pbnRlcl9jaGVj a3MgPSAwOworCisgIC8qIElmIC1mcGljIG9wdGlvbiwgZGF0YV9tb2RlbCA9 PSBETV9GQVIuICAqLworICBpZiAoZmxhZ19waWMgPT0gTkVBUl9QSUMpCisg ICAgeworICAgICAgZGF0YV9tb2RlbCA9IERNX0ZBUjsKKyAgICB9CisKKyAg LyogVGhlIG9ubHkgb3B0aW9uIHdlIHdhbnQgdG8gZXhhbWluZSBpcyBkYXRh IG1vZGVsIG9wdGlvbi4gICovCisgIGlmIChjcjE2X2RhdGFfbW9kZWwpCisg ICAgeworICAgICAgaWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibWVk aXVtIikgPT0gMCkKKwlkYXRhX21vZGVsID0gRE1fREVGQVVMVDsKKyAgICAg IGVsc2UgaWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibmVhciIpID09 IDApCisJZGF0YV9tb2RlbCA9IERNX05FQVI7CisgICAgICBlbHNlIGlmIChz dHJjbXAgKGNyMTZfZGF0YV9tb2RlbCwgImZhciIpID09IDApCisJeworCSAg aWYgKFRBUkdFVF9DUjE2Q1ApCisJICAgIGRhdGFfbW9kZWwgPSBETV9GQVI7 CisJICBlbHNlCisJICAgIGVycm9yICgiZGF0YS1tb2RlbD1mYXIgbm90IHZh bGlkIGZvciBjcjE2YyBhcmNoaXRlY3R1cmUiKTsKKwl9CisgICAgICBlbHNl CisJZXJyb3IgKCJpbnZhbGlkIGRhdGEgbW9kZWwgb3B0aW9uIC1tZGF0YS1t b2RlbD0lcyIsIGNyMTZfZGF0YV9tb2RlbCk7CisgICAgfQorICBlbHNlCisg ICAgZGF0YV9tb2RlbCA9IERNX0RFRkFVTFQ7CisKKworfQorCisvKiBJbXBs ZW1lbnRzIHRoZSBtYWNybyAgVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVS X1VTQUdFLiAgKi8KK3N0YXRpYyB2b2lkCitjcjE2X2NvbmRpdGlvbmFsX3Jl Z2lzdGVyX3VzYWdlICh2b2lkKQoreworICBpZiAoZmxhZ19waWMpCisgICAg eworICAgICAgZml4ZWRfcmVnc1sxMl0gPSBjYWxsX3VzZWRfcmVnc1sxMl0g PSAxOworICAgIH0KK30KKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5n IGNvbnZlbnRpb25zIHJvdXRpbmVzLiAgKi8KKworLyogUmV0dXJuIG5vbnpl cm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgaXMg YW4gaW50ZXJydXB0CisgICBmdW5jdGlvbiBhcyBzcGVjaWZpZWQgYnkgdGhl ICJpbnRlcnJ1cHQiIGF0dHJpYnV0ZS4gICovCitpbnQKK2NyMTZfaW50ZXJy dXB0X2Z1bmN0aW9uX3AgKHZvaWQpCit7CisgIHRyZWUgYXR0cmlidXRlczsK KworICBhdHRyaWJ1dGVzID0gVFlQRV9BVFRSSUJVVEVTIChUUkVFX1RZUEUg KGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpOworICByZXR1cm4gKGxvb2t1cF9h dHRyaWJ1dGUgKCJpbnRlcnJ1cHQiLCBhdHRyaWJ1dGVzKSAhPSBOVUxMX1RS RUUpOworfQorCisvKiBDb21wdXRlIHZhbHVlcyBmb3IgdGhlIGFycmF5IGN1 cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3MgYW5kIHRoZSB2YXJpYWJsZSAK KyAgIGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZS4gVGhlIGluZGV4IG9m IGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3MgCisgICBpcyBudW1iZXJz IG9mIHJlZ2lzdGVyLCBlYWNoIHdpbGwgZ2V0IDEgaWYgd2UgbmVlZCB0byBz YXZlIGl0IGluIHRoZSAKKyAgIGN1cnJlbnQgZnVuY3Rpb24sIDAgaWYgbm90 LiBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgaXMgdGhlIHRvdGFsIHN1 bSAKKyAgIG9mIHRoZSByZWdpc3RlcnMgYmVpbmcgc2F2ZWQuICAqLworc3Rh dGljIHZvaWQKK2NyMTZfY29tcHV0ZV9zYXZlX3JlZ3MgKHZvaWQpCit7Cisg IHVuc2lnbmVkIGludCByZWdubzsKKworICAvKiBJbml0aWFsaXplIGhlcmUg c28gaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgbm8tcmV0dXJuIGl0IHdpbGwg YmUgLTEuICAqLworICBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZSA9IC0xOworCisgIC8qIEluaXRpYWxpemUgdGhlIG51bWJlciBvZiBi eXRlcyB0byBiZSBzYXZlZC4gKi8KKyAgY3VycmVudF9mcmFtZV9pbmZvLnJl Z19zaXplID0gMDsKKworICAvKiBObyBuZWVkIHRvIHNhdmUgYW55IHJlZ2lz dGVycyBpZiB0aGUgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4gICovCisgIGlm IChGVU5DX0lTX05PUkVUVVJOX1AgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkg JiYgIU1VU1RfU0FWRV9SRUdTX1AgKCkpCisgICAgcmV0dXJuOworCisgIGZv ciAocmVnbm8gPSAwOyByZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsg cmVnbm8rKykKKyAgICB7CisgICAgICBpZiAoZml4ZWRfcmVnc1tyZWdub10p CisJeworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10g PSAwOworCSAgY29udGludWU7CisJfQorCisgICAgICAvKiBJZiB0aGlzIHJl ZyBpcyB1c2VkIGFuZCBub3QgY2FsbC11c2VkIChleGNlcHQgUkEpLCBzYXZl IGl0LiAgKi8KKyAgICAgIGlmIChjcjE2X2ludGVycnVwdF9mdW5jdGlvbl9w ICgpKQorCXsKKwkgIGlmICghY3VycmVudF9mdW5jdGlvbl9pc19sZWFmICYm IGNhbGxfdXNlZF9yZWdzW3JlZ25vXSkKKwkgICAgLyogVGhpcyBpcyBhIHZv bGF0aWxlIHJlZyBpbiBhIG5vbi1sZWFmIGludGVycnVwdCByb3V0aW5lIC0g c2F2ZSAKKwkgICAgICAgaXQgZm9yIHRoZSBzYWtlIG9mIGl0cyBzb25zLiAg Ki8KKwkgICAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10g PSAxOworCSAgZWxzZSBpZiAoZGZfcmVnc19ldmVyX2xpdmVfcCAocmVnbm8p KQorCSAgICAvKiBUaGlzIHJlZyBpcyB1c2VkIC0gc2F2ZSBpdC4gICovCisJ ICAgIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbcmVnbm9dID0gMTsK KwkgIGVsc2UKKwkgICAgLyogVGhpcyByZWcgaXMgbm90IHVzZWQsIGFuZCBp cyBub3QgYSB2b2xhdGlsZSAtIGRvbid0IHNhdmUuICAqLworCSAgICBjdXJy ZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDA7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIC8qIElmIHRoaXMgcmVnIGlzIHVzZWQgYW5kIG5v dCBjYWxsLXVzZWQgKGV4Y2VwdCBSQSksIHNhdmUgaXQuICAqLworCSAgaWYg KGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKQorCSAgICAgICYmICghY2Fs bF91c2VkX3JlZ3NbcmVnbm9dIHx8IHJlZ25vID09IFJFVFVSTl9BRERSRVNT X1JFR05VTSkpCisJICAgIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3Nb cmVnbm9dID0gMTsKKwkgIGVsc2UKKwkgICAgY3VycmVudF9mcmFtZV9pbmZv LnNhdmVfcmVnc1tyZWdub10gPSAwOworCX0KKyAgICB9CisKKyAgLyogU2F2 ZSByZWdpc3RlcnMgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBtb2Rp ZnkgdGhlbS4gICovCisgIGlmIChjcnRsLT5jYWxsc19laF9yZXR1cm4pCisg ICAgeworICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgIGZvciAoaSA9 IDA7OyArK2kpCisJeworCSAgcmVnbm8gPSBFSF9SRVRVUk5fREFUQV9SRUdO TyAoaSk7CisJICBpZiAoSU5WQUxJRF9SRUdOVU0gPT0gcmVnbm8pCisJICAg IGJyZWFrOworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdu b10gPSAxOworCX0KKyAgICB9CisKKyAgZm9yIChyZWdubyA9IDA7IHJlZ25v IDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQorICAgIGlmIChj dXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9PSAxKQorICAg ICAgeworCWN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlID0g cmVnbm87CisJaWYgKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNU RVIpCisJICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgKz0gQ1IxNl9V TklUU19QRVJfRFdPUkQ7CisJZWxzZQorCSAgY3VycmVudF9mcmFtZV9pbmZv LnJlZ19zaXplICs9IFVOSVRTX1BFUl9XT1JEOworICAgICAgfQorfQorCisv KiBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBhcmVhIGFuZCB0aGUg c2l6ZSB0byBiZSBhZGp1c3RlZCBieSB0aGUKKyAgIHByb2xvZ3VlIGFuZCBl cGlsb2d1ZS4gICovCitzdGF0aWMgdm9pZAorY3IxNl9jb21wdXRlX2ZyYW1l ICh2b2lkKQoreworICAvKiBGb3IgYWxpZ25pbmcgdGhlIGxvY2FsIHZhcmlh Ymxlcy4gICovCisgIGludCBzdGFja19hbGlnbm1lbnQgPSBTVEFDS19CT1VO REFSWSAvIEJJVFNfUEVSX1VOSVQ7CisgIGludCBwYWRkaW5nX2xvY2FsczsK KworICAvKiBQYWRkaW5nIG5lZWRlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRo ZSBmcmFtZS4gICovCisgIGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSA9 IGdldF9mcmFtZV9zaXplICgpOworCisgIC8qIEFsaWduIHRvIHRoZSBzdGFj ayBhbGlnbm1lbnQuICAqLworICBwYWRkaW5nX2xvY2FscyA9IGN1cnJlbnRf ZnJhbWVfaW5mby52YXJfc2l6ZSAlIHN0YWNrX2FsaWdubWVudDsKKyAgaWYg KHBhZGRpbmdfbG9jYWxzKQorICAgIHBhZGRpbmdfbG9jYWxzID0gc3RhY2tf YWxpZ25tZW50IC0gcGFkZGluZ19sb2NhbHM7CisKKyAgY3VycmVudF9mcmFt ZV9pbmZvLnZhcl9zaXplICs9IHBhZGRpbmdfbG9jYWxzOworICBjdXJyZW50 X2ZyYW1lX2luZm8udG90YWxfc2l6ZSA9IGN1cnJlbnRfZnJhbWVfaW5mby52 YXJfc2l6ZSAKKwkJCSAgICsgKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUwor CQkJICAgID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCk7Cit9CisK Ky8qIEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRJQUxfRUxJTUlOQVRJT05f T0ZGU0VULCByZXR1cm4gdGhlIE9GRlNFVC4gICovCitpbnQKK2NyMTZfaW5p dGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8pCit7 CisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVkIHRvIHVzZSBjdXJy ZW50X2ZyYW1lX2luZm8ucmVnX3NpemUuICAqLworICBjcjE2X2NvbXB1dGVf c2F2ZV9yZWdzICgpOworCisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBu ZWVkIHRvIHVzZSBjdXJyZW50X2ZyYW1lX2luZm8udmFyX3NpemUuICAqLwor ICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7CisKKyAgaWYgKCgoZnJvbSkgPT0g RlJBTUVfUE9JTlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5U RVJfUkVHTlVNKSkKKyAgICByZXR1cm4gKEFDQ1VNVUxBVEVfT1VUR09JTkdf QVJHUyA/IGNydGwtPm91dGdvaW5nX2FyZ3Nfc2l6ZSA6IDApOworICBlbHNl IGlmICgoKGZyb20pID09IEFSR19QT0lOVEVSX1JFR05VTSkgJiYgKCh0bykg PT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0pKQorICAgIHJldHVybiAoY3VycmVu dF9mcmFtZV9pbmZvLnJlZ19zaXplICsgY3VycmVudF9mcmFtZV9pbmZvLnZh cl9zaXplKTsKKyAgZWxzZSBpZiAoKChmcm9tKSA9PSBBUkdfUE9JTlRFUl9S RUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5URVJfUkVHTlVNKSkKKyAg ICByZXR1cm4gKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSArIGN1cnJl bnRfZnJhbWVfaW5mby52YXJfc2l6ZSAKKwkgICAgKyAoQUNDVU1VTEFURV9P VVRHT0lOR19BUkdTID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCkp OworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworfQorCisvKiBS ZWdpc3RlciBVc2FnZS4gICovCisKKy8qIFJldHVybiB0aGUgY2xhc3MgbnVt YmVyIG9mIHRoZSBzbWFsbGVzdCBjbGFzcyBjb250YWluaW5nIHJlZyBudW1i ZXIgUkVHTk8uCisgICBUaGlzIGNvdWxkIGJlIGEgY29uZGl0aW9uYWwgZXhw cmVzc2lvbiBvciBjb3VsZCBpbmRleCBhbiBhcnJheS4gICovCitlbnVtIHJl Z19jbGFzcworY3IxNl9yZWdub19yZWdfY2xhc3MgKGludCByZWdubykKK3sK KyAgaWYgKChyZWdubyA+PSAwKSAmJiAocmVnbm8gPCBDUjE2X0ZJUlNUX0RX T1JEX1JFR0lTVEVSKSkKKyAgICByZXR1cm4gU0hPUlRfUkVHUzsKKworICBp ZiAoKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICYmIChy ZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpCisgICAgcmV0dXJuIExP TkdfUkVHUzsKKworICByZXR1cm4gTk9fUkVHUzsKK30KKworLyogUmV0dXJu IDEgaWYgaGFyZCByZWdpc3RlciBSRUdOTyBjYW4gaG9sZCBhIHZhbHVlIG9m IG1hY2hpbmUtbW9kZSBNT0RFLiAgKi8KK2ludAorY3IxNl9oYXJkX3JlZ25v X21vZGVfb2sgKGludCByZWdubywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkK K3sKKyAgaWYgKChHRVRfTU9ERV9TSVpFIChtb2RlKSA+PSA0KSAmJiAocmVn bm8gPT0gMTEpKQorICAgICAgICByZXR1cm4gMDsKKyAKKyAgaWYgKG1vZGUg PT0gREltb2RlIHx8IG1vZGUgPT0gREZtb2RlKQorICAgIHsKKyAgICAgIGlm ICgocmVnbm8gPiA4KSB8fCAocmVnbm8gJiAxKSkKKwlyZXR1cm4gMDsKKyAg ICAgIHJldHVybiAxOworICAgIH0KKworICBpZiAoKFRBUkdFVF9JTlQzMikK KyAgICAgICYmICgocmVnbm8gPj0gMTIpICYmIChHRVRfTU9ERV9TSVpFICht b2RlKSA8IDQgKSkpCisgICAgIHJldHVybiAwOworCisgIC8qIENDIGNhbiBv bmx5IGhvbGQgQ0Ntb2RlIHZhbHVlcy4gICovCisgIGlmIChHRVRfTU9ERV9D TEFTUyAobW9kZSkgPT0gTU9ERV9DQykKKyAgICByZXR1cm4gMDsKKyAgcmV0 dXJuIDE7Cit9CisKKy8qIFJldHVybnMgcmVnaXN0ZXIgbnVtYmVyIGZvciBm dW5jdGlvbiByZXR1cm4gdmFsdWUuKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50CitjcjE2X3JldF9yZWdpc3RlciAodm9pZCkKK3sKKyAgcmV0dXJu IDA7Cit9CisKKy8qIEltcGxlbWVudHMgaG9vayBUQVJHRVRfU1RSVUNUX1ZB TFVFX1JUWC4gICovCitzdGF0aWMgcnR4CitjcjE2X3N0cnVjdF92YWx1ZV9y dHggKHRyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAg ICAgICAgICAgICAgIGludCBpbmNvbWluZyBBVFRSSUJVVEVfVU5VU0VEKQor eworICByZXR1cm4gZ2VuX3J0eF9SRUcgKFBtb2RlLCBjcjE2X3JldF9yZWdp c3RlciAoKSk7Cit9CisKKy8qIFJldHVybmluZyBmdW5jdGlvbiB2YWx1ZS4g ICovCisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgVEFSR0VUX0ZVTkNUSU9O X1ZBTFVFX1JFR05PX1AuICAqLworc3RhdGljIGJvb2wKK2NyMTZfZnVuY3Rp b25fdmFsdWVfcmVnbm9fcCAoY29uc3QgdW5zaWduZWQgaW50IHJlZ25vKQor eworICByZXR1cm4gKHJlZ25vID09IGNyMTZfcmV0X3JlZ2lzdGVyICgpKTsK K30KKworLyogQ3JlYXRlIGFuIFJUWCByZXByZXNlbnRpbmcgdGhlIHBsYWNl IHdoZXJlIGEKKyAgIGxpYnJhcnkgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVl IG9mIG1vZGUgTU9ERS4gICovCitzdGF0aWMgcnR4CitjcjE2X2xpYmNhbGxf dmFsdWUgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisgICAgICAgICAgICAg ICAgICAgY29uc3RfcnR4IGZ1bmMgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg cmV0dXJuIGdlbl9ydHhfUkVHIChtb2RlLCBjcjE2X3JldF9yZWdpc3RlciAo KSk7Cit9CisKKy8qIENyZWF0ZSBhbiBSVFggcmVwcmVzZW50aW5nIHRoZSBw bGFjZSB3aGVyZSBhCisgICBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2Yg ZGF0YSB0eXBlIFZBTFRZUEUuICAqLworc3RhdGljIHJ0eAorY3IxNl9mdW5j dGlvbl92YWx1ZSAoY29uc3RfdHJlZSB0eXBlLAorICAgICAgICAgICAgICAg ICAgICBjb25zdF90cmVlIGZuX2RlY2xfb3JfdHlwZSBBVFRSSUJVVEVfVU5V U0VELAorICAgICAgICAgICAgICAgICAgICBib29sIG91dGdvaW5nIEFUVFJJ QlVURV9VTlVTRUQpCit7CisgIHJldHVybiBnZW5fcnR4X1JFRyAoVFlQRV9N T0RFKHR5cGUpLCBjcjE2X3JldF9yZWdpc3RlciAoKSk7Cit9CisKKy8qIFBh c3NpbmcgZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KKworLyogSWYgZW5vdWdo IHBhcmFtIHJlZ3MgYXJlIGF2YWlsYWJsZSBmb3IgcGFzc2luZyB0aGUgcGFy YW0gb2YgdHlwZSBUWVBFIHJldHVybgorICAgdGhlIG51bWJlciBvZiByZWdp c3RlcnMgbmVlZGVkIGVsc2UgMC4gICovCitzdGF0aWMgaW50Citlbm91Z2hf cmVnc19mb3JfcGFyYW0gKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgY29uc3Rf dHJlZSB0eXBlLAorCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkK K3sKKyAgaW50IHR5cGVfc2l6ZTsKKyAgaW50IHJlbWFpbmluZ19zaXplOwor CisgIGlmIChtb2RlICE9IEJMS21vZGUpCisgICAgdHlwZV9zaXplID0gR0VU X01PREVfQklUU0laRSAobW9kZSk7CisgIGVsc2UKKyAgICB0eXBlX3NpemUg PSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkgKiBCSVRTX1BFUl9VTklUOwor CisgIHJlbWFpbmluZ19zaXplID0gQklUU19QRVJfV09SRCAqIChNQVhfUkVH X0ZPUl9QQVNTSU5HX0FSR1MKKwkJCQkgICAgLSAoTUlOX1JFR19GT1JfUEFT U0lOR19BUkdTICsgY3VtLT5pbnRzKSArCisJCQkJICAgIDEpOworCisgIC8q IEFueSB2YXJpYWJsZSB3aGljaCBpcyB0b28gYmlnIHRvIHBhc3MgaW4gdHdv IHJlZ2lzdGVycywgd2lsbCBwYXNzIG9uCisgICAgIHN0YWNrLiAgKi8KKyAg aWYgKChyZW1haW5pbmdfc2l6ZSA+PSB0eXBlX3NpemUpICYmICh0eXBlX3Np emUgPD0gMiAqIEJJVFNfUEVSX1dPUkQpKQorICAgIHJldHVybiAodHlwZV9z aXplICsgQklUU19QRVJfV09SRCAtIDEpIC8gQklUU19QRVJfV09SRDsKKwor ICByZXR1cm4gMDsKK30KKworLyogSW1wbGVtZW50cyB0aGUgbWFjcm8gRlVO Q1RJT05fQVJHIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KK3N0YXRpYyBydHgK K2NyMTZfZnVuY3Rpb25fYXJnIChDVU1VTEFUSVZFX0FSR1MgKiBjdW0sIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCSAgIGNvbnN0X3RyZWUgdHlwZSwg Ym9vbCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQoreworICBjdW0tPmxhc3Rf cGFybV9pbl9yZWcgPSAwOworCisgIC8qIGZ1bmN0aW9uX2FyZyAoKSBpcyBj YWxsZWQgd2l0aCB0aGlzIHR5cGUganVzdCBhZnRlciBhbGwgdGhlIGFyZ3Mg aGF2ZSAKKyAgICAgaGFkIHRoZWlyIHJlZ2lzdGVycyBhc3NpZ25lZC4gVGhl IHJ0eCB0aGF0IGZ1bmN0aW9uX2FyZyByZXR1cm5zIGZyb20gCisgICAgIHRo aXMgdHlwZSBpcyBzdXBwb3NlZCB0byBwYXNzIHRvICdnZW5fY2FsbCcgYnV0 IGN1cnJlbnRseSBpdCBpcyBub3QgCisgICAgIGltcGxlbWVudGVkIChzZWUg bWFjcm8gR0VOX0NBTEwpLiAgKi8KKyAgaWYgKHR5cGUgPT0gdm9pZF90eXBl X25vZGUpCisgICAgcmV0dXJuIE5VTExfUlRYOworCisgIGlmICh0YXJnZXRt LmNhbGxzLm11c3RfcGFzc19pbl9zdGFjayAobW9kZSwgdHlwZSkgfHwgKGN1 bS0+aW50cyA8IDApKQorICAgIHJldHVybiBOVUxMX1JUWDsKKworICBpZiAo bW9kZSA9PSBCTEttb2RlKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSBzdHJ1 Y3R1cmVzIHRoYXQgbmVlZCBwYWRkaW5nIGJ5dGVzIGF0IHRoZSBlbmQgdG8g cGFzcyB0byBhCisgICAgICAgICBmdW5jdGlvbiBpbiByZWdpc3RlcnMuICAq LworICAgICAgaWYgKGVub3VnaF9yZWdzX2Zvcl9wYXJhbSAoY3VtLCB0eXBl LCBtb2RlKSAhPSAwKQorCXsKKwkgIGN1bS0+bGFzdF9wYXJtX2luX3JlZyA9 IDE7CisJICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIE1JTl9SRUdfRk9S X1BBU1NJTkdfQVJHUyArIGN1bS0+aW50cyk7CisJfQorICAgIH0KKworICBp ZiAoKE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+aW50cykgPiBN QVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MpCisgICAgcmV0dXJuIE5VTExfUlRY OworICBlbHNlCisgICAgeworICAgICAgaWYgKGVub3VnaF9yZWdzX2Zvcl9w YXJhbSAoY3VtLCB0eXBlLCBtb2RlKSAhPSAwKQorCXsKKwkgIGN1bS0+bGFz dF9wYXJtX2luX3JlZyA9IDE7CisJICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1v ZGUsIE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+aW50cyk7CisJ fQorICAgIH0KKworICByZXR1cm4gTlVMTF9SVFg7Cit9CisKKy8qIEltcGxl bWVudHMgdGhlIG1hY3JvIElOSVRfQ1VNVUxBVElWRV9BUkdTIGRlZmluZWQg aW4gY3IxNi5oLiAgKi8KK3ZvaWQKK2NyMTZfaW5pdF9jdW11bGF0aXZlX2Fy Z3MgKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgdHJlZSBmbnR5cGUsCisJCQkg ICBydHggbGliZnVuYyBBVFRSSUJVVEVfVU5VU0VEKQoreworICB0cmVlIHBh cmFtLCBuZXh0X3BhcmFtOworCisgIGN1bS0+aW50cyA9IDA7CisKKyAgLyog RGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHZhcmlhYmxlIGFyZ3Vt ZW50cy4gIFRoaXMgaXMgaW5kaWNhdGVkIGJ5CisgICAgIHRoZSBsYXN0IGFy Z3VtZW50IGJlaW5nICd2b2lkX3R5cGVfbW9kZScgaWYgdGhlcmUgYXJlIG5v IHZhcmlhYmxlCisgICAgIGFyZ3VtZW50cy4gIENoYW5nZSBoZXJlIGZvciBh IGRpZmZlcmVudCB2YXJhcmcuICAqLworICBmb3IgKHBhcmFtID0gKGZudHlw ZSkgPyBUWVBFX0FSR19UWVBFUyAoZm50eXBlKSA6IDA7CisgICAgICAgcGFy YW0gIT0gKHRyZWUpIDA7IHBhcmFtID0gbmV4dF9wYXJhbSkKKyAgICB7Cisg ICAgICBuZXh0X3BhcmFtID0gVFJFRV9DSEFJTiAocGFyYW0pOworICAgICAg aWYgKChuZXh0X3BhcmFtID09ICh0cmVlKSAwKSAmJiAoVFJFRV9WQUxVRSAo cGFyYW0pICE9IHZvaWRfdHlwZV9ub2RlKSkKKwl7CisJICBjdW0tPmludHMg PSAtMTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorfQorCisvKiBJbXBsZW1l bnRzIHRoZSBtYWNybyBGVU5DVElPTl9BUkdfQURWQU5DRSBkZWZpbmVkIGlu IGNyMTYuaC4gICovCitzdGF0aWMgdm9pZAorY3IxNl9mdW5jdGlvbl9hcmdf YWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICogY3VtLCBlbnVtIG1hY2hpbmVf bW9kZSBtb2RlLAorCQkJICAgY29uc3RfdHJlZSB0eXBlLCBib29sIG5hbWVk IEFUVFJJQlVURV9VTlVTRUQpCit7CisgIC8qIGwgaG9sZHMgdGhlIG51bWJl ciBvZiByZWdpc3RlcnMgcmVxdWlyZWQuICAqLworICBpbnQgbCA9IEdFVF9N T0RFX0JJVFNJWkUgKG1vZGUpIC8gQklUU19QRVJfV09SRDsKKworICAvKiBJ ZiB0aGUgcGFyYW1ldGVyIGlzbid0IHBhc3NlZCBvbiBhIHJlZ2lzdGVyIGRv bid0IGFkdmFuY2UgY3VtLiAgKi8KKyAgaWYgKCFjdW0tPmxhc3RfcGFybV9p bl9yZWcpCisgICAgcmV0dXJuOworCisgIGlmICh0YXJnZXRtLmNhbGxzLm11 c3RfcGFzc19pbl9zdGFjayAobW9kZSwgdHlwZSkgfHwgKGN1bS0+aW50cyA8 IDApKQorICAgIHJldHVybjsKKworICBpZiAoKG1vZGUgPT0gU0ltb2RlKSB8 fCAobW9kZSA9PSBISW1vZGUpCisgICAgICB8fCAobW9kZSA9PSBRSW1vZGUp IHx8IChtb2RlID09IERJbW9kZSkpCisgICAgeworICAgICAgaWYgKGwgPD0g MSkKKwljdW0tPmludHMgKz0gMTsKKyAgICAgIGVsc2UKKwljdW0tPmludHMg Kz0gbDsKKyAgICB9CisgIGVsc2UgaWYgKChtb2RlID09IFNGbW9kZSkgfHwg KG1vZGUgPT0gREZtb2RlKSkKKyAgICBjdW0tPmludHMgKz0gbDsKKyAgZWxz ZSBpZiAoKG1vZGUpID09IEJMS21vZGUpCisgICAgeworICAgICAgaWYgKChs ID0gZW5vdWdoX3JlZ3NfZm9yX3BhcmFtIChjdW0sIHR5cGUsIG1vZGUpKSAh PSAwKQorCWN1bS0+aW50cyArPSBsOworICAgIH0KKyAgcmV0dXJuOworfQor CisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElPTl9BUkdfUkVHTk9f UCBkZWZpbmVkIGluIGNyMTYuaC4KKyAgIFJldHVybiBub256ZXJvIGlmIE4g aXMgYSByZWdpc3RlciB1c2VkIGZvciBwYXNzaW5nIHBhcmFtZXRlcnMuICAq LworaW50CitjcjE2X2Z1bmN0aW9uX2FyZ19yZWdub19wIChpbnQgbikKK3sK KyAgcmV0dXJuICgobiA8PSBNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MpICYm IChuID49IE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUykpOworfQorCisvKiBB ZGRyZXNzaW5nIG1vZGVzLiAKKyAgIEZvbGxvd2luZyBzZXQgb2YgZnVuY3Rp b24gaW1wbGVtZW50IHRoZSBtYWNybyBHT19JRl9MRUdJVElNQVRFX0FERFJF U1MKKyAgIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KKworLyogSGVscGVyIGZ1 bmN0aW9uIHRvIGNoZWNrIGlmIGlzIGEgdmFsaWQgYmFzZSByZWdpc3RlciB0 aGF0IGNhbgorICAgaG9sZCBhZGRyZXNzLiAgKi8KK3N0YXRpYyBpbnQKK2Ny MTZfYWRkcl9yZWdfcCAocnR4IGFkZHJfcmVnKQoreworICBydHggcmVnOwor CisgIGlmIChSRUdfUCAoYWRkcl9yZWcpKQorICAgIHJlZyA9IGFkZHJfcmVn OworICBlbHNlIGlmICgoR0VUX0NPREUgKGFkZHJfcmVnKSA9PSBTVUJSRUcp CisJICAgJiYgUkVHX1AgKFNVQlJFR19SRUcgKGFkZHJfcmVnKSkKKwkgICAm JiAoR0VUX01PREVfU0laRSAoR0VUX01PREUgKFNVQlJFR19SRUcgKGFkZHJf cmVnKSkpCisJICAgICAgIDw9IFVOSVRTX1BFUl9XT1JEKSkKKyAgICByZWcg PSBTVUJSRUdfUkVHIChhZGRyX3JlZyk7CisgIGVsc2UKKyAgICByZXR1cm4g RkFMU0U7CisKKyAgaWYgKEdFVF9NT0RFIChyZWcpICE9IFBtb2RlKQorICAg IHJldHVybiBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyogSGVs cGVyIGZ1bmN0aW9uczogQ3JlYXRlZCBzcGVjaWZpY2FsbHkgZm9yIGRlY29t cG9zaW5nIG9wZXJhbmQgb2YgQ09OU1QKKyAgIFJlY3Vyc2l2ZWx5IGxvb2sg aW50byBleHByZXNzaW9uIHggZm9yIGNvZGUgb3IgZGF0YSBzeW1ib2wuCisg ICBUaGUgZnVuY3Rpb24gZXhwZWN0cyB0aGUgZXhwcmVzc2lvbiB0byBjb250 YWluIGNvbWJpbmF0aW9uIG9mIAorICAgU1lNQk9MX1JFRiwgQ09OU1RfSU5U LCAoUExVUyBvciBNSU5VUykKKyAgIExBQkVMX1JFRiwgQ09OU1RfSU5ULCAo UExVUyBvciBNSU5VUykKKyAgIFNZTUJPTF9SRUYKKyAgIExBQkVMX1JFRgor ICAgQWxsIG90aGVyIGNvbWJpbmF0aW9ucyB3aWxsIHJlc3VsdCBpbiBjb2Rl ID0gLTEgYW5kIGRhdGEgPSBJTExFR0FMX0RNCisgICBjb2RlIGRhdGEKKyAg IC0xICAgSUxMRUdBTF9ETSAgIFRoZSBleHByZXNzaW9uIGRpZCBub3QgY29u dGFpbiBTWU1CT0xfUkVGIG9yIExBQkVMX1JFRgorICAgIDAgICBETV9GQVIg ICAgICAgU1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdhcyBmYXIgZGF0 YSByZWZlcmVuY2UuIAorICAgIDAgICBETV9ERUZBVUxUICAgU1lNQk9MX1JF RiB3YXMgZm91bmQgYW5kIGl0IHdhcyBtZWRpdW0gZGF0YSByZWZlcmVuY2Uu IAorICAgIDEgICBJTExFR0FMX0RNICAgTEFCRUxfUkVGIHdhcyBmb3VuZC4g CisgICAgMiAgIElMTEVHQUxfRE0gICBTWU1CT0xfUkVGIHdhcyBmb3VuZCBh bmQgaXQgd2FzIGZ1bmN0aW9uIHJlZmVyZW5jZS4gICovCit2b2lkCitjcjE2 X2RlY29tcG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwgZW51bSBkYXRh X21vZGVsX3R5cGUgKmRhdGEsCisJCSAgICAgIGJvb2wgdHJlYXRfYXNfY29u c3QpCit7CisgICpjb2RlID0gLTE7CisgICpkYXRhID0gSUxMRUdBTF9ETTsK KyAgc3dpdGNoIChHRVRfQ09ERSAoeCkpCisgICAgeworICAgIGNhc2UgU1lN Qk9MX1JFRjoKKyAgICAgICpjb2RlID0gU1lNQk9MX1JFRl9GVU5DVElPTl9Q ICh4KSA/IDIgOiAwOworICAgICAgLyogMiBpbmRpY2F0ZXMgZnVuYyBzeW0u ICAqLworICAgICAgaWYgKCpjb2RlID09IDApCisJeworCSAgaWYgKENSMTZf VEFSR0VUX0RBVEFfTkVBUikKKwkgICAgKmRhdGEgPSBETV9ERUZBVUxUOwor CSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0pCisJICAgICpk YXRhID0gRE1fRkFSOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9G QVIpCisJICAgIHsKKwkgICAgICBpZiAodHJlYXRfYXNfY29uc3QpCisJCS8q IFRoaXMgd2lsbCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIAorCQkgICB0 aGUgcXVhbGlmaWVyLiBUaGlzIGNhbGwgaXMgKG1heSBiZSkKKwkJICAgbWFk ZSBieSBjcjE2X3ByaW50X29wZXJhbmRfYWRkcmVzcy4gICovCisJCSpkYXRh ID0gRE1fRkFSOworCSAgICAgIGVsc2UKKwkJLyogVGhpcyBjYWxsIGlzICht YXkgYmUpIG1hZGUgYnkgCisJCSAgIGNyMTZfbGVnaXRpbWF0ZV9hZGRyZXNz X3AuICAqLworCQkqZGF0YSA9IElMTEVHQUxfRE07CisJICAgIH0KKwl9Cisg ICAgICByZXR1cm47CisKKyAgICBjYXNlIExBQkVMX1JFRjoKKyAgICAgIC8q IDEgLSBpbmRpY2F0ZXMgbm9uLWZ1bmN0aW9uIHN5bWJvbC4gICovCisgICAg ICAqY29kZSA9IDE7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlIFBMVVM6 CisgICAgY2FzZSBNSU5VUzoKKyAgICAgIC8qIExvb2sgaW50byB0aGUgdHJl ZSBub2Rlcy4gICovCisgICAgICBpZiAoR0VUX0NPREUgKFhFWFAgKHgsIDAp KSA9PSBDT05TVF9JTlQpCisJY3IxNl9kZWNvbXBvc2VfY29uc3QgKFhFWFAg KHgsIDEpLCBjb2RlLCBkYXRhLCB0cmVhdF9hc19jb25zdCk7CisgICAgICBl bHNlIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IENPTlNUX0lOVCkK KwljcjE2X2RlY29tcG9zZV9jb25zdCAoWEVYUCAoeCwgMCksIGNvZGUsIGRh dGEsIHRyZWF0X2FzX2NvbnN0KTsKKyAgICAgIHJldHVybjsKKyAgICBkZWZh dWx0OgorICAgICAgcmV0dXJuOworICAgIH0KK30KKworLyogRGVjb21wb3Nl IEFkZHJlc3MKKyAgIFRoaXMgZnVuY3Rpb24gZGVjb21wb3NlcyB0aGUgYWRk cmVzcyByZXR1cm5zIHRoZSB0eXBlIG9mIGFkZHJlc3MKKyAgIGFzIGRlZmlu ZWQgaW4gZW51bSBjcjE2X2FkZHJ0eXBlLiAgSXQgYWxzbyBmaWxscyB0aGUg cGFyYW1ldGVyICpvdXQuCisgICBUaGUgZGVjb21wb3NlZCBhZGRyZXNzIGNh biBiZSB1c2VkIGZvciB0d28gcHVycG9zZXMuICBPbmUgdG8gCisgICBjaGVj ayBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBhbmQgc2Vjb25kIHRvIHByaW50 IHRoZSBhZGRyZXNzCisgICBvcGVyYW5kLgorCisgICBGb2xsb3dpbmcgdGFi bGVzIGxpc3QgdmFsaWQgYWRkcmVzcyBzdXBwb3J0ZWQgaW4gQ1IxNkMvQysg YXJjaGl0ZWN0dXJlcy4KKyAgIExlZ2VuZDogCisgICBhTiA6IEFic291bHRl IGFkZHJlc3MgTi1iaXQgYWRkcmVzcworICAgUiAgOiBPbmUgMTYtYml0IHJl Z2lzdGVyCisgICBSUCA6IENvbnNlY3V0aXZlIHR3byAxNi1iaXQgcmVnaXN0 ZXJzIG9yIG9uZSAzMi1iaXQgcmVnaXN0ZXIKKyAgIEkgIDogT25lIDMyLWJp dCByZWdpc3RlcgorICAgZGlzcE4gOiBTaWduZWQgZGlzcGxhY2VtZW50IG9m IE4tYml0cworCisgICAtLS0tQ29kZSBhZGRyZXNzZXMtLS0tCisgICBCcmFu Y2ggb3BlcmFuZHM6CisgICBkaXNwOSAgICAgICAgOiBDUjE2X0FCU09MVVRF ICAgICAgIChkaXNwKQorICAgZGlzcDE3ICAgICAgIDogQ1IxNl9BQlNPTFVU RSAgICAgICAoZGlzcCkKKyAgIGRpc3AyNSAgICAgICA6IENSMTZfQUJTT0xV VEUgICAgICAgKGRpc3ApCisgICBSUCArIGRpc3AyNSAgOiBDUjE2X1JFR1Bf UkVMICAgICAgIChiYXNlLCBkaXNwKQorCisgICBKdW1wIG9wZXJhbmRzOgor ICAgUlAgICAgICAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAoYmFzZSwg ZGlzcD0wKQorICAgYTI0ICAgICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAg ICAoZGlzcCkKKworICAgLS0tLURhdGEgYWRkcmVzc2VzLS0tLQorICAgYTIw ICAgICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkgICAgICAg ICAgICAgICAgbmVhciAoMU0pCisgICBhMjQgICAgICAgICAgOiBDUjE2X0FC U09MVVRFICAgICAgIChkaXNwKSAgICAgICAgICAgICAgICBtZWRpdW0gICgx Nk0pCisgICBSICArIGQyMCAgICAgOiBDUjE2X1JFR19SRUwgICAgICAgIChi YXNlLCAgZGlzcCkgICAgICAgICBuZWFyICgxTSs2NEspCisgICBSUCArIGQ0 ICAgICAgOiBDUjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCAgZGlzcCkgICAg ICAgICBmYXIgICg0RykKKyAgIFJQICsgZDE2ICAgICA6IENSMTZfUkVHUF9S RUwgICAgICAgKGJhc2UsICBkaXNwKSAgICAgICAgIGZhciAgKDRHKQorICAg UlAgKyBkMjAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAoYmFzZSwgIGRp c3ApICAgICAgICAgZmFyICAoNEcpCisgICBJICAgICAgICAgICAgOiAqKiog VmFsaWQgYnV0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCisgICBJICAr IGEyMCAgICAgOiAqKiogVmFsaWQgYnV0IHBvcnQgZG9lcyBub3Qgc3VwcG9y dCB0aGlzCisgICBJICArIFJQICsgZDE0OiBDUjE2X0lOREVYX1JFR1BfUkVM IChiYXNlLCAgaW5kZXgsIGRpc3ApICBmYXIgICg0RykKKyAgIEkgICsgUlAg KyBkMjA6IENSMTZfSU5ERVhfUkVHUF9SRUwgKGJhc2UsICBpbmRleCwgZGlz cCkgIGZhciAgKDRHKQorCisgICBEZWNvbXBvc2luZyBEYXRhIG1vZGVsIGlu IGNhc2Ugb2YgYWJzb2x1dGUgYWRkcmVzcy4KKworICAgVGFyZ2V0IE9wdGlv biAgICAgICAgICAgICBBZGRyZXNzIHR5cGUgUmVzdWx0YW50IERhdGEgcmVm IHR5cGUKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0t LS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDUjE2X1RBUkdFVF9N T0RFTF9ORUFSICAgIEFCUzIwICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2 X1RBUkdFVF9NT0RFTF9ORUFSICAgIElNTTIwICAgICAgICBETV9ERUZBVUxU CisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIEFCUzI0ICAgICAgICBJ bnZhbGlkCisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIElNTTMyICAg ICAgICBJbnZhbGlkCisKKyAgIENSMTZfVEFSR0VUX01PREVMX01FRElVTSAg QUJTMjAgICAgICAgIERNX0RFRkFVTFQKKyAgIENSMTZfVEFSR0VUX01PREVM X01FRElVTSAgSU1NMjAgICAgICAgIERNX0RFRkFVTFQKKyAgIENSMTZfVEFS R0VUX01PREVMX01FRElVTSAgQUJTMjQgICAgICAgIERNX0ZBUgorICAgQ1Ix Nl9UQVJHRVRfTU9ERUxfTUVESVVNICBJTU0zMiAgICAgICAgSW52YWxpZAor CisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIEFCUzIwICAgICAgICBE TV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIElNTTIw ICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIg ICAgIEFCUzI0ICAgICAgICBETV9GQVIKKyAgIENSMTZfVEFSR0VUX01PREVM X0ZBUiAgICAgSU1NMzIgICAgICAgIERNX0ZBUi4gICovCitlbnVtIGNyMTZf YWRkcnR5cGUKK2NyMTZfZGVjb21wb3NlX2FkZHJlc3MgKHJ0eCBhZGRyLCBz dHJ1Y3QgY3IxNl9hZGRyZXNzICpvdXQsCisJCQlib29sIGRlYnVnX3ByaW50 LCBib29sIHRyZWF0X2FzX2NvbnN0KQoreworICBydHggYmFzZSA9IE5VTExf UlRYLCBkaXNwID0gTlVMTF9SVFgsIGluZGV4ID0gTlVMTF9SVFg7CisgIGVu dW0gZGF0YV9tb2RlbF90eXBlIGRhdGEgPSBJTExFR0FMX0RNOworICBpbnQg Y29kZSA9IC0xOworICBlbnVtIGNyMTZfYWRkcnR5cGUgcmV0dmFsID0gQ1Ix Nl9JTlZBTElEOworCisgIHN3aXRjaCAoR0VUX0NPREUgKGFkZHIpKQorICAg IHsKKyAgICBjYXNlIENPTlNUX0lOVDoKKyAgICAgIC8qIEFic29sdXRlIGFk ZHJlc3MgKGtub3duIGF0IGNvbXBpbGUgdGltZSkuICAqLworICAgICAgY29k ZSA9IDA7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJZnByaW50ZiAoc3Rk ZXJyLCAiXG5jb2RlOiVkIiwgY29kZSk7CisgICAgICBkaXNwID0gYWRkcjsK KworICAgICAgaWYgKGRlYnVnX3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0 ZGVyciwgIlxuZGlzcDoiKTsKKwkgIGRlYnVnX3J0eCAoZGlzcCk7CisJfQor CisgICAgICBpZiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwg KGRpc3ApLCAyMCkpCisJeworCSAgZGF0YSA9IERNX0RFRkFVTFQ7CisJICBp ZiAoZGVidWdfcHJpbnQpCisJICAgIGZwcmludGYgKHN0ZGVyciwgIlxuZGF0 YTolZCIsIGRhdGEpOworCSAgcmV0dmFsID0gQ1IxNl9BQlNPTFVURTsKKwl9 CisgICAgICBlbHNlIGlmIChVTlNJR05FRF9JTlRfRklUU19OX0JJVFMgKElO VFZBTCAoZGlzcCksIDI0KSkKKwl7CisJICBpZiAoIUNSMTZfVEFSR0VUX0RB VEFfTkVBUikKKwkgICAgeworCSAgICAgIGRhdGEgPSBETV9GQVI7CisJICAg ICAgaWYgKGRlYnVnX3ByaW50KQorCQlmcHJpbnRmIChzdGRlcnIsICJcbmRh dGE6JWQiLCBkYXRhKTsKKwkgICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRF OworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7 CS8qIEFCUzI0IGlzIG5vdCBzdXBwb3J0IGluIE5FQVIgbW9kZWwuICAqLwor CX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gQ1IxNl9JTlZBTElEOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIENPTlNUOgorICAgICAgLyogQSBDT05TVCBp cyBhbiBleHByZXNzaW9uIG9mIFBMVVMgb3IgTUlOVVMgd2l0aCAKKyAgICAg ICAgIENPTlNUX0lOVCwgU1lNQk9MX1JFRiBvciBMQUJFTF9SRUYuIFRoaXMg aXMgdGhlCisgICAgICAgICByZXN1bHQgb2YgYXNzZW1ibHktdGltZSBhcml0 aG1ldGljIGNvbXB1dGF0aW9uLiAgKi8KKyAgICAgIHJldHZhbCA9IENSMTZf QUJTT0xVVEU7CisgICAgICBkaXNwID0gYWRkcjsKKyAgICAgIC8qIENhbGwg dGhlIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgdmFsaWRpdHkuICAq LworICAgICAgY3IxNl9kZWNvbXBvc2VfY29uc3QgKFhFWFAgKGFkZHIsIDAp LCAmY29kZSwgJmRhdGEsIHRyZWF0X2FzX2NvbnN0KTsKKyAgICAgIGlmICgo Y29kZSA9PSAwKSAmJiAoZGF0YSA9PSBJTExFR0FMX0RNKSkKKwkvKiBDT05T VCBpcyBub3QgdmFsaWQgY29kZSBvciBkYXRhIGFkZHJlc3MuICAqLworCXJl dHVybiBDUjE2X0lOVkFMSUQ7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJ eworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCSAgZGVidWdf cnR4IChkaXNwKTsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIs IGNvZGUpOworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVkIiwgZGF0 YSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExBQkVMX1JFRjoK KyAgICAgIHJldHZhbCA9IENSMTZfQUJTT0xVVEU7CisgICAgICBkaXNwID0g YWRkcjsKKyAgICAgIC8qIDEgLSBpbmRpY2F0ZXMgbm9uLWZ1bmN0aW9uIHN5 bWJvbC4gICovCisgICAgICBjb2RlID0gMTsKKyAgICAgIGlmIChkZWJ1Z19w cmludCkKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJcbmRpc3A6Iik7CisJ ICBkZWJ1Z19ydHggKGRpc3ApOworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5j b2RlOiVkIiwgY29kZSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNl IFNZTUJPTF9SRUY6CisgICAgICAvKiBBYnNvbHV0ZSBhZGRyZXNzIChrbm93 biBhdCBsaW5rIHRpbWUpLiAgKi8KKyAgICAgIHJldHZhbCA9IENSMTZfQUJT T0xVVEU7CisgICAgICBkaXNwID0gYWRkcjsKKyAgICAgIC8qIFRoaXMgaXMg YSBjb2RlIGFkZHJlc3MgaWYgc3ltYm9sX3JlZiBpcyBhIGZ1bmN0aW9uLiAg Ki8KKyAgICAgIC8qIDIgaW5kaWNhdGVzIGZ1bmMgc3ltLiAgKi8KKyAgICAg IGNvZGUgPSBTWU1CT0xfUkVGX0ZVTkNUSU9OX1AgKGFkZHIpID8gMiA6IDA7 CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnByaW50ZiAoc3Rk ZXJyLCAiXG5kaXNwOiIpOworCSAgZGVidWdfcnR4IChkaXNwKTsKKwkgIGZw cmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOworCX0KKyAgICAg IC8qIElmIG5vdCBmdW5jdGlvbiByZWYgdGhlbiBjaGVjayBpZiB2YWxpZCBk YXRhIHJlZi4gICovCisgICAgICBpZiAoY29kZSA9PSAwKQorCXsKKwkgIGlm IChDUjE2X1RBUkdFVF9EQVRBX05FQVIpCisJICAgIGRhdGEgPSBETV9ERUZB VUxUOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0pCisJ ICAgIGRhdGEgPSBETV9GQVI7CisJICBlbHNlIGlmIChDUjE2X1RBUkdFVF9E QVRBX0ZBUikKKwkgICAgeworCSAgICAgIGlmICh0cmVhdF9hc19jb25zdCkK KwkJLyogVGhpcyB3aWxsIGJlIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdGhl IAorCQkgICBxdWFsaWZpZXIuIFRoaXMgY2FsbCBpcyAobWF5IGJlKSBtYWRl CisJCSAgIGJ5IGNyMTZfcHJpbnRfb3BlcmFuZF9hZGRyZXNzLiAgKi8KKwkJ ZGF0YSA9IERNX0ZBUjsKKwkgICAgICBlbHNlCisJCS8qIFRoaXMgY2FsbCBp cyAobWF5IGJlKSBtYWRlIGJ5IAorCQkgICBjcjE2X2xlZ2l0aW1hdGVfYWRk cmVzc19wLiAgKi8KKwkJcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgICAgfQor CSAgZWxzZQorCSAgICBkYXRhID0gRE1fREVGQVVMVDsKKwl9CisgICAgICBp ZiAoZGVidWdfcHJpbnQpCisJZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVk IiwgZGF0YSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUkVHOgorICAg IGNhc2UgU1VCUkVHOgorICAgICAgLyogUmVnaXN0ZXIgcmVsYXRpdmUgYWRk cmVzcy4gICovCisgICAgICAvKiBBc3N1bWUgUkVHIGZpdHMgaW4gYSBzaW5n bGUgcmVnaXN0ZXIuICAqLworICAgICAgcmV0dmFsID0gQ1IxNl9SRUdfUkVM OworICAgICAgaWYgKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFIChhZGRy KSkgPiBCSVRTX1BFUl9XT1JEKQorCWlmICghTE9OR19SRUdfUCAoUkVHTk8g KGFkZHIpKSkKKwkgIC8qIFJFRyB3aWxsIHJlc3VsdCBpbiByZWcgcGFpci4g ICovCisJICByZXR2YWwgPSBDUjE2X1JFR1BfUkVMOworICAgICAgYmFzZSA9 IGFkZHI7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnByaW50 ZiAoc3RkZXJyLCAiXG5iYXNlOiIpOworCSAgZGVidWdfcnR4IChiYXNlKTsK Kwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUExVUzoKKyAgICAgIHN3 aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFkZHIsIDApKSkKKwl7CisJY2FzZSBS RUc6CisJY2FzZSBTVUJSRUc6CisJICAvKiBSRUcgKyBESVNQMjAuICAqLwor CSAgLyogQWxsIFJlZyByZWxhdGl2ZSBhZGRyZXNzZXMgaGF2aW5nIGEgZGlz cGxhY2VtZW50IG5lZWRzIAorCSAgICAgdG8gZml0IGluIDIwLWJpdHMuICAq LworCSAgZGlzcCA9IFhFWFAgKGFkZHIsIDEpOworCSAgaWYgKGRlYnVnX3By aW50KQorCSAgICB7CisJICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5kaXNw OiIpOworCSAgICAgIGRlYnVnX3J0eCAoZGlzcCk7CisJICAgIH0KKwkgIHN3 aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFkZHIsIDEpKSkKKwkgICAgeworCSAg ICBjYXNlIENPTlNUX0lOVDoKKwkgICAgICAvKiBTaGFsbCBmaXQgaW4gMjAt Yml0cy4gICovCisJICAgICAgaWYgKCFVTlNJR05FRF9JTlRfRklUU19OX0JJ VFMgKElOVFZBTCAoZGlzcCksIDIwKSkKKwkJcmV0dXJuIENSMTZfSU5WQUxJ RDsKKwkgICAgICBjb2RlID0gMDsKKwkgICAgICBpZiAoZGVidWdfcHJpbnQp CisJCWZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOworCSAg ICAgIGJyZWFrOworCisJICAgIGNhc2UgVU5TUEVDOgorCSAgICAgIGluZm9y bSAoaW5wdXRfbG9jYXRpb24sICJVTlNQRUMgMiEhIik7CisJICAgICAgc3dp dGNoIChYSU5UIChYRVhQIChhZGRyLCAxKSwgMSkpCisJCXsKKwkJY2FzZSBV TlNQRUNfTElCUkFSWV9PRkZTRVQ6CisJCSAgaW5mb3JtIChpbnB1dF9sb2Nh dGlvbiwgIlVOU1BFQ19MSUJSQVJZX09GRlNFVCAyISEhIik7CisJCSAgYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJICBnY2NfdW5yZWFjaGFibGUgKCk7CisJ CX0KKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIExBQkVMX1JFRjoKKwkg ICAgY2FzZSBTWU1CT0xfUkVGOgorCSAgICBjYXNlIENPTlNUOgorCSAgICAg IC8qIFRoaXMgaXMgYWxzbyBhIHZhbGlkIGV4cHJlc3Npb24gZm9yIGFkZHJl c3MuCisJICAgICAgICAgSG93ZXZlciwgd2UgY2Fubm90IGFzY2VydGFpbiBp ZiB0aGUgcmVzdWx0YW50CisJICAgICAgICAgZGlzcGxhY2VtZW50IHdpbGwg YmUgdmFsaWQgMjAtYml0IHZhbHVlLiAgVGhlcmVmb3JlLCAKKwkgICAgICAg ICBsZXRzIG5vdCBhbGxvdyBzdWNoIGFuIGV4cHJlc3Npb24gZm9yIG5vdy4g IFRoaXMgd2lsbCAKKwkgICAgICAgICBiZSB1cGRhdGVkIHdoZW4gIHdlIGZp bmQgYSB3YXkgdG8gdmFsaWRhdGUgdGhpcyAKKwkgICAgICAgICBleHByZXNz aW9uIGFzIGxlZ2l0aW1hdGUgYWRkcmVzcy4gCisJICAgICAgICAgVGlsbCB0 aGVuIGZhbGwgdGhyb3VnaCBDUjE2X0lOVkFMSUQuICAqLworCSAgICBkZWZh dWx0OgorCSAgICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgIH0KKwor CSAgLyogTm93IGNoZWNrIGlmIFJFRyBjYW4gZml0IGludG8gc2luZ2xlIG9y IHBhaXIgcmVncy4gICovCisJICByZXR2YWwgPSBDUjE2X1JFR19SRUw7CisJ ICBiYXNlID0gWEVYUCAoYWRkciwgMCk7CisJICBpZiAoZGVidWdfcHJpbnQp CisJICAgIHsKKwkgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmJhc2U6Iik7 CisJICAgICAgZGVidWdfcnR4IChiYXNlKTsKKwkgICAgfQorCSAgaWYgKEdF VF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFICgoWEVYUCAoYWRkciwgMCkpKSkg PiBCSVRTX1BFUl9XT1JEKQorCSAgICB7CisJICAgICAgaWYgKCFMT05HX1JF R19QIChSRUdOTyAoKFhFWFAgKGFkZHIsIDApKSkpKQorCQkvKiBSRUcgd2ls bCByZXN1bHQgaW4gcmVnIHBhaXIuICAqLworCQlyZXR2YWwgPSBDUjE2X1JF R1BfUkVMOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgUExVUzoKKwkg IC8qIFZhbGlkIGV4cHI6IAorCSAgICAgcGx1cworCSAgICAgL1wKKwkgICAg IC8gIFwKKwkgICAgIHBsdXMgaWR4CisJICAgICAvXAorCSAgICAgLyAgXAor CSAgICAgcmVnICBjb25zdF9pbnQKKworCSAgICAgQ2hlY2sgaWYgdGhlIG9w ZXJhbmQgMSBpcyB2YWxpZCBpbmRleCByZWdpc3Rlci4gICovCisJICBkYXRh ID0gSUxMRUdBTF9ETTsKKwkgIGlmIChkZWJ1Z19wcmludCkKKwkgICAgZnBy aW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVkIiwgZGF0YSk7CisJICBzd2l0Y2gg KEdFVF9DT0RFIChYRVhQIChhZGRyLCAxKSkpCisJICAgIHsKKwkgICAgY2Fz ZSBSRUc6CisJICAgIGNhc2UgU1VCUkVHOgorCSAgICAgIGlmICghUkVHX09L X0ZPUl9JTkRFWF9QIChYRVhQIChhZGRyLCAxKSkpCisJCXJldHVybiBDUjE2 X0lOVkFMSUQ7CisJICAgICAgLyogT0suIFJFRyBpcyBhIHZhbGlkIGluZGV4 IHJlZ2lzdGVyLiAgKi8KKwkgICAgICBpbmRleCA9IFhFWFAgKGFkZHIsIDEp OworCSAgICAgIGlmIChkZWJ1Z19wcmludCkKKwkJeworCQkgIGZwcmludGYg KHN0ZGVyciwgIlxuaW5kZXg6Iik7CisJCSAgZGVidWdfcnR4IChpbmRleCk7 CisJCX0KKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBy ZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgICB9CisJICAvKiBDaGVjayBpZiBv cGVyYW5kIDAgb2Ygb3BlcmFuZCAwIGlzIFJFR1AuICAqLworCSAgc3dpdGNo IChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDApKSkKKwkgICAg eworCSAgICBjYXNlIFJFRzoKKwkgICAgY2FzZSBTVUJSRUc6CisJICAgICAg LyogTm93IGNoZWNrIGlmIFJFRyBpcyBhIFJFR1AgYW5kIG5vdCBpbiBMT05H IHJlZ3MuICAqLworCSAgICAgIGlmIChHRVRfTU9ERV9CSVRTSVpFIChHRVRf TU9ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDApKSkKKwkJICA+IEJJVFNf UEVSX1dPUkQpCisJCXsKKwkJICBpZiAoUkVHTk8gKFhFWFAgKFhFWFAgKGFk ZHIsIDApLCAwKSkKKwkJICAgICAgPj0gQ1IxNl9GSVJTVF9EV09SRF9SRUdJ U1RFUikKKwkJICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJCSAgYmFzZSA9 IFhFWFAgKFhFWFAgKGFkZHIsIDApLCAwKTsKKwkJICBpZiAoZGVidWdfcHJp bnQpCisJCSAgICB7CisJCSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuYmFz ZToiKTsKKwkJICAgICAgZGVidWdfcnR4IChiYXNlKTsKKwkJICAgIH0KKwkJ fQorCSAgICAgIGVsc2UKKwkJcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgICAg ICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICByZXR1cm4gQ1IxNl9J TlZBTElEOworCSAgICB9CisJICAvKiBOb3cgY2hlY2sgaWYgdGhlIG9wZXJh bmQgMSBvZiBvcGVyYW5kIDAgaXMgY29uc3RfaW50LiAgKi8KKwkgIGlmIChH RVRfQ09ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDEpKSA9PSBDT05TVF9J TlQpCisJICAgIHsKKwkgICAgICBkaXNwID0gWEVYUCAoWEVYUCAoYWRkciwg MCksIDEpOworCSAgICAgIGlmIChkZWJ1Z19wcmludCkKKwkJeworCQkgIGZw cmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkJICBkZWJ1Z19ydHggKGRp c3ApOworCQl9CisJICAgICAgaWYgKCFVTlNJR05FRF9JTlRfRklUU19OX0JJ VFMgKElOVFZBTCAoZGlzcCksIDIwKSkKKwkJcmV0dXJuIENSMTZfSU5WQUxJ RDsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gQ1IxNl9JTlZBTElE OworCSAgcmV0dmFsID0gQ1IxNl9JTkRFWF9SRUdQX1JFTDsKKwkgIGJyZWFr OworCWRlZmF1bHQ6CisJICByZXR1cm4gQ1IxNl9JTlZBTElEOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBDUjE2 X0lOVkFMSUQ7CisgICAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBiYXNlIGFu ZCBpbmRleCByZWdpc3RlcnMgYXJlIHZhbGlkLiAgKi8KKyAgaWYgKGJhc2Ug JiYgIShjcjE2X2FkZHJfcmVnX3AgKGJhc2UpKSkKKyAgICByZXR1cm4gQ1Ix Nl9JTlZBTElEOworICBpZiAoYmFzZSAmJiAhKENSMTZfUkVHX09LX0ZPUl9C QVNFX1AgKGJhc2UpKSkKKyAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworICBp ZiAoaW5kZXggJiYgIShSRUdfT0tfRk9SX0lOREVYX1AgKGluZGV4KSkpCisg ICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKworICAvKiBXcml0ZSB0aGUgZGVj b21wb3NpdGlvbiB0byBvdXQgcGFyYW1ldGVyLiAgKi8KKyAgb3V0LT5iYXNl ID0gYmFzZTsKKyAgb3V0LT5kaXNwID0gZGlzcDsKKyAgb3V0LT5pbmRleCA9 IGluZGV4OworICBvdXQtPmRhdGEgPSBkYXRhOworICBvdXQtPmNvZGUgPSBj b2RlOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIFJldHVybiBub24t emVybyB2YWx1ZSBpZiAneCcgaXMgbGVnaXRpbWF0ZSBQSUMgb3BlcmFuZAor ICAgd2hlbiBnZW5lcmF0aW5nIFBJQyBjb2RlLiAgKi8KK2ludAorbGVnaXRp bWF0ZV9waWNfb3BlcmFuZF9wIChydHggeCkKK3sKKyAgc3dpdGNoIChHRVRf Q09ERSAoeCkpCisgICAgeworICAgIGNhc2UgU1lNQk9MX1JFRjoKKyAgICAg IHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMQUJFTF9SRUY6 CisgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09O U1Q6CisgICAgICAvKiBSRVZJU0lUOiBVc2Ugc29tZXRoaW5nIGxpa2Ugc3lt Ym9sX3JlZmVyZW5jZWRfcC4gICovCisgICAgICBpZiAoR0VUX0NPREUgKFhF WFAgKHgsIDApKSA9PSBQTFVTCisJICAmJiAoR0VUX0NPREUgKFhFWFAgKFhF WFAgKHgsIDApLCAwKSkgPT0gU1lNQk9MX1JFRgorCSAgICAgIHx8IEdFVF9D T0RFIChYRVhQIChYRVhQICh4LCAwKSwgMCkpID09IExBQkVMX1JFRikKKwkg ICYmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoeCwgMCksIDEpKSA9PSBDT05T VF9JTlQpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBN RU06CisgICAgICByZXR1cm4gbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChY RVhQICh4LCAwKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg ICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMTsKK30KKworLyogQ29udmVy dCBhIG5vbi1QSUMgYWRkcmVzcyBpbiBgb3JpZycgdG8gYSBQSUMgYWRkcmVz cyBpbiBgcmVnJy4KKworICAgICBJbnB1dCAgICAgICAgICAgIE91dHB1dCAo LWYgcGljKSAgICAgICAgT3V0cHV0ICgtZiBQSUMpCisgICAgIG9yaWcgICAg ICAgICAgICAgcmVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorICAgICBDMSAgIHN5bWJvbCAgICAgICAgICAgc3ltYm9sQEJSTyAo cjEyKSAgICAgICAgc3ltYm9sQEdPVCAocjEyKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKyAgICAgQzIgICBzeW1ib2wgKyBvZmZz ZXQgIHN5bWJvbCtvZmZzZXRAQlJPIChyMTIpIHN5bWJvbCtvZmZzZXRAR09U IChyMTIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor ICAgICBOT1RFOiBAQlJPIGlzIGFkZGVkIHVzaW5nIHVuc3BlYzpCUk8KKyAg ICAgTk9URTogQEdPVCBpcyBhZGRlZCB1c2luZyB1bnNwZWM6R09ULiAgKi8K K3J0eAorbGVnaXRpbWl6ZV9waWNfYWRkcmVzcyAocnR4IG9yaWcsIGVudW0g bWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJCXJ0eCBy ZWcpCit7CisKKyAgLyogRmlyc3QgaGFuZGxlIGEgc2ltcGxlIFNZTUJPTF9S RUYgb3IgTEFCRUxfUkVGLiAgKi8KKyAgaWYgKEdFVF9DT0RFIChvcmlnKSA9 PSBTWU1CT0xfUkVGIHx8IEdFVF9DT0RFIChvcmlnKSA9PSBMQUJFTF9SRUYp CisgICAgeworICAgICAgaWYgKHJlZyA9PSAwKQorCXJlZyA9IGdlbl9yZWdf cnR4IChQbW9kZSk7CisKKyAgICAgIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJ QykKKwl7CisJICAvKiBVbnNwZWMgdG8gaGFuZGxlIC1mcGljIG9wdGlvbi4g ICovCisJICBlbWl0X2luc24gKGdlbl91bnNwZWNfYnJvX2FkZHIgKHJlZywg b3JpZykpOworCSAgZW1pdF9pbnNuIChnZW5fYWRkc2kzIChyZWcsIHJlZywg cGljX29mZnNldF90YWJsZV9ydHgpKTsKKwl9CisgICAgICBlbHNlIGlmIChm bGFnX3BpYyA9PSBGQVJfUElDKQorCXsKKwkgIC8qIFVuc3BlYyB0byBoYW5k bGUgLWZQSUMgb3B0aW9uLiAgKi8KKwkgIGVtaXRfaW5zbiAoZ2VuX3Vuc3Bl Y19nb3RfYWRkciAocmVnLCBvcmlnKSk7CisJfQorICAgICAgcmV0dXJuIHJl ZzsKKyAgICB9CisgIGVsc2UgaWYgKEdFVF9DT0RFIChvcmlnKSA9PSBDT05T VCkKKyAgICB7CisgICAgICAvKiBUbyBoYW5kbGUgKHN5bWJvbCArIG9mZnNl dCkuICAqLworICAgICAgcnR4IGJhc2UsIG9mZnNldDsKKworICAgICAgaWYg KEdFVF9DT0RFIChYRVhQIChvcmlnLCAwKSkgPT0gUExVUworCSAgJiYgWEVY UCAoWEVYUCAob3JpZywgMCksIDApID09IHBpY19vZmZzZXRfdGFibGVfcnR4 KQorCXJldHVybiBvcmlnOworCisgICAgICBpZiAocmVnID09IDApCisJewor CSAgZ2NjX2Fzc2VydCAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSk7CisJICBy ZWcgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOworCX0KKworICAgICAgZ2NjX2Fz c2VydCAoR0VUX0NPREUgKFhFWFAgKG9yaWcsIDApKSA9PSBQTFVTKTsKKwor ICAgICAgYmFzZSA9IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKFhF WFAgKG9yaWcsIDApLCAwKSwgUG1vZGUsIHJlZyk7CisgICAgICBvZmZzZXQg PSBsZWdpdGltaXplX3BpY19hZGRyZXNzIChYRVhQIChYRVhQIChvcmlnLCAw KSwgMSksIFBtb2RlLAorCQkJCSAgICAgICBiYXNlID09IHJlZyA/IDAgOiBy ZWcpOworCisgICAgICAvKiBSRVZJU0lUOiBPcHRpbWl6ZSBmb3IgY29uc3Qt b2Zmc2V0cy4gICovCisgICAgICBlbWl0X2luc24gKGdlbl9hZGRzaTMgKHJl ZywgYmFzZSwgb2Zmc2V0KSk7CisKKyAgICAgIHJldHVybiByZWc7CisgICAg fQorICByZXR1cm4gb3JpZzsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2Yg VEFSR0VUX0xFR0lUSU1BVEVfQUREUkVTU19QLiAgKi8KK3N0YXRpYyBib29s CitjcjE2X2xlZ2l0aW1hdGVfYWRkcmVzc19wIChlbnVtIG1hY2hpbmVfbW9k ZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICBydHggYWRkciwgYm9v bCBzdHJpY3QpCit7CisgIGVudW0gY3IxNl9hZGRydHlwZSBhZGRydHlwZTsK KyAgc3RydWN0IGNyMTZfYWRkcmVzcyBhZGRyZXNzOworCisgIGlmIChUQVJH RVRfREVCVUdfQUREUikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs CisJICAgICAgICJcbj09PT09PVxuVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVT U19QLCBtb2RlID0gJXMsIHN0cmljdCA9ICVkIiwKKwkgICAgICAgR0VUX01P REVfTkFNRSAobW9kZSksIHN0cmljdCk7CisgICAgICBkZWJ1Z19ydHggKGFk ZHIpOworICAgIH0KKyAgYWRkcnR5cGUgPSBjcjE2X2RlY29tcG9zZV9hZGRy ZXNzIChhZGRyLCAmYWRkcmVzcywKKwkJCQkgICAgIChUQVJHRVRfREVCVUdf QUREUiA/IDEgOiAwKSwgRkFMU0UpOworCisgIGlmIChUQVJHRVRfREVCVUdf QUREUikKKyAgICB7CisgICAgICBjb25zdCBjaGFyICp0eXBlc3RyOworCisg ICAgICBzd2l0Y2ggKGFkZHJ0eXBlKQorCXsKKwljYXNlIENSMTZfSU5WQUxJ RDoKKwkgIHR5cGVzdHIgPSAiaW52YWxpZCI7CisJICBicmVhazsKKwljYXNl IENSMTZfQUJTT0xVVEU6CisJICB0eXBlc3RyID0gImFic29sdXRlIjsKKwkg IGJyZWFrOworCWNhc2UgQ1IxNl9SRUdfUkVMOgorCSAgdHlwZXN0ciA9ICJy ZWdpc3RlciByZWxhdGl2ZSI7CisJICBicmVhazsKKwljYXNlIENSMTZfUkVH UF9SRUw6CisJICB0eXBlc3RyID0gInJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUi OworCSAgYnJlYWs7CisJY2FzZSBDUjE2X0lOREVYX1JFR1BfUkVMOgorCSAg dHlwZXN0ciA9ICJpbmRleCArIHJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUiOwor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJsZSAoKTsK Kwl9CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmNyMTYgYWRkcmVzcyB0 eXBlOiAlc1xuIiwgdHlwZXN0cik7CisgICAgfQorCisgIGlmIChhZGRydHlw ZSA9PSBDUjE2X0lOVkFMSUQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlm IChzdHJpY3QpCisgICAgeworICAgICAgaWYgKGFkZHJlc3MuYmFzZQorCSAg JiYgIVJFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8gKGFkZHJlc3Mu YmFzZSksIG1vZGUpKQorCXsKKwkgIGlmIChUQVJHRVRfREVCVUdfQUREUikK KwkgICAgZnByaW50ZiAoc3RkZXJyLCAiYmFzZSByZWdpc3RlciBub3Qgc3Ry aWN0XG4iKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgICBpZiAoYWRk cmVzcy5pbmRleCAmJiAhUkVHTk9fT0tfRk9SX0lOREVYX1AgKFJFR05PIChh ZGRyZXNzLmluZGV4KSkpCisJeworCSAgaWYgKFRBUkdFVF9ERUJVR19BRERS KQorCSAgICBmcHJpbnRmIChzdGRlcnIsICJpbmRleCByZWdpc3RlciBub3Qg c3RyaWN0XG4iKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisg IC8qIFJldHVybiB0cnVlIGlmIGFkZHJlc3NpbmcgbW9kZSBpcyByZWdpc3Rl ciByZWxhdGl2ZS4gICovCisgIGlmIChmbGFnX3BpYykKKyAgICB7CisgICAg ICBpZiAoYWRkcnR5cGUgPT0gQ1IxNl9SRUdfUkVMIHx8IGFkZHJ0eXBlID09 IENSMTZfUkVHUF9SRUwpCisJcmV0dXJuIFRSVUU7CisgICAgICBlbHNlCisJ cmV0dXJuIEZBTFNFOworICAgIH0KKworICByZXR1cm4gVFJVRTsKK30KKwor LyogUm91dGluZXMgdG8gY29tcHV0ZSBjb3N0cy4gICovCisKKy8qIFJldHVy biBjb3N0IG9mIHRoZSBtZW1vcnkgYWRkcmVzcyB4LiAgKi8KK3N0YXRpYyBp bnQKK2NyMTZfYWRkcmVzc19jb3N0IChydHggYWRkciwgYm9vbCBzcGVlZCBB VFRSSUJVVEVfVU5VU0VEKQoreworICBlbnVtIGNyMTZfYWRkcnR5cGUgYWRk cnR5cGU7CisgIHN0cnVjdCBjcjE2X2FkZHJlc3MgYWRkcmVzczsKKyAgaW50 IGNvc3QgPSAyOworCisgIGFkZHJ0eXBlID0gY3IxNl9kZWNvbXBvc2VfYWRk cmVzcyAoYWRkciwgJmFkZHJlc3MsIDAsIEZBTFNFKTsKKworICBnY2NfYXNz ZXJ0IChhZGRydHlwZSAhPSBDUjE2X0lOVkFMSUQpOworCisgIC8qIENSMTZf QUJTT0xVVEUgICAgICAgICAgICA6IDMKKyAgICAgQ1IxNl9SRUdfUkVMICAo ZGlzcCAhPTApIDogNAorICAgICBDUjE2X1JFR19SRUwgIChkaXNwID09MCkg OiA1CisgICAgIENSMTZfUkVHUF9SRUwgKGRpc3AgIT0wKSA6IDYKKyAgICAg Q1IxNl9SRUdQX1JFTCAoZGlzcCA9PTApIDogNworICAgICBDUjE2X0lOREVY X1JFR1BfUkVMIChkaXNwICE9MCkgOiA4CisgICAgIENSMTZfSU5ERVhfUkVH UF9SRUwgKGRpc3AgPT0wKSA6IDkuICAqLworICBzd2l0Y2ggKGFkZHJ0eXBl KQorICAgIHsKKyAgICBjYXNlIENSMTZfQUJTT0xVVEU6CisgICAgICBjb3N0 ICs9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIENSMTZfUkVHUF9SRUw6 CisgICAgICBjb3N0ICs9IDI7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAq LworICAgIGNhc2UgQ1IxNl9SRUdfUkVMOgorICAgICAgY29zdCArPSAzOwor ICAgICAgaWYgKGFkZHJlc3MuZGlzcCkKKwljb3N0IC09IDE7CisgICAgICBi cmVhazsKKyAgICBjYXNlIENSMTZfSU5ERVhfUkVHUF9SRUw6CisgICAgICBj b3N0ICs9IDc7CisgICAgICBpZiAoYWRkcmVzcy5kaXNwKQorCWNvc3QgLT0g MTsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgIGlm IChUQVJHRVRfREVCVUdfQUREUikKKyAgICB7CisgICAgICBmcHJpbnRmIChz dGRlcnIsICJcbj09PT09PVxubWFjcm8gVEFSR0VUX0FERFJFU1NfQ09TVCA9 ICVkXG4iLCBjb3N0KTsKKyAgICAgIGRlYnVnX3J0eCAoYWRkcik7CisgICAg fQorCisgIHJldHVybiBjb3N0OworfQorCisKKy8qIEltcGxlbWVudCBgVEFS R0VUX1JFR0lTVEVSX01PVkVfQ09TVCcuICAqLworc3RhdGljIGludAorY3Ix Nl9yZWdpc3Rlcl9tb3ZlX2Nvc3QgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUg QVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl Z19jbGFzc190IGZyb20gQVRUUklCVVRFX1VOVVNFRCwgcmVnX2NsYXNzX3Qg dG8pCit7CisgIHJldHVybiAodG8gIT0gR0VORVJBTF9SRUdTID8gOAorICAg ICAgICAgIDogMik7Cit9CisKKy8qIEltcGxlbWVudCBgVEFSR0VUX01FTU9S WV9NT1ZFX0NPU1QnLiAgKi8KKworLyogUmV0dXJuIHRoZSBjb3N0IG9mIG1v dmluZyBkYXRhIG9mIG1vZGUgTU9ERSBiZXR3ZWVuIGEgcmVnaXN0ZXIgb2Yg Y2xhc3MKKyAgIENMQVNTIGFuZCBtZW1vcnk7IElOIGlzIHplcm8gaWYgdGhl IHZhbHVlIGlzIHRvIGJlIHdyaXR0ZW4gdG8gbWVtb3J5LAorICAgbm9uemVy byBpZiBpdCBpcyB0byBiZSByZWFkIGluLiBUaGlzIGNvc3QgaXMgcmVsYXRp dmUgdG8gdGhvc2UgaW4KKyAgIFJFR0lTVEVSX01PVkVfQ09TVC4gICovCitz dGF0aWMgaW50CitjcjE2X21lbW9yeV9tb3ZlX2Nvc3QgKGVudW0gbWFjaGlu ZV9tb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHJlZ19jbGFz c190IHJjbGFzcyBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAg ICAgICAgICBib29sIGluIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIC8qIE9u ZSBMRCBvciBTVCB0YWtlcyB0d2ljZSB0aGUgdGltZSBvZiBhIHNpbXBsZSBy ZWctcmVnIG1vdmUuICAqLworICBpZiAocmVnX2NsYXNzZXNfaW50ZXJzZWN0 X3AgKHJjbGFzcywgR0VORVJBTF9SRUdTKSkKKyAgICByZXR1cm4gKDQgKiBI QVJEX1JFR05PX05SRUdTICgwLCBtb2RlKSk7CisgIGVsc2UKKyAgICByZXR1 cm4gKDEwMCk7Cit9CisKKy8qIEluc3RydWN0aW9uIG91dHB1dC4gICovCisK Ky8qIENoZWNrIGlmIGEgY29uc3RfZG91YmxlIGlzIG9rIGZvciBjcjE2IHN0 b3JlLWltbWVkaWF0ZSBpbnN0cnVjdGlvbnMuICAqLworaW50CitjcjE2X2Nv bnN0X2RvdWJsZV9vayAocnR4IG9wKQoreworICBpZiAoR0VUX01PREUgKG9w KSA9PSBTRm1vZGUpCisgICAgeworICAgICAgUkVBTF9WQUxVRV9UWVBFIHI7 CisgICAgICBsb25nIGw7CisgICAgICBSRUFMX1ZBTFVFX0ZST01fQ09OU1Rf RE9VQkxFIChyLCBvcCk7CisgICAgICBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9T SU5HTEUgKHIsIGwpOworICAgICAgcmV0dXJuIFVOU0lHTkVEX0lOVF9GSVRT X05fQklUUyAobCwgNCkgPyAxIDogMDsKKyAgICB9CisKKyAgcmV0dXJuICgo VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChDT05TVF9ET1VCTEVfTE9XIChv cCksIDQpKSAmJgorCSAgKFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAoQ09O U1RfRE9VQkxFX0hJR0ggKG9wKSwgNCkpKSA/IDEgOiAwOworfQorCisvKiBS ZXR1cm5zIGJpdCBwb3NpdGlvbiBvZiBmaXJzdCAwIG9yIDEgYml0LgorICAg SXQgaXMgc2FmZSB0byBhc3N1bWUgdmFsIGFzIDE2LWJpdCB3aWRlLiAgKi8K K2ludAorY3IxNl9vcGVyYW5kX2JpdF9wb3MgKGludCB2YWwsIGludCBiaXR2 YWwpCit7CisgIGludCBpOworICBpZiAoYml0dmFsID09IDApCisgICAgdmFs ID0gfnZhbDsKKworICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICBp ZiAodmFsICYgKDEgPDwgaSkpCisgICAgICBicmVhazsKKyAgcmV0dXJuIGk7 Cit9CisKKy8qIEltcGxlbWVudHMgdGhlIG1hY3JvIFBSSU5UX09QRVJBTkQg ZGVmaW5lZCBpbiBjcjE2LmguICAqLworc3RhdGljIHZvaWQKK2NyMTZfcHJp bnRfb3BlcmFuZCAoRklMRSAqIGZpbGUsIHJ0eCB4LCBpbnQgY29kZSkKK3sK KyAgaW50IHB0cl9kZXJlZmVyZW5jZSA9IDA7CisKKyAgc3dpdGNoIChjb2Rl KQorICAgIHsKKyAgICBjYXNlICdkJzoKKyAgICAgIHsKKwljb25zdCBjaGFy ICpjcjE2X2NtcF9zdHI7CisJc3dpdGNoIChHRVRfQ09ERSAoeCkpCisJICB7 CisJICAgIC8qIE1EOiBjb21wYXJlIChyZWcsIHJlZyBvciBpbW0pIGJ1dCBD UjE2OiBjbXAgKHJlZyBvciBpbW0sIHJlZykKKwkgICAgICAgLT4gc3dhcCBh bGwgbm9uIHN5bW1ldHJpYyBvcHMuICAqLworCSAgY2FzZSBFUToKKwkgICAg Y3IxNl9jbXBfc3RyID0gImVxIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIE5F OgorCSAgICBjcjE2X2NtcF9zdHIgPSAibmUiOworCSAgICBicmVhazsKKwkg IGNhc2UgR1Q6CisJICAgIGNyMTZfY21wX3N0ciA9ICJsdCI7CisJICAgIGJy ZWFrOworCSAgY2FzZSBHVFU6CisJICAgIGNyMTZfY21wX3N0ciA9ICJsbyI7 CisJICAgIGJyZWFrOworCSAgY2FzZSBMVDoKKwkgICAgY3IxNl9jbXBfc3Ry ID0gImd0IjsKKwkgICAgYnJlYWs7CisJICBjYXNlIExUVToKKwkgICAgY3Ix Nl9jbXBfc3RyID0gImhpIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIEdFOgor CSAgICBjcjE2X2NtcF9zdHIgPSAibGUiOworCSAgICBicmVhazsKKwkgIGNh c2UgR0VVOgorCSAgICBjcjE2X2NtcF9zdHIgPSAibHMiOworCSAgICBicmVh azsKKwkgIGNhc2UgTEU6CisJICAgIGNyMTZfY21wX3N0ciA9ICJnZSI7CisJ ICAgIGJyZWFrOworCSAgY2FzZSBMRVU6CisJICAgIGNyMTZfY21wX3N0ciA9 ICJocyI7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworCSAgfQorCWZwcmludGYgKGZpbGUsICIlcyIsIGNy MTZfY21wX3N0cik7CisJcmV0dXJuOworICAgICAgfQorICAgIGNhc2UgJyQn OgorICAgICAgcHV0YyAoJyQnLCBmaWxlKTsKKyAgICAgIHJldHVybjsKKwor ICAgIGNhc2UgJ3AnOgorICAgICAgaWYgKEdFVF9DT0RFICh4KSA9PSBSRUcp CisJeworCSAgLyogRm9yIFB1c2ggaW5zdHJ1Y3Rpb25zLCB3ZSBzaG91bGQg bm90IHByaW50IHJlZ2lzdGVyIHBhaXJzLiAgKi8KKwkgIGZwcmludGYgKGZp bGUsICIlcyIsIHJlZ19uYW1lc1tSRUdOTyAoeCldKTsKKwkgIHJldHVybjsK Kwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ2InOgorICAgICAgLyog UHJpbnQgdGhlIGltbWVkaWF0ZSBhZGRyZXNzIGZvciBiYWwgCisgICAgICAg ICAnYicgaXMgdXNlZCBpbnN0ZWFkIG9mICdhJyB0byBhdm9pZCBjb21waWxl ciBjYWxsaW5nCisgICAgICAgICB0aGUgR09fSUZfTEVHSVRJTUFURV9BRERS RVNTIHdoaWNoIGNhbm5vdAorICAgICAgICAgcGVyZm9ybSBjaGVja3Mgb24g Y29uc3RfaW50IGNvZGUgYWRkcmVzc2VzIGFzIGl0CisgICAgICAgICBhc3N1 bWVzIGFsbCBjb25zdF9pbnQgYXJlIGRhdGEgYWRkcmVzc2VzLiAgKi8KKyAg ICAgIGZwcmludGYgKGZpbGUsICIweCVseCIsIElOVFZBTCAoeCkpOworICAg ICAgcmV0dXJuOworCisgICAgY2FzZSAncic6CisgICAgICAvKiBQcmludCBi aXQgcG9zaXRpb24gb2YgZmlyc3QgMC4gICovCisgICAgICBmcHJpbnRmIChm aWxlLCAiJWQiLCBjcjE2X29wZXJhbmRfYml0X3BvcyAoSU5UVkFMICh4KSwg MCkpOworICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncyc6CisgICAgICAv KiBQcmludCBiaXQgcG9zaXRpb24gb2YgZmlyc3QgMS4gICovCisgICAgICBm cHJpbnRmIChmaWxlLCAiJWQiLCBjcjE2X29wZXJhbmRfYml0X3BvcyAoSU5U VkFMICh4KSwgMSkpOworICAgICAgcmV0dXJuOworICAgIGNhc2UgJ2cnOgor ICAgICAgLyogJ2cnIGlzIHVzZWQgZm9yIGltcGxpY2l0IG1lbTogZGVyZWZl cmVuY2UuICAqLworICAgICAgcHRyX2RlcmVmZXJlbmNlID0gMTsKKyAgICBj YXNlICdmJzoKKyAgICBjYXNlIDA6CisgICAgICAvKiBkZWZhdWx0LiAgKi8K KyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQorCXsKKwljYXNlIFJFRzoK KwkgIGlmIChHRVRfTU9ERV9CSVRTSVpFIChHRVRfTU9ERSAoeCkpID4gQklU U19QRVJfV09SRCkKKwkgICAgeworCSAgICAgIGlmIChMT05HX1JFR19QIChS RUdOTyAoeCkpKQorCQlmcHJpbnRmIChmaWxlLCAiKCVzKSIsIHJlZ19uYW1l c1tSRUdOTyAoeCldKTsKKwkgICAgICBlbHNlCisJCWZwcmludGYgKGZpbGUs ICIoJXMsJXMpIiwgcmVnX25hbWVzW1JFR05PICh4KSArIDFdLAorCQkJIHJl Z19uYW1lc1tSRUdOTyAoeCldKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBm cHJpbnRmIChmaWxlLCAiJXMiLCByZWdfbmFtZXNbUkVHTk8gKHgpXSk7CisJ ICByZXR1cm47CisKKwljYXNlIE1FTToKKwkgIG91dHB1dF9hZGRyZXNzIChY RVhQICh4LCAwKSk7CisJICByZXR1cm47CisKKwljYXNlIENPTlNUX0RPVUJM RToKKwkgIHsKKwkgICAgUkVBTF9WQUxVRV9UWVBFIHI7CisJICAgIGxvbmcg bDsKKworCSAgICBSRUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFIChyLCB4 KTsKKwkgICAgUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIChyLCBsKTsK KworCSAgICBmcHJpbnRmIChmaWxlLCAiJDB4JWx4IiwgbCk7CisJICAgIHJl dHVybjsKKwkgIH0KKwljYXNlIENPTlNUX0lOVDoKKwkgIHsKKwkgICAgZnBy aW50ZiAoZmlsZSwgIiQlbGQiLCBJTlRWQUwgKHgpKTsKKwkgICAgcmV0dXJu OworCSAgfQorCWNhc2UgVU5TUEVDOgorCSAgaW5mb3JtIChpbnB1dF9sb2Nh dGlvbiwgInVuc3BlYyEhIik7CisJICBzd2l0Y2ggKFhJTlQgKHgsIDEpKQor CSAgICB7CisJICAgIGRlZmF1bHQ6CisJICAgICAgZ2NjX3VucmVhY2hhYmxl ICgpOworCSAgICB9CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBpZiAo IXB0cl9kZXJlZmVyZW5jZSkKKwkgICAgeworCSAgICAgIHB1dGMgKCckJywg ZmlsZSk7CisJICAgIH0KKwkgIGNyMTZfcHJpbnRfb3BlcmFuZF9hZGRyZXNz IChmaWxlLCB4KTsKKwkgIHJldHVybjsKKwl9CisgICAgZGVmYXVsdDoKKyAg ICAgIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UgKCJpbnZhbGlkICUleG4gY29k ZSIpOworICAgIH0KKworICBnY2NfdW5yZWFjaGFibGUgKCk7Cit9CisKKy8q IEltcGxlbWVudHMgdGhlIG1hY3JvIFBSSU5UX09QRVJBTkRfQUREUkVTUyBk ZWZpbmVkIGluIGNyMTYuaC4gICovCisKK3N0YXRpYyB2b2lkCitjcjE2X3By aW50X29wZXJhbmRfYWRkcmVzcyAoRklMRSAqIGZpbGUsIHJ0eCBhZGRyKQor eworICBlbnVtIGNyMTZfYWRkcnR5cGUgYWRkcnR5cGU7CisgIHN0cnVjdCBj cjE2X2FkZHJlc3MgYWRkcmVzczsKKworICAvKiBEZWNvbXBvc2UgdGhlIGFk ZHJlc3MuIEFsc28gYXNrIGl0IHRvIHRyZWF0IGFkZHJlc3MgYXMgY29uc3Rh bnQuICAqLworICBhZGRydHlwZSA9IGNyMTZfZGVjb21wb3NlX2FkZHJlc3Mg KGFkZHIsICZhZGRyZXNzLCAwLCBUUlVFKTsKKworICBpZiAoYWRkcmVzcy5k aXNwICYmIEdFVF9DT0RFIChhZGRyZXNzLmRpc3ApID09IFVOU1BFQykKKyAg ICB7CisgICAgICBpbmZvcm0gKGlucHV0X2xvY2F0aW9uLCAidW5zcGVjIDMg KCVkKSEhISIsIGFkZHJ0eXBlKTsKKyAgICAgIGRlYnVnX3J0eCAoYWRkcik7 CisgICAgfQorCisgIHN3aXRjaCAoYWRkcnR5cGUpCisgICAgeworICAgIGNh c2UgQ1IxNl9SRUdfUkVMOgorICAgICAgaWYgKGFkZHJlc3MuZGlzcCkKKwl7 CisJICBpZiAoR0VUX0NPREUgKGFkZHJlc3MuZGlzcCkgPT0gVU5TUEVDKQor CSAgICBjcjE2X3ByaW50X29wZXJhbmQgKGZpbGUsIGFkZHJlc3MuZGlzcCwg MCk7CisJICBlbHNlCisJICAgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBh ZGRyZXNzLmRpc3ApOworCX0KKyAgICAgIGVsc2UKKwlmcHJpbnRmIChmaWxl LCAiMCIpOworICAgICAgZnByaW50ZiAoZmlsZSwgIiglcykiLCByZWdfbmFt ZXNbUkVHTk8gKGFkZHJlc3MuYmFzZSldKTsKKyAgICAgIGJyZWFrOworCisg ICAgY2FzZSBDUjE2X0FCU09MVVRFOgorICAgICAgaWYgKGFkZHJlc3MuZGlz cCkKKwlvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgYWRkcmVzcy5kaXNwKTsK KyAgICAgIGVsc2UKKwlmcHJpbnRmIChmaWxlLCAiMCIpOworICAgICAgYnJl YWs7CisKKyAgICBjYXNlIENSMTZfSU5ERVhfUkVHUF9SRUw6CisgICAgICBm cHJpbnRmIChmaWxlLCAiWyVzXSIsIHJlZ19uYW1lc1tSRUdOTyAoYWRkcmVz cy5pbmRleCldKTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAg Y2FzZSBDUjE2X1JFR1BfUkVMOgorICAgICAgaWYgKGFkZHJlc3MuZGlzcCkK Kwl7CisJICBpZiAoR0VUX0NPREUgKGFkZHJlc3MuZGlzcCkgPT0gVU5TUEVD KQorCSAgICBjcjE2X3ByaW50X29wZXJhbmQgKGZpbGUsIGFkZHJlc3MuZGlz cCwgMCk7CisJICBlbHNlCisJICAgIG91dHB1dF9hZGRyX2NvbnN0IChmaWxl LCBhZGRyZXNzLmRpc3ApOworCX0KKyAgICAgIGVsc2UKKwlmcHJpbnRmIChm aWxlLCAiMCIpOworICAgICAgZnByaW50ZiAoZmlsZSwgIiglcywlcykiLCBy ZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3MuYmFzZSkgKyAxXSwKKwkgICAgICAg cmVnX25hbWVzW1JFR05PIChhZGRyZXNzLmJhc2UpXSk7CisgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgZGVidWdfcnR4IChhZGRyKTsKKyAg ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisgIC8qIEFkZCBxdWFs aWZpZXJzIHRvIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24gdGhhdCB3YXMganVz dCBwcmludGVkLiAgKi8KKyAgaWYgKGZsYWdfcGljIDwgTkVBUl9QSUMgJiYg YWRkcmVzcy5jb2RlID09IDApCisgICAgeworICAgICAgaWYgKGFkZHJlc3Mu ZGF0YSA9PSBETV9GQVIpCisJLyogQWRkciBjb250YWlucyBTWU1CT0xfUkVG ICYgZmFyIGRhdGEgcHRyLiAgKi8KKwlmcHJpbnRmIChmaWxlLCAiQGwiKTsK KyAgICAgIGVsc2UgaWYgKGFkZHJlc3MuZGF0YSA9PSBETV9ERUZBVUxUKQor CS8qIEFkZHIgY29udGFpbnMgU1lNQk9MX1JFRiAmIG1lZGl1bSBkYXRhIHB0 ci4gICovCisJZnByaW50ZiAoZmlsZSwgIkBtIik7CisgICAgICAvKiBBZGRy IGNvbnRhaW5zIFNZTUJPTF9SRUYgJiBtZWRpdW0gZGF0YSBwdHIuICAqLwor ICAgICAgZWxzZSBpZiAoYWRkcmVzcy5kYXRhID09IERNX05FQVIpCisJLyog QWRkciBjb250YWlucyBTWU1CT0xfUkVGICYgbmVhciBkYXRhIHB0ci4gICov CisJZnByaW50ZiAoZmlsZSwgIkBzIik7CisgICAgfQorICBlbHNlIGlmIChm bGFnX3BpYyA9PSBORUFSX1BJQworCSAgICYmIChhZGRyZXNzLmNvZGUgPT0g MCkgJiYgKGFkZHJlc3MuZGF0YSA9PSBETV9GQVIKKwkJCQkgICAgICB8fCBh ZGRyZXNzLmRhdGEgPT0gRE1fREVGQVVMVAorCQkJCSAgICAgIHx8IGFkZHJl c3MuZGF0YSA9PSBETV9ORUFSKSkKKyAgICB7CisgICAgICBmcHJpbnRmIChm aWxlLCAiQGwiKTsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdfcGljID09IE5F QVJfUElDICYmIGFkZHJlc3MuY29kZSA9PSAyKQorICAgIHsKKyAgICAgIGZw cmludGYgKGZpbGUsICJwaWMiKTsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdf cGljID09IE5FQVJfUElDICYmIGFkZHJlc3MuY29kZSA9PSAxKQorICAgIHsK KyAgICAgIGZwcmludGYgKGZpbGUsICJAY3BpYyIpOworICAgIH0KKworICBl bHNlIGlmIChmbGFnX3BpYyA9PSBGQVJfUElDICYmIGFkZHJlc3MuY29kZSA9 PSAyKQorICAgIHsKKyAgICAgIC8qIFJFVklTSVQ6IGNyMTYgcmVnaXN0ZXIg aW5kaXJlY3QganVtcCBleHBlY3RzIGEgMS1iaXQgcmlnaHQgc2hpZnRlZAor ICAgICAgICAgYWRkcmVzcyAhIEdPVGMgdGVsbHMgYXNzZW1ibGVyIHRoaXMg c3ltYm9sIGlzIGEgdGV4dC1hZGRyZXNzIAorICAgICAgICAgVGhpcyBuZWVk cyB0byBiZSBmaXhlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhpcyBvZmZzZXQg aXMgZG9uZSAKKyAgICAgICAgIG9ubHkgaW4gdGhlIGNhc2Ugd2hlcmUgYW4g YWRkcmVzcyBpcyBiZWluZyB1c2VkIGZvciBpbmRpcmVjdCBqdW1wCisgICAg ICAgICBvciBjYWxsLiBEZXRlcm1pbmluZyB0aGUgcG90ZW50aWFsIHVzYWdl IG9mIGxvYWRkIGlzIG9mIGNvdXJzZSBub3QKKyAgICAgICAgIHBvc3NpYmxl IGFsd2F5cy4gRXZlbnR1YWxseSwgdGhpcyBoYXMgdG8gYmUgZml4ZWQgaW4g dGhlIAorICAgICAgICAgcHJvY2Vzc29yLiAgKi8KKyAgICAgIGZwcmludGYg KGZpbGUsICJHT1QgKCVzKSIsIHJlZ19uYW1lc1tQSUNfT0ZGU0VUX1RBQkxF X1JFR05VTV0pOworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ19waWMgPT0gRkFS X1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0gMSkKKyAgICB7CisgICAgICBmcHJp bnRmIChmaWxlLCAiQGNHT1QgKCVzKSIsIHJlZ19uYW1lc1tQSUNfT0ZGU0VU X1RBQkxFX1JFR05VTV0pOworICAgIH0KKworICBlbHNlIGlmIChmbGFnX3Bp YyA9PSBGQVJfUElDICYmCisJICAgKGFkZHJlc3MuZGF0YSA9PSBETV9GQVIg fHwgYWRkcmVzcy5kYXRhID09IERNX0RFRkFVTFQKKwkgICAgfHwgYWRkcmVz cy5kYXRhID09IERNX05FQVIpKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZp bGUsICJAR09UICglcykiLCByZWdfbmFtZXNbUElDX09GRlNFVF9UQUJMRV9S RUdOVU1dKTsKKyAgICB9Cit9CisKKy8qIE1hY2hpbmUgZGVzY3JpcHRpb24g aGVscGVyIGZ1bmN0aW9ucy4gICovCisKKy8qIENhbGxlZCBmcm9tIGNyMTYu bWQuIFRoZSByZXR1cm4gdmFsdWUgZGVwZW5kcyBvbiB0aGUgcGFyYW1ldGVy IHB1c2hfb3JfcG9wOgorICAgV2hlbiBwdXNoX29yX3BvcCBpcyB6ZXJvIC0+ IHN0cmluZyBmb3IgcHVzaCBpbnN0cnVjdGlvbnMgb2YgcHJvbG9ndWUuCisg ICBXaGVuIHB1c2hfb3JfcG9wIGlzIG5vbnplcm8gLT4gc3RyaW5nIGZvciBw b3AvcG9wcmV0L3JldHggaW4gZXBpbG9ndWUuCisgICBSZWxpZXMgb24gdGhl IGFzc3VtcHRpb25zOgorICAgMS4gUkEgaXMgdGhlIGxhc3QgcmVnaXN0ZXIg dG8gYmUgc2F2ZWQuCisgICAyLiBUaGUgbWF4aW1hbCB2YWx1ZSBvZiB0aGUg Y291bnRlciBpcyBNQVhfQ09VTlQuICAqLworY2hhciAqCitjcjE2X3ByZXBh cmVfcHVzaF9wb3Bfc3RyaW5nIChpbnQgcHVzaF9vcl9wb3ApCit7CisgIC8q IGogaXMgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgYmVpbmcgc2F2ZWQsIHRh a2VzIGNhcmUgdGhhdCB0aGVyZSB3b24ndCBiZQorICAgICBtb3JlIHRoYW4g OCBpbiBvbmUgcHVzaC9wb3AgaW5zdHJ1Y3Rpb24uICAqLworCisgIC8qIEZv ciB0aGUgcmVnaXN0ZXIgbWFzayBzdHJpbmcuICAqLworICBzdGF0aWMgY2hh ciBvbmVfaW5zdF9zdHJbNTBdOworCisgIC8qIGkgaXMgdGhlIGluZGV4IG9m IGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbXSwgZ29pbmcgZnJvbSAw IHVudGlsIAorICAgICBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZS4gICovCisgIGludCBpLCBzdGFydF9yZWc7CisgIGludCB3b3JkX2Nu dDsKKyAgaW50IHByaW50X3JhOworICBjaGFyICpyZXR1cm5fc3RyOworCisg IC8qIEZvciByZXZlcnNpbmcgb24gdGhlIHB1c2ggaW5zdHJ1Y3Rpb25zIGlm IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLiAgKi8KKyAgY2hhciAqdGVtcF9z dHI7CisKKyAgcmV0dXJuX3N0ciA9IChjaGFyICopIHhtYWxsb2MgKDE2MCk7 CisgIHRlbXBfc3RyID0gKGNoYXIgKikgeG1hbGxvYyAoMTYwKTsKKworICAv KiBJbml0aWFsaXplLiAgKi8KKyAgbWVtc2V0IChyZXR1cm5fc3RyLCAwLCAz KTsKKworICBpID0gMDsKKyAgd2hpbGUgKGkgPD0gY3VycmVudF9mcmFtZV9p bmZvLmxhc3RfcmVnX3RvX3NhdmUpCisgICAgeworICAgICAgLyogUHJlcGFy ZSBtYXNrIGZvciBvbmUgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgb25lX2lu c3Rfc3RyWzBdID0gMDsKKworICAgICAgLyogVG8gY291bnQgbnVtYmVyIG9m IHdvcmRzIGluIG9uZSBpbnN0cnVjdGlvbi4gICovCisgICAgICB3b3JkX2Nu dCA9IDA7CisgICAgICBzdGFydF9yZWcgPSBpOworICAgICAgcHJpbnRfcmEg PSAwOworICAgICAgd2hpbGUgKCh3b3JkX2NudCA8IE1BWF9DT1VOVCkgCisJ ICAgICAmJiAoaSA8PSBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZSkpCisJeworCSAgLyogRm9yIGVhY2ggbm9uIGNvbnNlY3V0aXZlIHNh dmUgcmVnaXN0ZXIsIAorCSAgICAgYSBuZXcgaW5zdHJ1Y3Rpb24gc2hhbGwg YmUgZ2VuZXJhdGVkLiAgKi8KKwkgIGlmICghY3VycmVudF9mcmFtZV9pbmZv LnNhdmVfcmVnc1tpXSkKKwkgICAgeworCSAgICAgIC8qIE1vdmUgdG8gbmV4 dCByZWcgYW5kIGJyZWFrLiAgKi8KKwkgICAgICArK2k7CisJICAgICAgYnJl YWs7CisJICAgIH0KKworCSAgaWYgKGkgPT0gUkVUVVJOX0FERFJFU1NfUkVH TlVNKQorCSAgICBwcmludF9yYSA9IDE7CisJICBlbHNlCisJICAgIHsKKwkg ICAgICAvKiBDaGVjayBlc3BlY2lhbGx5IGlmIGFkZGluZyAyIGRvZXMgbm90 IGNyb3NzIHRoZSBNQVhfQ09VTlQuICAqLworCSAgICAgIGlmICgod29yZF9j bnQgKyAoKGkgPCBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSA/IDEgOiAy KSkKKwkJICA+PSBNQVhfQ09VTlQpCisJCWJyZWFrOworCSAgICAgIC8qIElu Y3JlYXNlIHdvcmQgY291bnQgYnkgMiBmb3IgbG9uZyByZWdpc3RlcnMgZXhj ZXB0IFJBLiAgICovCisJICAgICAgd29yZF9jbnQgKz0gKChpIDwgQ1IxNl9G SVJTVF9EV09SRF9SRUdJU1RFUikgPyAxIDogMik7CisJICAgIH0KKwkgICsr aTsKKwl9CisKKyAgICAgIC8qIE5vIG5lZWQgdG8gZ2VuZXJhdGUgYW55IGlu c3RydWN0aW9uIGFzCisgICAgICAgICBubyByZWdpc3RlciBvciBSQSBuZWVk cyB0byBiZSBzYXZlZC4gICovCisgICAgICBpZiAoKHdvcmRfY250ID09IDAp ICYmIChwcmludF9yYSA9PSAwKSkKKwljb250aW51ZTsKKworICAgICAgLyog Tm93IHByZXBhcmUgdGhlIGluc3RydWN0aW9uIG9wZXJhbmRzLiAgKi8KKyAg ICAgIGlmICh3b3JkX2NudCA+IDApCisJeworCSAgc3ByaW50ZiAob25lX2lu c3Rfc3RyLCAiJCVkLCAlcyIsIHdvcmRfY250LCByZWdfbmFtZXNbc3RhcnRf cmVnXSk7CisJICBpZiAocHJpbnRfcmEpCisJICAgIHN0cmNhdCAob25lX2lu c3Rfc3RyLCAiLCByYSIpOworCX0KKyAgICAgIGVsc2UKKwlzdHJjYXQgKG9u ZV9pbnN0X3N0ciwgInJhIik7CisKKyAgICAgIGlmIChwdXNoX29yX3BvcCA9 PSAxKQorCXsKKwkgIC8qIFBvcCBpbnN0cnVjdGlvbi4gICovCisJICBpZiAo cHJpbnRfcmEgJiYgIWNyMTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKCkKKwkg ICAgICAmJiAhY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorCSAgICAvKiBQcmlu dCBwb3ByZXQgaWYgUkEgaXMgc2F2ZWQgYW5kIGl0cyBub3QgYSBpbnRlcnJ1 cHQgCisJICAgICAgIGZ1bmN0aW9uLiAgKi8KKwkgICAgc3RyY3B5ICh0ZW1w X3N0ciwgIlxuXHRwb3ByZXRcdCIpOworCSAgZWxzZQorCSAgICBzdHJjcHkg KHRlbXBfc3RyLCAiXG5cdHBvcFx0Iik7CisKKwkgIHN0cmNhdCAodGVtcF9z dHIsIG9uZV9pbnN0X3N0cik7CisKKwkgIC8qIEFkZCB0aGUgcG9wIGluc3Ry dWN0aW9uIGxpc3QuICAqLworCSAgc3RyY2F0IChyZXR1cm5fc3RyLCB0ZW1w X3N0cik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFB1c2ggaW5zdHJ1 Y3Rpb24uICAqLworCSAgc3RyY3B5ICh0ZW1wX3N0ciwgIlxuXHRwdXNoXHQi KTsKKwkgIHN0cmNhdCAodGVtcF9zdHIsIG9uZV9pbnN0X3N0cik7CisKKwkg IC8qIFdlIG5lZWQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGluc3Ry dWN0aW9ucyBpZiB0aGVyZQorCSAgICAgYXJlIG1vcmUgdGhhbiBvbmUuIChz aW5jZSB0aGUgcG9wIHdpbGwgbm90IGJlIHJldmVyc2VkIGluIAorCSAgICAg dGhlIGVwaWxvZ3VlLiAgKi8KKwkgIHN0cmNhdCAodGVtcF9zdHIsIHJldHVy bl9zdHIpOworCSAgc3RyY3B5IChyZXR1cm5fc3RyLCB0ZW1wX3N0cik7CisJ fQorCisgICAgfQorCisgIGlmIChwdXNoX29yX3BvcCA9PSAxKQorICAgIHsK KyAgICAgIC8qIFBPUC4gICovCisgICAgICBpZiAoY3IxNl9pbnRlcnJ1cHRf ZnVuY3Rpb25fcCAoKSkKKwlzdHJjYXQgKHJldHVybl9zdHIsICJcblx0cmV0 eFxuIik7CisgICAgICBlbHNlIGlmIChjcnRsLT5jYWxsc19laF9yZXR1cm4p CisJeworCSAgLyogQWRkIHN0YWNrIGFkanVzdG1lbnQgYmVmb3JlIHJldHVy bmluZyB0byBleGNlcHRpb24gaGFuZGxlcgorCSAgICAgTk9URTogRUhfUkVU VVJOX1NUQUNLQURKX1JUWCBtdXN0IHJlZmVyIHRvIChyNSxyNCkuICAqLwor CSAgc3RyY2F0IChyZXR1cm5fc3RyLCAiXG5cdGFkZGRcdCAocjUscjQpLCAo c3ApXHRcbiIpOworCSAgc3RyY2F0IChyZXR1cm5fc3RyLCAiXG5cdGp1bXBc dCAocmEpXG4iKTsKKworCSAgLyogQnV0IGJlZm9yZSBhbnl0aGluZyBlbHNl LCB1bmRvIHRoZSBhZGp1c3RtZW50IGFkZGl0aW9uIGRvbmUgaW4KKwkgICAg IGNyMTZfZXhwYW5kX2VwaWxvZ3VlICgpLiAgKi8KKwkgIHN0cmNweSAodGVt cF9zdHIsICJcblx0c3ViZFx0IChyNSxyNCksIChzcClcdFxuIik7CisJICBz dHJjYXQgKHRlbXBfc3RyLCByZXR1cm5fc3RyKTsKKwkgIHN0cmNweSAocmV0 dXJuX3N0ciwgdGVtcF9zdHIpOworCX0KKyAgICAgIGVsc2UgaWYgKCFGVU5D X0lTX05PUkVUVVJOX1AgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkKKwkgICAg ICAgJiYgIShjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW1JFVFVSTl9B RERSRVNTX1JFR05VTV0pKQorCXN0cmNhdCAocmV0dXJuX3N0ciwgIlxuXHRq dW1wXHQgKHJhKVxuIik7CisgICAgfQorCisgIC8qIFNraXAgdGhlIG5ld2xp bmUgYW5kIHRoZSB0YWIgaW4gdGhlIHN0YXJ0IG9mIHJldHVybl9zdHIuICAq LworICByZXR1cm5fc3RyICs9IDI7CisgIHJldHVybiByZXR1cm5fc3RyOwor fQorCisKKy8qIEdlbmVyYXRlIERXQVJGMiBhbm5vdGF0aW9uIGZvciBtdWx0 aS1wdXNoIGluc3RydWN0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCitjcjE2X2Ny ZWF0ZV9kd2FyZl9mb3JfbXVsdGlfcHVzaCAocnR4IGluc24pCit7CisgIHJ0 eCBkd2FyZiwgcmVnLCB0bXA7CisgIGludCBpLCBqLCBmcm9tLCB0bywgd29y ZF9jbnQsIGR3YXJmX3Bhcl9pbmRleCwgaW5jOworICBlbnVtIG1hY2hpbmVf bW9kZSBtb2RlOworICBpbnQgbnVtX3JlZ3MgPSAwLCBvZmZzZXQgPSAwLCBz cGxpdF9oZXJlID0gMCwgdG90YWxfcHVzaF9ieXRlcyA9IDA7CisKKyAgZm9y IChpID0gMDsgaSA8PSBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZTsgKytpKQorICAgIHsKKyAgICAgIGlmIChjdXJyZW50X2ZyYW1lX2lu Zm8uc2F2ZV9yZWdzW2ldKQorCXsKKwkgICsrbnVtX3JlZ3M7CisJICBpZiAo aSA8IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpCisJICAgIHRvdGFsX3B1 c2hfYnl0ZXMgKz0gMjsKKwkgIGVsc2UKKwkgICAgdG90YWxfcHVzaF9ieXRl cyArPSA0OworCX0KKyAgICB9CisKKyAgaWYgKCFudW1fcmVncykKKyAgICBy ZXR1cm47CisKKyAgZHdhcmYgPSBnZW5fcnR4X1NFUVVFTkNFIChWT0lEbW9k ZSwgcnR2ZWNfYWxsb2MgKG51bV9yZWdzICsgMSkpOworICBkd2FyZl9wYXJf aW5kZXggPSBudW1fcmVnczsKKworICBmcm9tID0gY3VycmVudF9mcmFtZV9p bmZvLmxhc3RfcmVnX3RvX3NhdmUgKyAxOworICB0byA9IGN1cnJlbnRfZnJh bWVfaW5mby5sYXN0X3JlZ190b19zYXZlOworICB3b3JkX2NudCA9IDA7CisK KyAgZm9yIChpID0gY3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3Nh dmU7IGkgPj0gMDspCisgICAgeworICAgICAgaWYgKCFjdXJyZW50X2ZyYW1l X2luZm8uc2F2ZV9yZWdzW2ldIHx8IDAgPT0gaSB8fCBzcGxpdF9oZXJlKQor CXsKKwkgIC8qIFRoaXMgYmxvY2sgb2YgcmVncyBpcyBwdXNoZWQgaW4gb25l IGluc3RydWN0aW9uLiAgKi8KKwkgIGlmICgwID09IGkgJiYgY3VycmVudF9m cmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwkgICAgZnJvbSA9IDA7CisKKwkg IGZvciAoaiA9IHRvOyBqID49IGZyb207IC0taikKKwkgICAgeworCSAgICAg IGlmIChqIDwgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikKKwkJeworCQkg IG1vZGUgPSBISW1vZGU7CisJCSAgaW5jID0gMTsKKwkJfQorCSAgICAgIGVs c2UKKwkJeworCQkgIG1vZGUgPSBTSW1vZGU7CisJCSAgaW5jID0gMjsKKwkJ fQorCSAgICAgIHJlZyA9IGdlbl9ydHhfUkVHIChtb2RlLCBqKTsKKwkgICAg ICBvZmZzZXQgKz0gMiAqIGluYzsKKwkgICAgICB0bXAgPSBnZW5fcnR4X1NF VCAoVk9JRG1vZGUsCisJCQkJIGdlbl9mcmFtZV9tZW0gKG1vZGUsCisJCQkJ CQlwbHVzX2NvbnN0YW50CisJCQkJCQkoc3RhY2tfcG9pbnRlcl9ydHgsCisJ CQkJCQkgdG90YWxfcHVzaF9ieXRlcyAtIG9mZnNldCkpLAorCQkJCSByZWcp OworCSAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOworCSAg ICAgIFhWRUNFWFAgKGR3YXJmLCAwLCBkd2FyZl9wYXJfaW5kZXgtLSkgPSB0 bXA7CisJICAgIH0KKwkgIGZyb20gPSBpOworCSAgdG8gPSAtLWk7CisJICBz cGxpdF9oZXJlID0gMDsKKwkgIHdvcmRfY250ID0gMDsKKwkgIGNvbnRpbnVl OworCX0KKworICAgICAgaWYgKGkgIT0gUkVUVVJOX0FERFJFU1NfUkVHTlVN KQorCXsKKwkgIGluYyA9IChpIDwgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RF UikgPyAxIDogMjsKKwkgIGlmICh3b3JkX2NudCArIGluYyA+PSBNQVhfQ09V TlQgfHwgRlJBTUVfUE9JTlRFUl9SRUdOVU0gPT0gaSkKKwkgICAgeworCSAg ICAgIHNwbGl0X2hlcmUgPSAxOworCSAgICAgIGZyb20gPSBpOworCSAgICAg IGNvbnRpbnVlOworCSAgICB9CisJICB3b3JkX2NudCArPSBpbmM7CisJfQor CisgICAgICBmcm9tID0gaS0tOworICAgIH0KKworICB0bXAgPSBnZW5fcnR4 X1NFVCAoU0ltb2RlLCBzdGFja19wb2ludGVyX3J0eCwKKwkJICAgICBnZW5f cnR4X1BMVVMgKFNJbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJICAg R0VOX0lOVCAoLW9mZnNldCkpKTsKKyAgUlRYX0ZSQU1FX1JFTEFURURfUCAo dG1wKSA9IDE7CisgIFhWRUNFWFAgKGR3YXJmLCAwLCAwKSA9IHRtcDsKKyAg UkVHX05PVEVTIChpbnNuKSA9IGdlbl9ydHhfRVhQUl9MSVNUIChTSW1vZGUs IGR3YXJmLAorCQkJCQlSRUdfTk9URVMgKGluc24pKTsKK30KKworLyoKK0Nv bXBhY3RSSVNDIENSMTYgQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dDoKKwor ICAgICAwICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB8CisgICAgLgor ICAgIC4KKyAgICB8CisgICAgKz09PT09PT09PT09PT09PT09PT09IFNwICh4 KSA9IEFwICh4KzEpCisgICAgICBBIHwgQXJncyBmb3IgZnVuY3Rpb25zCisg ICAgICB8IHwgY2FsbGVkIGJ5IFggYW5kICAgICAgRHluYW1pY2FsbHkKKyAg ICAgIHwgfCBEeW5hbWljIGFsbG9jYXRpb25zICBhbGxvY2F0ZWQgYW5kCisg ICAgICB8IHwgKGFsbG9jYSwgdmFyaWFibGUgICAgZGVhbGxvY2F0ZWQKKyAg U3RhY2sgfCBsZW5ndGggYXJyYXlzKS4KKyAgZ3Jvd3MgKy0tLS0tLS0tLS0t LS0tLS0tLS0tIEZwICh4KQorICBkb3dufCB8IExvY2FsIHZhcmlhYmxlcyBv ZiBYCisgIHdhcmR8ICstLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgfCB8 IFJlZ3Mgc2F2ZWQgZm9yIFgtMQorICAgICAgfCArPT09PT09PT09PT09PT09 PT09PT0gU3AgKHgtMSkgPSBBcCAoeCkKKyAgICB8IEFyZ3MgZm9yIGZ1bmMg WAorICAgIHwgcHVzaGVkIGJ5IFgtMQorICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLSBGcCAoeC0xKQorICAgIHwKKyAgICB8CisgICAgVgorKi8KK3ZvaWQK K2NyMTZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQoreworICBydHggaW5zbjsK KworICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7CisgIGNyMTZfY29tcHV0ZV9z YXZlX3JlZ3MgKCk7CisKKyAgLyogSWYgdGhlcmUgaXMgbm8gbmVlZCBpbiBw dXNoIGFuZCBhZGp1c3RtZW50IHRvIHNwLCByZXR1cm4uICAqLworICBpZiAo KGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplICsgY3VycmVudF9mcmFt ZV9pbmZvLnJlZ19zaXplKSA9PSAwKQorICAgIHJldHVybjsKKworICBpZiAo Y3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUgIT0gLTEpCisg ICAgeworICAgICAgLyogSWYgdGhlcmUgYXJlIHJlZ2lzdGVycyB0byBwdXNo LiAgKi8KKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9wdXNoX2Zvcl9w cm9sb2d1ZQorCQkJKEdFTl9JTlQgKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdf c2l6ZSkpKTsKKyAgICAgIGNyMTZfY3JlYXRlX2R3YXJmX2Zvcl9tdWx0aV9w dXNoIChpbnNuKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24p ID0gMTsKKyAgICB9CisKKworICBpZiAoY3VycmVudF9mcmFtZV9pbmZvLnRv dGFsX3NpemUgPiAwKQorICAgIHsKKyAgICAgIGluc24gPSBlbWl0X2luc24g KGdlbl9hZGRzaTMgKHN0YWNrX3BvaW50ZXJfcnR4LCBzdGFja19wb2ludGVy X3J0eCwKKwkJCQkgICAgR0VOX0lOVCAoLWN1cnJlbnRfZnJhbWVfaW5mby50 b3RhbF9zaXplKSkpOworICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5z bikgPSAxOworICAgIH0KKworICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQp CisgICAgeworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcG9pbnRl ciB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgc3RhY2sgcG9pbnRlcgorICAgICAg ICAgcG9pbnRpbmcgbm93IHRvIHRoZSBsb2NhbHMuICAqLworICAgICAgaW5z biA9IGVtaXRfbW92ZV9pbnNuIChmcmFtZV9wb2ludGVyX3J0eCwgc3RhY2tf cG9pbnRlcl9ydHgpOworICAgIH0KK30KKworLyogR2VuZXJhdGUgaW5zbiB0 aGF0IHVwZGF0ZXMgdGhlIHN0YWNrIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5k IHBhZGRpbmcgCisgICBmb3IgcmVnaXN0ZXJzIHdlIHNhdmUuICAgLSBHZW5l cmF0ZSB0aGUgYXBwcm9wcmlhdGUgcmV0dXJuIGluc24uICAqLwordm9pZAor Y3IxNl9leHBhbmRfZXBpbG9ndWUgKHZvaWQpCit7CisgIHJ0eCBpbnNuOwor CisgIC8qIE5vbnplcm8gaWYgd2UgbmVlZCB0byByZXR1cm4gYW5kIHBvcCBv bmx5IFJBLiBUaGlzIHdpbGwgZ2VuZXJhdGUgYQorICAgICBkaWZmZXJlbnQg aW5zbi4gVGhpcyBkaWZmZXJlbnRpYXRlIGlzIGZvciB0aGUgcGVlcGhvbGVz IGZvciBjYWxsIGFzIAorICAgICBsYXN0IHN0YXRlbWVudCBpbiBmdW5jdGlv bi4gICovCisgIGludCBvbmx5X3BvcHJldF9SQSA9IChjdXJyZW50X2ZyYW1l X2luZm8uc2F2ZV9yZWdzW1JFVFVSTl9BRERSRVNTX1JFR05VTV0KKwkJCSYm IChjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgCisJCQkgPT0gQ1IxNl9V TklUU19QRVJfRFdPUkQpKTsKKyAgCisgIGlmIChmcmFtZV9wb2ludGVyX25l ZWRlZCkKKyAgICB7CisgICAgICAvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2lu dGVyIHdpdGggdGhlIGZyYW1lIHBvaW50ZXJzIHZhbHVlLiAgKi8KKyAgICAg IGluc24gPSBlbWl0X21vdmVfaW5zbiAoc3RhY2tfcG9pbnRlcl9ydHgsIGZy YW1lX3BvaW50ZXJfcnR4KTsKKyAgICB9CisKKyAgaWYgKGN1cnJlbnRfZnJh bWVfaW5mby50b3RhbF9zaXplID4gMCkKKyAgICB7CisgICAgICBpbnNuID0g ZW1pdF9pbnNuIChnZW5fYWRkc2kzIChzdGFja19wb2ludGVyX3J0eCwgc3Rh Y2tfcG9pbnRlcl9ydHgsCisJCQkJICAgIEdFTl9JTlQgKGN1cnJlbnRfZnJh bWVfaW5mby50b3RhbF9zaXplKSkpOworICAgICAgUlRYX0ZSQU1FX1JFTEFU RURfUCAoaW5zbikgPSAxOworICAgIH0KKworICBpZiAoY3J0bC0+Y2FsbHNf ZWhfcmV0dXJuKQorICAgIHsKKyAgICAgIC8qIEFkZCB0aGlzIGhlcmUgc28g dGhhdCAocjUscjQpIGlzIGFjdHVhbGx5IGxvYWRlZCB3aXRoIHRoZSBhZGp1 c3RtZW50CisgICAgICAgICB2YWx1ZTsgb3RoZXJ3aXNlLCB0aGUgbG9hZCBt aWdodCBiZSBvcHRpbWl6ZWQgYXdheS4uLgorICAgICAgICAgTk9URTogcmVt ZW1iZXIgdG8gc3VidHJhY3QgdGhlIGFkanVzdG1lbnQgYmVmb3JlIHBvcHBp bmcgdGhlIHJlZ3MKKyAgICAgICAgIGFuZCBhZGQgaXQgYmFjayBiZWZvcmUg cmV0dXJuaW5nLiAgKi8KKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9h ZGRzaTMgKHN0YWNrX3BvaW50ZXJfcnR4LCBzdGFja19wb2ludGVyX3J0eCwK KwkJCQkgICAgRUhfUkVUVVJOX1NUQUNLQURKX1JUWCkpOworICAgIH0KKwor ICBpZiAoY3IxNl9pbnRlcnJ1cHRfZnVuY3Rpb25fcCAoKSkKKyAgICB7Cisg ICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9pbnRlcnJ1cHRfcmV0 dXJuICgpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0g MTsKKyAgICB9CisgIGVsc2UgaWYgKGNydGwtPmNhbGxzX2VoX3JldHVybikK KyAgICB7CisgICAgICAvKiBTcGVjaWFsIGNhc2UsIHBvcCB3aGF0J3MgbmVj ZXNzYXJ5LCBhZGp1c3QgU1AgYW5kIGp1bXAgdG8gKFJBKS4gICovCisgICAg ICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9wb3BfYW5kX3BvcHJldF9y ZXR1cm4gCisJCQkgICAgIChHRU5fSU5UIChjdXJyZW50X2ZyYW1lX2luZm8u cmVnX3NpemUpKSk7CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNu KSA9IDE7CisgICAgfQorICBlbHNlIGlmIChjdXJyZW50X2ZyYW1lX2luZm8u bGFzdF9yZWdfdG9fc2F2ZSA9PSAtMSkKKyAgICAvKiBOb3RoaW5nIHRvIHBv cC4gICovCisgICAgLyogRG9uJ3Qgb3V0cHV0IGp1bXAgZm9yIGludGVycnVw dCByb3V0aW5lLCBvbmx5IHJldHguICAqLworICAgIGVtaXRfanVtcF9pbnNu IChnZW5fanVtcF9yZXR1cm4gKCkpOworICBlbHNlIGlmIChvbmx5X3BvcHJl dF9SQSkKKyAgICB7CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdl bl9wb3ByZXRfUkFfcmV0dXJuICgpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxB VEVEX1AgKGluc24pID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9wb3BfYW5kX3BvcHJldF9y ZXR1cm4gCisJCQkgICAgIChHRU5fSU5UIChjdXJyZW50X2ZyYW1lX2luZm8u cmVnX3NpemUpKSk7CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNu KSA9IDE7CisgICAgfQorfQorCisvKiBJbXBsZW1lbnRzIEZSQU1FX1BPSU5U RVJfUkVRVUlSRUQuICAqLworc3RhdGljIGJvb2wKK2NyMTZfZnJhbWVfcG9p bnRlcl9yZXF1aXJlZCAodm9pZCkKK3sKKyAgcmV0dXJuIChjZnVuLT5jYWxs c19hbGxvY2EgfHwgY3J0bC0+Y2FsbHNfZWhfcmV0dXJuCisJICB8fCBjZnVu LT5oYXNfbm9ubG9jYWxfbGFiZWwgfHwgY3J0bC0+Y2FsbHNfZWhfcmV0dXJu KTsKK30KKworc3RhdGljIGJvb2wKK2NyMTZfY2FuX2VsaW1pbmF0ZSAoY29u c3QgaW50IGZyb20gQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgaW50IHRvKQor eworICByZXR1cm4gKHRvID09IFNUQUNLX1BPSU5URVJfUkVHTlVNID8gIWZy YW1lX3BvaW50ZXJfbmVlZGVkIDogdHJ1ZSk7Cit9CisKKworLyogQSBDIGNv bXBvdW5kIHN0YXRlbWVudCB0aGF0IGF0dGVtcHRzIHRvIHJlcGxhY2UgWCB3 aXRoCisgICBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIGZvciBhbiBvcGVyYW5k IG9mIG1vZGUgTU9ERS4gV0lOCisgICB3aWxsIGJlIGEgQyBzdGF0ZW1lbnQg bGFiZWwgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgorICAgWCB3aWxsIGFsd2F5 cyBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBicmVha19vdXRfbWVtb3J5 X3JlZnMgKCksCisgICBhbmQgT0xEWCB3aWxsIGJlIHRoZSBvcGVyYW5kIHRo YXQgd2FzIGdpdmVuIHRvIHRoYXQgZnVuY3Rpb24gdG8KKyAgIHByb2R1Y2Ug WC4KKyAgIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGlzIG1hY3JvIHNob3Vs ZCBub3QgYWx0ZXIgdGhlCisgICBzdWJzdHJ1Y3R1cmUgb2YgWC4gIElmIGl0 IHRyYW5zZm9ybXMgWCBpbnRvIGEgbW9yZSBsZWdpdGltYXRlIGZvcm0sIAor ICAgaXQgc2hvdWxkIGFzc2lnbiBYICh3aGljaCB3aWxsIGFsd2F5cyBiZSBh IEMgdmFyaWFibGUpIGEgbmV3IHZhbHVlLiAgKi8KK3N0YXRpYyBydHgKK2Ny MTZfbGVnaXRpbWl6ZV9hZGRyZXNzIChydHggeCwgcnR4IG9yaWdfeCBBVFRS SUJVVEVfVU5VU0VELAorCQkJIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRU UklCVVRFX1VOVVNFRCkKK3sKKyAgaWYgKGZsYWdfcGljKQorICAgIHJldHVy biBsZWdpdGltaXplX3BpY19hZGRyZXNzIChvcmlnX3gsIG1vZGUsIE5VTExf UlRYKTsKKyAgZWxzZQorICAgIHJldHVybiB4OworfQorCisvKiBJbXBsZW1l bnQgVEFSR0VUX0xFR0lUSU1BVEVfQ09OU1RBTlRfUAorICAgTm9uemVybyBp ZiBYIGlzIGEgbGVnaXRpbWF0ZSBjb25zdGFudCBmb3IgYW4gaW1tZWRpYXRl CisgICBvcGVyYW5kIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4gIFlvdSBjYW4g YXNzdW1lIHRoYXQgWAorICAgc2F0aXNmaWVzIENPTlNUQU5UX1AuIEluIGNy MTZjIHRyZWF0IGxlZ2l0aW1pemUgZmxvYXQgCisgICBjb25zdGFudCBhcyBh biBpbW1lZGlhdGUgb3BlcmFuZC4gICovCitzdGF0aWMgYm9vbAorY3IxNl9s ZWdpdGltYXRlX2NvbnN0YW50X3AgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUg QVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICBydHggeCBBVFRSSUJVVEVfVU5V U0VEKQoreworICByZXR1cm4gMTsKK30KKwordm9pZAorbm90aWNlX3VwZGF0 ZV9jYyAocnR4IGV4cCkKK3sKKyAgaWYgKEdFVF9DT0RFIChleHApID09IFNF VCkKKyAgICB7CisgICAgICAvKiBKdW1wcyBkbyBub3QgYWx0ZXIgdGhlIGNj J3MuICAqLworICAgICAgaWYgKFNFVF9ERVNUIChleHApID09IHBjX3J0eCkK KwlyZXR1cm47CisKKyAgICAgIC8qIE1vdmluZyByZWdpc3RlciBvciBtZW1v cnkgaW50byBhIHJlZ2lzdGVyOgorICAgICAgICAgaXQgZG9lc24ndCBhbHRl ciB0aGUgY2MncywgYnV0IGl0IG1pZ2h0IGludmFsaWRhdGUKKyAgICAgICAg IHRoZSBSVFgncyB3aGljaCB3ZSByZW1lbWJlciB0aGUgY2MncyBjYW1lIGZy b20uCisgICAgICAgICAoTm90ZSB0aGF0IG1vdmluZyBhIGNvbnN0YW50IDAg b3IgMSBNQVkgc2V0IHRoZSBjYydzKS4gICovCisgICAgICBpZiAoUkVHX1Ag KFNFVF9ERVNUIChleHApKQorCSAgJiYgKFJFR19QIChTRVRfU1JDIChleHAp KSB8fCBHRVRfQ09ERSAoU0VUX1NSQyAoZXhwKSkgPT0gTUVNKSkKKwl7CisJ ICByZXR1cm47CisJfQorCisgICAgICAvKiBNb3ZpbmcgcmVnaXN0ZXIgaW50 byBtZW1vcnkgZG9lc24ndCBhbHRlciB0aGUgY2Mncy4KKyAgICAgICAgIEl0 IG1heSBpbnZhbGlkYXRlIHRoZSBSVFgncyB3aGljaCB3ZSByZW1lbWJlciB0 aGUgY2MncyBjYW1lIGZyb20uICAqLworICAgICAgaWYgKEdFVF9DT0RFIChT RVRfREVTVCAoZXhwKSkgPT0gTUVNICYmIFJFR19QIChTRVRfU1JDIChleHAp KSkKKwl7CisJICByZXR1cm47CisJfQorCisgICAgfQorCisgIENDX1NUQVRV U19JTklUOworICByZXR1cm47Cit9CisKK3N0YXRpYyBlbnVtIG1hY2hpbmVf bW9kZQorY3IxNl91bndpbmRfd29yZF9tb2RlICh2b2lkKQoreworICByZXR1 cm4gU0ltb2RlOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG1kIGZp bGUuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbWl0IGFyaXRobWV0aWMg CisgICBESSBpbnN0cnVjdGlvbnMuIFRoZSBhcmd1bWVudCAibnVtIiBkZWNp ZGVzIHdoaWNoIGluc3RydWN0aW9uIHRvIGJlCisgICBwcmludGVkLiAgKi8K K2NvbnN0IGNoYXIgKgorY3IxNl9lbWl0X2FkZF9zdWJfZGkgKHJ0eCAqb3Bl cmFuZHMsIGludCBudW0pCit7CisKKyAgcnR4IGxvX29wWzJdIDsKKyAgcnR4 IGhpMF9vcFsyXSA7CisgIHJ0eCBoaTFfb3BbMl0gOworCisgIGxvX29wWzBd ID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworICBoaTBf b3BbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRz WzBdLCBESW1vZGUsIDQpOworICBoaTFfb3BbMF0gPSBzaW1wbGlmeV9nZW5f c3VicmVnIChISW1vZGUsIG9wZXJhbmRzWzBdLCBESW1vZGUsIDYpOworCisg IGxvX29wWzFdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0p OworICBoaTBfb3BbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUs IG9wZXJhbmRzWzJdLCBESW1vZGUsIDQpOworICBoaTFfb3BbMV0gPSBzaW1w bGlmeV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRzWzJdLCBESW1vZGUs IDYpOworCisgIGlmIChudW0gPT0gMCkKKyAgICB7CisgICAgICAgIG91dHB1 dF9hc21faW5zbiAoImFkZGRcdCUxLCAlMCIsIGxvX29wKSA7CisgICAgICAg IG91dHB1dF9hc21faW5zbiAoImFkZGN3XHQlMSwgJTAiLCBoaTBfb3ApIDsK KyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgiYWRkY3dcdCUxLCAlMCIsIGhp MV9vcCkgOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICBlbHNlIGlm IChudW0gPT0gMSkKKyAgICB7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAo InN1YmRcdCUxLCAlMCIsIGxvX29wKSA7CisgICAgICAgIG91dHB1dF9hc21f aW5zbiAoInN1YmN3XHQlMSwgJTAiLCBoaTBfb3ApIDsKKyAgICAgICAgb3V0 cHV0X2FzbV9pbnNuICgic3ViY3dcdCUxLCAlMCIsIGhpMV9vcCkgOworICAg ICAgICByZXR1cm4gIiI7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuICIi OworCit9CisKKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBtZCBmaWxlLiBU aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW1pdCBsb2dpY2FsIAorICAgREkg aW5zdHJ1Y3Rpb25zLiBUaGUgYXJndW1lbnQgIm51bSIgZGVjaWRlcyB3aGlj aCBpbnN0cnVjdGlvbiB0byBiZQorICAgcHJpbnRlZC4gICovCitjb25zdCBj aGFyICoKK2NyMTZfZW1pdF9sb2dpY2FsX2RpIChydHggKm9wZXJhbmRzLCBp bnQgbnVtKQoreworCisgIHJ0eCBsb19vcFsyXSA7CisgIHJ0eCBoaV9vcFsy XSA7CisKKyAgbG9fb3BbMF0gPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvcGVy YW5kc1swXSk7CisgIGhpX29wWzBdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAo U0ltb2RlLCBvcGVyYW5kc1swXSwgREltb2RlLCA0KTsKKworICBsb19vcFsx XSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzJdKTsKKyAgaGlf b3BbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1vZGUsIG9wZXJhbmRz WzJdLCBESW1vZGUsIDQpOworICBpZiAobnVtID09IDApCisgICAgeworICAg ICAgICBvdXRwdXRfYXNtX2luc24gKCJhbmRkXHQlMSwgJTAiLCBsb19vcCkg OworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJhbmRkXHQlMSwgJTAiLCBo aV9vcCkgOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICBlbHNlIGlm IChudW0gPT0gMSkKKyAgICB7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAo Im9yZFx0JTEsICUwIiwgbG9fb3ApIDsKKyAgICAgICAgb3V0cHV0X2FzbV9p bnNuICgib3JkXHQlMSwgJTAiLCBoaV9vcCkgOworICAgICAgICByZXR1cm4g IiI7CisgICAgfQorICBlbHNlIGlmIChudW0gPT0gMikKKyAgICB7CisgICAg ICAgIG91dHB1dF9hc21faW5zbiAoInhvcmRcdCUxLCAlMCIsIGxvX29wKSA7 CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoInhvcmRcdCUxLCAlMCIsIGhp X29wKSA7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgIGVsc2UKKyAg ICByZXR1cm4gIiI7Cit9CisKKy8qIEluaXRpYWxpemUgJ3RhcmdldG0nIHZh cmlhYmxlIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyAK KyAgIGFuZCBkYXRhIHJlbGF0aW5nIHRvIHRoZSB0YXJnZXQgbWFjaGluZS4g ICovCisKK3N0cnVjdCBnY2NfdGFyZ2V0IHRhcmdldG0gPSBUQVJHRVRfSU5J VElBTElaRVI7Ci0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2LmgJMTk3 MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2Mv Y29uZmlnL2NyMTYvY3IxNi5oCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAw MDAwICswNTMwCkBAIC0wLDAgKzEsNTkxIEBACisvKiBEZWZpbml0aW9ucyBv ZiB0YXJnZXQgbWFjaGluZSBmb3IgR05VIGNvbXBpbGVyLCBmb3IgQ1IxNi4K KyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZv c3lzdGVtcyBMaW1pdGVkLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH Q0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKyAgIAorI2lmbmRlZiBHQ0NfQ1IxNl9ICisj ZGVmaW5lIEdDQ19DUjE2X0gKKworI2RlZmluZSBPQkpFQ1RfRk9STUFUX0VM RgorCisvKiBDb250cm9sbGluZyB0aGUgZHJpdmVyLiAgKi8KKworLyogVGhl IEdOVSBDKysgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyB0aGF0IHRoZXNl IG1hY3JvcyBiZSBkZWZpbmVkLiAgKi8KKyN1bmRlZiBDUExVU1BMVVNfQ1BQ X1NQRUMKKyNkZWZpbmUgQ1BMVVNQTFVTX0NQUF9TUEVDICItRF9HTlVfU09V UkNFICUoY3BwKSIKKworI3VuZGVmICBTVEFSVEZJTEVfU1BFQworI2RlZmlu ZSBTVEFSVEZJTEVfU1BFQyAiY3J0MS5vJXMgY3J0aS5vJXMgY3J0YmVnaW4u byVzIGNydGxpYmlkLm8lcyIKKworI3VuZGVmICBFTkRGSUxFX1NQRUMKKyNk ZWZpbmUgRU5ERklMRV9TUEVDICJjcnRlbmQubyVzIGNydG4ubyVzIgorCisj dW5kZWYgIE1BVEhfTElCUkFSWQorI2RlZmluZSBNQVRIX0xJQlJBUlkgIiIK KworI3VuZGVmICBMSUJfU1BFQworI2RlZmluZSBMSUJfU1BFQyAiLSggLWxj ICV7bXNpbSo6LWxzaW19JXshbXNpbSo6LWxub3N5c30gLSkgXAorJXttc2lt KjoleyFUKjotVHNpbS5sZH19IFwKKyV7IVQqOiV7IW1zaW0qOiAley1UZWxm MzJjcjE2Lnh9fX0gIgorCisvKiBSdW4tdGltZSB0YXJnZXQgc3BlY2lmaWNh dGlvbi4gICovCisjaWZuZGVmIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TCisj ZGVmaW5lIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkgICAgICAgICAgXAor ZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSX18iKTsgICAgICAgICAgICAg XAorICAgIGJ1aWx0aW5fZGVmaW5lICgiX19DUjE2X18iKTsgICAgICAgICAg IFwKKyAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNkNfXyIpOyAgICAgICAg ICBcCisgICAgaWYgKFRBUkdFVF9DUjE2Q1ApICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSMTZDUF9fIik7ICAg ICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNkNTVERfXyIp OyAgICAgXAorICAgIGlmIChDUjE2X1RBUkdFVF9EQVRBX05FQVIpICAgICAg ICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19EQVRBX05FQVJf XyIpOyAgICBcCisgICAgaWYgKENSMTZfVEFSR0VUX0RBVEFfTUVESVVNKSAg ICAgICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0RBVEFfTUVE SVVNX18iKTsgIFwKKyAgICBpZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpICAg ICAgICAgICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAoIl9fREFUQV9G QVJfXyIpOyAgICAgXAorICAgIGlmIChUQVJHRVRfSU5UMzIpICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19JTlQz Ml9fIik7ICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKK3doaWxlICgwKQorI2VuZGlmCisKKy8qIEZv cmNlIHRoZSBnZW5lcmF0aW9uIG9mIGR3YXJmIC5kZWJ1Z19mcmFtZSBzZWN0 aW9ucyBldmVuIGlmIG5vdAorICAgY29tcGlsaW5nIC1nLiAgVGhpcyBndWFy YW50ZWVzIHRoYXQgd2UgY2FuIHVud2luZCB0aGUgc3RhY2suICAqLworI2Rl ZmluZSBEV0FSRjJfRlJBTUVfSU5GTyAxCisKKyNkZWZpbmUgUFJFRkVSUkVE X0RFQlVHR0lOR19UWVBFIERXQVJGMl9ERUJVRworCisvKiBHZW5lcmF0ZSAu ZmlsZS8ubG9jIGRpcmVjdGl2ZXMsIHNvIHRoYXQgdGhlIGFzc2VtYmxlciBn ZW5lcmF0ZXMgdGhlCisgICBsaW5lIHRhYmxlLiAgKi8KKyNkZWZpbmUgRFdB UkYyX0FTTV9MSU5FX0RFQlVHX0lORk8gMQorCisjZGVmaW5lIENSMTZfVEFS R0VUX0RBVEFfTkVBUiAgIGNyMTZfaXNfZGF0YV9tb2RlbCAoRE1fTkVBUikK KyNkZWZpbmUgQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0gY3IxNl9pc19kYXRh X21vZGVsIChETV9ERUZBVUxUKQorI2RlZmluZSBDUjE2X1RBUkdFVF9EQVRB X0ZBUiAgICBjcjE2X2lzX2RhdGFfbW9kZWwgKERNX0ZBUikKKworLyogU3Rv cmFnZSBsYXlvdXQuICAqLworI2RlZmluZSBCSVRTX0JJR19FTkRJQU4gICAg IDAKKworI2RlZmluZSBCWVRFU19CSUdfRU5ESUFOICAgIDAKKworI2RlZmlu ZSBXT1JEU19CSUdfRU5ESUFOICAgIDAKKworI2RlZmluZSBVTklUU19QRVJf V09SRCAgICAgIDIKKworLyogVW5pdHMgcGVyIDMyLWJpdCAoRFdPUkQpLiAg Ki8KKyNkZWZpbmUgQ1IxNl9VTklUU19QRVJfRFdPUkQgNAorCisjZGVmaW5l IFBPSU5URVJfU0laRSAgICAgICAgMzIKKworI2RlZmluZSBQQVJNX0JPVU5E QVJZICAgICAgIDE2CisKKyNkZWZpbmUgU1RBQ0tfQk9VTkRBUlkgICAgICAo TUFYIChCSUdHRVNUX0FMSUdOTUVOVCwgUEFSTV9CT1VOREFSWSkpCisKKyNk ZWZpbmUgRlVOQ1RJT05fQk9VTkRBUlkgICghb3B0aW1pemVfc2l6ZSA/IEJJ R0dFU1RfQUxJR05NRU5UIDogQklUU19QRVJfV09SRCkKKworLyogQmlnZ2Vz dCBhbGlnbm1lbnQgb24gQ1IxNkMrIGlzIDMyLWJpdCBhcyBpbnRlcm5hbCBi dXMgaXMgQU1CQSBiYXNlZCAKKyAgIHdoZXJlIGFzIENSMTZDIGlzIHByb3By aWV0YXJ5IGludGVybmFsIGJ1cyBhcmNoaXRlY3R1cmUuICAqLworI2RlZmlu ZSBCSUdHRVNUX0FMSUdOTUVOVCAgICgoVEFSR0VUX0NSMTZDUCkgPyAzMiA6 IDE2KQorCisjZGVmaW5lIE1BWF9GSVhFRF9NT0RFX1NJWkUgNjQKKworLyog SW4gQ1IxNiBhcnJheXMgb2YgY2hhcnMgYXJlIHdvcmQtYWxpZ25lZCwgc28g c3RyY3B5ICgpIHdpbGwgYmUgZmFzdGVyLiAgKi8KKyNkZWZpbmUgREFUQV9B TElHTk1FTlQoVFlQRSwgQUxJR04pICAgICAgICAgICAgIFwKKyAgKCgoVFJF RV9DT0RFIChUWVBFKSA9PSBBUlJBWV9UWVBFKSAgICAgICAgICAgIFwKKyAg ICAgJiYgKFRZUEVfTU9ERSAoVFJFRV9UWVBFIChUWVBFKSkgPT0gUUltb2Rl KSBcCisgICAgICYmICgoQUxJR04pIDwgQklUU19QRVJfV09SRCkpICAgICAg ICAgICAgICAgXAorICAgICA/IChCSVRTX1BFUl9XT1JEKSA6IChBTElHTikp CisKKy8qIEluIENSMTYgc3RyaW5ncyBhcmUgd29yZC1hbGlnbmU7IHN0cmNw eSBmcm9tIGNvbnN0YW50cyB3aWxsIGJlIGZhc3Rlci4gICovCisjZGVmaW5l IENPTlNUQU5UX0FMSUdOTUVOVChDT05TVEFOVCwgQUxJR04pICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoVFJFRV9DT0RFIChDT05TVEFO VCkgPT0gU1RSSU5HX0NTVCkgJiYgKChBTElHTikgPCBCSVRTX1BFUl9XT1JE KSkgXAorICAgICA/IChCSVRTX1BFUl9XT1JEKSA6IChBTElHTikpCisKKyNk ZWZpbmUgU1RSSUNUX0FMSUdOTUVOVCAwCisKKyNkZWZpbmUgUENDX0JJVEZJ RUxEX1RZUEVfTUFUVEVSUyAxCisKKy8qIExheW91dCBvZiBzb3VyY2UgbGFu Z3VhZ2UgZGF0YSB0eXBlcy4gICovCisjZGVmaW5lIElOVF9UWVBFX1NJWkUg ICAgICAgKFRBUkdFVF9JTlQzMiA/IDMyIDogMTYpCisKKyNkZWZpbmUgU0hP UlRfVFlQRV9TSVpFICAgICAxNgorCisjZGVmaW5lIExPTkdfVFlQRV9TSVpF ICAgICAgMzIKKworI2RlZmluZSBMT05HX0xPTkdfVFlQRV9TSVpFIDY0CisK KyNkZWZpbmUgRkxPQVRfVFlQRV9TSVpFICAgICAzMgorCisjZGVmaW5lIERP VUJMRV9UWVBFX1NJWkUgICAgNjQKKworI2RlZmluZSBMT05HX0RPVUJMRV9U WVBFX1NJWkUgNjQKKworI2RlZmluZSBERUZBVUxUX1NJR05FRF9DSEFSIDEK KworI2RlZmluZSBTSVpFX1RZUEUgICAgICAgICAgICJsb25nIHVuc2lnbmVk IGludCIKKworI2RlZmluZSBQVFJESUZGX1RZUEUgICAgICAgICJsb25nIGlu dCIKKworI2RlZmluZSBXQ0hBUl9UWVBFICAgICAgICAgICJzaG9ydCB1bnNp Z25lZCBpbnQiCisKKyNkZWZpbmUgV0NIQVJfVFlQRV9TSVpFICAgICAxNgor CisvKiBCeSBkZWZhdWx0LCB0aGUgQysrIGNvbXBpbGVyIHdpbGwgdXNlIHRo ZSBsb3dlc3QgYml0IG9mIHRoZSBwb2ludGVyCisgICB0byBmdW5jdGlvbiB0 byBpbmRpY2F0ZSBhIHBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uIHBvaW50 cyB0byBhCisgICB2aXJ0dWFsIG1lbWJlciBmdW5jdGlvbi4gIEhvd2V2ZXIs IGluIENSIGFyY2hpdGVjdHVyZSBGVU5DVElPTl9CT1VOREFSWQorICAgaW5k aWNhdGVzIGZ1bmN0aW9uIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGV2ZW4sIGJ1 dCBmdW5jdGlvbiBwb2ludGVycyBjYW4gYmUKKyAgIG9kZCAoYWZ0ZXIgcmln aHQtc2hpZnRpbmcgdGhlbSB3aGVuIGxvYWRpbmcgdGhlbSBpbnRvIGEgcmVn aXN0ZXIpLCBhbmQgdGhlCisgICBkZWZhdWx0IGRvZXNuJ3Qgd29yay4gIElu IHRoYXQgY2FzZSwgdGhlIGxvd2VzdCBiaXQgb2YgdGhlIGRlbHRhCisgICBm aWVsZCB3aWxsIGJlIHVzZWQgKHRoZSByZW1haW5kZXIgb2YgdGhlIGZpZWxk IGlzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQpLiAgKi8KKyNkZWZpbmUgVEFSR0VU X1BUUk1FTUZVTkNfVkJJVF9MT0NBVElPTiAgICAgcHRybWVtZnVuY192Yml0 X2luX2RlbHRhCisKKy8qIERlZmluZSBERUZBVUxUX1BDQ19TVFJVQ1RfUkVU VVJOIHRvIDEgaWYgYWxsIHN0cnVjdHVyZSBhbmQgdW5pb24gcmV0dXJuCisg ICB2YWx1ZXMgbXVzdCBiZSBpbiBtZW1vcnkuICAqLworI2RlZmluZSBERUZB VUxUX1BDQ19TVFJVQ1RfUkVUVVJOIDAKKworLyogUmVnaXN0ZXIgdXNhZ2Uu ICAqLworCisvKiBGaXJzdCAzMi1iaXQgcmVnaXN0ZXIgaXMgUjEyLiAgKi8K KyNkZWZpbmUgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUiAgIDEyCisKKyNk ZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSICAgICAgIDE2CisKKy8qIDEg Zm9yIHJlZ2lzdGVycyB0aGF0IGhhdmUgcGVydmFzaXZlIHN0YW5kYXJkIHVz ZXMKKyAgIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhlIHJlZ2lzdGVy IGFsbG9jYXRvci4KKyAgIE9uIHRoZSBDUjE2LCBvbmx5IHRoZSBzdGFjayBw b2ludGVyIChyMTUpIGlzIHN1Y2guICAqLworI2RlZmluZSBGSVhFRF9SRUdJ U1RFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAvKiByMCAgcjEgIHIyICByMyAgcjQgIHI1ICByNiAgcjcgIHI4 ICByOSAgcjEwLiAgKi8gXAorICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwg IDAsICAwLCAgMCwgIDAsICAwLCAgICAgICAgXAorICAvKiByMTEgcjEyIHIx MyByYSAgc3AuICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IDAsICAwLCAgMCwgIDAsICAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICB9ICAgICAgCisKKy8qIDEgZm9yIHJlZ2lzdGVycyBub3Qg YXZhaWxhYmxlIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4KKyAgIFRoZXNlIG11 c3QgaW5jbHVkZSB0aGUgRklYRURfUkVHSVNURVJTIGFuZCBhbHNvIGFueQor ICAgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBiZWluZyBz YXZlZC4KKyAgIFRoZSBsYXR0ZXIgbXVzdCBpbmNsdWRlIHRoZSByZWdpc3Rl cnMgd2hlcmUgdmFsdWVzIGFyZSByZXR1cm5lZAorICAgYW5kIHRoZSByZWdp c3RlciB3aGVyZSBzdHJ1Y3R1cmUtdmFsdWUgYWRkcmVzc2VzIGFyZSBwYXNz ZWQuCisgCisgICBPbiB0aGUgQ1IxNiwgY2FsbHMgY2xvYmJlcnMgcjAtcjYg KHNjcmF0Y2ggcmVnaXN0ZXJzKSwgCisgICByYSAodGhlIHJldHVybiBhZGRy ZXNzKSBhbmQgc3AgKHRoZSBzdGFjayBwb2ludGVyKS4gICovCisjZGVmaW5l IENBTExfVVNFRF9SRUdJU1RFUlMgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgIC8qIHIwICByMSAgcjIgIHIzICByNCAgcjUg IHI2ICByNyAgcjggIHI5ICByMTAuICAqLyBcCisgICAgMSwgIDEsICAxLCAg MSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAgICAgICBcCisgIC8q IHIxMSByMTIgcjEzIHJhICBzcC4gICovICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgMCwgIDAsICAwLCAgMSwgIDEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgIH0KKworLyogUmV0dXJucyAxIGlmIHRo ZSByZWdpc3RlciBpcyBsb25nZXIgdGhhbiB3b3JkIHNpemUsIDAgb3RoZXJ3 aXNlLiAgKi8KKyNkZWZpbmUgTE9OR19SRUdfUChSRUdOTykgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAoSEFSRF9SRUdOT19OUkVHUyAoUkVHTk8sICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIAkJICAgICBH RVRfTU9ERV9XSURFUl9NT0RFIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplCSAg ICAgXAorICAJCQkJCSAgKEJJVFNfUEVSX1dPUkQsIE1PREVfSU5UKSkpICAg ICAgICBcCisgICAJCSAgICAgID09IDEpCisKKyNkZWZpbmUgSEFSRF9SRUdO T19OUkVHUyhSRUdOTywgTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICgoUkVHTk8gPj0gQ1IxNl9GSVJTVF9EV09S RF9SRUdJU1RFUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgID8gKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIENSMTZfVU5J VFNfUEVSX0RXT1JEIC0gMSkgLyBDUjE2X1VOSVRTX1BFUl9EV09SRClcCisg IDogKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9XT1JEICAg ICAgIC0gMSkgLyBVTklUU19QRVJfV09SRCkpCisKKy8qIE5vbnplcm8gaWYg aXQgaXMgcGVybWlzc2libGUgdG8gc3RvcmUgYSB2YWx1ZSBvZiBtb2RlIEB2 YXJ7bW9kZX0gaW4gaGFyZAorICAgcmVnaXN0ZXIgbnVtYmVyIEB2YXJ7cmVn bm99IChvciBpbiBzZXZlcmFsIHJlZ2lzdGVycyBzdGFydGluZyB3aXRoIHRo YXQKKyAgIG9uZSkuICBPbiB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIGFsbCBy ZWdpc3RlcnMgY2FuIGhvbGQgYWxsIG1vZGVzLAorICAgZXhjZXB0IHRoYXQg ZG91YmxlIHByZWNpc2lvbiBmbG9hdHMgKGFuZCBkb3VibGUgaW50cykgbXVz dCBmYWxsIG9uCisgICBldmVuLXJlZ2lzdGVyIGJvdW5kYXJpZXMuICAqLyAK KyNkZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RFKSBjcjE2 X2hhcmRfcmVnbm9fbW9kZV9vayAoUkVHTk8sIE1PREUpCisKKyNkZWZpbmUg Tk9USUNFX1VQREFURV9DQyhFWFAsIElOU04pIFwKKyAgIG5vdGljZV91cGRh dGVfY2MgKChFWFApKQorCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb25zIGNhbiBv bmx5IHVzZSByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiAKKyAg IHNhdmVkIGJ5IHRoZSBwcm9sb2d1ZSwgZXZlbiBpZiB0aGV5IHdvdWxkIG5v cm1hbGx5IGJlIGNhbGwtY2xvYmJlcmVkIAorICAgQ2hlY2sgaWYgc2l6ZXMg YXJlIHNhbWUgYW5kIHRoZW4gY2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8g cmVuYW1lLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19SRU5BTUVfT0soU1JD LCBERVNUKSAgICAgICAgICAgICAgICAgXAorICAoIWNyMTZfaW50ZXJydXB0 X2Z1bmN0aW9uX3AgKCkgfHwgKGRmX3JlZ3NfZXZlcl9saXZlX3AgKERFU1Qp KSkKKworLyogRXhjZXB0aW9uIGhhbmRsaW5nIHN0dWZmLiAgKi8KKworLypU byBlbnN1cmUgY29ycmVjdCBkd2FyZiB1bndpbmRpbmcuICAqLworI2RlZmlu ZSBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUgX19hdHRyaWJ1dGVfXygob3B0 aW1pemUgKCJuby1nY3NlIiwibm8tZHNlIikpKQorCisjZGVmaW5lIGdlbl9y dHhfUkEJZ2VuX3J0eF9SRUcgKFBtb2RlLCBSRVRVUk5fQUREUkVTU19SRUdO VU0pCisKKy8qIFVzZSAocjgscjcpIGFuZCAocjEwLHI5KSB0byBwYXNzIGV4 Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisjZGVmaW5lIEVI X1JFVFVSTl9EQVRBX1JFR05PKE4pICgoKE4pIDwgMikgPyAoTioyICsgNykg OiBJTlZBTElEX1JFR05VTSkKKworI2RlZmluZSBEV0FSRjJfVU5XSU5EX0lO Rk8gMQorCisvKiAocjUscjQpIGhvbGRzIGEgc3RhY2sgYWRqdXN0bWVudCBm b3IgcmV0dXJuaW5nIHRvIGEgaGFuZGxlci4gICovCisjZGVmaW5lIEVIX1JF VFVSTl9TVEFDS0FESl9SVFggCQlnZW5fcnR4X1JFRyAoUG1vZGUsIDQpCisK KyNkZWZpbmUgRUhfUkVUVVJOX0hBTkRMRVJfUlRYIFwKKyAgZ2VuX3J0eF9N RU0gKFBtb2RlLCBwbHVzX2NvbnN0YW50IChhcmdfcG9pbnRlcl9ydHgsIC00 KSkKKworI2RlZmluZSBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgJZ2VuX3J0 eF9SQQorCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4JXAor ICBEV0FSRl9GUkFNRV9SRUdOVU0gKFJFVFVSTl9BRERSRVNTX1JFR05VTSkK KworI2RlZmluZSBJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQJCTAJCisjZGVm aW5lIEZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVChGTkRFQ0wpCTAJCisKKy8q IEEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRp bmcgdGhlIHZhbHVlIG9mIHRoZSByZXR1cm4KKyAgIGFkZHJlc3MgZm9yIHRo ZSBmcmFtZSBDT1VOVCBzdGVwcyB1cCBmcm9tIHRoZSBjdXJyZW50IGZyYW1l LiAgKi8KKyNkZWZpbmUgUkVUVVJOX0FERFJfUlRYKENPVU5ULCBGUkFNRSkg CQkJICAJCVwKKyAgKDAgPT0gQ09VTlQpCT8gIGdlbl9ydHhfUExVUyAoUG1v ZGUsIGdlbl9ydHhfUkEsIGdlbl9ydHhfUkEpCQlcCisJCTogIGNvbnN0MF9y dHgKKworI2RlZmluZSBNT0RFU19USUVBQkxFX1AoTU9ERTEsIE1PREUyKSAg XAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9ERV9DTEFT UyAoTU9ERTIpKQorCitlbnVtIHJlZ19jbGFzcworeworICBOT19SRUdTLAor ICBTSE9SVF9SRUdTLAorICBMT05HX1JFR1MsCisgIE5PU1BfUkVHUywKKyAg RE9VQkxFX0JBU0VfUkVHUywKKyAgR0VORVJBTF9SRUdTLAorICBBTExfUkVH UywKKyAgTElNX1JFR19DTEFTU0VTCit9OworCisjZGVmaW5lIE5fUkVHX0NM QVNTRVMgKGludCkgTElNX1JFR19DTEFTU0VTCisKKyNkZWZpbmUgUkVHX0NM QVNTX05BTUVTCVwKKyAgewkJCVwKKyAgICAiTk9fUkVHUyIsCQlcCisgICAg IlNIT1JUX1JFR1MiLAlcCisgICAgIkxPTkdfUkVHUyIsCVwKKyAgICAiTk9T UF9SRUdTIiwJXAorICAgICJET1VCTEVfQkFTRV9SRUdTIiwJXAorICAgICJH RU5FUkFMX1JFR1MiLAlcCisgICAgIkFMTF9SRUdTIgkJXAorICB9CisKKyNk ZWZpbmUgUkVHX0NMQVNTX0NPTlRFTlRTCQkJICAgICAJCVwKKyAgewkJCQkJ CSAgICAgCQlcCisgICAgezB4MDAwMDAwMDB9LCAvKiBOT19SRUdTCQkgICAg ICAgICAgICAgKi8gIAlcCisgICAgezB4MDAwMDBGRkZ9LCAvKiBTSE9SVF9S RUdTIAk6IDAgLSAxMSAgICAgKi8gICAJXAorICAgIHsweDAwMDBGMDAwfSwg LyogTE9OR19SRUdTIAkJOiAxMiAtIDE1ICAgICovICAJXAorICAgIHsweDAw MDA3RkZGfSwgLyogTk9TUF9SRUdTIAkJOiAwIC0gMTQgICAgICovICAgCVwK KyAgICB7MHgwMDAwRjU1NX0sIC8qIERPVUJMRV9CQVNFX1JFR1MgICA6IDIs NCw2LDgsMTAgKi8gIAlcCisgICAgezB4MDAwMEZGRkZ9LCAvKiBHRU5FUkFM X1JFR1MJOiAwIC0gMTUgICAgICovICAJXAorICAgIHsweDAwMDBGRkZGfSAg LyogQUxMX1JFR1MgCQk6IDAgLSAxNSAgICAgKi8gIAlcCisgIH0KKworI2Rl ZmluZSBUQVJHRVRfU01BTExfUkVHSVNURVJfQ0xBU1NFU19GT1JfTU9ERV9Q ICBob29rX2Jvb2xfbW9kZV90cnVlIAorCisjZGVmaW5lIFJFR05PX1JFR19D TEFTUyhSRUdOTykgIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChSRUdOTykKKwor I2RlZmluZSBCQVNFX1JFR19DTEFTUyAgICAgIEdFTkVSQUxfUkVHUworCisj ZGVmaW5lIE1PREVfQkFTRV9SRUdfQ0xBU1MoTU9ERSkgXAorICAoR0VUX01P REVfU0laRSAoTU9ERSkgPD0gNCA/ICAoQkFTRV9SRUdfQ0xBU1MpIDogIChE T1VCTEVfQkFTRV9SRUdTKSkKKworI2RlZmluZSBJTkRFWF9SRUdfQ0xBU1Mg ICAgICBMT05HX1JFR1MKKworI2RlZmluZSBDUjE2X1JFR05PX09LX0ZPUl9C QVNFX1AoUkVHTk8pICAgICAgICAgICAgICAgIFwKKyAgKCgoUkVHTk8pIDwg RklSU1RfUFNFVURPX1JFR0lTVEVSKSAgICAgICAgICAgICAgICAgICBcCisg ICB8fCAocmVnX3JlbnVtYmVyICYmICgodW5zaWduZWQpIHJlZ19yZW51bWJl cltSRUdOT10gXAorICAgICAgICAgICAgICAgICAgICAgICAgPCBGSVJTVF9Q U0VVRE9fUkVHSVNURVIpKSkKKworLyogVXNlIGV2ZW4tbnVtYmVyZWQgcmVn IGZvciA2NC1iaXQgYWNjZXNzZXMuICAqLworI2RlZmluZSBSRUdOT19NT0RF X09LX0ZPUl9CQVNFX1AoUkVHTk8sIE1PREUpCSAgXAorCShDUjE2X1JFR05P X09LX0ZPUl9CQVNFX1AoUkVHTk8pICAmJgkgIFwKKwkgICgoR0VUX01PREVf U0laRSAoTU9ERSkgPiA0ICAmJiAgCSAgXAorCSAgICAgKFJFR05PKSA8IENS MTZfRklSU1RfRFdPUkRfUkVHSVNURVIpXAorCSAgICAgPyAoMCA9PSAoKFJF R05PKSAmIDEpKSBcCisJICAgICA6IDEpKQorCisvKiBUT0RPOiBGb3Igbm93 IGxldHMgbm90IHN1cHBvcnQgaW5kZXggYWRkcmVzc2luZyBtb2RlLiAgKi8K KyNkZWZpbmUgUkVHTk9fT0tfRk9SX0lOREVYX1AoUkVHTk8pICAgICAgICBc CisgICgoKFJFR05PID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICBc CisgICAgICYmICgoUkVHTk8pIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKSkg XAorICAgfHwgKHJlZ19yZW51bWJlciAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAmJiAoKCh1bnNpZ25lZCkgcmVnX3JlbnVtYmVyW1JFR05P XSA+PSBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSBcCisgICAgICAgICAg ICAmJiAoKHVuc2lnbmVkKSByZWdfcmVudW1iZXJbUkVHTk9dIDwgRklSU1Rf UFNFVURPX1JFR0lTVEVSKSkpXAorICApCisKKyNkZWZpbmUgUFJFRkVSUkVE X1JFTE9BRF9DTEFTUyhYLCBDTEFTUykgQ0xBU1MKKworLyogVGhlIG1heGlt dW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBvZiBjbGFzcyBD TEFTUyBuZWVkZWQgdG8KKyAgIGhvbGQgYSB2YWx1ZSBvZiBtb2RlIE1PREUu CisgICBPbiB0aGUgQ29tcGFjdFJJU0MgYXJjaGl0ZWN0dXJlLCB0aGUgc2l6 ZSBvZiBNT0RFIGluIHdvcmRzLgorICAgVGhlIHNpemUgb2YgTU9ERSBpbiBk b3VibGUgd29yZHMgZm9yIHRoZSBjbGFzcyBMT05HX1JFR1MuCisKKyAgIFRo ZSBmb2xsb3dpbmcgY2hlY2sgYXNzdW1lcyBpZiB0aGUgY2xhc3MgaXMgbm90 IExPTkdfUkVHUywgdGhlbgorICAgYWxsIChOT19SRUdTLCBTSE9SVF9SRUdT LCBOT1NQX1JFR1MgYW5kIEdFTkVSQUxfUkVHUykgb3RoZXIgY2xhc3NlcyBh cmUgCisgICBzaG9ydC4gIFdlIG1heSBoYXZlIHRvIGNoZWNrIGlmIHRoaXMg Y2FuIGNhdXNlIGFueSBkZWdyYWRhdGlvbiBpbiAKKyAgIHBlcmZvcm1hbmNl LiAgKi8KKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNTLCBNT0RFKSBc CisgIChDTEFTUyA9PSBMT05HX1JFR1MgXAorICAgPyAoR0VUX01PREVfU0la RSAoTU9ERSkgKyBDUjE2X1VOSVRTX1BFUl9EV09SRCAtIDEpIC8gQ1IxNl9V TklUU19QRVJfRFdPUkRcCisgICA6IChHRVRfTU9ERV9TSVpFIChNT0RFKSAr IFVOSVRTX1BFUl9XT1JEIC0gMSkgLyBVTklUU19QRVJfV09SRCkKKworLyog TWFjcm9zIHRvIGNoZWNrIHRoZSByYW5nZSBvZiBpbnRlZ2VycyAuIFRoZXNl IG1hY3JvcyB3ZXJlIHVzZWQgYWNyb3NzCisgICB0aGUgcG9ydCwgbWFqb3Js eSBpbiBjb25zdHJhaW50cy5tZCwgcHJlZGljYXRlcy5tZCBmaWxlcy4gKi8K KyNkZWZpbmUgU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4pICAgICAg ICAgICBcCisgICgoKChpbW0pIDwgKChIT1NUX1dJREVfSU5UKSAxIDw8ICgo TikgLSAxKSkpICAgICAgIFwKKyAgICAgICYmICgoaW1tKSA+PSAtKChIT1NU X1dJREVfSU5UKSAxIDw8ICgoTikgLSAxKSkpKSA/IDEgOiAwKQorCisjZGVm aW5lIFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4pIFwKKyAgKCgo aW1tKSA8ICgoSE9TVF9XSURFX0lOVCkgMSA8PCAoTikpICYmIChpbW0pID49 IChIT1NUX1dJREVfSU5UKSAwKSA/IDEgOiAwKQorCisjZGVmaW5lIElOX1JB TkdFX1AoVkFMVUUsIExPVywgSElHSCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAoKCgoSE9TVF9XSURFX0lOVCkoVkFMVUUpKSA+PSAoSE9T VF9XSURFX0lOVCkoTE9XKSkgICAgICAgICAgIFwKKyAgICYmICgoKEhPU1Rf V0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVfSU5UKShISUdIKSkp KQorCisjZGVmaW5lIElOX1JBTihWQUxVRSwgTE9XLCBISUdIKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoKEhPU1RfV0lERV9JTlQp KFZBTFVFKSkgPj0gKEhPU1RfV0lERV9JTlQpKExPVykpICAgICAgIFwKKyAg ICYmICgoKEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVf SU5UKShISUdIKSkpKSA/IDEgOiAwKQorCisvKiBUaGlzIGNoZWNrIGlzIGZv ciBzYml0L2NiaXQgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBPS19GT1Jf WihPUCkgXAorICAoKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RF IChYRVhQIChPUCwgMCkpID09IENPTlNUX0lOVCkgXAorICAgfHwgKEdFVF9D T0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RFIChYRVhQIChPUCwgMCkpID09 IFJFRykgXAorICAgfHwgKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9D T0RFIChYRVhQIChPUCwgMCkpID09IFBMVVMgXAorICAgICAgICYmIEdFVF9D T0RFIChYRVhQICgoWEVYUCAoT1AsIDApKSwgMCkpID09IFJFRyBcCisgICAg ICAgJiYgR0VUX0NPREUgKFhFWFAgKChYRVhQIChPUCwgMCkpLCAxKSkgPT0g Q09OU1RfSU5UKSkKKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5nIGNv bnZlbnRpb25zLiAgKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1NfRE9XTldBUkQK KworI2RlZmluZSBTVEFSVElOR19GUkFNRV9PRkZTRVQgICAwCisKKyNkZWZp bmUgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gICAgMTUKKworI2RlZmluZSBGUkFN RV9QT0lOVEVSX1JFR05VTSAgICAxMworCisjZGVmaW5lIEFSR19QT0lOVEVS X1JFR05VTSAgICAgIDEyCisKKyNkZWZpbmUgU1RBVElDX0NIQUlOX1JFR05V TSAgICAgMQorCisjZGVmaW5lIFJFVFVSTl9BRERSRVNTX1JFR05VTSAgIDE0 CisKKyNkZWZpbmUgRklSU1RfUEFSTV9PRkZTRVQoRk5ERUNMKSAwCisKKyNk ZWZpbmUgRUxJTUlOQUJMRV9SRUdTICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB7IEFSR19QT0lOVEVSX1JFR05VTSwgICBT VEFDS19QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEFSR19QT0lOVEVSX1JF R05VTSwgICBGUkFNRV9QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEZSQU1F X1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0gIFwKKyAg fQorCisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKEZST00s IFRPLCBPRkZTRVQpICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoT0ZGU0VU KSA9IGNyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKChGUk9NKSwg KFRPKSk7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlICgw KQorCisvKiBQYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICovCisKKyNk ZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKworI2RlZmluZSBQ VVNIX0FSR1MgMQorCisjZGVmaW5lIFBVU0hfUk9VTkRJTkcoQllURVMpICgo KEJZVEVTKSArIDEpICYgfjEpCisKKyNpZm5kZWYgQ1VNVUxBVElWRV9BUkdT CitzdHJ1Y3QgY3VtdWxhdGl2ZV9hcmdzCit7CisgIGludCBpbnRzOworICBp bnQgbGFzdF9wYXJtX2luX3JlZzsKK307CisKKyNkZWZpbmUgQ1VNVUxBVElW RV9BUkdTIHN0cnVjdCBjdW11bGF0aXZlX2FyZ3MKKyNlbmRpZgorCisvKiBP biB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIFZhcmFyZ3Mgcm91dGluZXMgc2hv dWxkIHJlY2VpdmUgdGhlaXIgcGFyYW1ldGVycyAKKyAgIG9uIHRoZSBzdGFj ay4gICovCisKKyNkZWZpbmUgSU5JVF9DVU1VTEFUSVZFX0FSR1MoQ1VNLCBG TlRZUEUsIExJQk5BTUUsIEZOREVDTCwgTl9OQU1FRF9BUkdTKSBcCisgIGNy MTZfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKCYoQ1VNKSwgKEZOVFlQRSksIChM SUJOQU1FKSkKKworI2RlZmluZSBGVU5DVElPTl9BUkdfUkVHTk9fUChSRUdO TykgIGNyMTZfZnVuY3Rpb25fYXJnX3JlZ25vX3AgKFJFR05PKQorCisvKiBH ZW5lcmF0aW5nIGNvZGUgZm9yIHByb2ZpbGluZyAtIE5PVCBJTVBMRU1FTlRF RC4gICovCisjdW5kZWYgIEZVTkNUSU9OX1BST0ZJTEVSCisjZGVmaW5lIEZV TkNUSU9OX1BST0ZJTEVSKFNUUkVBTSwgTEFCRUxOTykgICAgICBcCit7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIHNvcnJ5ICgicHJvZmlsZXIgc3VwcG9ydCBmb3IgQ1IxNiIpOyAgICAg ICAgXAorfQorCisvKiBUcmFtcG9saW5lcyBmb3IgbmVzdGVkIGZ1bmN0aW9u cyAtIE5PVCBTVVBQT1JURUQuICAqLworI2RlZmluZSBUUkFNUE9MSU5FX1NJ WkUgICAgMTYKKworLyogQUREUkVTU0lORyBNT0RFUy4gICovCisKKyNkZWZp bmUgQ09OU1RBTlRfQUREUkVTU19QKFgpICAgICAgIFwKKyAgKEdFVF9DT0RF IChYKSA9PSBMQUJFTF9SRUYgICAgICAgIFwKKyAgIHx8IEdFVF9DT0RFIChY KSA9PSBTWU1CT0xfUkVGICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9PSBD T05TVCAgICAgICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9PSBDT05TVF9J TlQpCisKKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MgICAgMgorCisj ZGVmaW5lIEhBVkVfUE9TVF9JTkNSRU1FTlQgICAgIDAKKyNkZWZpbmUgSEFW RV9QT1NUX0RFQ1JFTUVOVCAgICAgMAorI2RlZmluZSBIQVZFX1BPU1RfTU9E SUZZX0RJU1AgICAwCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHICAg IDAKKworI2lmZGVmIFJFR19PS19TVFJJQ1QKKyNkZWZpbmUgQ1IxNl9SRUdf T0tfRk9SX0JBU0VfUChYKQlDUjE2X1JFR05PX09LX0ZPUl9CQVNFX1AgKFJF R05PIChYKSkKKyNkZWZpbmUgUkVHX01PREVfT0tfRk9SX0JBU0VfUChYLCBN T0RFKQlcCisgIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8oWCks IE1PREUpCisjZGVmaW5lIFJFR19PS19GT1JfSU5ERVhfUChYKSAgIFJFR05P X09LX0ZPUl9JTkRFWF9QIChSRUdOTyAoWCkpCisjZWxzZSAvKiBub3QgUkVH X09LX1NUUklDVC4gICovCisjZGVmaW5lIENSMTZfUkVHX09LX0ZPUl9CQVNF X1AoWCkJMQorI2RlZmluZSBSRUdfTU9ERV9PS19GT1JfQkFTRV9QKFgsIE1P REUpCTEKKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QKFgpICAgMQorI2Vu ZGlmIC8qIG5vdCBSRUdfT0tfU1RSSUNULiAgKi8KKworLyogR28gdG8gTEFC RUwgaWYgQUREUiAoYSBsZWdpdGltYXRlIGFkZHJlc3MgZXhwcmVzc2lvbikg aGFzIAorICAgYW4gZWZmZWN0IHRoYXQgZGVwZW5kcyBvbiB0aGUgbWFjaGlu ZSBtb2RlIGl0IGlzIHVzZWQgZm9yLiAgKi8KKyNkZWZpbmUgR09fSUZfTU9E RV9ERVBFTkRFTlRfQUREUkVTUyhBRERSLCBMQUJFTCkKKworLyogQXNzdW1l IGJlc3QgY2FzZSAoYnJhbmNoIHByZWRpY3RlZCkuICAqLworI2RlZmluZSBC UkFOQ0hfQ09TVChzcGVlZF9wLCBwcmVkaWN0YWJsZV9wKSAgICAgICAyCisK KyNkZWZpbmUgU0xPV19CWVRFX0FDQ0VTUyAgMQorCisvKiBJdCBpcyBhcyBn b29kIG9yIGJldHRlciB0byBjYWxsIGEgY29uc3RhbnQgZnVuY3Rpb24gYWRk cmVzcyB0aGFuIHRvCisgICBjYWxsIGFuIGFkZHJlc3Mga2VwdCBpbiBhIHJl Z2lzdGVyLiAgKi8KKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFCisKKy8qIERp dmlkaW5nIHRoZSBvdXRwdXQgaW50byBzZWN0aW9ucy4gICovCisKKyNkZWZp bmUgVEVYVF9TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LnRleHQiCisK KyNkZWZpbmUgREFUQV9TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LmRh dGEiCisKKyNkZWZpbmUgQlNTX1NFQ1RJT05fQVNNX09QICAiXHQuc2VjdGlv blx0LmJzcyIKKworLyogUG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSAoUElD KS4gICovCisvKiBORUFSX1BJQyBmb3IgLWZwaWMgb3B0aW9uLiAgKi8KKwor I2RlZmluZSBORUFSX1BJQyAxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLyogRkFSX1BJQyBmb3IgLWZQSUMgb3B0aW9uLiAg Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK KworI2RlZmluZSBGQVJfUElDICAyCisKKyNkZWZpbmUgUElDX09GRlNFVF9U QUJMRV9SRUdOVU0gIDEyCisKKyNkZWZpbmUgTEVHSVRJTUFURV9QSUNfT1BF UkFORF9QKFgpIGxlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAoWCkgICAgICAg CisKKy8qIEFzc2VtYmxlciBmb3JtYXQuICAqLworCisvKiBDaGFyYWN0ZXIg dG8gc3RhcnQgYSBjb21tZW50LiAgKi8KKyNkZWZpbmUgQVNNX0NPTU1FTlRf U1RBUlQgIiMiCisKKyNkZWZpbmUgR0xPQkFMX0FTTV9PUCAiXHQuZ2xvYmxc dCIKKworI3VuZGVmIFVTRVJfTEFCRUxfUFJFRklYCisjZGVmaW5lIFVTRVJf TEFCRUxfUFJFRklYICJfIgorCisjdW5kZWYgQVNNX09VVFBVVF9MQUJFTFJF RgorI2RlZmluZSBBU01fT1VUUFVUX0xBQkVMUkVGKFNUUkVBTSwgTkFNRSkg XAorICBhc21fZnByaW50ZiAoU1RSRUFNLCAiJVUlcyIsICgqdGFyZ2V0bS5z dHJpcF9uYW1lX2VuY29kaW5nKSAoTkFNRSkpOworCisjZGVmaW5lIEFTTV9P VVRQVVRfU1lNQk9MX1JFRihTVFJFQU0sIFNZTUJPTCkgICBcCisgIGRvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICBjb25zdCBjaGFyICpybiA9IFhTVFIgKFNZTUJPTCwgMCk7 ICAgICAgICBcCisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIHJuKTsg ICAgICAgICAgICAgICBcCisgICAgICBpZiAoU1lNQk9MX1JFRl9GVU5DVElP Tl9QIChTWU1CT0wpKSAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZwcmludGYg KChTVFJFQU0pLCAiQGMiKTsgICAgICAgICAgICAgICBcCisgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIHdoaWxlICgwKQorCisjdW5kZWYgQVNNX0FQUF9PTgorI2RlZmluZSBB U01fQVBQX09OICAgIiNBUFBcbiIKKworI3VuZGVmIEFTTV9BUFBfT0ZGCisj ZGVmaW5lIEFTTV9BUFBfT0ZGICAiI05PX0FQUFxuIgorCisvKiBTd2l0Y2gg aW50byBhIGdlbmVyaWMgc2VjdGlvbi4gICovCisjZGVmaW5lIFRBUkdFVF9B U01fTkFNRURfU0VDVElPTglkZWZhdWx0X2VsZl9hc21fbmFtZWRfc2VjdGlv bgorCisjdW5kZWYgSU5JVF9TRUNUSU9OX0FTTV9PUAorI2RlZmluZSBJTklU X1NFQ1RJT05fQVNNX09QCQkiXHQuc2VjdGlvblx0LmluaXQiCisKKyN1bmRl ZiBGSU5JX1NFQ1RJT05fQVNNX09QCisjZGVmaW5lIEZJTklfU0VDVElPTl9B U01fT1AJCSJcdC5zZWN0aW9uXHQuZmluaSIKKworLyogSW5zdHJ1Y3Rpb24g b3V0cHV0LiAgKi8KKworI2RlZmluZSBSRUdJU1RFUl9OQU1FUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAicjAiLCAgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJy NSIsICAicjYiLCAgInI3IiwgXAorICAgICJyOCIsICAicjkiLCAgInIxMCIs ICJyMTEiLCAicjEyIiwgInIxMyIsICJyYSIsICAic3AiICBcCisgIH0KKwor LyogT3V0cHV0IG9mIGRpc3BhdGNoIHRhYmxlcy4gICovCisKKy8qIFJldmlz aXQuIE5vIFBDIHJlbGF0aXZlIGNhc2UgYXMgbGFiZWwgZXhwcmVzc2lvbnMg YXJlIG5vdCAKKyAgIHByb3Blcmx5IHN1cHBvcnRlZCBpbiBiaW51dGlscyBl bHNlIHdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzOgorICAgI2RlZmluZSBDQVNF X1ZFQ1RPUl9QQ19SRUxBVElWRSAob3B0aW1pemVfc2l6ZSA/IDEgOiAwKS4g ICovCisjZGVmaW5lIENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFIDAKKworI2Rl ZmluZSBBU01fT1VUUFVUX0FERFJfRElGRl9FTFQoRklMRSwgQk9EWSwgVkFM VUUsIFJFTCkgICAgXAorICAoKEdFVF9NT0RFIChCT0RZKSA9PSBRSW1vZGUp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyBmcHJpbnRm ICgoRklMRSksICJcdC5ieXRlICguTCVkLS5MJWQpID4+IDFcbiIsICAgICAg ICAgXAorICAgICAgICAgICAgICBWQUxVRSwgUkVMKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgOiBmcHJpbnRmICgoRklMRSks ICJcdC53b3JkICguTCVkLS5MJWQpID4+IDFcbiIsICAgICAgICAgXAorICAg ICAgICAgICAgICBWQUxVRSwgUkVMKSkKKworI2RlZmluZSBBU01fT1VUUFVU X0FERFJfVkVDX0VMVChTVFJFQU0sIFZBTFVFKSBcCisgIGFzbV9mcHJpbnRm ICgoU1RSRUFNKSwgIlx0LmxvbmdcdC5MJWRAY1xuIiwgKFZBTFVFKSkKKwor LyogQWxpZ25tZW50IGluIGFzc2VtYmxlciBmaWxlLiAgKi8KKworI2RlZmlu ZSBBU01fT1VUUFVUX0FMSUdOKFNUUkVBTSwgUE9XRVIpIFwKKyAgYXNtX2Zw cmludGYgKChTVFJFQU0pLCAiXHQuYWxpZ25cdCVkXG4iLCAxIDw8IChQT1dF UikpCisKKy8qIE1pc2NlbGxhbmVvdXMgcGFyYW1ldGVycy4gICovCisKKyNk ZWZpbmUgQ0FTRV9WRUNUT1JfTU9ERSAgUG1vZGUKKworI2RlZmluZSBNT1ZF X01BWCA0CisKKyNkZWZpbmUgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OKE9VVFBS RUMsIElOUFJFQykgIDEKKworI2RlZmluZSBTVE9SRV9GTEFHX1ZBTFVFICAx CisKKyNkZWZpbmUgUG1vZGUgU0ltb2RlCisKKyNkZWZpbmUgRlVOQ1RJT05f TU9ERSBRSW1vZGUKKworLyogRGVmaW5lIHRoaXMgYm9vbGVhbiBtYWNybyhz KSB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB5b3VyIGFyY2hpdGVjdHVy ZQorICAgaGFzICh1biljb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNhbiBz cGFuIGFsbCBvZiBtZW1vcnkuICBJdCBpcyB1c2VkIGluCisgICBjb25qdW5j dGlvbiB3aXRoIGFuIG9wdGltaXphdGlvbiB0aGF0IHBhcnRpdGlvbnMgaG90 IGFuZCBjb2xkIGJhc2ljIGJsb2NrcworICAgaW50byBzZXBhcmF0ZSBzZWN0 aW9ucyBvZiB0aGUgZXhlY3V0YWJsZS4KKyAgIENSMTYgY29udGFpbnMgYnJh bmNoIGluc3RydWN0aW9ucyB0aGF0IHNwYW4gd2hvbGUgYWRkcmVzcyBzcGFj ZS4gICovCisjZGVmaW5lIEhBU19MT05HX0NPTkRfQlJBTkNIICAgIDEKKyNk ZWZpbmUgSEFTX0xPTkdfVU5DT05EX0JSQU5DSCAgMQorCisjZW5kaWYgLyog RW5kIG9mIEdDQ19DUjE2X0guICAqLwotLS0gb3JpZy9nY2MvY29uZmlnL2Ny MTYvY3IxNi1saWJnY2MucwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAw MCArMDUzMAorKysgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2LWxpYmdjYy5z CTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAg KzEsNTY4IEBACisvKiBMaWJnY2MgVGFyZ2V0IHNwZWNpZmljIGltcGxlbWVu dGF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1t aW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAg IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlcgorICAgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUIEFOWQorICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgZm9yIG1vcmUgZGV0YWlscy4KKworICAg VW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3Jh bnRlZCBhZGRpdGlvbmFsCisgICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4g dGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisg ICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEg Y29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJ TkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90 LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpZmRlZiAgTF9tdWxzaTMKKwkudGV4dAorCS5hbGlnbiAgNAorCS5n bG9ibCAgX19fbXVsc2kzCitfX19tdWxzaTM6CisJbW92dyAgICByNCxyMAor CW1vdncgICAgcjIscjEKKwkvKiBFeHRlbmRlZCBtdWx0aXBsaWNhdGlvbiBi ZXR3ZWVuIHRoZSAyIGxvd2VyIHdvcmRzICovCisJbXVsdXcgICByMSwocjEs cjApCisKKwkvKiBNdWx0aXBseSB0aGUgbG93ZXIgd29yZCBvZiBlYWNoIHBh cmFtZXRlciAgKi8gIAorCW11bHcgICAgcjIscjUgICAKKyAgICAKKwkvKiBX aXRoIHRoZSBoaWdoZXIgd29yZCBvZiB0aGUgb3RoZXIgICovCisJbXVsdyAg ICByMyxyNCAgICAgCisgIAorCS8qIEFkZCBwcm9kdWN0cyB0byB0aGUgaGln aGVyIHBhcnQgb2YgdGhlIGZpbmFsIHJlc3VsdCAgKi8KKwlhZGR3ICAgIHI0 LHIxICAgICAgIAorCWFkZHcgICAgcjUscjEKKwlqdW1wICAgIChyYSkKKyNl bmRpZgorCisKKyNpZmRlZiBMX2RpdmRpMworCS50ZXh0CisJLmFsaWduIDQK KwkuZ2xvYmwgX19fZGl2ZGkzCisKK19fX2RpdmRpMzoKKwlwdXNoCSQ0LCBy NywgcmEKKworCisJLyogUGFyYW0gIzEgTG9uZyBMb25nIGxvdyBiaXQgZmly c3QgKi8KKwlsb2FkZCAgIDEyKHNwKSwgKHIxLCByMCkKKwlsb2FkZCAgIDE2 KHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9uZyBsb3cg Yml0IGZpcnN0ICovCisJbG9hZGQgICAyMChzcCksIChyNSwgcjQpCisJbG9h ZGQgICAyNChzcCksIChyNywgcjYpCisJCisJLyogU2V0IG5lZyB0byAwICov CisJbW92dyAkMCwgcjEwCisJCisJc3ViZCAkMTYsIChzcCkKKworCS8qIENv bXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICovCQorCWNtcHcg JDAsIHIzCisJYmxlIEw0CisKKwkvKiBJbnZlcnQgcGFyYW0xIGFuZCBuZWcg Ki8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAgc2V0IHRvIEZGRkZG RkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJLyogWG9yIGxvdyBi aXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwg KHIzLCByMikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAxIHdpdGggdGVt cCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRvIGxvdyBiaXRz IG9mIHBhcmFtIDEgKi8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcg Ki8KKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBM NCAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0 cyBvZiBwYXJhbSAxICovCisKK0w0OglzdG9yZCAocjEsIHIwKSwgMChzcCkK KwlzdG9yZCAocjMsIHIyKSwgNChzcCkKKwkKKwkvKiBDb21wYXJlIGlmIHBh cmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNworCWJs ZSBMNQorCisJLyogSW52ZXJ0IHBhcmFtMiBhbmQgbmVnICovCisJbW92ZCAk LTEsIChyOSwgcjgpCS8qIFRlbXAgc2V0IHRvIEZGRkZGRkZGICovCisJeG9y ZCAocjksIHI4KSwgKHI1LCByNCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFt IDIgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHI3LCByNikJLyog WG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCWFkZGQg JDEsIChyNSwgcjQpCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDIg Ki8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcgKi8KKwliY2MgTDUJ CQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNSAqLworCWFkZGQg JDEsIChyNywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAy ICovCisKK0w1OglzdG9yZCAocjUsIHI0KSwgOChzcCkKKwlzdG9yZCAocjcs IHI2KSwgMTIoc3ApCisJbW92dyAkMCwgcjIKKworCS8qIENhbGwgdWRpdm1v ZGRpMyAqLworI2lmZGVmIF9fUElDX18KKwlsb2FkZAlfX191ZGl2bW9kZGkz QGNHT1QocjEyKSwgKHIxLHIwKQorCWphbAkocjEscjApCisjZWxzZQorCWJh bCAocmEpLCBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworCS8qIElmIChuZWcp ICovCisJYWRkZAkkMTYsIChzcCkKKwljbXB3ICQwLCByMTAJCS8qIENvbXBh cmUgMCB3aXRoIG5lZyAqLworCWJlcSBMZXhpdF9fCisJCisJLyogTmVnID0g LU5lZyAqLworCXhvcmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cg Yml0cyBvZiB1cmVzIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChy MywgcjIpCS8qIFhvciBoaWdoIGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAgKi8K KwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiB1 cmVzICovCisJYmNjIExleGl0X18KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBB ZGQgMSB0byBoaWdoIGJpdCBvZiB1cmVzICovCisKK0xleGl0X186CisjICBp ZmRlZiBfX0lEX1NIQVJFRF9MSUJfXworCXBvcAkkMiwgcjEyCisjICBlbmRp ZgorCXBvcHJldCAkNCwgcjcsIHJhCisjZW5kaWYKKworI2lmZGVmIExfbHNo cmRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fbHNocmRpMwor CitfX19sc2hyZGkzOgorCXB1c2gJJDMsIHI3CisKKwkvKiBMb2FkIHBhcmFt ZXRlcnMgZnJvbSBzdGFjayBpbiB0aGlzIG9yZGVyICovCisJbW92dyByMiwg cjYJCS8qIE51bWJlciBvZiBzaGlmdHMgKi8KKwlsb2FkZAk2KHNwKSwgKHIx LCByMCkJLyogTG93IGJpdHMgKi8KKwlsb2FkZAkxMChzcCksIChyMywgcjIp LyogSGlnaCBiaXRzICovCisKKwl4b3J3ICQtMSwgcjYJCS8qIEludmVydCBu dW1iZXIgb2Ygc2hpZnRzICovCisJYWRkdyAkMSwgcjYJCS8qIEFkZCAxIGJ5 IG51bWJlciBvZiBzaGlmdHMgKi8KKworCW1vdncgcjYsIHI3CQkvKiBDb3B5 IG51bWJlciBvZiBzaGlmdHMgKi8KKworCXRiaXQgJDE1LCByNgkJLyogVGVz dCBpZiBudW1iZXIgaXMgbmVnYXRpdmUgKi8KKwliZnMgTDIJCQkvKiBJZiBu ZWdhdGl2ZSBqdW1wIHRvIEwyICovCisKKwltb3ZkIChyMSwgcjApLCAocjks IHI4KQkvKiBDb3B5IGxvdyBiaXRzICovCisKKwlzdWJ3ICQzMiwgcjcJCS8q IENhbGMgaG93IG1hbnkgYml0cyB3aWxsIG92ZXJmbG93ICovCisJLyogU2hp ZnQgdGhlIHRlbXAgbG93IGJpdCB0byB0aGUgcmlnaHQgdG8gc2VlIHRoZSBv dmVyZmxvd2luZyBiaXRzICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQorCisJ Y21wdyAkMzIsIHI2CQkvKiBJZiBudW1iZXIgb2Ygc2hpZnRzIGlzIGhpZ2hl ciB0aGFuIDMxICovCisJYmx0IEwxCQkJLyogU2hpZnQgYnkgbW92aW5nICov CisKKwlsc2hkIHI2LCAocjMsIHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMgKi8K Kwlsc2hkIHI2LCAocjEsIHIwKQkvKiBTaGlmdCBsb3cgYml0cyAqLworCWFk ZGQgKHI5LCByOCksIChyMywgcjIpCS8qIEFkZCBvdmVyZmxvdyB0byB0aGUg aGlnaCBiaXRzICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisK K0wxOgltb3ZkICQwLCAocjEsIHIwKQkvKiBSZXNldCBsb3cgYml0ICovCisJ bW92ZCAocjksIHI4KSwgKHIzLCByMikJLyogQWRkIHRoZSBvdmVyZmxvdyBm cm9tIHRoZSBsb3cgYml0ICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJu ICovCisKK0wyOgltb3ZkIChyMywgcjIpLCAocjksIHI4KQkvKiBDb3B5IGhp Z2ggYml0cyAqLworCisJYWRkdyAkMzIsIHI3CQkvKiBDYWxjIGhvdyBtYW55 IGJpdHMgd2lsbCBvdmVyZmxvdyAqLworCS8qIFNoaWZ0IHRoZSB0ZW1wIGxv dyBiaXQgdG8gdGhlIGxlZnQgdG8gc2VlIHRoZSBvdmVyZmxvd2luZyBiaXRz ICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQorCisJY21wdyAkLTMyLCByNgkJ LyogSWYgbnVtYmVyIG9mIHNoaWZ0cyBpcyBsb3dlciB0aGFuIC0zMSAqLwor CWJndCBMMwkJCS8qIFNoaWZ0IGJ5IG1vdmluZyAqLworCisJbHNoZCByNiwg KHIxLCByMCkJLyogU2hpZnQgbG93IGJpdHMgKi8KKwlsc2hkIHI2LCAocjMs IHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMgKi8KKwlhZGRkIChyOSwgcjgpLCAo cjEsIHIwKQkvKiBBZGQgb3ZlcmZsb3cgdG8gdGhlIGxvdyBiaXRzICovCisJ cG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisJCitMMzoJbW92ZCAkMCwg KHIzLCByMikJLyogUmVzZXQgdGhlIGhpZ2ggYml0ICovCisJbW92ZCAocjks IHI4KSwgKHIxLCByMCkJLyogQWRkIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBo aWdoIGJpdCAqLworCXBvcHJldAkkMywgcjcJCS8qIFJldHVybiAqLworI2Vu ZGlmCisKKyNpZmRlZiBMX21vZGRpMworCS50ZXh0CisJLmFsaWduIDQKKwku Z2xvYmwgX19fbW9kZGkzCisKK19fX21vZGRpMzoKKwlwdXNoCSQ0LCByNywg cmEKKworCisJLyogUGFyYW0gIzEgTG9uZyBMb25nIGxvdyBiaXQgZmlyc3Qg Ki8KKwlsb2FkZAkxMihzcCksIChyMSwgcjApCisJbG9hZGQJMTYoc3ApLCAo cjMsIHIyKQorCisJLyogUGFyYW0gIzIgTG9uZyBMb25nIGxvdyBiaXQgZmly c3QgKi8KKwlsb2FkZAkyMChzcCksIChyNSwgcjQpCisJbG9hZGQJMjQoc3Ap LCAocjcsIHI2KQorCQorCXN1YmQJJDE4LCAoc3ApCisKKwkvKiBTZXQgbmVn IHRvIDAgKi8KKwlzdG9ydyAkMCwgMTYoc3ApCisJCisJbW92ZAkkLTEsIChy OSwgcjgpIAkvKiBUZW1wIHNldCB0byBGRkZGRkZGRiAqLworCisJLyogQ29t cGFyZSBpZiBwYXJhbTEgaXMgZ3JlYXRlciB0aGFuIDAgKi8JCisJY21wdyAk MCwgcjMKKwlibGUgTDQKKworCS8qIEludmVydCBwYXJhbTEgYW5kIG5lZyAq LworCXhvcmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cgYml0cyBv ZiBwYXJhbSAxIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChyMywg cjIpCS8qIFhvciBoaWdoIGJpdHMgb2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8K KwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiBw YXJhbSAxICovCisJc3RvcncgJDEsIDE2KHNwKQorCWJjYyBMNAkJCS8qIElm IG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEw0ICovCisJYWRkZCAkMSwgKHIz LCByMikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBhcmFtIDEgKi8KKwor TDQ6CXN0b3JkIChyMSwgcjApLCAwKHNwKQorCXN0b3JkIChyMywgcjIpLCA0 KHNwKQorCQorCS8qIENvbXBhcmUgaWYgcGFyYW0yIGlzIGdyZWF0ZXIgdGhh biAwICovCQorCWNtcHcgJDAsIHI3CisJYmxlIEw1CisKKwkvKiBJbnZlcnQg cGFyYW0yIGFuZCBuZWcgKi8KKwl4b3JkIChyOSwgcjgpLCAocjUsIHI0KQkv KiBYb3IgbG93IGJpdHMgb2YgcGFyYW0gMiB3aXRoIHRlbXAgKi8KKwl4b3Jk IChyOSwgcjgpLCAocjcsIHI2KQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFt IDIgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHI1LCByNCkJLyogQWRkIDEg dG8gbG93IGJpdHMgb2YgcGFyYW0gMiAqLworCWJjYyBMNQkJCS8qIElmIG5v IGNhcnJ5IG9jY3VycmVkIGdvIHRvIEw1ICovCisJYWRkZCAkMSwgKHI3LCBy NikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBhcmFtIDIgKi8KKworTDU6 CXN0b3JkIChyNSwgcjQpLCA4KHNwKQorCXN0b3JkIChyNywgcjYpLCAxMihz cCkKKwltb3Z3ICQxLCByMgorCisJLyogQ2FsbCB1ZGl2bW9kZGkzICovCisj aWZkZWYgX19QSUNfXworCWxvYWRkCV9fX3VkaXZtb2RkaTNAY0dPVChyMTIp LCAocjEscjApCisJamFsCShyMSxyMCkKKyNlbHNlCisJYmFsIChyYSksIF9f X3VkaXZtb2RkaTMKKyNlbmRpZgorCisJLyogSWYgKG5lZykgKi8KKwlsb2Fk dyAxNihzcCksIHIxMAkvKiBMb2FkIG5lZyBmcm9tIHN0YWNrICovCisJYWRk ZAkkMTgsIChzcCkKKwljbXB3ICQwLCByMTAJCS8qIENvbXBhcmUgMCB3aXRo IG5lZyAqLworCWJlcQlMZXhpdF9fCisJCisJLyogTmVnID0gLU5lZyAqLwor CXhvcmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cgYml0cyBvZiB1 cmVzIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChyMywgcjIpCS8q IFhvciBoaWdoIGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAgKi8KKwlhZGRkICQx LCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiB1cmVzICovCisJ YmNjCUxleGl0X18KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBBZGQgMSB0byBo aWdoIGJpdCBvZiB1cmVzICovCitMZXhpdF9fOgorIyAgaWZkZWYgX19JRF9T SEFSRURfTElCX18KKwlwb3AJJDIsIHIxMgorIyAgZW5kaWYKKwlwb3ByZXQJ JDQsIHI3LCByYQorI2VuZGlmCisKKyNpZmRlZiBMX211bGRpMworCS50ZXh0 CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fbXVsZGkzCisKK19fX211bGRpMzoK KwlwdXNoCSQyLCByMTMKKwlwdXNoCSQ3LCByNworCS8qIFBhcmFtICMxIExv bmcgTG9uZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQgICAxOChzcCksIChy MSwgcjApCisJbG9hZGQgICAyMihzcCksIChyMywgcjIpCisKKwkvKiBQYXJh bSAjMiBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkICAgMjYo c3ApLCAocjUsIHI0KQorCWxvYWRkICAgMzAoc3ApLCAocjcsIHI2KQorCisJ LyogQ2xlYXIgcjEzLCByMTIgKi8JCisJbW92ZCAkMCwgKHIxMikJCisJbW92 ZCAkMCwgKHIxMykKKworCS8qIFNldCBuZWcgKi8KKwltb3Z3ICQwLCByMTAK KworCS8qIENvbXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICov CQorCWNtcHcgJDAsIHIzCisJYmxlIEwxCisKKwkvKiBJbnZlcnQgcGFyYW0x IGFuZCBuZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAgc2V0 IHRvIEZGRkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJLyog WG9yIGxvdyBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJeG9yZCAo cjksIHI4KSwgKHIzLCByMikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAx IHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRv IGxvdyBiaXRzIG9mIHBhcmFtIDEgKi8KKwl4b3J3ICQxLCByMTAJCS8qIElu dmVydCBuZWcgKi8KKwliY2MgTDEJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJl ZCBnbyB0byBMMSAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRv IGhpZ2ggYml0cyBvZiBwYXJhbSAxICovCisKK0wxOgkvKiBDb21wYXJlIGlm IHBhcmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNwor CWJsZSBMMgkKKwkKKwkvKiBJbnZlcnQgcGFyYW0yIGFuZCBuZWcgKi8KKwlt b3ZkICQtMSwgKHI5LCByOCkJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8K Kwl4b3JkIChyOSwgcjgpLCAocjUsIHI0KQkvKiBYb3IgbG93IGJpdHMgb2Yg cGFyYW0gMiB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjcsIHI2 KQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJ YWRkZCAkMSwgKHI1LCByNCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcGFy YW0gMiAqLworCXhvcncgJDEsIHIxMAkJLyogSW52ZXJ0IG5lZyAqLworCWJj YyBMMgkJCS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEwyICovCisJ YWRkZCAkMSwgKHI3LCByNikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBh cmFtIDIgKi8KKwkKK0wyOglzdG9ydyByMTAsIDE4KHNwKQkvKiBTdG9yZSBu ZWcgdG8gc3RhY2sgc28gd2UgY2FuIHVzZSByMTAgKi8KKworCS8qIEIqRCAq LworCS8qIEJsKkRsICovCisJbWFjdXcgcjAsIHI0LCAocjEyKQkvKiBNdWx0 aXBseSByMCBhbmQgcjQgYW5kIGFkZCB0byByMTIgKi8KKwkJCisJLyogQmgq RGwgKi8KKwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciByOSwgcjggKi8K KwltYWN1dyByMSwgcjQsIChyOSwgcjgpCS8qIE11bHRpcGx5IEJoKkRsIGFu ZCBhZGQgcmVzdWx0IHRvIChyOSwgcjgpICovCisJbW92dyByOSwgIHIxMAkJ LyogU2hpZnQgbGVmdDogcjkgdG8gcjEwICovCisJbHNoZCAkMTYsIChyOSwg cjgpCS8qIFNoaWZ0IGxlZnQ6IHI4IHRvIHI5ICovCisJbW92dyAkMCwgcjEx CQkvKiBDbGVhciByMTEgKi8KKwlhZGRkIChyOSwgcjgpLCAocjEyKQkvKiBB ZGQgKHI5LCByOCkgdG8gcjEyICovCisJYmNjIEwzCQkJLyogSWYgbm8gY2Fy cnkgb2NjdXJyZWQgZ28gdG8gTDMgKi8KKwlhZGRkICQxLCAocjEzKQkJLyog SWYgY2Fycnkgb2NjdXJyZWQgYWRkIDEgdG8gcjEzICovCisKK0wzOglhZGRk IChyMTEsIHIxMCksIChyMTMpCS8qIEFkZCAocjExLCByMTApIHRvIHIxMyAq LworCQkKKwkvKiBCbCpEaCAqLworCW1vdmQgJDAsIChyOSwgcjgpCS8qIENs ZWFyIChyOSwgcjgpICovCisJbWFjdXcgcjAsIHI1LCAocjksIHI4KQkvKiBN dWx0aXBseSByMCBhbmQgcjUgYW5kIHN0b3IgaW4gKHI5LCByOCkgKi8KKwlt b3Z3IHI5LCByMTAJCS8qIFNoaWZ0IGxlZnQ6IHI5IHRvIHIxMCAqLworCWxz aGQgJDE2LCAocjksIHI4KQkvKiBTaGlmdCBsZWZ0OiByOCB0byByOSAqLwor CWFkZGQgKHI5LCByOCksIChyMTIpCS8qIEFkZCAocjksIHI4KSB0byByMTIg Ki8KKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBM NCAqLyAKKwlhZGRkICQxLCAocjEzKQkJLyogSWYgY2Fycnkgb2NjdXJyZWQg YWRkIDEgdG8gcjEzICovCisKK0w0OglhZGRkIChyMTEsIHIxMCksIChyMTMp CS8qIEFkZCAocjExLCByMTApIHRvIHIxMyAqLworCisJLyogQmgqRGggKi8K Kwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1h Y3V3IHIxLCByNSwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjEgYW5kIHI1IGFu ZCBhZGQgdG8gcjEzICovCisJYWRkZCAocjksIHI4KSwgKHIxMykJLyogQWRk IChyOSwgcjgpIHRvIHJlc3VsdCAqLworCisJLyogQSpEICovCisJLyogQWwq RGwgKi8KKwltb3ZkICQwLCAocjExLCByMTApCS8qIENsZWFyIChyMTEsIHIx MCkgKi8KKwltYWN1dyByMiwgcjQsIChyMTEsIHIxMCkvKiBNdWx0aXBseSBy MiBhbmQgcjQgYW5kIGFkZCB0byAocjExLCByMTApICovCisJCisJYWRkZCAo cjEzKSwgKHIxMSwgcjEwKQkvKiBDb3B5IHIxMyB0byAocjExLCByMTApICov CisKKwkvKiBBbCpEaCAqLworCW1vdmQgJDAsIChyOSwgcjgpCS8qIENsZWFy IChyOSwgcjgpICovCisJbWFjdXcgcjIsIHI1LCAocjksIHI4KQkvKiBNdWx0 aXBseSByMiBhbmQgcjUgYW5kIGFkZCB0byAocjksIHI4KSAqLworCWFkZHcg cjgsIHIxMQkJLyogQWRkIHI4IHRvIHIxMSAqLworCQorCS8qIEFoKkRsICov CisJbXVsdXcgcjMsIChyNSwgcjQpCS8qIE11bHRpcGx5IHIzIGFuZCByNCBh bmQgc3RvciBpbiAocjUsIHI0KSAqLworCWFkZHcgcjQsIHIxMQkJLyogQWRk IHI0IHRvIHIxMSAqLworCisJLyogQipDICovCisJLyogQmwqQ2wgKi8KKwlt b3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1hY3V3 IHIwLCByNiwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjAgYW5kIHI2IGFuZCBh ZGQgdG8gKHI5LCByOCkgKi8KKwlhZGRkIChyOSwgcjgpLCAocjExLCByMTAp LyogQWRkIChyOSwgcjgpIHRvIHJlc3VsdCAqLworCisJLyogQmwqQ2ggKi8K Kwltb3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1h Y3V3IHIwLCByNywgKHI5LCByOCkJLyogTXVsdGlwbHkgcjAgYW5kIHI3IGFu ZCBhZGQgdG8gKHI5LCByOCkgKi8KKwlhZGR3IHI4LCByMTEJCS8qIEFkZCBy OCB0byByMTEgKi8KKworCWxvYWR3IDE4KHNwKSwgcjgJLyogTG9hZCBuZWcg ZnJvbSBzdGFjayAqLworCisJLyogQmgqQ2wgKi8KKwltdWx1dyByMSwgKHI3 LCByNikJLyogTXVsdGlwbHkgcjEgYW5kIHI2IGFuZCBzdG9yIGluIChyNywg cjYpICovCisJYWRkdyByNiwgcjExCQkvKiBBZGQgcjYgdG8gcjExICovCisK K0UxOgltb3ZkIChyMTEsIHIxMCksIChyMywgcjIpCisJbW92ZCAocjEyKSwg KHIxLCByMCkJCisKKwkvKiBJZiAobmVnKSAqLworCWNtcHcgJDAsIHI4CQkv KiBDb21wYXJlIDAgd2l0aCBuZWcgKi8KKwliZXEJTGV4aXRfXworCQorCS8q IE5lZyA9IC1OZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAg c2V0IHRvIEZGRkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJ LyogWG9yIGxvdyBiaXRzIG9mIHJlc3VsdCB3aXRoIHRlbXAgKi8KKwl4b3Jk IChyOSwgcjgpLCAocjMsIHIyKSAvKiBYb3IgaGlnaCBiaXRzIG9mIHJlc3Vs dCB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0 byBsb3cgYml0cyBvZiByZXN1bHQgKi8KKwliY2MJTGV4aXRfXworCWFkZGQg JDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0IG9mIHJlc3VsdCAq LworTGV4aXRfXzoKKwlwb3AJJDcsIHI3CisJcG9wcmV0CSQyLCByMTMKKyNl bmRpZgorCisjaWZkZWYgTF9uZWdkaTIKKwkudGV4dAorCS5hbGlnbiA0CisJ Lmdsb2JsIF9fX25lZ2RpMgorCitfX19uZWdkaTI6CisJLyogTG9hZCBwYXJh bWV0ZXIgZnJvbSB0aGUgcmVnaXN0ZXJzIGluIHRoaXMgb3JkZXIgKi8KKwls b2FkZCAwKHNwKSwgKHIxLCByMCkKKwlsb2FkZCA0KHNwKSwgKHIzLCByMikK KwkKKwltb3ZkICQtMSwgKHI2LCByNSkJLyogU2V0IHRlbXAgdG8gRkZGRkZG RkYgKi8KKwl4b3JkIChyNiwgcjUpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJp dHMgd2l0aCB0ZW1wICovCisJeG9yZCAocjYsIHI1KSwgKHIzLCByMikJLyog WG9yIGhpZ2ggYml0cyB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIw KQkvKiBBZGQgb25lICovCisJamNjIChyYSkKKwlhZGRkICQxLCAocjMsIHIy KQkvKiBBZGQgdGhlIGNhcnJ5IHRvIHRoZSBoaWdoIGJpdHMgKi8KKwlqdW1w IChyYSkKKyNlbmRpZgorCisjaWZkZWYgTF91ZGl2ZGkzCisJLnRleHQKKwku YWxpZ24gNAorCS5nbG9ibCBfX191ZGl2ZGkzCisKK19fX3VkaXZkaTM6CisJ bW92dyAkMCwgcjIKKwliciBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworI2lm ZGVmIExfdWRpdm1vZGRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwg X19fdWRpdm1vZGRpMworCitfX191ZGl2bW9kZGkzOgorCXB1c2gJJDIsIHIx MworCXB1c2gJJDcsIHI3CisKKwkvKiBQYXJhbSAjMSBMb25nIExvbmcgbG93 IGJpdCBmaXJzdCAqLworCWxvYWRkCTE4KHNwKSwgKHIxLCByMCkKKwlzdG9y dwlyMiwgMTgoc3ApCS8qIFN0b3JlIG1vZHVsbyBvbiBzdGFjayAqLworCWxv YWRkCTIyKHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9u ZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQJMjYoc3ApLCAocjUsIHI0KQor CWxvYWRkCTMwKHNwKSwgKHI3LCByNikKKworCS8qIFNldCB1cmVzIHRvIDAg Ki8KKwltb3ZkICQwLCAocjEzKQorCW1vdmQgJDAsIChyMTIpCisJCisJY21w ZCAocjEyKSwgKHI1LCByNCkKKwliZXEgTEUKKworTDU6CW1vdmQgJDEsIChy OSwgcjgpCS8qIFN0b3JlIDEgaW4gbG93IGJpdHMgZnJvbSBiaXQgKi8KKwlt b3ZkICQwLCAocjExLCByMTApCS8qIFN0b3JlIDAgaW4gaGlnaCBiaXRzIGZy b20gYml0ICovCisJCitMNjoJLyogV2hpbGUgKGRlbiA8IG51bSAmJiAoIWRl biAmICgxTEw8PDYzKSkpICovCisJLyogQ29tcGFyZSBoaWdoIGJpdHMgZnJv bSBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJY21wZCAocjcsIHI2KSwgKHIz LCByMikJCisJYmhpIEwxMAkJCS8qIElmIHBhcmFtIDIgaXMgZ3JlYXRlciBn byB0byBMMTAgKi8KKwlibmUgTDgJCQkvKiBJZiBwYXJhbSAxIGlzIGdyZWF0 ZXIgZ28gdG8gTDggKi8KKwljbXBkIChyNSwgcjQpLCAocjEsIHIwKQkvKiBD b21wYXJlIGxvdyBiaXRzIGZyb20gcGFyYW0gMSBhbmQgcGFyYW0gMiAqLwor CS8qICBJZiBwYXJhbSAyIGlzIGdyZWF0ZXIgb3IgdGhlIHNhbWUgZ28gdG8g TDEgKi8KKwliaHMgTDEwCQkJIAorCitMODoJLyogQ2hlY2sgaWYgbW9zdCBz aWduaWZpY2FudCBiaXQgb2YgcGFyYW0gMiBpcyBzZXQgKi8KKwl0Yml0ICQx NSwgcjcJCQorCWJmcyBMMTAJCQkvKiBJZiBQU1IgaXMgc2V0IGdvIHRvIEwx MCAqLworCisJLyogU2hpZnQgYml0ICovCisJbHNoZCAkMSwgKHIxMSwgcjEw KQkvKiBTaGlmdCBsZWZ0OiBoaWdoIGJpdHMgb2YgYml0ICovIAorCS8qIENo ZWNrIGlmIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGJpdCBpcyBzZXQgKi8K Kwl0Yml0ICQxNSwgcjkJCQorCWxzaGQgJDEsIChyOSwgcjgpCS8qIFNoaWZ0 IGxlZnQ6IGxvdyBiaXRzIG9mIGJpdCAqLworCWJmcyBMMjgJCQkvKiBJZiBQ U1IgaXMgc2V0IGdvIHRvIEwyOCAqLworCitMOToJLyogU2hpZnQgYiAqLwor CWxzaGQgJDEsIChyNywgcjYpCS8qIFNoaWZ0IGxlZnQ6IGhpZ2ggYml0cyBv ZiBwYXJhbSAyICovCisJLyogQ2hlY2sgaWYgbW9zdCBzaWduaWZpY2FudCBi aXQgb2YgcGFyYW0gMiBpcyBzZXQgKi8KKwl0Yml0ICQxNSwgcjUJCQorCWxz aGQgJDEsIChyNSwgcjQpCS8qIFNoaWZ0IGxlZnQ6IGxvdyBiaXRzIG9mIHBh cmFtIDIgKi8KKwliZmMgTDYJCQkvKiBJZiBQU1IgaXMgc2V0IGdvIHRvIEw2 ICovCisJYWRkdyAkMSwgcjYJCS8qIEFkZCAxIHRvIHRoZSBoaWdoZXN0IGJp dHMgb2YgYiAqLworCWJyIEw2CQkJLyogR28gdG8gTDYgKi8KKwkKK0wxMDoJ LyogV2hpbGUgKGJpdCkgKi8KKwljbXBkICQwLCAocjExLCByMTApCQorCWJu ZSBMMTEKKwljbXBkICQwLCAocjksIHI4KQorCWJlcSBFMQorCitMMTE6CS8q IElmIChudW0gPj0gZGVuKSAqLworCWNtcGQgKHIzLCByMiksIChyNywgcjYp CS8qIENvbXBhcmUgaGlnaCBiaXRzIG9mIHBhcmFtIDEgYW5kIHBhcmFtIDIg Ki8KKwlibG8gTDE1CQkJLyogSWYgcGFyYW0gMSBsb3dlciB0aGFuIHBhcmFt IDIgZ28gdG8gTDE1ICovCisJYm5lIEwxMgkJCS8qIElmIG5vdCBlcXVhbCBn byB0byBMMTIgKi8JCisJY21wZCAocjEsIHIwKSwgKHI1LCByNCkJLyogQ29t cGFyZSBsb3cgYml0cyBvZiBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJYmxv IEwxNQkJCS8qIElmIHBhcmFtIDEgbG93ZXIgdGhhbiBwYXJhbSAyIGdvIHRv IEwxNSAqLworCitMMTI6CS8qIFVyZXMgfD0gYml0ICovCisJb3JkIChyMTEs IHIxMCksIChyMTMpCisJb3JkIChyOSwgcjgpLCAocjEyKQkKKworCS8qIE51 bSAtPSBkZW4gKi8KKwlzdWJkIChyNywgcjYpLCAocjMsIHIyKSAvKiBTdWJ0 cmFjdCBoaWdoZXN0IDMyIGJpdHMgZnJvbSBlYWNoIG90aGVyICovCisJc3Vi ZCAocjUsIHI0KSwgKHIxLCByMCkJLyogU3VidHJhY3QgbG93ZXN0IDMyIGJp dHMgZnJvbSBlYWNoIG90aGVyICovCisJYmNjIEwxNQkJCS8qIElmIG5vIGNh cnJ5IG9jY3VycmVkIGdvIHRvIEwxNSAqLworCXN1YmQgJDEsIChyMywgcjIp CS8qIFN1YnRyYWN0IHRoZSBjYXJyeSAqLworCisJCitMMTU6CS8qIFNoaWZ0 IGJpdCB0byB0aGUgcmlnaHQgKi8KKwlsc2hkICQtMSwgKHI5LCByOCkJLyog U2hpZnQgcmlnaHQ6IGxvdyBiaXRzIG9mIGJpdCAqLworCS8qIENoZWNrIGlm IGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBoaWdoIGJpdHMgaXMgc2V0ICov CisJdGJpdCAkMCwgcjEwCQkKKwlsc2hkICQtMSwgKHIxMSwgcjEwKQkvKiBT aGlmdCByaWdodDogaGlnaCBiaXRzIG9mIGJpdCAqLworCWJmcyBMMTgJCQkv KiBJZiBQU1IgaXMgc2V0IGdvIHRvIEwxOCAqLworCitMMTc6CS8qIFNoaWZ0 IHBhcmFtIzIgdG8gdGhlIHJpZ2h0ICovCisJbHNoZCAkLTEsIChyNSwgcjQp CS8qIFNoaWZ0IHJpZ2h0OiBsb3cgYml0cyBvZiBwYXJhbSAyICovCisJLyog Q2hlY2sgaWYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGhpZ2ggYml0cyBp cyBzZXQgKi8KKwl0Yml0ICQwLCByNgkJCisJbHNoZCAkLTEsIChyNywgcjYp CS8qIFNoaWZ0IHJpZ2h0OiBoaWdoIGJpdHMgb2YgcGFyYW0gMiAqLworCWJm YyBMMTAJCQkvKiBJZiBQU1IgaXMgbm90IHNldCBnbyB0byBMMTAgKi8KKwkv KiBPciB3aXRoIDB4ODAwMCB0byBzZXQgbW9zdCBzaWduaWZpY2FudCBiaXQg Ki8KKwlvcncgJDMyNzY4LCByNQkJCisJYnIgTDEwCQkJLyogR28gdG8gTDEw ICovCisKKworTDE4OgkvKiBPciB3aXRoIDB4ODAwMCB0byBzZXQgbW9zdCBz aWduaWZpY2FudCBiaXQgKi8KKwlvcncgJDMyNzY4LCByOQkJCisJYnIgTDE3 CisKKworTDI4OiAJLyogTGVmdCBzaGlmdCBiaXQgKi8KKwlhZGR3ICQxLCBy MTAJCS8qIEFkZCAxIHRvIGhpZ2hlc3QgYml0cyBvZiBiaXQgKi8KKwliciBM OQkJCS8qIEdvIHRvIEw5ICovCisKK0xFOgljbXBkIChyMTIpLCAocjcsIHI2 KQorCWJuZSBMNQorCWV4Y3AgZHZ6CisJYnIJTGV4aXRfXworCitFMToJbG9h ZHcJMTgoc3ApLCByNAorCWNtcHcgJDAsIHI0CisJYm5lCUxleGl0X18KKwor CS8qIFJldHVybiByZXN1bHQgKi8KKwltb3ZkIChyMTIpLCAocjEsIHIwKQor CW1vdmQgKHIxMyksIChyMywgcjIpCitMZXhpdF9fOgorCXBvcAkkNywgcjcK Kwlwb3ByZXQJJDIsIHIxMworI2VuZGlmCisKKyNpZmRlZiBMX3Vtb2RkaTMK KwkudGV4dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX3Vtb2RkaTMKKworX19f dW1vZGRpMzoKKwltb3Z3ICQxLCByMgorCWJyIF9fX3VkaXZtb2RkaTMKKyNl bmRpZgorCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2Lm1kCTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2Nv bmZpZy9jcjE2L2NyMTYubWQJMjAxMS0wNS0zMCAxNzoxNjozNS4wMDAwMDAw MDAgKzA1MzAKQEAgLTAsMCArMSwxMjcxIEBACis7OyBHQ0MgbWFjaGluZSBk ZXNjcmlwdGlvbiBmb3IgQ1IxNi4KKzs7IENvcHlyaWdodCAoQykgMjAxMSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7IENvbnRyaWJ1dGVk IGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCis7OyBU aGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKzs7IEdDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKQorOzsgYW55IGxhdGVyIHZlcnNpb24uCisKKzs7IEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorOzsgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCis7 OyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQor OzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAKKworOzsgIFJl Z2lzdGVyIG51bWJlcnMKKyhkZWZpbmVfY29uc3RhbnRzCisgIFsoU1BfUkVH TlVNIDE1KTsgU3RhY2sgcG9pbnRlcgorICAgKFJBX1JFR05VTSAxNCk7IFJl dHVybiBhZGRyZXNzCisgIF0KKykKKworOzsgUHJlZGljYXRlcyAmIENvbnN0 cmFpbnRzCisoaW5jbHVkZSAicHJlZGljYXRlcy5tZCIpCisoaW5jbHVkZSAi Y29uc3RyYWludHMubWQiKQorCis7OyBVTlNQRUMgdXNhZ2UKKyhkZWZpbmVf Y29uc3RhbnRzCisgIFsoVU5TUEVDX1BJQ19BRERSICAgICAgICAgICAgIDAp CisgICAoVU5TUEVDX1BJQ19MT0FEX0FERFIgICAgICAgIDEpCisgICAoVU5T UEVDX0xJQlJBUllfT0ZGU0VUICAgICAgIDIpCisgICAoVU5TUEVDX1NIX0xJ Ql9QVVNIX1IxMiAgICAgIDMpCisgICAoVU5TUEVDX1NIX0xJQl9QT1BfUjEy ICAgICAgIDQpCisgICAoVU5TUEVDX1JFVFVSTl9BRERSICAgICAgICAgIDUp CisgIF0KKykKKworOzsgQXR0cmlidXRlcworKGRlZmluZV9hdHRyICJsZW5n dGgiICIiIChjb25zdF9pbnQgMikpCisKKyhkZWZpbmVfYXNtX2F0dHJpYnV0 ZXMKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAgTW9k ZSBNYWNybyBEZWZpbml0aW9ucworKGRlZmluZV9tb2RlX2l0ZXJhdG9yIENS MTZJTSBbUUkgSEkgU0ldKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIExPTkcg ICBbU0kgU0ZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFMTE1URCBbUUkg SEkgU0kgU0YgREkgREZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIERPVUJM RSBbREkgREZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFNIT1JUICBbUUkg SEldKQorKGRlZmluZV9tb2RlX2F0dHIgdElzYSAgICAgIFsoUUkgImIiKSAo SEkgInciKSAoU0kgImQiKSAoU0YgImQiKV0pCisoZGVmaW5lX21vZGVfYXR0 ciBsSW1tQXJpdGggIFsoUUkgIjQiKSAoSEkgIjQiKSAoU0kgIjYiKSAoU0Yg IjYiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBsSW1tQXJpdGhEIFsoUUkgIjQi KSAoSEkgIjQiKSAoU0kgIjYiKSAoU0YgIjYiKSAoREkgIjEyIikgKERGICIx MiIpXSkKKyhkZWZpbmVfbW9kZV9hdHRyIGlGICAgICAgICBbKFFJICJpIikg KEhJICJpIikgKFNJICJpIikgKFNGICJGIildKQorKGRlZmluZV9tb2RlX2F0 dHIgaUZEICAgICAgIFsoREkgImkiKSAoREYgIkYiKV0pCisoZGVmaW5lX21v ZGVfYXR0ciBMTCAgICAgICAgWyhRSSAiTCIpIChISSAiTCIpXSkKKyhkZWZp bmVfbW9kZV9hdHRyIHNoSW1tQml0cwlbKFFJICIzIikgKEhJICI0IikgKFNJ ICI1IildKQorCis7IEluIFFJIG1vZGUgd2UgcHVzaCAyIGJ5dGVzIGluc3Rl YWQgb2YgMSBieXRlLgorKGRlZmluZV9tb2RlX2F0dHIgcHVzaENuc3RyIFso UUkgIlgiKSAoSEkgIjwiKSAoU0kgIjwiKSAoU0YgIjwiKSAoREkgIjwiKSAo REYgIjwiKV0pCis7IHRwdXNoIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0 aGUgJ251bWJlciBvZiByZWdpc3RlcnMgdG8gcHVzaCcgaW4gdGhlIAorOyBw dXNoIGluc3RydWN0aW9uLgorKGRlZmluZV9tb2RlX2F0dHIgdHB1c2ggWyhR SSAiMSIpIChISSAiMSIpIChTSSAiMiIpIChTRiAiMiIpIChESSAiNCIpIChE RiAiNCIpXSkKKworOzsgIENvZGUgTWFjcm8gRGVmaW5pdGlvbnMKKyhkZWZp bmVfY29kZV9pdGVyYXRvciBzel94dG5kIFsgc2lnbl9leHRlbmQgICAgICAg emVyb19leHRlbmRdKQorKGRlZmluZV9jb2RlX2F0dHIgIHNJc2EgICAgWyhz aWduX2V4dGVuZCAiIikgICh6ZXJvX2V4dGVuZCAidSIpXSkKKyhkZWZpbmVf Y29kZV9hdHRyICBzUGF0ICAgIFsoc2lnbl9leHRlbmQgInMiKSAoemVyb19l eHRlbmQgInUiKV0pCisoZGVmaW5lX2NvZGVfYXR0ciAgc3pQYXQgICBbKHNp Z25fZXh0ZW5kICIiKSAgKHplcm9fZXh0ZW5kICJ6ZXJvXyIpXSkKKyhkZWZp bmVfY29kZV9hdHRyICBzeklzYSAgIFsoc2lnbl9leHRlbmQgIngiKSAoemVy b19leHRlbmQgInoiKV0pCisoZGVmaW5lX2NvZGVfaXRlcmF0b3IgYW55X2Nv bmQgW2VxIG5lIGd0IGd0dSBsdCBsdHUgZ2UgZ2V1IGxlIGxldV0pCisKKzs7 IEFyaXRobWV0aWMgSW5zdHVjdGlvbiAgUGF0dGVybnMKKzs7Cis7OyBBZGRp dGlvbiBpbnNucy4KKyhkZWZpbmVfZXhwYW5kICJhZGRkaTMiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQor CShwbHVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIiKQorCQkgKG1hdGNoX29wZXJhbmQ6REkgMiAibm9ubWVtb3J5X29w ZXJhbmQiICIiKSkpXQorICAiIgorICB7CisgICAgaWYgKChHRVRfQ09ERSAo b3BlcmFuZHNbMl0pICE9IFJFRykpCisgICAgICB7CisJb3BlcmFuZHNbMl0g PSBmb3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworICAgICAgfQor ICB9CispCisKKyhkZWZpbmVfaW5zbiAiYWRkZGkzX2luc24iCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIp CisJKHBsdXM6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiUwIikKKwkJIChtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVy X29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgIioKKyAgICByZXR1cm4gY3Ix Nl9lbWl0X2FkZF9zdWJfZGkgKG9wZXJhbmRzLCAwKTsKKyAgIgorKQorCiso ZGVmaW5lX2luc24gImFkZHNpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyLHIiKQorCShwbHVz OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIl MCwwLDAsMCwwIikKKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19zaV9p bnRfb3BlcmFuZCIgInIsTSxOLE8saSIpKSldCisgICIiCisgICJhZGRkXHQl MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0LDQsNiIpXQor KQorCisoZGVmaW5lX2luc24gImFkZGhpMyIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKHBs dXM6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiUwLDAsMCIpCisJCSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdfaGlfaW50 X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisgICJhZGR3XHQlMiwgJTAi CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCispCisKKyhkZWZp bmVfaW5zbiAiYWRkcWkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyIpCisJKHBsdXM6UUkgKG1hdGNo X29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAiKQorCQkg KG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnX3FpX2ludF9vcGVyYW5kIiAiYyxN IikpKV0KKyAgIiIKKyAgImFkZGJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiwyIildCispCisKKzs7Cis7OyAgU3VidHJhY3QgSW5zdHJ1 Y3Rpb25zCisoZGVmaW5lX2V4cGFuZCAic3ViZGkzIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkobWlu dXM6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiIpCisJCSAgKG1hdGNoX29wZXJhbmQ6REkgMiAibm9ubWVtb3J5X29wZXJh bmQiICIiKSkpXQorICAiIgorICB7CisgICAgaWYgKChHRVRfQ09ERSAob3Bl cmFuZHNbMl0pICE9IFJFRykpCisgICAgICB7CisJb3BlcmFuZHNbMl0gPSBm b3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworICAgICAgfQorICB9 CispCisKKyhkZWZpbmVfaW5zbiAic3ViZGkzX2luc24iCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJ KG1pbnVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIwIikKKwkJICAobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpKSldCisgICIiCisgICIqCisgICAgcmV0dXJuIGNyMTZf ZW1pdF9hZGRfc3ViX2RpIChvcGVyYW5kcywgMSk7CisgICIKKykKKworKGRl ZmluZV9pbnNuICJzdWJzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKwkobWludXM6U0kgKG1h dGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCIpCisJ CSAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAi cixpIikpKV0KKyAgIiIKKyAgInN1YmRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiNCw2IildCispCisKKyhkZWZpbmVfaW5zbiAic3ViaGkz IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPWMsYyxjIikKKwkobWludXM6SEkgKG1hdGNoX29wZXJhbmQ6SEkg MSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCwwIikKKwkJICAobWF0Y2hfb3Bl cmFuZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIpKSldCisg ICIiCisgICJzdWJ3XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIg IjIsMiw0IildCispCisKKyhkZWZpbmVfaW5zbiAic3VicWkzIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMs YyIpCisJKG1pbnVzOlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIwLDAiKQorCQkgIChtYXRjaF9vcGVyYW5kOlFJIDIgInJl Z19xaV9pbnRfb3BlcmFuZCIgImMsTSIpKSldCisgICIiCisgICJzdWJiXHQl MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQorCis7 OworOzsgIE11bHRpcGx5IGFuZCBBY2N1bXVsYXRlIEluc3RydWN0aW9ucwor KGRlZmluZV9pbnNuICJzbWFjaGlzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHBsdXM6U0kK KwkgKG11bHQ6U0kgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJCSAgKHNpZ25fZXh0ZW5k OlNJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJy IikpKQorCSAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCIpKSldCisgICJUQVJHRVRfTUFDIgorICAibWFjc3dcdCUxLCAlMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmlu ZV9pbnNuICJ1bWFjaGlzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHBsdXM6U0kKKwkgKG11 bHQ6U0kgKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpCisJCSAgKHplcm9fZXh0ZW5kOlNJICht YXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKQor CSAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIp KSldCisgICJUQVJHRVRfTUFDIgorICAibWFjdXdcdCUxLCAlMiwgJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsKKzs7ICBNdWx0 aXBseSBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAibXVsaGkzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PWMsYyxjIikKKwkobXVsdDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiJTAsMCwwIikKKwkJIChtYXRjaF9vcGVyYW5kOkhJ IDIgInJlZ19vcl9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAgIiIKKyAg Im11bHdcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQi KV0KKykKKworKGRlZmluZV9pbnNuICJtdWxxaWhpMyIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwko bXVsdDpISSAoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikpCisJCSAoc2lnbl9leHRlbmQ6SEkg KG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImMiKSkp KV0KKyAgIiIKKyAgIm11bHNiXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworOzsKKzs7ICBCaXQgU2V0L0NsZWFyIEluc3Ry dWN0aW9ucworKGRlZmluZV9leHBhbmQgImluc3YiCisgIFsoc2V0ICh6ZXJv X2V4dHJhY3QgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29wZXJhbmQiICIi KQorCQkgICAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3BlcmFu ZCIgIiIpCisJCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0ZV9v cGVyYW5kIiAiIikpCisJKG1hdGNoX29wZXJhbmQgMyAiaW1tZWRpYXRlX29w ZXJhbmQiICIiKSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgeworICAgIGlm IChJTlRWQUwgKG9wZXJhbmRzWzFdKSAhPSAxKQorICAgICAgRkFJTDsKKyAg ICBpZiAoSU5UVkFMIChvcGVyYW5kc1syXSkgPCAwIHx8IElOVFZBTCAob3Bl cmFuZHNbMl0pID4gMTUpCisgICAgICBGQUlMOworICAgIGlmIChJTlRWQUwg KG9wZXJhbmRzWzNdKSA9PSAxKQorICAgICAgeworCWlmIChHRVRfTU9ERSAo b3BlcmFuZHNbMF0pID09IFFJbW9kZSkKKwkgIHsKKwkgICAgZW1pdF9pbnNu IChnZW5fc2V0X2JpdHFpIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKTsK KwkgICAgRE9ORTsKKwkgIH0KKwllbHNlIGlmIChHRVRfTU9ERSAob3BlcmFu ZHNbMF0pID09IEhJbW9kZSkKKwkgIHsKKwkgICAgZW1pdF9pbnNuIChnZW5f c2V0X2JpdGhpIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKTsKKwkgICAg RE9ORTsKKwkgIH0KKyAgICAgIH0KKyAgICBpZiAoSU5UVkFMIChvcGVyYW5k c1szXSkgPT0gMCkKKyAgICAgIHsKKwlpZiAoR0VUX01PREUgKG9wZXJhbmRz WzBdKSA9PSBRSW1vZGUpCisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX2Ns cl9iaXRxaSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERP TkU7CisJICB9CisJZWxzZSBpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSA9 PSBISW1vZGUpCisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX2Nscl9iaXRo aSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7CisJ ICB9CisgICAgICB9CisgIH0KKykKKworKGRlZmluZV9pbnNuICJzZXRfYml0 PG1vZGU+IgorICBbKHNldCAoemVyb19leHRyYWN0OlNIT1JUIChtYXRjaF9v cGVyYW5kOlNIT1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQorCQkJICAg IChjb25zdF9pbnQgMSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1l ZGlhdGVfb3BlcmFuZCIgImkiKSkKKwkoY29uc3RfaW50IDEpKV0KKyAgIlRB UkdFVF9CSVRfT1BTIgorICAic2JpdDx0SXNhPlx0JTEsJTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJjbHJf Yml0PG1vZGU+IgorICBbKHNldCAoemVyb19leHRyYWN0OlNIT1JUIChtYXRj aF9vcGVyYW5kOlNIT1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQorCQkJ ICAgIChjb25zdF9pbnQgMSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAxICJp bW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKwkoY29uc3RfaW50IDApKV0KKyAg IlRBUkdFVF9CSVRfT1BTIgorICAiY2JpdDx0SXNhPlx0JTEsJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJz ZXRfYml0PG1vZGU+X21lbSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0hP UlQgMCAiYml0X29wZXJhbmQiICI9bSIpCisJKGlvcjpTSE9SVCAobWF0Y2hf ZHVwIDApCisJCSAgIChtYXRjaF9vcGVyYW5kOlNIT1JUIDEgIm9uZV9iaXRf b3BlcmFuZCIgImkiKSkKKyAgKV0KKyAgIlRBUkdFVF9CSVRfT1BTIgorICAi c2JpdDx0SXNhPlx0JCVzMSwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCisoZGVmaW5lX2luc24gImNsZWFyX2JpdDxtb2RlPl9tZW0i CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNIT1JUIDAgImJpdF9vcGVyYW5k IiAiPW0iKQorCShhbmQ6U0hPUlQgKG1hdGNoX2R1cCAwKQorCQkgICAobWF0 Y2hfb3BlcmFuZDpTSE9SVCAxICJyZXZfb25lX2JpdF9vcGVyYW5kIiAiaSIp KQorICApXQorICAiVEFSR0VUX0JJVF9PUFMiCisgICJjYml0PHRJc2E+XHQk JXIxLCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7 Cis7OyAgTG9naWNhbCBJbnN0cnVjdGlvbnMgLSBhbmQKKworKGRlZmluZV9l eHBhbmQgImFuZGRpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJKGFuZDpESSAobWF0Y2hfb3BlcmFu ZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJKG1hdGNoX29wZXJh bmQ6REkgMiAibm9ubWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAiIgorICAg IHsKKyAgICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcp KQorCXsKKwkgIG9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9w ZXJhbmRzWzJdKTsKKwl9CisgICAgfQorKQorCisoZGVmaW5lX2luc24gImFu ZGRpM19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhbmQ6REkgKG1hdGNoX29wZXJhbmQ6 REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikKKwkJKG1hdGNoX29wZXJh bmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgorICAi KgorICAgIHJldHVybiBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3BlcmFuZHMs IDApOworICAiCispCisKKyhkZWZpbmVfaW5zbiAiYW5kc2kzIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIs cixyLHIiKQorCShhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgIiUwLDAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6U0kg MiAicmVnX3NpX2ludF9vcGVyYW5kIiAicixNLE4saSIpKSldCisgICIiCisg ICJhbmRkXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0 LDYiKV0KKykKKworKGRlZmluZV9pbnNuICJhbmRoaTMiCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjLGMi KQorCShhbmQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiUwLDAsMCIpCisJCShtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ19o aV9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAgIiIKKyAgImFuZHdcdCUy LCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQiKV0KKykKKwor KGRlZmluZV9pbnNuICJhbmRxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjLGMiKQorCShhbmQ6UUkg KG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAs MCIpCisJCShtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ19oaV9pbnRfb3BlcmFu ZCIgImMsTSxOIikpKV0KKyAgIiIKKyAgImFuZGJcdCUyLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDIiKV0KKykKKworOzsgIExvZ2ljYWwg SW5zdHJ1Y3Rpb25zIC0gb3IgCisoZGVmaW5lX2V4cGFuZCAiaW9yZGkzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiIikKKwkoaW9yOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIiKQorCQkobWF0Y2hfb3BlcmFuZDpESSAyICJub25tZW1v cnlfb3BlcmFuZCIgIiIpKSldCisgICIiCisgICAgeworICAgICAgaWYgKChH RVRfQ09ERSAob3BlcmFuZHNbMl0pICE9IFJFRykpCisJeworCSAgb3BlcmFu ZHNbMl0gPSBmb3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworCX0K KyAgICB9CispCisKKyhkZWZpbmVfaW5zbiAiaW9yZGkzX2luc24iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCisJKGlvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiJTAiKQorCQkobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpKSldCisgICIiCisgICIqCisgICAgcmV0dXJuIGNy MTZfZW1pdF9sb2dpY2FsX2RpIChvcGVyYW5kcywgMSk7CisgICIKKykKKwor KGRlZmluZV9pbnNuICJpb3JzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIsciIpCisJKGlvcjpT SSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAs MCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdfc2lfaW50X29w ZXJhbmQiICJyLE0sTixpIikpKV0KKyAgIiIKKyAgIm9yZFx0JTIsICUwIgor ICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsNCw2IildCispCisKKyhkZWZp bmVfaW5zbiAiaW9yaGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikKKwkoaW9yOkhJIChtYXRj aF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQor CQkobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJj LE0sTiIpKSldCisgICIiCisgICJvcndcdCUyLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiwyLDQiKV0KKykKKworKGRlZmluZV9pbnNuICJpb3Jx aTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9YyxjLGMiKQorCShpb3I6UUkgKG1hdGNoX29wZXJhbmQ6UUkg MSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRjaF9vcGVy YW5kOlFJIDIgInJlZ19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAg IiIKKyAgIm9yYlx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy LDIsMiIpXQorKQorCis7OyAgTG9naWNhbCBJbnN0cnVjdGlvbnMgLSB4b3Ig CisoZGVmaW5lX2V4cGFuZCAieG9yZGkzIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkoeG9yOkRJICht YXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQko bWF0Y2hfb3BlcmFuZDpESSAyICJub25tZW1vcnlfb3BlcmFuZCIgIiIpKSld CisgICIiCisgICAgeworICAgICAgaWYgKChHRVRfQ09ERSAob3BlcmFuZHNb Ml0pICE9IFJFRykpCisJeworCSAgb3BlcmFuZHNbMl0gPSBmb3JjZV9yZWcg KERJbW9kZSwgb3BlcmFuZHNbMl0pOworCX0KKyAgICB9CispCisKKyhkZWZp bmVfaW5zbiAieG9yZGkzX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHhvcjpESSAobWF0 Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAiKQorCQko bWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSld CisgICIiCisgICIqCisgICAgcmV0dXJuIGNyMTZfZW1pdF9sb2dpY2FsX2Rp IChvcGVyYW5kcywgMik7CisgICIKKykKKworKGRlZmluZV9pbnNuICJ4b3Jz aTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9cixyLHIsciIpCisJKHhvcjpTSSAobWF0Y2hfb3BlcmFuZDpT SSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwLDAiKQorCQkobWF0Y2hf b3BlcmFuZDpTSSAyICJyZWdfc2lfaW50X29wZXJhbmQiICJyLE0sTixpIikp KV0KKyAgIiIKKyAgInhvcmRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiwyLDQsNiIpXQorKQorCisoZGVmaW5lX2luc24gInhvcmhpMyIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1jLGMsYyIpCisJKHhvcjpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6 SEkgMiAicmVnX2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgor ICAieG9yd1x0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIs NCIpXQorKQorCisoZGVmaW5lX2luc24gInhvcnFpMyIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIp CisJKHhvcjpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVy YW5kIiAiJTAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnX2hp X2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAieG9yYlx0JTIs ICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsMiIpXQorKQorCis7 OworOzsgIFNpZ24gYW5kIFplcm8gRXh0ZW5kIEluc3RydWN0aW9ucworKGRl ZmluZV9pbnNuICI8c3pQYXQ+ZXh0ZW5kaGlzaTIiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHN6 X3h0bmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkpXQorICAiIgorICAibW92PHN6SXNhPndcdCUxLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2luc24g IjxzelBhdD5leHRlbmRxaWhpMiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoc3pfeHRuZDpISSAo bWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSld CisgICIiCisgICJtb3Y8c3pJc2E+Ylx0JTEsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICI0IildCispCisKKzs7Cis7OyAgT25lJ3MgQ29tcGxlbWVu dAorKGRlZmluZV9pbnNuICJvbmVfY21wbGRpMiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobm90 OkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIw IikpKV0KKyAgIiIKKyAgeworICAgICBydHggeG9wZXJhbmQgOworICAgICBp bnQgcmVnMCA9IFJFR05PIChvcGVyYW5kc1swXSk7CisKKyAgICAgeG9wZXJh bmQgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCByZWcwICsgMik7CisgICAgIG91 dHB1dF9hc21faW5zbiAoInhvcmRcdCQtMSwgJTAiLCBvcGVyYW5kcyk7Cisg ICAgIG91dHB1dF9hc21faW5zbiAoInhvcmRcdCQtMSwgJTAiLCAmeG9wZXJh bmQpOworICAgICByZXR1cm4gIiIgOworICB9CisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjEyIildCispCisKKyhkZWZpbmVfaW5zbiAib25lX2NtcGw8bW9k ZT4yIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKKwkobm90OkNSMTZJTSAobWF0Y2hfb3BlcmFu ZDpDUjE2SU0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAiIgor ICAieG9yPHRJc2E+XHQkLTEsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildCispCisKKzs7Cis7OyAgQXJpdGhtZXRpYyBMZWZ0IGFuZCBSaWdo dCBTaGlmdCBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAiYXNobHFpMyIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1jLGMiKQorCShhc2hpZnQ6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCIpCisJCSAgIChtYXRjaF9vcGVyYW5k OlFJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiYyxJIikpKV0KKyAgIiIKKyAg ImFzaHViXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIp XQorKQorCisoZGVmaW5lX2luc24gImFzaGxoaTMiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjIikKKwko YXNoaWZ0OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIwLDAiKQorCQkgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJub25tZW1v cnlfb3BlcmFuZCIgImMsSiIpKSldCisgICIiCisgICJhc2h1d1x0JTIsICUw IgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIiKV0KKykKKworKGRlZmlu ZV9pbnNuICJhc2hsc2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisJKGFzaGlmdDpTSSAobWF0 Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwIikKKwkJ ICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9ubWVtb3J5X29wZXJhbmQiICJy LEsiKSkpXQorICAiIgorICAiYXNodWRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiwyIildCispCisKKyhkZWZpbmVfZXhwYW5kICJhc2hy PG1vZGU+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAgInJl Z2lzdGVyX29wZXJhbmQiICIiKQorCShhc2hpZnRydDpDUjE2SU0gKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkJ IChtYXRjaF9vcGVyYW5kOlFJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikp KV0KKyAgIiIKKyAgICB7CisgICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRz WzJdKSA9PSBDT05TVF9JTlQpCisJeworCSAgLyogSWYgdGhlIGNvbnN0YW50 IGlzIG5vdCBpbiByYW5nZSwgdHJ5IHBsYWNpbmcgaXQgaW4gYSByZWcgKi8K KwkgIGlmICghVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3Bl cmFuZHNbMl0pLDxzaEltbUJpdHM+KSkKKwkgIG9wZXJhbmRzWzJdID0gY29w eV90b19tb2RlX3JlZyhRSW1vZGUsIG9wZXJhbmRzWzJdKTsKKwl9CisKKyAg ICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMl0pICE9IENPTlNUX0lOVCkK KwlvcGVyYW5kc1syXSA9IGdlbl9ydHhfTkVHIChRSW1vZGUsIG5lZ2F0ZV9y dHggKFFJbW9kZSwgb3BlcmFuZHNbMl0pKTsKKyAgICB9CispCisKKyhkZWZp bmVfaW5zbiAiYXNocnFpM19pbW1faW5zbiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNoaWZ0 cnQ6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IjAiKQorCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInNoaWZ0X3FpX2lt bV9vcGVyYW5kIiAiaSIpKSldCisgICIiCisgICJhc2h1Ylx0JCVuMiwgJTAi CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9p bnNuICJhc2hyaGkzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShhc2hpZnRydDpI SSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIp CisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfaGlfaW1tX29w ZXJhbmQiICJpIikpKV0KKyAgIiIKKyAgImFzaHV3XHQkJW4yLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24g ImFzaHJzaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKGFzaGlmdHJ0OlNJICht YXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJ ICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9zaV9pbW1fb3BlcmFu ZCIgImkiKSkpXQorICAiIgorICAiYXNodWRcdCQlbjIsICUwIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAiYXNo cnFpM19uZWdfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNoaWZ0cnQ6UUkgKG1hdGNo X29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCQkgICAg IChuZWc6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFu ZCIgImMiKSkpKV0KKyAgIiIKKyAgImFzaHViXHQlMiwlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImFzaHJo aTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGFzaGlmdHJ0OkhJIChtYXRjaF9v cGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAo bmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQi ICJjIikpKSldCisgICIiCisgICJhc2h1d1x0JTIsJTAiCisgIFsoc2V0X2F0 dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJhc2hyZGkz X25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhc2hpZnRydDpTSSAobWF0Y2hfb3Bl cmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG5l ZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAi ciIpKSkpXQorICAiIgorICAiYXNodWRcdCUyLCUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfZXhwYW5kICJsc2hyPG1v ZGU+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAgInJlZ2lz dGVyX29wZXJhbmQiICIiKQorCShsc2hpZnRydDpDUjE2SU0gKG1hdGNoX29w ZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkJICht YXRjaF9vcGVyYW5kOlFJIDIgInJlZ19vcl9pbnRfb3BlcmFuZCIgIiIpKSld CisgICIiCisgICAgeworICAgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1sy XSkgPT0gQ09OU1RfSU5UKQorCXsKKwkgIC8qIElmIHRoZSBjb25zdGFudCBp cyBub3QgaW4gcmFuZ2UsIHRyeSBwbGFjaW5nIGl0IGluIGEgcmVnICovCisJ ICBpZiAoIVVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wZXJh bmRzWzJdKSw8c2hJbW1CaXRzPikpCisJICBvcGVyYW5kc1syXSA9IGNvcHlf dG9fbW9kZV9yZWcoUUltb2RlLCBvcGVyYW5kc1syXSk7CisJfQorCisgICAg ICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBDT05TVF9JTlQpCisJ b3BlcmFuZHNbMl0gPSBnZW5fcnR4X05FRyAoUUltb2RlLCBuZWdhdGVfcnR4 IChRSW1vZGUsIG9wZXJhbmRzWzJdKSk7CisgICAgfQorKQorCisoZGVmaW5l X2luc24gImxzaHJxaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlmdHJ0 OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIw IikKKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9xaV9vcGVy YW5kIiAiUSIpKSldCisgICIiCisgICJsc2hiXHQkJW4yLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImxz aHJoaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlmdHJ0OkhJIChtYXRj aF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAg ICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9oaV9vcGVyYW5kIiAiUiIp KSldCisgICIiCisgICJsc2h3XHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJzaTNfaW1t X2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCisJKGxzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5k OlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobWF0Y2hf b3BlcmFuZDpRSSAyICJzaGlmdF9zaV9vcGVyYW5kIiAiUyIpKSldCisgICIi CisgICJsc2hkXHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJxaTNfbmVnX2luc24iCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9YyIpCisJKGxzaGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9v cGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIi CisgICJsc2hiXHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIp XQorKQorCisoZGVmaW5lX2luc24gImxzaHJoaTNfbmVnX2luc24iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 YyIpCisJKGxzaGlmdHJ0OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVy YW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisg ICJsc2h3XHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQor KQorCisoZGVmaW5lX2luc24gImxzaHJzaTNfbmVnX2luc24iCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIp CisJKGxzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5k OlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisgICIiCisgICJs c2hkXHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQor Cis7OworOzsgIE1vdmUgSW5zdHJ1Y3Rpb25zCisKKzs7IE1vdmUgYW55IG5v bi1pbW1lZGlhdGUgb3BlcmFuZCAwIHRvIGEgZ2VuZXJhbCBvcGVyYW5kIDEu Cis7OyBUaGlzIGFwcGxpZXMgb25seSBiZWZvcmUgc3RhcnRpbmcgdGhlIHJl bG9hZCBwcm9jZXNzCis7OyBPcGVyYW5kIDAgaXMgbm90IGEgcmVnaXN0ZXIg b3BlcmFuZCBvZiB0eXBlIG1vZGUgTU9ERQorOzsgSWYgT3BlcmFuZCAwIGlz IGEgcHVzaCBvcGVyYW5kIG9mIHR5cGUgbW9kZSBNT0RFCis7OyB0aGVuLCBp ZiBPcGVyYW5kIDEgaXMgYSBub24tU1AgcmVnaXN0ZXIKKzs7IHRoZW4sIE9w ZXJhbmQgMSA9IGNvcHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUsIE9wZXJh bmQgMSkKKzs7IGVuZGlmCis7OyBlbHNlCis7OyBpZiBPcGVyYW5kIDEgaXMg ZWl0aGVyIHJlZ2lzdGVyIG9yIDQtYml0IGltbWVkaWF0ZSBjb25zdGFudAor OzsgdGhlbiwgT3BlcmFuZCAxID0gY29weV90b19tb2RlX3JlZyAoPE1PREU+ bW9kZSwgT3BlcmFuZCAxKQorOzsgZW5kaWYKKzs7IGVuZGlmCis7OworOzsg V2hhdCBkb2VzIGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUsIHJ0eCB2YWwpIGRv PworOzsgQ29weSB0aGUgdmFsdWUgaW50byBuZXcgdGVtcCByZWcgYW5kIHJl dHVybiB0aGUgcmVnIHdoZXJlIHRoZQorOzsgbW9kZSBvZiB0aGUgbmV3IHJl ZyBpcyBhbHdheXMgbW9kZSBNT0RFIHdoZW4gdmFsdWUgaXMgY29uc3RhbnQK Kzs7Cis7OyBXaHkgc2hvdWxkIGNvcHlfdG9fbW9kZV9yZWcgYmUgY2FsbGVk PworOzsgQWxsIHNvcnRzIG9mIG1vdmUgYXJlIG5vciBzdXBwb3J0ZWQgYnkg Q1IxNi4gVGhlcmVmb3JlLCAKKzs7IHdoZW4gdW5zdXBwb3J0ZWQgbW92ZSBp cyBlbmNvdW50ZXJlZCwgdGhlIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIAor Ozsgd2lsbCBiZSBpbnRyb2R1Y2VkIGZvciB0aGUgcHVycG9zZS4KKzs7Cis7 OyBBIG5ldyBtb3ZlIGluc24gaXMgaW5zZXJ0ZWQgZm9yIE9wIDEgd2hlbiBv bmUgb2YgdGhlIGZvbGxvd2luZworOzsgY29uZGl0aW9ucyBpcyBtZXQuCis7 OyBDYXNlIDE6ICBPcCAwIGlzIHB1c2hfb3BlcmFuZAorOzsgICAgICAgICAg T3AgMSBpcyBTUCByZWdpc3RlcgorOzsKKzs7IENhc2UgMjogIE9wIDAgaXMg bm90IHB1c2hfb3BlcmFuZAorOzsgICAgICAgICAgT3AgMSBpcyBuZWl0aGVy IHJlZ2lzdGVyIG5vciB1bnNpZ25lZCA0LWJpdCBpbW1lZGlhdGUKKworKGRl ZmluZV9leHBhbmQgIm1vdjxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6QUxMTVREIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikKKwkobWF0 Y2hfb3BlcmFuZDpBTExNVEQgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikpXQor ICAiIgorICB7CisgICAgaWYgKCEocmVsb2FkX2luX3Byb2dyZXNzIHx8IHJl bG9hZF9jb21wbGV0ZWQpKQorICAgICAgeworCS8qIE9ubHkgaWYgT3AwIGlz IGEgcmVnaXN0ZXIgb3BlcmFuZC4gICovCisJaWYgKCFyZWdpc3Rlcl9vcGVy YW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkpCisJICB7CisJICAgIGlm IChwdXNoX29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSkgCisJ ICAgICAgeworCQkvKiBVc2UgY29weV90b19tb2RlX3JlZyBvbmx5IGlmIHRo ZSByZWdpc3RlciBuZWVkcyAKKwkJdG8gYmUgcHVzaGVkIGlzIFNQIGFzIENS MTYgZG9lcyBub3Qgc3VwcG9ydCBwdXNoaW5nIFNQLiAgKi8KKwkJaWYgKCFu b3NwX3JlZ19vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkpCisJ CSAgb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21vZGVfcmVnICg8TU9ERT5tb2Rl LCBvcGVyYW5kc1sxXSk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAg eworCQkvKiBVc2UgY29weV90b19tb2RlX3JlZyBpZiBvcDEgaXMgbm90IHJl Z2lzdGVyIG9wZXJhbmQKKwkJICAgc3ViamVjdCB0byBjb25kaXRpb25zIGlu c2lkZS4gICovCisJCWlmICghcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNb MV0sIDxNT0RFPm1vZGUpKQorCQkgIHsKKwkJICAgIC8qIENSMTYgZG9lcyBu b3Qgc3VwcG9ydCBtb3ZpbmcgaW1tZWRpYXRlIHRvIFNJIG9yIFNGIAorCQkg ICAgICAgdHlwZSBtZW1vcnkuICAqLworCQkgICAgaWYgKDxNT0RFPm1vZGUg PT0gU0ltb2RlIHx8IDxNT0RFPm1vZGUgPT0gU0Ztb2RlIHx8CisJCQk8TU9E RT5tb2RlID09IERJbW9kZSB8fCA8TU9ERT5tb2RlID09IERGbW9kZSkKKwkJ ICAgICAgb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21vZGVfcmVnICg8TU9ERT5t b2RlLCBvcGVyYW5kc1sxXSk7CisJCSAgICBlbHNlCisJCSAgICAgIC8qIG1v dmluZyBpbW00IGlzIHN1cHBvcnRlZCBieSBDUjE2IGluc3RydWN0aW9uLiAg Ki8KKwkJICAgICAgaWYgKCF1NGJpdHNfb3BlcmFuZCAob3BlcmFuZHNbMV0s IDxNT0RFPm1vZGUpKQorCQkJb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21vZGVf cmVnICg8TU9ERT5tb2RlLCBvcGVyYW5kc1sxXSk7CisJCSAgfQorCSAgICAg ICB9CisJICB9CisKKwkgIC8qIElmIG9wZXJhbmQtMSBpcyBhIHN5bWJvbCwg Y29udmVydCBpdCBpbnRvIGEgQlJPIG9yIEdPVCBGb3JtYXQuICAqLworCSAg aWYgKGZsYWdfcGljICYmICEgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChv cGVyYW5kc1sxXSkpCisJICAgIHsKKwkgICAgICBvcGVyYW5kc1sxXSA9IGxl Z2l0aW1pemVfcGljX2FkZHJlc3MgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2Rl LCAwKTsKKwkgICAgfQorICAgICAgfQorICB9CispCisKKzsgQUxMTVQgICAg IDogUUksSEksU0ksU0YKKzsgcHVzaENuc3RyIDogUHVzaCBjb25zdHJhaW50 cyAKKzsgICAgICAgICAgICAgICAgUUkgOiBYCis7ICAgICAgICAgICAgIEhJ LFNJLFNGLERJLERGIDogPAorOyBiICAgICAgICAgOiBBbGwgbm9uLXNwIHJl Z2lzdGVycworOyB0cHVzaCAgICAgOiBQdXNoIGNvdW50Cis7ICAgICAgICAg ICAgICAgIFFJLEhJIDogMQorOyAgICAgICAgICAgICAgICBTSSxTRiA6IDIK KzsgICAgICAgICAgICAgICAgREksREYgOiA0CisoZGVmaW5lX2luc24gInB1 c2g8bW9kZT5faW50ZXJuYWwiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFM TE1URCAwICJwdXNoX29wZXJhbmQiICI9PHB1c2hDbnN0cj4iKQorCShtYXRj aF9vcGVyYW5kOkFMTE1URCAxICJub3NwX3JlZ19vcGVyYW5kIiAiYiIpKV0K KyAgIiIKKyAgInB1c2hcdCQ8dHB1c2g+LCVwMSIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiIpXQorKQorCis7IChESSwgREYpIG1vdmUKKyhkZWZpbmVf aW5zbiAiKm1vdjxtb2RlPl9kb3VibGUiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOkRPVUJMRSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1yLCByLCBy LCBtIikKKwkobWF0Y2hfb3BlcmFuZDpET1VCTEUgMSAiZ2VuZXJhbF9vcGVy YW5kIiAiciwgPGlGRD4sIG0sIHIiKSldCisgICJyZWdpc3Rlcl9vcGVyYW5k IChvcGVyYW5kc1swXSwgREltb2RlKSAKKyAgIHx8IHJlZ2lzdGVyX29wZXJh bmQgKG9wZXJhbmRzWzBdLCBERm1vZGUpCisgICB8fCByZWdpc3Rlcl9vcGVy YW5kIChvcGVyYW5kc1sxXSwgREltb2RlKQorICAgfHwgcmVnaXN0ZXJfb3Bl cmFuZCAob3BlcmFuZHNbMV0sIERGbW9kZSkiCisgIHsKKyAgICBpZiAoMCA9 PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAgICAgcnR4IHhvcGVyYW5kc1sy XSA7CisgICAgICBpbnQgcmVnMCA9IFJFR05PIChvcGVyYW5kc1swXSk7Cisg ICAgICBpbnQgcmVnMSA9IFJFR05PIChvcGVyYW5kc1sxXSk7CisKKyAgICAg IHhvcGVyYW5kc1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZzAgKyAy KTsKKyAgICAgIHhvcGVyYW5kc1sxXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUs IHJlZzEgKyAyKTsKKyAgICAgIGlmICgocmVnMSArIDIpICE9IHJlZzApCisJ eworCSAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgb3BlcmFu ZHMpOworCSAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgeG9w ZXJhbmRzKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgb3V0cHV0X2FzbV9p bnNuICgibW92ZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkgIG91dHB1dF9h c21faW5zbiAoIm1vdmRcdCUxLCAlMCIsIG9wZXJhbmRzKTsKKwl9fQorCisg ICAgZWxzZSBpZiAoMSA9PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAgICAg cnR4IGxvX29wZXJhbmRzWzJdIDsKKyAgICAgIHJ0eCBoaV9vcGVyYW5kc1sy XSA7CisKKyAgICAgIGxvX29wZXJhbmRzWzBdID0gZ2VuX3J0eF9SRUcgKFNJ bW9kZSwgUkVHTk8gKG9wZXJhbmRzWzBdKSk7CisgICAgICBoaV9vcGVyYW5k c1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIFJFR05PIChvcGVyYW5kc1sw XSkgKyAyKTsKKyAgICAgIGxvX29wZXJhbmRzWzFdID0gc2ltcGxpZnlfZ2Vu X3N1YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1sxXSwKKwkJICAgICAgIFZPSURt b2RlID09IEdFVF9NT0RFIChvcGVyYW5kc1sxXSkKKwkJICAgICAgID8gRElt b2RlICA6IEdFVF9NT0RFIChvcGVyYW5kc1sxXSksIDApOworICAgICAgaGlf b3BlcmFuZHNbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1vZGUsIG9w ZXJhbmRzWzFdLAorCQkgICAgICAgVk9JRG1vZGUgPT0gR0VUX01PREUgKG9w ZXJhbmRzWzFdKQorCQkgICAgICAgPyBESW1vZGUgIDogR0VUX01PREUgKG9w ZXJhbmRzWzFdKSwgNCk7CisgICAgICBvdXRwdXRfYXNtX2luc24gKCJtb3Zk XHQlMSwgJTAiLCBsb19vcGVyYW5kcyk7CisgICAgICBvdXRwdXRfYXNtX2lu c24gKCJtb3ZkXHQlMSwgJTAiLCBoaV9vcGVyYW5kcyk7fQorCisgICAgZWxz ZSBpZiAoMiA9PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAgICAgcnR4IHhv cGVyYW5kc1syXSA7CisgICAgICBpbnQgcmVnMCA9IFJFR05PIChvcGVyYW5k c1swXSksIHJlZzEgPSAtMiA7CisgICAgICBydHggYWRkciA7CisKKwlpZiAo TUVNX1AgKG9wZXJhbmRzWzFdKSkKKwkgIGFkZHIgPSBYRVhQIChvcGVyYW5k c1sxXSwgMCk7CisJZWxzZQorCSAgYWRkciA9IE5VTExfUlRYIDsKKwlzd2l0 Y2ggKEdFVF9DT0RFIChhZGRyKSkKKwkgIHsKKwkgICAgY2FzZSBSRUc6CisJ ICAgIGNhc2UgU1VCUkVHOgorCSAgICAgIHJlZzEgPSBSRUdOTyAoYWRkcik7 CisJICAgICAgYnJlYWsgOworCSAgICBjYXNlIFBMVVM6CisJICAgICAgc3dp dGNoIChHRVRfQ09ERSAoWEVYUCAoYWRkciwgMCkpKSB7CisJCWNhc2UgUkVH OgorCQljYXNlIFNVQlJFRzoKKwkJICByZWcxID0gUkVHTk8gKFhFWFAgKGFk ZHIsIDApKTsKKwkJICBicmVhayA7CisJCWNhc2UgUExVUzoKKwkJICByZWcx ID0gUkVHTk8gKFhFWFAgKFhFWFAgKGFkZHIsIDApLCAwKSk7CisJCSAgYnJl YWsgOworCQlkZWZhdWx0OgorCQkgIGluZm9ybSAoREVDTF9TT1VSQ0VfTE9D QVRJT04gKGNmdW4tPmRlY2wpLCAidW5leHBlY3RlZCBleHByZXNzaW9uOyBh ZGRyOiIpOworCQkgIGRlYnVnX3J0eCAoYWRkcik7CisJCSAgaW5mb3JtIChE RUNMX1NPVVJDRV9MT0NBVElPTiAoY2Z1bi0+ZGVjbCksICJvcGVyYW5kc1sx XToiKTsKKwkJICBkZWJ1Z19ydHggKG9wZXJhbmRzWzFdKTsKKwkJICBpbmZv cm0gKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChjZnVuLT5kZWNsKSwgImdlbmVy YXRlZCBjb2RlIG1pZ2h0IG5vdyB3b3JrXG4iKTsKKwkJICBicmVhayA7fQor CSAgICAgIGJyZWFrIDsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBicmVhayA7 CisJICB9CisKKwl4b3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0ltb2Rl LCByZWcwICsgMik7CisJeG9wZXJhbmRzWzFdID0gb2Zmc2V0X2FkZHJlc3Mg KG9wZXJhbmRzWzFdLCBHRU5fSU5UICg0KSwgMik7CisJZ2NjX2Fzc2VydCAo KHJlZzAgKyAxKSAhPSByZWcxKTsKKwlpZiAocmVnMCAhPSByZWcxICAmJiAg KHJlZzEgKyAxKSAhPSByZWcwKQorCSAgeworCSAgICBvdXRwdXRfYXNtX2lu c24gKCJsb2FkZFx0JTEsICUwIiwgb3BlcmFuZHMpOworCSAgICBvdXRwdXRf YXNtX2luc24gKCJsb2FkZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkgIH0K KwllbHNlCisJICB7CisJICAgIG91dHB1dF9hc21faW5zbiAoImxvYWRkXHQl MSwgJTAiLCB4b3BlcmFuZHMpOworCSAgICBvdXRwdXRfYXNtX2luc24gKCJs b2FkZFx0JTEsICUwIiwgb3BlcmFuZHMpOworCSAgfX0KKyAgICBlbHNlCisg ICAgICB7CisJcnR4IHhvcGVyYW5kc1syXSA7CisJeG9wZXJhbmRzWzBdID0g b2Zmc2V0X2FkZHJlc3MgKG9wZXJhbmRzWzBdLCBHRU5fSU5UICg0KSwgMik7 CisJeG9wZXJhbmRzWzFdID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkVHTk8g KG9wZXJhbmRzWzFdKSArIDIpOworCW91dHB1dF9hc21faW5zbiAoInN0b3Jk XHQlMSwgJTAiLCBvcGVyYW5kcyk7CisgICAJb3V0cHV0X2FzbV9pbnNuICgi c3RvcmRcdCUxLCAlMCIsIHhvcGVyYW5kcyk7CisgICAgICB9CisgICAgcmV0 dXJuICIiIDsKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI0LCA8bElt bUFyaXRoRD4sIDxsSW1tQXJpdGhEPiwgPGxJbW1Bcml0aEQ+IildCispCisK KzsgQWxsIGxvbmcgKFNJLCBTRikgcmVnaXN0ZXIgbW92ZSwgbG9hZCBhbmQg c3RvcmUgb3BlcmF0aW9ucworOyBUaGUgcHJpbnRfb3BlcmFuZCB3aWxsIHRh a2UgY2FyZSBvZiBwcmludGluZyB0aGUgcmVnaXN0ZXIgcGFpciAKKzsgd2hl biBtb2RlIGlzIFNJL1NGIGFuZCByZWdpc3RlciBpcyBpbiBTSE9SVF9SRUdT CisoZGVmaW5lX2luc24gIiptb3Y8bW9kZT5fbG9uZyIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6TE9ORyAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1y LCByLCByLCBtIikKKwkobWF0Y2hfb3BlcmFuZDpMT05HIDEgImdlbmVyYWxf b3BlcmFuZCIgInIsIDxpRj4sIG0sIHIiKSldCisgICJyZWdpc3Rlcl9vcGVy YW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKyAgIHx8IHJlZ2lzdGVy X29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSIKKyAgIkAKKyAg bW92PHRJc2E+XHQlMSwgJTAKKyAgbW92PHRJc2E+XHQlMSwgJTAKKyAgbG9h ZDx0SXNhPlx0JTEsICUwCisgIHN0b3I8dElzYT5cdCUxLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiw8bEltbUFyaXRoPiw8bEltbUFyaXRoPiw8 bEltbUFyaXRoPiIpXQorKQorCis7OyBBbGwgc2hvcnQgKFFJLCBISSkgcmVn aXN0ZXIgbW92ZSwgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucworKGRlZmlu ZV9pbnNuICIqbW92PG1vZGU+X3Nob3J0IgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTSE9SVCAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1yLCByLCBy LCBtLCBtIikKKwkobWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJnZW5lcmFsX29w ZXJhbmQiICJyLCA8aUY+LCBtLCByLCA8TEw+IikpXQorICAiKHJlZ2lzdGVy X29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSkKKyAgICB8fCAo c3RvcmVfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpCisJJiYg KHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKQor CSAgICB8fCB1NGJpdHNfb3BlcmFuZCAob3BlcmFuZHNbMV0sIDxNT0RFPm1v ZGUpKSkiCisgICJACisgIG1vdjx0SXNhPlx0JTEsICUwCisgIG1vdjx0SXNh Plx0JTEsICUwCisgIGxvYWQ8dElzYT5cdCUxLCAlMAorICBzdG9yPHRJc2E+ XHQlMSwgJTAKKyAgc3Rvcjx0SXNhPlx0JTEsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyLDxsSW1tQXJpdGg+LDxsSW1tQXJpdGg+LDxsSW1tQXJp dGg+LDxsSW1tQXJpdGg+IildCispCisKKzs7ICBDb21wYXJlIEluc3RydWN0 aW9ucworOyBJbnN0cnVjdGlvbiBnZW5lcmF0ZWQgY29tcGFyZXMgdGhlIG9w ZXJhbmRzIGluIHJldmVyc2Ugb3JkZXIKKzsgVGhlcmVmb3JlLCB3aGlsZSBw cmludGluZyB0aGUgYXNtLCB0aGUgcmV2ZXJzZSBvZiB0aGUKKzsgY29tcGFy ZSBjb25kaXRpb24gc2hhbGwgYmUgcHJpbnRlZC4KKyhkZWZpbmVfaW5zbiAi Y2JyYW5jaDxtb2RlPjQiCisgIFsoc2V0IChwYykKKwkoaWZfdGhlbl9lbHNl IChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3BlcmF0 b3IiCisJCSAgICAgIFsobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMSAicmVnaXN0 ZXJfb3BlcmFuZCIgInIsciIpCisJCSAgICAgICAobWF0Y2hfb3BlcmFuZDpD UjE2SU0gMiAibm9ubWVtb3J5X29wZXJhbmQiICJyLG4iKV0pCisJCSAgICAg ICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKQorICAgICAg ICAgICAgICAgICAgICAgIChwYykpKQorICAgKGNsb2JiZXIgKGNjMCkpXQor ICAiIgorICAiY21wPHRJc2E+XHQlMiwgJTFcO2IlZDBcdCVsMyIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiNiw2IildCispCisKKyhkZWZpbmVfZXhwYW5k ICJjbXA8bW9kZT4iCisgIFsocGFyYWxsZWwgWyhzZXQgKGNjMCkKKyAgICAo Y29tcGFyZSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCisJICAgICAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMSAibm9u bWVtb3J5X29wZXJhbmQiICIiKSkpCisgICAgKGNsb2JiZXIgKG1hdGNoX3Nj cmF0Y2g6SEkgMiAiPXIiKSldICkgXQorICAiIgorICAiIikKKworOzsgIFNj b25kIEluc3RydWN0aW9ucworKGRlZmluZV9leHBhbmQgImNzdG9yZTxtb2Rl PjQiCisgIFsoc2V0IChjYzApCisJKGNvbXBhcmUgKG1hdGNoX29wZXJhbmQ6 Q1IxNklNIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkgKG1hdGNoX29w ZXJhbmQ6Q1IxNklNIDMgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKQorICAg KHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIikK KwkobWF0Y2hfb3BlcmF0b3I6SEkgMSAib3JkZXJlZF9jb21wYXJpc29uX29w ZXJhdG9yIgorCVsoY2MwKSAoY29uc3RfaW50IDApXSkpXQorICAiIgorICAi IgorKQorCisoZGVmaW5lX2luc24gIipjbXA8bW9kZT5faW5zbiIKKyAgWyhz ZXQgKGNjMCkKKwkoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAi cmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpCisJCSAobWF0Y2hfb3BlcmFuZDpD UjE2SU0gMSAibm9ubWVtb3J5X29wZXJhbmQiICJyLG4iKSkpXQorICAiIgor ICAiY21wPHRJc2E+XHQlMSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIg IjIsNCIpXQorKQorCisoZGVmaW5lX2luc24gInNDT05EX2ludGVybmFsIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIiKQorCShtYXRjaF9vcGVyYXRvcjpISSAxICJvcmRlcmVkX2NvbXBh cmlzb25fb3BlcmF0b3IiCisJWyhjYzApIChjb25zdF9pbnQgMCldKSldCisg ICIiCisgICJzJWQxXHQlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIp XQorKQorCis7OyAgSnVtcHMgYW5kIEJyYW5jaGVzCisoZGVmaW5lX2luc24g ImluZGlyZWN0X2p1bXBfcmV0dXJuIgorICBbKHBhcmFsbGVsCisgICAgWyhz ZXQgKHBjKQorCSAgKHJlZzpTSSBSQV9SRUdOVU0pKQorICAgKHJldHVybild KQorICBdCisgICJyZWxvYWRfY29tcGxldGVkIgorICAianVtcFx0IChyYSki CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9p bnNuICJqdW1wX3JldHVybiIKKyAgWyhwYXJhbGxlbAorICAgIFsodW5zcGVj OlNJIFsoY29uc3RfaW50IDApXSBVTlNQRUNfUkVUVVJOX0FERFIpCisgICAg IChyZXR1cm4pXSldCisgICJyZWxvYWRfY29tcGxldGVkIgorICAianVtcFx0 KHJhKSIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVm aW5lX2luc24gImluZGlyZWN0X2p1bXAiCisgIFsoc2V0IChwYykKKwkobWF0 Y2hfb3BlcmFuZDpTSSAwICJyZWdfb3Jfc3ltX29wZXJhbmQiICJyLGkiKSld CisgICIiCisgICJACisgIGp1bXBcdCUwCisgIGJyXHQlYTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIsNiIpXQorKQorCisoZGVmaW5lX2luc24gImlu dGVycnVwdF9yZXR1cm4iCisgIFsocGFyYWxsZWwKKyAgICBbKHVuc3BlY192 b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gMCkKKyAgIChyZXR1cm4pXSldCisg ICIiCisgIHsKKyAgICByZXR1cm4gY3IxNl9wcmVwYXJlX3B1c2hfcG9wX3N0 cmluZyAoMSk7CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMTQiKV0K KykKKworKGRlZmluZV9pbnNuICJqdW1wX3RvX2ltbSIKKyAgWyhzZXQgKHBj KQorCShtYXRjaF9vcGVyYW5kIDAgImp1bXBfaW1tX29wZXJhbmQiICJpIikp XQorICAiIgorICAiYnJcdCVjMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi NiIpXQorKQorCisoZGVmaW5lX2luc24gImp1bXAiCisgIFsoc2V0IChwYykK KwkobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSldCisgICIi CisgICJiclx0JWwwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICI2IildCisp CisKKzs7ICBGdW5jdGlvbiBQcm9sb2d1ZSBhbmQgRXBpbG9ndWUKKyhkZWZp bmVfZXhwYW5kICJwcm9sb2d1ZSIKKyAgWyhjb25zdF9pbnQgMCldCisgICIi CisgIHsKKyAgICBjcjE2X2V4cGFuZF9wcm9sb2d1ZSAoKTsKKyAgICBET05F OworICB9CispCisKKyhkZWZpbmVfaW5zbiAicHVzaF9mb3JfcHJvbG9ndWUi CisgIFsocGFyYWxsZWwKKyAgICBbKHNldCAocmVnOlNJIFNQX1JFR05VTSkK KwkgIChtaW51czpTSSAocmVnOlNJIFNQX1JFR05VTSkKKwkJICAgIChtYXRj aF9vcGVyYW5kOlNJIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKSldKV0K KyAgInJlbG9hZF9jb21wbGV0ZWQiCisgIHsKKyAgICByZXR1cm4gY3IxNl9w cmVwYXJlX3B1c2hfcG9wX3N0cmluZyAoMCk7CisgIH0KKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2V4cGFuZCAiZXBpbG9n dWUiCisgIFsocmV0dXJuKV0KKyAgIiIKKyAgeworICAgIGNyMTZfZXhwYW5k X2VwaWxvZ3VlICgpOworICAgIERPTkU7CisgIH0KKykKKworKGRlZmluZV9p bnNuICJwb3BfYW5kX3BvcHJldF9yZXR1cm4iCisgIFsocGFyYWxsZWwKKyAg ICBbKHNldCAocmVnOlNJIFNQX1JFR05VTSkKKwkgIChwbHVzOlNJIChyZWc6 U0kgU1BfUkVHTlVNKQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1l ZGlhdGVfb3BlcmFuZCIgImkiKSkpCisgICAgICh1c2UgKHJlZzpTSSBSQV9S RUdOVU0pKQorICAgICAocmV0dXJuKV0pCisgIF0KKyAgInJlbG9hZF9jb21w bGV0ZWQiCisgIHsKKyAgICByZXR1cm4gY3IxNl9wcmVwYXJlX3B1c2hfcG9w X3N0cmluZyAoMSk7CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIp XQorKQorCisoZGVmaW5lX2luc24gInBvcHJldF9SQV9yZXR1cm4iCisgIFso cGFyYWxsZWwKKyAgICBbKHVzZSAocmVnOlNJIFJBX1JFR05VTSkpCisgICAg IChyZXR1cm4pXSkKKyAgXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAgInBv cHJldFx0cmEiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKwor OzsgIFRhYmxlIEp1bXAKKyhkZWZpbmVfaW5zbiAidGFibGVqdW1wIgorICBb KHNldCAocGMpCisJKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgInIiKSkKKyAgICh1c2UgKGxhYmVsX3JlZjpTSSAobWF0Y2hfb3Bl cmFuZCAxICIiICIiKSkpXQorICAiIWZsYWdfcGljIgorICAianVtcFx0JTAi CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsgIENhbGwg SW5zdHJ1Y3Rpb25zCisoZGVmaW5lX2V4cGFuZCAiY2FsbCIKKyAgWyhjYWxs IChtYXRjaF9vcGVyYW5kOlFJIDAgIm1lbW9yeV9vcGVyYW5kIiAiIikKKwkg KG1hdGNoX29wZXJhbmQgMSAiIiAiIikpXQorICAiIgorICB7CisgICAgaWYg KGZsYWdfcGljICYmICEgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChvcGVy YW5kc1swXSkpCisgICAgICB7CisJb3BlcmFuZHNbMF0gPSBnZW5fY29uc3Rf bWVtIChRSW1vZGUsCisJbGVnaXRpbWl6ZV9waWNfYWRkcmVzcyAoWEVYUCAo b3BlcmFuZHNbMF0sIDApLCBQbW9kZSwgMCkpOworCWVtaXRfY2FsbF9pbnNu IChnZW5fY3IxNl9jYWxsIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pKTsK KyAgICAgIH0KKyAgICBlbHNlCisgICAgICBlbWl0X2NhbGxfaW5zbiAoZ2Vu X2NyMTZfY2FsbCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSk7CisgICAg ICBET05FOworICB9CispCisKKyhkZWZpbmVfZXhwYW5kICJjcjE2X2NhbGwi CisgIFsocGFyYWxsZWwKKyAgICBbKGNhbGwgKG1hdGNoX29wZXJhbmQ6UUkg MCAibWVtb3J5X29wZXJhbmQiICIiKQorCSAgIChtYXRjaF9vcGVyYW5kIDEg IiIgIiIpKQorICAgKGNsb2JiZXIgKHJlZzpTSSBSQV9SRUdOVU0pKV0pXQor ICAiIgorICAiIgorKQorCisoZGVmaW5lX2luc24gImNyMTZfY2FsbF9pbnNu X2JyYW5jaF9waWMiCisgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5k OlNJIDAgImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJIChtYXRjaF9vcGVy YW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kg MiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMgPT0g RkFSX1BJQyIKKyAgeworICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMF0p ICE9IENPTlNUX0lOVCkKKyAgICAgIHJldHVybiAibG9hZGRcdCVnMCwgJTIg XG5cdGphbCAlMiI7CisgICAgZWxzZQorICAgICAgcmV0dXJuICJqYWwgJTIi OworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKV0KKykKKworKGRl ZmluZV9pbnNuICJjcjE2X2NhbGxfaW5zbl9icmFuY2giCisgIFsoY2FsbCAo bWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDAgImNhbGxfaW1tX29wZXJhbmQi ICJpIikpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2Ji ZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIity IikpXQorICAiZmxhZ19waWMgPT0gMCB8fCBmbGFnX3BpYyA9PSBORUFSX1BJ QyIKKyAgeworICAgIC8qIFByaW50IHRoZSBpbW1lZGlhdGUgYWRkcmVzcyBm b3IgYmFsIAorICAgICAgICdiJyBpcyB1c2VkIGluc3RlYWQgb2YgJ2EnIHRv IGF2b2lkIGNvbXBpbGVyIGNhbGxpbmcKKyAgICAgICB0aGUgR09fSUZfTEVH SVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5vdAorICAgICAgIHBlcmZvcm0g Y2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFkZHJlc3NlcyBhcyBpdAorICAg ICAgIGFzc3VtZXMgYWxsIGNvbnN0X2ludCBhcmUgZGF0YSBhZGRyZXNzZXMu CisgICAgKi8KKyAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzBdKSAhPSBD T05TVF9JTlQpCisgICAgICByZXR1cm4gImJhbCAocmEpLCAlYTAiOworICAg IGVsc2UKKyAgICAgIG9wZXJhbmRzWzRdID0gR0VOX0lOVCAoKElOVFZBTCAo b3BlcmFuZHNbMF0pKT4+MSk7CisgICAgICByZXR1cm4gIm1vdmRcdCVnNCxc dChyMSxyMClcblx0amFsXHQocjEscjApIjsJCisgIH0KKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiNiIpXQorKQorCisoZGVmaW5lX2luc24gImNyMTZfY2Fs bF9pbnNuX2p1bXAiCisgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJIChtYXRjaF9vcGVy YW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kg MiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiIgorICAiamFsXHQl MCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAgQ2Fs bCBWYWx1ZSBJbnN0cnVjdGlvbnMKKworKGRlZmluZV9leHBhbmQgImNhbGxf dmFsdWUiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgImdlbmVyYWxfb3Bl cmFuZCIgIiIpCisJKGNhbGwgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVtb3J5 X29wZXJhbmQiICIiKQorCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIp KSldCisgICIiCisgIHsKKyAgICBpZiAoZmxhZ19waWMgJiYgIWxlZ2l0aW1h dGVfcGljX29wZXJhbmRfcCAob3BlcmFuZHNbMV0pKQorICAgICAgeworCW9w ZXJhbmRzWzFdID0gZ2VuX2NvbnN0X21lbSAoUUltb2RlLAorCWxlZ2l0aW1p emVfcGljX2FkZHJlc3MgKFhFWFAgKG9wZXJhbmRzWzFdLCAwKSwgUG1vZGUs IDApKTsKKwllbWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2FsbF92YWx1ZSAo b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOworICAg ICAgfQorICAgIGVsc2UKKwllbWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2Fs bF92YWx1ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1sy XSkpOworICAgIERPTkU7CisgIH0KKykKKworKGRlZmluZV9leHBhbmQgImNy MTZfY2FsbF92YWx1ZSIKKyAgWyhwYXJhbGxlbAorICAgIFsoc2V0IChtYXRj aF9vcGVyYW5kIDAgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisJICAoY2FsbCAo bWF0Y2hfb3BlcmFuZCAxICJtZW1vcnlfb3BlcmFuZCIgIiIpCisJCShtYXRj aF9vcGVyYW5kIDIgIiIgIiIpKSkKKyAgICAgKGNsb2JiZXIgKHJlZzpTSSBS QV9SRUdOVU0pKV0pXQorICAiIgorICAiIgorKQorCisoZGVmaW5lX2luc24g ImNyMTZfY2FsbF92YWx1ZV9pbnNuX2JyYW5jaF9waWMiCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kIDAgIiIgIj1nIikKKwkoY2FsbCAobWVtOlFJIChtYXRj aF9vcGVyYW5kOlNJIDEgImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJICAg ICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNsb2JiZXIgKG1h dGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQor ICAiZmxhZ19waWMgPT0gRkFSX1BJQyIKKyAgeworICAgIGlmIChHRVRfQ09E RSAob3BlcmFuZHNbMV0pICE9IENPTlNUX0lOVCkKKyAgICAgIHJldHVybiAi bG9hZGRcdCVnMSwgJTMgXG5cdGphbCAlMyI7CisgICAgZWxzZQorICAgICAg cmV0dXJuICJqYWwgJTMiOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIg IjgiKV0KKykKKworKGRlZmluZV9pbnNuICJjcjE2X2NhbGxfdmFsdWVfaW5z bl9icmFuY2giCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIj1nIikK KwkoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDEgImNhbGxfaW1t X29wZXJhbmQiICJpIikpCisJICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAi IikpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0 ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMgPT0gMCB8fCBmbGFn X3BpYyA9PSBORUFSX1BJQyIKKyAgeworICAgIC8qIFByaW50IHRoZSBpbW1l ZGlhdGUgYWRkcmVzcyBmb3IgYmFsIAorICAgICAgICdiJyBpcyB1c2VkIGlu c3RlYWQgb2YgJ2EnIHRvIGF2b2lkIGNvbXBpbGVyIGNhbGxpbmcKKyAgICAg ICB0aGUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5vdAor ICAgICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFkZHJl c3NlcyBhcyBpdAorICAgICAgIGFzc3VtZXMgYWxsIGNvbnN0X2ludCBhcmUg ZGF0YSBhZGRyZXNzZXMuCisgICAgKi8KKyAgICBpZiAoR0VUX0NPREUgKG9w ZXJhbmRzWzFdKSAhPSBDT05TVF9JTlQpIAorICAgICAgcmV0dXJuICJiYWwg KHJhKSwgJWExIjsKKyAgICBlbHNlCisgICAgICB7CisJb3BlcmFuZHNbNF0g PSBHRU5fSU5UICgoSU5UVkFMIChvcGVyYW5kc1sxXSkpPj4xKTsKKyAgICAg ICAgcmV0dXJuICJtb3ZkXHQlZzQsXHQocjEscjApXG5cdGphbFx0KHIxLHIw KSI7CQorICAgICAgfQorICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjYi KV0KKykKKworCisoZGVmaW5lX2luc24gImNyMTZfY2FsbF92YWx1ZV9pbnNu X2p1bXAiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIj1nIikKKyAg ICAgICAgKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKQorICAgICAgICAgICAgICAobWF0Y2hfb3Bl cmFuZCAyICIiICIiKSkpCisgICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpT SSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiK3IiKSldCisgICIiCisgICJqYWxc dCUxIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKworOzsg IE5vcAorKGRlZmluZV9pbnNuICJub3AiCisgIFsoY29uc3RfaW50IDApXQor ICAiIgorICAibm9wXHQiCispCisKKzs7IFBJQworLyogV2hlbiBnZW5lcmF0 aW5nIHBpYywgd2UgbmVlZCB0byBsb2FkIHRoZSBzeW1ib2wgb2Zmc2V0IGlu dG8gYSByZWdpc3Rlci4KKyAgIFNvIHRoYXQgdGhlIG9wdGltaXplciBkb2Vz IG5vdCBjb25mdXNlIHRoaXMgd2l0aCBhIG5vcm1hbCBzeW1ib2wgbG9hZAor ICAgd2UgdXNlIGFuIHVuc3BlYy4gIFRoZSBvZmZzZXQgd2lsbCBiZSBsb2Fk ZWQgZnJvbSBhIGNvbnN0YW50IHBvb2wgZW50cnksCisgICBzaW5jZSB0aGF0 IGlzIHRoZSBvbmx5IHR5cGUgb2YgcmVsb2NhdGlvbiB3ZSBjYW4gdXNlLiAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyhkZWZp bmVfaW5zbiAidW5zcGVjX2Jyb19hZGRyIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCSh1bnNwZWM6 U0kgWyhtYXRjaF9vcGVyYW5kIDEgIiIgIiIpXSBVTlNQRUNfUElDX0FERFIp KV0KKyAgIiIKKyAgIm1vdmQgXHQlZjEsICUwIgorICBbKHNldF9hdHRyICJs ZW5ndGgiICI0IildCispCisKKyhkZWZpbmVfaW5zbiAidW5zcGVjX2dvdF9h ZGRyIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXIiKQorCSh1bnNwZWM6U0kgWyhtYXRjaF9vcGVyYW5kIDEg IiIgIiIpXSBVTlNQRUNfUElDX0xPQURfQUREUikpXQorICAiIgorICAibG9h ZGQgXHQlZzEsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICI2IildCisp Ci0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2Lm9wdAkxOTcwLTAxLTAx IDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9jb25maWcv Y3IxNi9jcjE2Lm9wdAkyMDExLTA1LTMwIDE3OjE2OjM1LjAwMDAwMDAwMCAr MDUzMApAQCAtMCwwICsxLDUxIEBACis7IE9wdGlvbnMgZm9yIHRoZSBOYXRp b25hbCBTZW1pY29uZHVjdG9yIENSMTYgcG9ydCBvZiB0aGUgY29tcGlsZXIu Cis7IENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKzsgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9z eXN0ZW1zIExpbWl0ZWQuCis7Cis7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdD Qy4KKzsKKzsgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzsgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQKKzsgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKzsgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKzsKKzsgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCis7IEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWQorOyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCis7IExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKzsgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKKzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCittc2ltCitUYXJnZXQKKy1tc2ltICAgVXNlIHNpbXVsYXRvciBy dW50aW1lCisKK21iaXQtb3BzCitUYXJnZXQgUmVwb3J0IE1hc2soQklUX09Q UykKK0dlbmVyYXRlIFNCSVQsIENCSVQgaW5zdHJ1Y3Rpb25zCisKK21tYWMK K1RhcmdldCBSZXBvcnQgTWFzayhNQUMpCitTdXBwb3J0IG11bHRpcGx5IGFj Y3VtdWxhdGUgaW5zdHJ1Y3Rpb25zCisKK21kZWJ1Zy1hZGRyCitUYXJnZXQg UmVqZWN0TmVnYXRpdmUgVmFyKFRBUkdFVF9ERUJVR19BRERSKSBVbmRvY3Vt ZW50ZWQKKworbWRhdGEtbW9kZWw9CitUYXJnZXQgUmVqZWN0TmVnYXRpdmUg Sm9pbmVkT3JNaXNzaW5nIFZhcihjcjE2X2RhdGFfbW9kZWwpCitUcmVhdCBk YXRhIHJlZmVyZW5jZXMgYXMgbmVhciwgZmFyIG9yIG1lZGl1bS4gbWVkaXVt IGlzIGRlZmF1bHQKKworbWNyMTZjCitUYXJnZXQgUmVqZWN0TmVnYXRpdmUg TWFzayhDUjE2QykKK0dlbmVyYXRlIGNvZGUgZm9yIENSMTZDIGFyY2hpdGVj dHVyZQorCittY3IxNmNwbHVzCitUYXJnZXQgUmVqZWN0TmVnYXRpdmUgSW52 ZXJzZU1hc2soQ1IxNkMsQ1IxNkNQKQorR2VuZXJhdGUgY29kZSBmb3IgQ1Ix NkMrIGFyY2hpdGVjdHVyZSAoRGVmYXVsdCkKKworbWludDMyCitUYXJnZXQg UmVqZWN0TmVnYXRpdmUgTWFzayhJTlQzMikKK1RyZWF0IGludGVnZXJzIGFz IDMyLWJpdC4KKwotLS0gb3JpZy9nY2MvY29uZmlnL2NyMTYvY3IxNi1wcm90 b3MuaAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysg bW9kL2djYy9jb25maWcvY3IxNi9jcjE2LXByb3Rvcy5oCTIwMTEtMDUtMzAg MTc6MTY6MzUuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTAwIEBACisv KiBQcm90b3R5cGVzIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgZGVmaW5lZCBp biBjcjE2LmMKKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3Vt bWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2Vl IHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQ1Ix Nl9QUk9UT1NfSAorI2RlZmluZSBHQ0NfQ1IxNl9QUk9UT1NfSAorCisvKiBS ZWdpc3RlciB1c2FnZS4gICovCitleHRlcm4gZW51bSByZWdfY2xhc3MgY3Ix Nl9yZWdub19yZWdfY2xhc3MgKGludCk7CitleHRlcm4gaW50IGNyMTZfaGFy ZF9yZWdub19tb2RlX29rIChpbnQgcmVnbm8sIGVudW0gbWFjaGluZV9tb2Rl KTsKKworLyogUGFzc2luZyBmdW5jdGlvbiBhcmd1bWVudHMuICAqLworZXh0 ZXJuIGludCBjcjE2X2Z1bmN0aW9uX2FyZ19yZWdub19wIChpbnQpOworI2lm ZGVmIFRSRUVfQ09ERQorCisjaWZkZWYgUlRYX0NPREUKKworZXh0ZXJuIHZv aWQgY3IxNl9pbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdT ICosIHRyZWUsIHJ0eCk7CisKKyNlbmRpZiAvKiBSVFhfQ09ERS4gICovCisK KyNlbmRpZiAvKiBUUkVFX0NPREUuICAqLworCisvKiBFbnVtZXJhdGlvbiBn aXZpbmcgdGhlIHZhcmlvdXMgZGF0YSBtb2RlbHMgd2Ugc3VwcG9ydC4gICov CitlbnVtIGRhdGFfbW9kZWxfdHlwZQoreworICBETV9ERUZBVUxULAkJLyog RGVmYXVsdCBkYXRhIG1vZGVsIChpbiBDUjE2Qy9DKyAtIHVwIHRvIDE2TSku ICAqLworICBETV9ORUFSLAkJLyogTmVhciBkYXRhIG1vZGVsICAgIChpbiBD UjE2Qy9DKyAtIHVwIHRvIDFNKS4gICovCisgIERNX0ZBUiwJCS8qIEZhciBk YXRhIG1vZGVsICAgICAoaW4gQ1IxNkMrICAgLSB1cCB0byA0RykKKwkJCSAg IChpbiBDUjE2QyAgICAtIHVwIHRvIDE2TSkuICAqLworICBJTExFR0FMX0RN CQkvKiBJbGxlZ2FsIGRhdGEgbW9kZWwuICAqLworfTsKKworI2lmZGVmIFJU WF9DT0RFCisKKy8qIEFkZHJlc3NpbmcgTW9kZXMuICAqLworc3RydWN0IGNy MTZfYWRkcmVzcworeworICBydHggYmFzZTsJIAkvKiBCYXNlIHJlZ2lzdGVy OiBBbnkgcmVnaXN0ZXIgb3IgcmVnaXN0ZXIgcGFpci4gICovCisgIHJ0eCBp bmRleDsJCS8qIEluZGV4IHJlZ2lzdGVyOiBJZiBvbmUgaXMgcHJlc2VudC4g ICovCisgIHJ0eCBkaXNwOwkJLyogRGlzcGxhY2VtZW50IG9yIEFic29sdXRl IGFkZHJlc3MuICAqLworICBlbnVtIGRhdGFfbW9kZWxfdHlwZSBkYXRhOwkv KiBkYXRhIHJlZiB0eXBlLiAgKi8KKyAgaW50IGNvZGU7CQkvKiBXaGV0aGVy IHRoZSBhZGRyZXNzIGlzIGNvZGUgYWRkcmVzcy4gCisJCQkgICAwIC0gZGF0 YSwgMSAtIGNvZGUgbGFiZWwsIDIgLSBmdW5jdGlvbiBsYWJlbC4gICovCit9 OworCitlbnVtIGNyMTZfYWRkcnR5cGUKK3sKKyAgQ1IxNl9JTlZBTElELAor ICBDUjE2X1JFR19SRUwsCisgIENSMTZfUkVHUF9SRUwsCisgIENSMTZfSU5E RVhfUkVHUF9SRUwsCisgIENSMTZfQUJTT0xVVEUKK307CisKK2V4dGVybiB2 b2lkIG5vdGljZV91cGRhdGVfY2MgUEFSQU1TICgocnR4KSk7CitleHRlcm4g aW50IGNyMTZfb3BlcmFuZF9iaXRfcG9zIChpbnQgdmFsLCBpbnQgYml0dmFs KTsKK2V4dGVybiB2b2lkIGNyMTZfZGVjb21wb3NlX2NvbnN0IChydHggeCwg aW50ICpjb2RlLAorCQkJCSAgZW51bSBkYXRhX21vZGVsX3R5cGUgKmRhdGEs CisJCQkJICBib29sIHRyZWF0X2FzX2NvbnN0KTsKK2V4dGVybiBlbnVtIGNy MTZfYWRkcnR5cGUgY3IxNl9kZWNvbXBvc2VfYWRkcmVzcyAocnR4IGFkZHIs CisJCQkJCQkgIHN0cnVjdCBjcjE2X2FkZHJlc3MgKm91dCwKKwkJCQkJCSAg Ym9vbCBkZWJ1Z19wcmludCwKKwkJCQkJCSAgYm9vbCB0cmVhdF9hc19jb25z dCk7CitleHRlcm4gaW50IGNyMTZfY29uc3RfZG91YmxlX29rIChydHggb3Ap OworZXh0ZXJuIGludCBsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKHJ0eCk7 CitleHRlcm4gcnR4IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKHJ0eCwgZW51 bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisKKyNlbmRpZiAvKiBSVFhfQ09ERS4g ICovCisKKworLyogUHJvbG9ndWUvRXBpbG9ndWUgZnVuY3Rpb25zLiAgKi8K K2V4dGVybiBpbnQgY3IxNl9pbml0aWFsX2VsaW1pbmF0aW9uX29mZnNldCAo aW50LCBpbnQpOworZXh0ZXJuIGNoYXIgKmNyMTZfcHJlcGFyZV9wdXNoX3Bv cF9zdHJpbmcgKGludCk7CitleHRlcm4gdm9pZCBjcjE2X2V4cGFuZF9wcm9s b2d1ZSAodm9pZCk7CitleHRlcm4gdm9pZCBjcjE2X2V4cGFuZF9lcGlsb2d1 ZSAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqY3IxNl9lbWl0X2FkZF9z dWJfZGkgKHJ0eCAqLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNyMTZf ZW1pdF9sb2dpY2FsX2RpIChydHggKiwgaW50KTsKKworLyogSGFuZGxpbmcg dGhlICJpbnRlcnJ1cHQiIGF0dHJpYnV0ZS4gICovCitleHRlcm4gaW50IGNy MTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKHZvaWQpOworZXh0ZXJuIGJvb2wg Y3IxNl9pc19kYXRhX21vZGVsIChlbnVtIGRhdGFfbW9kZWxfdHlwZSk7CisK KyNlbmRpZiAvKiBOb3QgR0NDX0NSMTZfUFJPVE9TX0guICAqLyAKLS0tIG9y aWcvZ2NjL2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jCTE5NzAtMDEtMDEgMDU6 MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2 L2Rpdm1vZGhpMy5jCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICsw NTMwCkBAIC0wLDAgKzEsMTE1IEBACisvKiBMaWJnY2MgVGFyZ2V0IHNwZWNp ZmljIGltcGxlbWVudGF0aW9uIC0gRW11bGF0aW5nIGRpdiBhbmQgbW9kLgor ICAgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9z eXN0ZW1zIExpbWl0ZWQuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdD Qy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK KyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRp dGlvbmFsCisgICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBD T1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAg IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisJIAorCisv KiBFbXVsYXRlIHRoZSBkaXZpc2lvbiBhbmQgbW9kdWx1cyBvcGVyYXRpb24u ICAqLworCit1bnNpZ25lZCBzaG9ydAordWRpdm1vZGhpNCAodW5zaWduZWQg c2hvcnQgbnVtLCB1bnNpZ25lZCBzaG9ydCBkZW4sIHNob3J0IG1vZHdhbnRl ZCkKK3sKKyAgdW5zaWduZWQgc2hvcnQgYml0ID0gMTsKKyAgdW5zaWduZWQg c2hvcnQgcmVzID0gMDsKKworICB3aGlsZSAoZGVuIDwgbnVtICYmIGJpdCAm JiAhKGRlbiAmICgxIDw8IDE1KSkpCisgICAgeworICAgICAgZGVuIDw8PSAx OworICAgICAgYml0IDw8PSAxOworICAgIH0KKyAgd2hpbGUgKGJpdCkKKyAg ICB7CisgICAgICBpZiAobnVtID49IGRlbikKKwl7CisJICBudW0gLT0gZGVu OworCSAgcmVzIHw9IGJpdDsKKwl9CisgICAgICBiaXQgPj49IDE7CisgICAg ICBkZW4gPj49IDE7CisgICAgfQorCisgIGlmIChtb2R3YW50ZWQpCisgICAg cmV0dXJuIG51bTsKKyAgcmV0dXJuIHJlczsKK30KKworc2hvcnQKK19fZGl2 aGkzIChzaG9ydCBhLCBzaG9ydCBiKQoreworICBzaG9ydCBuZWcgPSAwOwor ICBzaG9ydCByZXM7CisKKyAgaWYgKGEgPCAwKQorICAgIHsKKyAgICAgIGEg PSAtYTsKKyAgICAgIG5lZyA9ICFuZWc7CisgICAgfQorCisgIGlmIChiIDwg MCkKKyAgICB7CisgICAgICBiID0gLWI7CisgICAgICBuZWcgPSAhbmVnOwor ICAgIH0KKworICByZXMgPSB1ZGl2bW9kaGk0IChhLCBiLCAwKTsKKworICBp ZiAobmVnKQorICAgIHJlcyA9IC1yZXM7CisKKyAgcmV0dXJuIHJlczsKK30K Kworc2hvcnQKK19fbW9kaGkzIChzaG9ydCBhLCBzaG9ydCBiKQoreworICBz aG9ydCBuZWcgPSAwOworICBzaG9ydCByZXM7CisKKyAgaWYgKGEgPCAwKQor ICAgIHsKKyAgICAgIGEgPSAtYTsKKyAgICAgIG5lZyA9IDE7CisgICAgfQor CisgIGlmIChiIDwgMCkKKyAgICBiID0gLWI7CisKKyAgcmVzID0gdWRpdm1v ZGhpNCAoYSwgYiwgMSk7CisKKyAgaWYgKG5lZykKKyAgICByZXMgPSAtcmVz OworCisgIHJldHVybiByZXM7Cit9CisKK3Nob3J0CitfX3VkaXZoaTMgKHNo b3J0IGEsIHNob3J0IGIpCit7CisgIHJldHVybiB1ZGl2bW9kaGk0IChhLCBi LCAwKTsKK30KKworc2hvcnQKK19fdW1vZGhpMyAoc2hvcnQgYSwgc2hvcnQg YikKK3sKKyAgcmV0dXJuIHVkaXZtb2RoaTQgKGEsIGIsIDEpOworfQotLS0g b3JpZy9nY2MvY29uZmlnL2NyMTYvcHJlZGljYXRlcy5tZAkxOTcwLTAxLTAx IDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9jb25maWcv Y3IxNi9wcmVkaWNhdGVzLm1kCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAw MDAwICswNTMwCkBAIC0wLDAgKzEsMjI0IEBACis7OyBQcmVkaWNhdGVzIG9m IG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIENSMTYuCis7OyBDb3B5cmlnaHQg KEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7OyBD b250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRl ZC4KKzs7Cis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7OworOzsg R0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCis7OyBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91cgorOzsgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKzs7Cis7OyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKzs7IEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F UkNIQU5UQUJJTElUWQorOzsgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOzsgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCis7OyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQorOzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgCisKKzs7ICBQcmVkaWNhdGVzCisKKzs7IFByZWRpY2F0ZXMg Zm9yIHNiaXQvY2JpdCBpbnN0cnVjdGlvbnMKKzs7IGJpdCBvcGVyYW5kIHVz ZWQgZm9yIHRoZSBnZW5lcmF0aW9uIG9mIGJpdCBpbnNuIGdlbmVyYXRpb24K KyhkZWZpbmVfcHJlZGljYXRlICJiaXRfb3BlcmFuZCIKKyAgKG1hdGNoX2Nv ZGUgIm1lbSIpCit7CisgIHJldHVybiAoKEdFVF9DT0RFIChvcCkgPT0gTUVN ICYmIE9LX0ZPUl9aIChvcCkpKTsKK30pCisKKzs7IFVuc2lnbmVkIDQtYml0 cyBjb25zdGFudCBpbnQgb3IgZG91YmxlIHZhbHVlLgorKGRlZmluZV9wcmVk aWNhdGUgInU0Yml0c19vcGVyYW5kIgorICAobWF0Y2hfY29kZSAiY29uc3Rf aW50LGNvbnN0X2RvdWJsZSIpCit7CisgIGlmIChHRVRfQ09ERSAob3ApID09 IENPTlNUX0RPVUJMRSkKKyAgICByZXR1cm4gY3IxNl9jb25zdF9kb3VibGVf b2sgKG9wKTsKKyAgICByZXR1cm4gKFVOU0lHTkVEX0lOVF9GSVRTX05fQklU UyhJTlRWQUwgKG9wKSwgNCkpID8gMSA6IDA7Cit9KQorCis7OyBPcGVyYW5k IGlzIGEgY29uc3RhbnQgaW50ZWdlciB3aGVyZQorOzsgb25seSBvbmUgYml0 IGlzIHNldCB0byAxLgorKGRlZmluZV9wcmVkaWNhdGUgIm9uZV9iaXRfb3Bl cmFuZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHVuc2ln bmVkIGludCB2YWw7CisKKyAgdmFsID0gSU5UVkFMIChvcCk7CisgIGlmICht b2RlID09IFFJbW9kZSkgCisgICAgdmFsICY9IDB4ZmY7CisgIGVsc2UgaWYg KG1vZGUgPT0gSEltb2RlKQorICAgIHZhbCAmPSAweGZmZmY7CisgIGVsc2UK KyAgICBnY2NfdW5yZWFjaGFibGUoKTsKKworICBpZiAodmFsICE9IDApCisg ICAgcmV0dXJuICh2YWwgJiAodmFsIC0gMSkpID09IDA7IC8qIHRydWUgaWYg b25seSBvbmUgYml0IGlzIHNldC4gICovCisgIGVsc2UKKyAgICByZXR1cm4g MDsKK30pCisKKzs7IE9wZXJhbmQgaXMgYSBjb25zdGFudCBpbnRlZ2VyIHdo ZXJlCis7OyBvbmx5IG9uZSBiaXQgaXMgc2V0IHRvIDAuCisoZGVmaW5lX3By ZWRpY2F0ZSAicmV2X29uZV9iaXRfb3BlcmFuZCIKKyAgKG1hdGNoX2NvZGUg ImNvbnN0X2ludCIpCit7CisgIHVuc2lnbmVkIGludCB2YWw7CisKKyAgdmFs ID0gfklOVFZBTCAob3ApOyAvKiBJbnZlcnQgYW5kIHVzZS4gICovCisgIGlm IChtb2RlID09IFFJbW9kZSkgCisgICAgdmFsICY9IDB4ZmY7CisgIGVsc2Ug aWYgKG1vZGUgPT0gSEltb2RlKQorICAgIHZhbCAmPSAweGZmZmY7CisgIGVs c2UKKyAgICBnY2NfdW5yZWFjaGFibGUoKTsKKworICBpZiAodmFsICE9IDAp CisgICAgcmV0dXJuICh2YWwgJiAodmFsIC0gMSkpID09IDA7IC8qIHRydWUg aWYgb25seSBvbmUgYml0IGlzIHNldC4gICovCisgIGVsc2UKKyAgICByZXR1 cm4gMDsKK30pCisKKzs7IFByZWRpY2F0ZXMgZm9yIHNoaWZ0IGluc3RydWN0 aW9ucworOzsgSW1tZWRpYXRlIG9wZXJhbmQgcHJlZGljYXRlIGZvciBjb3Vu dCBpbiBzaGlmdCBvcGVyYXRpb25zLgorOzsgSW1tZWRpYXRlIHNoYWxsIGJl IDMtYml0cyBpbiBjYXNlIG9wZXJhbmQgdG8gYmUgb3BlcmF0ZWQgb24KKzs7 IGlzIGEgcWkgbW9kZSBvcGVyYW5kLgorKGRlZmluZV9wcmVkaWNhdGUgInNo aWZ0X3FpX2ltbV9vcGVyYW5kIgorICAobWF0Y2hfY29kZSAiY29uc3RfaW50 IikKK3sKKyAgcmV0dXJuIChVTlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5U VkFMIChvcCksIDMpKSA/IDEgOiAwOworfSkKKworOzsgSW1tZWRpYXRlIHNo YWxsIGJlIDQtYml0cyBpbiBjYXNlIG9wZXJhbmQgdG8gYmUgb3BlcmF0ZWQg b24KKzs7IGlzIGEgaGkgbW9kZSBvcGVyYW5kLgorKGRlZmluZV9wcmVkaWNh dGUgInNoaWZ0X2hpX2ltbV9vcGVyYW5kIgorICAobWF0Y2hfY29kZSAiY29u c3RfaW50IikKK3sKKyAgcmV0dXJuIChVTlNJR05FRF9JTlRfRklUU19OX0JJ VFMoSU5UVkFMIChvcCksIDQpKSA/IDEgOiAwOworfSkKKworOzsgSW1tZWRp YXRlIHNoYWxsIGJlIDMtYml0cyBpbiBjYXNlIG9wZXJhbmQgdG8gYmUgb3Bl cmF0ZWQgb24KKzs7IGlzIGEgc2kgbW9kZSBvcGVyYW5kLgorKGRlZmluZV9w cmVkaWNhdGUgInNoaWZ0X3NpX2ltbV9vcGVyYW5kIgorICAobWF0Y2hfY29k ZSAiY29uc3RfaW50IikKK3sKKyAgcmV0dXJuIChVTlNJR05FRF9JTlRfRklU U19OX0JJVFMoSU5UVkFMIChvcCksIDUpKSA/IDEgOiAwOworfSkKKworOzsg UHJlZGljYXRlcyBmb3IganVtcC9jYWxsIGluc3RydWN0aW9ucworOzsgSnVt cCBpbW1lZGlhdGUgY2Fubm90IGJlIG1vcmUgdGhhbiAyNC1iaXRzCisoZGVm aW5lX3ByZWRpY2F0ZSAianVtcF9pbW1fb3BlcmFuZCIKKyAgKG1hdGNoX2Nv ZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJ VFNfTl9CSVRTKElOVFZBTCAob3ApLCAyNCkpID8gMSA6IDA7Cit9KQorCis7 OyBDYWxsIGltbWVkaWF0ZSBjYW5ub3QgYmUgbW9yZSB0aGFuIDI0LWJpdHMK KyhkZWZpbmVfcHJlZGljYXRlICJjYWxsX2ltbV9vcGVyYW5kIgorICAobWF0 Y2hfb3BlcmFuZCAwICJpbW1lZGlhdGVfb3BlcmFuZCIpCit7CisgIGlmIChH RVRfQ09ERSAob3ApICE9IENPTlNUX0lOVCkgcmV0dXJuIDE7CisgICAgcmV0 dXJuIChVTlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5UVkFMIChvcCksIDI0 KSkgPyAxIDogMDsKK30pCisKKzs7IE9wZXJhbmQgaXMgcmVnaXN0ZXIgb3Ig NC1iaXQgaW1tZWRpYXRlIG9wZXJhbmQKKyhkZWZpbmVfcHJlZGljYXRlICJy ZWdfb3JfdTRiaXRzX29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQg MCAidTRiaXRzX29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7IE9wZXJhbmQgaXMgYSByZWdp c3RlciBvciBzeW1ib2wgcmVmZXJlbmNlCisoZGVmaW5lX3ByZWRpY2F0ZSAi cmVnX29yX3N5bV9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9jb2RlICJzeW1i b2xfcmVmIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9v cGVyYW5kIikpKQorCis7OyBPcGVyYW5kIGlzIGEgbm9uIHN0YWNrIHBvaW50 ZXIgcmVnaXN0ZXIKKyhkZWZpbmVfcHJlZGljYXRlICJub3NwX3JlZ19vcGVy YW5kIgorICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJh bmQiKQorICAgICAgIChtYXRjaF90ZXN0ICJSRUdOTyAob3ApICE9IFNQX1JF R05VTSIpKSkKKworKGRlZmluZV9wcmVkaWNhdGUgImhhcmRfcmVnX29wZXJh bmQiCisgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFu ZCIpCisgICAgICAgKG1hdGNoX3Rlc3QgIlJFR05PIChvcCkgPD0gMTUiKSkp CisKKzs7IE9wZXJhbmQgaXMgYSBtZW1vcnkgcmVmZXJlbmNlIGFuZAorOzsg bm90IGEgcHVzaCBvcGVyYW5kLgorKGRlZmluZV9wcmVkaWNhdGUgInN0b3Jl X29wZXJhbmQiCisgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29w ZXJhbmQiKQorICAgICAgIChub3QgKG1hdGNoX29wZXJhbmQgMCAicHVzaF9v cGVyYW5kIikpKSkKKworOzsgSGVscGVyIHByZWRpY2F0ZSAKKyhkZWZpbmVf cHJlZGljYXRlICJyZWdfb3JfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNo X2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAi cmVnaXN0ZXJfb3BlcmFuZCIpKSkKKworOzsKKzs7Cis7OyBBdGl0aG1ldGlj L2xvZ2ljYWwgcHJlZGljYXRlcworCis7OyBRSSBIZWxwZXIKKyhkZWZpbmVf cHJlZGljYXRlICJhcml0aF9xaV9vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUg ImNvbnN0X2ludCIpCit7CisgICAgICAgIHJldHVybiAoSU5fUkFOKElOVFZB TCAob3ApLCAwLCAxNSkgJiYgKChJTlRWQUwgKG9wKSAhPSA5KSAKKyAgICAg ICAgICAgICAgICB8fCAoSU5UVkFMIChvcCkgIT0gMTEpKSkgPyAxIDogMCA7 IAorfSkKKworOztRSSBSZWcsIHN1YnJlZyhyZWcpIG9yIGNvbnN0X2ludC4K KyhkZWZpbmVfcHJlZGljYXRlICJyZWdfcWlfaW50X29wZXJhbmQiCisgIChp b3IgKG1hdGNoX29wZXJhbmQgMCAiYXJpdGhfcWlfb3BlcmFuZCIpCisgICAg ICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKwor OzsgSEkgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAiYXJpdGhfaGlfb3Bl cmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAg ICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgLTMyNzY4LCAzMjc2OCkg KSA/IDEgOiAwIDsgCit9KQorCis7O0hJIFJlZywgc3VicmVnKHJlZykgb3Ig Y29uc3RfaW50LgorKGRlZmluZV9wcmVkaWNhdGUgInJlZ19oaV9pbnRfb3Bl cmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJhcml0aF9oaV9vcGVy YW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVy YW5kIikpKQorCis7O1NJIFJlZywgc3VicmVnKHJlZykgb3IgY29uc3RfaW50 LgorKGRlZmluZV9wcmVkaWNhdGUgInJlZ19zaV9pbnRfb3BlcmFuZCIKKyAg KGlvciAobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9pbnRfb3BlcmFuZCIpCisg ICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkK KworOzsKKzs7IFNoaWZ0IHByZWRpY2F0ZXMKKworOzsgUUkgSGVscGVyCiso ZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfcWlfb3BlcmFuZCIKKyAgIChtYXRj aF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAgICByZXR1cm4gKElOX1JB TihJTlRWQUwgKG9wKSwgMCwgNykgKSA/IDEgOiAwOyAKK30pCisKKzs7UUkg UmVnLCBzdWJyZWcocmVnKSBvciBjb25zdF9pbnQuCisoZGVmaW5lX3ByZWRp Y2F0ZSAic2hpZnRfcmVnX3FpX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRj aF9vcGVyYW5kIDAgInNoaWZ0X3FpX29wZXJhbmQiKQorICAgICAgIChtYXRj aF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCis7OyBISSBIZWxw ZXIKKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9oaV9vcGVyYW5kIgorICAg KG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgICAgICAgIHJldHVybiAo SU5fUkFOKElOVFZBTCAob3ApLCAwLCAxNSkgKSA/IDEgOiAwIDsgCit9KQor Cis7O0hJIFJlZywgc3VicmVnKHJlZykgb3IgY29uc3RfaW50LgorKGRlZmlu ZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19oaV9pbnRfb3BlcmFuZCIKKyAgKGlv ciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9oaV9vcGVyYW5kIikKKyAgICAg ICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikpKQorCis7 OyBTSSBIZWxwZXIKKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9zaV9vcGVy YW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgICAgICAg IHJldHVybiAoSU5fUkFOKElOVFZBTCAob3ApLCAwLCAzMSkgKSA/IDEgOiAw OyAKK30pCisKKzs7U0kgUmVnLCBzdWJyZWcocmVnKSBvciBjb25zdF9pbnQu CisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfcmVnX3NpX2ludF9vcGVyYW5k IgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInNoaWZ0X3NpX29wZXJhbmQi KQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQi KSkpCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi90LWNyMTYJMTk3MC0wMS0w MSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmln L2NyMTYvdC1jcjE2CTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICsw NTMwCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ1IxNiBUYXJnZXQgTWFrZWZpbGUK KyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorIyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5 c3RlbXMgTGltaXRlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0ND LgorIworIyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZAorIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91cgorIyBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAgICAKKworTElCMUFTTVNSQyA9IGNyMTYvY3IxNi1saWJnY2Mucwor TElCMUFTTUZVTkNTID0JX211bHNpMyBfbHNocmRpMyBfbXVsZGkzIF9kaXZk aTMgX3VkaXZkaTMgX3VkaXZtb2RkaTMgXAorCQlfdW1vZGRpMyBfbW9kZGkz CisKK0xJQjJGVU5DU19FWFRSQSA9IFwKKwkkKHNyY2RpcikvY29uZmlnL2Ny MTYvZGl2bW9kaGkzLmMgIFwKKwkkKHNyY2RpcikvY29uZmlnL3VkaXZtb2Rz aTQuYyBcCisJJChzcmNkaXIpL2NvbmZpZy91ZGl2bW9kLmMgICBcCisJJChz cmNkaXIpL2NvbmZpZy9kaXZtb2QuYyAKKworTVVMVElMSUJfT1BUSU9OUyAg ICAgPSBmUElDIG1pbnQzMiAKK01VTFRJTElCX0RJUk5BTUVTICAgID0gZmFy LXBpYyBpbnQzMiAKK01VTFRJTElCX01BVENIRVMgICAgID0KK01VTFRJTElC X0VYVFJBX09QVFMgID0gbWNyMTZjcGx1cyBtZGF0YS1tb2RlbD1mYXIKKwor TElCR0NDID0gc3RtcC1tdWx0aWxpYgorSU5TVEFMTF9MSUJHQ0MgPSBpbnN0 YWxsLW11bHRpbGliCisKKyMgV2Ugd2FudCBmaW5lIGdyYWluZWQgbGlicmFy aWVzLCBzbyB1c2UgdGhlIG5ldyBjb2RlLgorIyB0byBidWlsZCB0aGUgZmxv YXRpbmcgcG9pbnQgZW11bGF0aW9uIGxpYnJhcmllcy4KK0ZQQklUID0gZnAt Yml0LmMKK0RQQklUID0gZHAtYml0LmMKKworZnAtYml0LmM6ICQoc3JjZGly KS9jb25maWcvZnAtYml0LmMKKwllY2hvICcjZGVmaW5lIEZMT0FUJyA+IGZw LWJpdC5jCisJZWNobyAnI2RlZmluZSBTTUFMTF9NQUNISU5FJyA+PiBmcC1i aXQuYworCWVjaG8gJyNkZWZpbmUgQ01QdHlwZSBISXR5cGUnID4+IGZwLWJp dC5jCisJY2F0ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMgPj4gZnAtYml0 LmMKKworZHAtYml0LmM6ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMKKwll Y2hvICcjZGVmaW5lIFNNQUxMX01BQ0hJTkUnID4+IGRwLWJpdC5jCisJZWNo byAnI2RlZmluZSBDTVB0eXBlIEhJdHlwZScgPj4gZHAtYml0LmMKKwljYXQg JChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYyA+PiBkcC1iaXQuYworCi0tLSBv cmlnL2djYy9jb25maWcuZ2NjCTIwMTEtMDUtMjggMTM6MzI6NTcuMDAwMDAw MDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy5nY2MJMjAxMS0wNS0zMCAx NzoxNjozNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTkyOSw2ICs5MjksMTMgQEAg YmZpbiotKikKIAl1c2VfY29sbGVjdDI9bm8KIAl1c2VfZ2NjX3N0ZGludD13 cmFwCiAJOzsKK2NyMTYtKi1lbGYpCisJdG1fZmlsZT0iZWxmb3MuaCAke3Rt X2ZpbGV9IgorCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gY3IxNi90LWNy MTYgIgorCWxpYmdjY190bV9maWxlPSIke2xpYmdjY190bV9maWxlfSBjcjE2 L3Vud2luZC1oZWxwZXIuaCIKKwlleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBj cnRlbmQubyBjcnRpLm8gY3J0bi5vIGNydGxpYmlkLm8iCisJdXNlX2NvbGxl Y3QyPW5vCisJOzsKIGNyaXN2MzItKi1lbGYgfCBjcmlzdjMyLSotbm9uZSkK IAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIG5ld2xpYi1zdGRpbnQuaCAk e3RtX2ZpbGV9IgogCXRtYWtlX2ZpbGU9ImNyaXMvdC1jcmlzIgotLS0gb3Jp Zy9nY2MvZG9jL2V4dGVuZC50ZXhpCTIwMTEtMDUtMjUgMjI6NDg6MjkuMDAw MDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2RvYy9leHRlbmQudGV4aQkyMDEx LTA1LTMwIDE3OjE2OjM1LjAwMDAwMDAwMCArMDUzMApAQCAtMjU1MSw3ICsy NTUxLDcgQEAgVGhpcyBhdHRyaWJ1dGUgaXMgaWdub3JlZCBmb3IgUjhDIHRh cmdldAogCiBAaXRlbSBpbnRlcnJ1cHQKIEBjaW5kZXggaW50ZXJydXB0IGhh bmRsZXIgZnVuY3Rpb25zCi1Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFS TSwgQVZSLCBNMzJDLCBNMzJSL0QsIG02OGssIE1lUCwgTUlQUywKK1VzZSB0 aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQVJNLCBBVlIsIENSMTYsIE0zMkMsIE0z MlIvRCwgbTY4aywgTWVQLCBNSVBTLAogUlggYW5kIFhzdG9ybXkxNiBwb3J0 cyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gaXMg YW4KIGludGVycnVwdCBoYW5kbGVyLiAgVGhlIGNvbXBpbGVyIHdpbGwgZ2Vu ZXJhdGUgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKIHNlcXVlbmNlcyBzdWl0 YWJsZSBmb3IgdXNlIGluIGFuIGludGVycnVwdCBoYW5kbGVyIHdoZW4gdGhp cyBhdHRyaWJ1dGUKLS0tIG9yaWcvZ2NjL2RvYy9pbnN0YWxsLnRleGkJMjAx MS0wNS0yMyAxNjo0MjoyNS4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2Mv ZG9jL2luc3RhbGwudGV4aQkyMDExLTA1LTMwIDE3OjE2OjM1LjAwMDAwMDAw MCArMDUzMApAQCAtMzE5OSw2ICszMTk5LDI5IEBAIGlzIGF2YWlsYWJsZSBh dCBAdXJlZntodHRwOi8vYmxhY2tmaW4udWMKIEBodG1sCiA8aHIgLz4KIEBl bmQgaHRtbAorQGhlYWRpbmcgQGFuY2hvcntjcjE2fUNSMTYKKworVGhlIENS MTYgQ29tcGFjdFJJU0MgYXJjaGl0ZWN0dXJlIGlzIGEgMTYtYml0IGFyY2hp dGVjdHVyZS4gVGhpcyBhcmNoaXRlY3R1cmUgaXMgCit1c2VkIGluIGVtYmVk ZGVkIGFwcGxpY2F0aW9ucy4KKworQGlmbm90aHRtbAorQHhyZWZ7Q1IxNiBP cHRpb25zLCwgQ1IxNiBPcHRpb25zLCBnY2MsIFVzaW5nIGFuZCBQb3J0aW5n IHRoZSBHTlUgQ29tcGlsZXIKK0NvbGxlY3Rpb24gKEdDQyl9LAorQGVuZCBp Zm5vdGh0bWwKKworQGlmaHRtbAorU2VlIGBgQ1IxNiBPcHRpb25zJycgaW4g dGhlIG1haW4gbWFudWFsIGZvciBhIGxpc3Qgb2YgQ1IxNi1zcGVjaWZpYyBv cHRpb25zLgorQGVuZCBpZmh0bWwKKworVXNlIEBzYW1we2NvbmZpZ3VyZSAt LXRhcmdldD1jcjE2LWVsZiAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyt9IHRv IGNvbmZpZ3VyZQorR0NDQCBmb3IgYnVpbGRpbmcgYSBDUjE2IGVsZiBjcm9z cy1jb21waWxlci4KKworVXNlIEBzYW1we2NvbmZpZ3VyZSAtLXRhcmdldD1j cjE2LXVjbGludXggLS1lbmFibGUtbGFuZ3VhZ2VzPWMsYysrfSB0byBjb25m aWd1cmUKK0dDQ0AgZm9yIGJ1aWxkaW5nIGEgQ1IxNiB1Y2xpbnV4IGNyb3Nz LWNvbXBpbGVyLgorCitAaHRtbAorPGhyIC8+CitAZW5kIGh0bWwKIEBoZWFk aW5nIEBhbmNob3J7Y3Jpc31DUklTCiAKIENSSVMgaXMgdGhlIENQVSBhcmNo aXRlY3R1cmUgaW4gQXhpcyBDb21tdW5pY2F0aW9ucyBFVFJBWCBzeXN0ZW0t b24tYS1jaGlwCi0tLSBvcmlnL2djYy9kb2MvaW52b2tlLnRleGkJMjAxMS0w NS0yNSAxNjozMDoxNC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvZG9j L2ludm9rZS50ZXhpCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICsw NTMwCkBAIC00OTcsNiArNDk3LDEyIEBAIE9iamVjdGl2ZS1DIGFuZCBPYmpl Y3RpdmUtQysrIERpYWxlY3RzfS4KIC1tZWxmICAtbWFvdXQgIC1tZWxpbnV4 ICAtbWxpbnV4ICAtc2ltICAtc2ltMiBAZ29sCiAtbW11bC1idWctd29ya2Fy b3VuZCAgLW1uby1tdWwtYnVnLXdvcmthcm91bmR9CiAKK0BlbXBoe0NSMTYg T3B0aW9uc30KK0BnY2NvcHRsaXN0ey1tbWFjIEBnb2wKKy1tY3IxNmNwbHVz IC1tY3IxNmMgQGdvbAorLW1zaW0gLW1pbnQzMiAtbWJpdC1vcHMKKy1tZGF0 YS1tb2RlbD1AdmFye21vZGVsfX0KKwogQGVtcGh7RGFyd2luIE9wdGlvbnN9 CiBAZ2Njb3B0bGlzdHstYWxsX2xvYWQgIC1hbGxvd2FibGVfY2xpZW50ICAt YXJjaCAgLWFyY2hfZXJyb3JzX2ZhdGFsIEBnb2wKIC1hcmNoX29ubHkgIC1i aW5kX2F0X2xvYWQgIC1idW5kbGUgIC1idW5kbGVfbG9hZGVyIEBnb2wKQEAg LTk5ODQsNiArOTk5MCw3IEBAIHBsYXRmb3JtLgogKiBBVlIgT3B0aW9uczo6 CiAqIEJsYWNrZmluIE9wdGlvbnM6OgogKiBDUklTIE9wdGlvbnM6OgorKiBD UjE2IE9wdGlvbnM6OgogKiBEYXJ3aW4gT3B0aW9uczo6CiAqIERFQyBBbHBo YSBPcHRpb25zOjoKICogREVDIEFscGhhL1ZNUyBPcHRpb25zOjoKQEAgLTEw NzU5LDYgKzEwNzY2LDQ2IEBAIExpa2UgQG9wdGlvbnstc2ltfSwgYnV0IHBh c3MgbGlua2VyIG9wdGkKIDB4NDAwMDAwMDAgYW5kIHplcm8taW5pdGlhbGl6 ZWQgZGF0YSBhdCAweDgwMDAwMDAwLgogQGVuZCB0YWJsZQogCitAbm9kZSBD UjE2IE9wdGlvbnMKK0BzdWJzZWN0aW9uIENSMTYgT3B0aW9ucworQGNpbmRl eCBDUjE2IE9wdGlvbnMKKworVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBz cGVjaWZpY2FsbHkgZm9yIHRoZSBDUjE2IHBvcnRzLgorCitAdGFibGUgQGdj Y3RhYm9wdAorCitAaXRlbSAtbW1hYworQG9waW5kZXggbW1hYworRW5hYmxl IHRoZSB1c2Ugb2YgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMu IERpc2FibGVkIGJ5IGRlZmF1bHQuCisKK0BpdGVtIC1tY3IxNmNwbHVzCitA aXRlbXggLW1jcjE2YworQG9waW5kZXggbWNyMTZjcGx1cworQG9waW5kZXgg bWNyMTZjCitHZW5lcmF0ZSBjb2RlIGZvciBDUjE2QyBvciBDUjE2QysgYXJj aGl0ZWN0dXJlLiBDUjE2QysgYXJjaGl0ZWN0dXJlIAoraXMgZGVmYXVsdC4K KworQGl0ZW0gLW1zaW0KK0BvcGluZGV4IG1zaW0KK0xpbmtzIHRoZSBsaWJy YXJ5IGxpYnNpbS5hIHdoaWNoIGlzIGluIGNvbXBhdGlibGUgd2l0aCBzaW11 bGF0b3IuIEFwcGxpY2FibGUKK3RvIGVsZiBjb21waWxlciBvbmx5LgorCitA aXRlbSAtbWludDMyCitAb3BpbmRleCBtaW50MzIKK0Nob29zZSBpbnRlZ2Vy IHR5cGUgYXMgMzItYml0IHdpZGUuCisKK0BpdGVtIC1tYml0LW9wcworQG9w aW5kZXggbWJpdC1vcHMKK0dlbmVyYXRlcyBzYml0L2NiaXQgaW5zdHJ1Y3Rp b25zIGZvciBiaXQgbWFuaXB1bGF0aW9ucy4KKworQGl0ZW0gLW1kYXRhLW1v ZGVsPUB2YXJ7bW9kZWx9CitAb3BpbmRleCBtZGF0YS1tb2RlbAorQ2hvb3Nl IGEgZGF0YSBtb2RlbC4gVGhlIGNob2ljZXMgZm9yIEB2YXJ7bW9kZWx9IGFy ZSBAc2FtcHtuZWFyfSwKK0BzYW1we2Zhcn0gb3IgQHNhbXB7bWVkaXVtfS4g QHNhbXB7bWVkaXVtfSBpcyBkZWZhdWx0LgorSG93ZXZlciwgQHNhbXB7ZmFy fSBpcyBub3QgdmFsaWQgd2hlbiAtbWNyMTZjIG9wdGlvbiBpcyBjaG9zZW4g YXMKK0NSMTZDIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IGZhciBk YXRhIG1vZGVsLgorQGVuZCB0YWJsZQorCiBAbm9kZSBEYXJ3aW4gT3B0aW9u cwogQHN1YnNlY3Rpb24gRGFyd2luIE9wdGlvbnMKIEBjaW5kZXggRGFyd2lu IG9wdGlvbnMKLS0tIG9yaWcvZ2NjL2RvYy9tZC50ZXhpCTIwMTEtMDUtMDUg MDU6MDQ6MzcuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2RvYy9tZC50 ZXhpCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICswNTMwCkBAIC0x Nzc1LDYgKzE3NzUsNDAgQEAgSW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFu Z2UgQG1pbnVze302IAogQSBtZW1vcnkgYWRkcmVzcyBiYXNlZCBvbiBZIG9y IFogcG9pbnRlciB3aXRoIGRpc3BsYWNlbWVudC4KIEBlbmQgdGFibGUKIAor QGl0ZW0gQ1IxNiBBcmNoaXRlY3R1cmUtLS1AZmlsZXtjb25maWcvY3IxNi9j cjE2Lmh9CitAdGFibGUgQGNvZGUKKworQGl0ZW0gYgorUmVnaXN0ZXJzIGZy b20gcjAgdG8gcjE0IChyZWdpc3RlcnMgd2l0aG91dCBzdGFjayBwb2ludGVy KQorCitAaXRlbSB0CitSZWdpc3RlciBmcm9tIHIwIHRvIHIxMSAoYWxsIDE2 LWJpdCByZWdpc3RlcnMpCisKK0BpdGVtIHAKK1JlZ2lzdGVyIGZyb20gcjEy IHRvIHIxNSAoYWxsIDMyLWJpdCByZWdpc3RlcnMpCisKK0BpdGVtIEkKK1Np Z25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNCBiaXRzCisKK0BpdGVtIEoK K1NpZ25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNSBiaXRzCisKK0BpdGVt IEsKK1NpZ25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNiBiaXRzCisKK0Bp dGVtIEwKK1Vuc2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA0IGJpdHMK KworQGl0ZW0gTQorU2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiAzMiBi aXRzCisKK0BpdGVtIE4KK0NoZWNrIGZvciA2NCBiaXRzIHdpZGUgY29uc3Rh bnRzIGZvciBhZGQvc3ViIGluc3RydWN0aW9ucworCitAaXRlbSBHCitGbG9h dGluZyBwb2ludCBjb25zdGFudCB0aGF0IGlzIGxlZ2FsIGZvciBzdG9yZSBp bW1lZGlhdGUKK0BlbmQgdGFibGUKKwogQGl0ZW0gSGV3bGV0dC1QYWNrYXJk IFBBLVJJU0MtLS1AZmlsZXtjb25maWcvcGEvcGEuaH0KIEB0YWJsZSBAY29k ZQogQGl0ZW0gYQotLS0gb3JpZy9nY2MvdW53aW5kLWR3Mi5jCTIwMTEtMDMt MTUgMDE6MTc6NTguMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL3Vud2lu ZC1kdzIuYwkyMDExLTA1LTMwIDE3OjE2OjM1LjAwMDAwMDAwMCArMDUzMApA QCAtMjE5LDggKzIxOSwxMiBAQCBfVW53aW5kX1NldEdSIChzdHJ1Y3QgX1Vu d2luZF9Db250ZXh0ICpjCiAgICAgKiAoX1Vud2luZF9QdHIgKikgcHRyID0g dmFsOwogICBlbHNlCiAgICAgeworI2lmIGRlZmluZWQgKF9fQ1IxNl9fKQor ICAgICAgQ1IxNl9VV19TRVRHUihwdHIsdmFsLHNpemUsaW5kZXgsY29udGV4 dCk7CQorI2Vsc2UKICAgICAgIGdjY19hc3NlcnQgKHNpemUgPT0gc2l6ZW9m KF9VbndpbmRfV29yZCkpOwogICAgICAgKiAoX1Vud2luZF9Xb3JkICopIHB0 ciA9IHZhbDsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTQxNiw2ICsxNDIw LDkgQEAgdXdfdXBkYXRlX2NvbnRleHQgKHN0cnVjdCBfVW53aW5kX0NvbnRl eAogICAgICAgIGNhbiBjaGFuZ2UgZnJvbSBmcmFtZSB0byBmcmFtZS4gICov CiAgICAgY29udGV4dC0+cmEgPSBfX2J1aWx0aW5fZXh0cmFjdF9yZXR1cm5f YWRkcgogICAgICAgKF9VbndpbmRfR2V0UHRyIChjb250ZXh0LCBmcy0+cmV0 YWRkcl9jb2x1bW4pKTsKKyNpZiBkZWZpbmVkKCBfX0NSMTZfXyApCisgICAg Y29udGV4dC0+cmEgPSBDUjE2X1VXX0NPTlRFWFQoY29udGV4dC0+cmEpIDsK KyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ3Niw3ICsxNDgzLDEx IEBAIHV3X2luaXRfY29udGV4dF8xIChzdHJ1Y3QgX1Vud2luZF9Db250ZXgK ICAgX1Vud2luZF9TZXRTcENvbHVtbiAoY29udGV4dCwgb3V0ZXJfY2ZhLCAm c3Bfc2xvdCk7CiAgIGZzLnJlZ3MuY2ZhX2hvdyA9IENGQV9SRUdfT0ZGU0VU OwogICBmcy5yZWdzLmNmYV9yZWcgPSBfX2J1aWx0aW5fZHdhcmZfc3BfY29s dW1uICgpOworI2lmIGRlZmluZWQoIF9fQ1IxNl9fICkKKyAgZnMucmVncy5j ZmFfb2Zmc2V0IC09IENSMTZfQVJHU19TSVpFKGNvbnRleHQpOworI2Vsc2UK ICAgZnMucmVncy5jZmFfb2Zmc2V0ID0gMDsKKyNlbmRpZgogCiAgIHV3X3Vw ZGF0ZV9jb250ZXh0XzEgKGNvbnRleHQsICZmcyk7CiAKQEAgLTE1MTAsNiAr MTUyMSwxOCBAQCBfVW53aW5kX0RlYnVnSG9vayAodm9pZCAqY2ZhIF9fYXR0 cmlidXRlCiAgICBtYWNybyBiZWNhdXNlIF9fYnVpbHRpbl9laF9yZXR1cm4g bXVzdCBiZSBpbnZva2VkIGluIHRoZSBjb250ZXh0IG9mCiAgICBvdXIgY2Fs bGVyLiAgKi8KIAorI2lmIGRlZmluZWQgKF9fQ1IxNl9fKQorI2RlZmluZSB1 d19pbnN0YWxsX2NvbnRleHQoQ1VSUkVOVCwgVEFSR0VUKQkJCQlcCisgIGRv CQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBsb25nIG9mZnNl dCA9IHV3X2luc3RhbGxfY29udGV4dF8xICgoQ1VSUkVOVCksIChUQVJHRVQp KTsJCVwKKyAgICAgIHZvaWQgKmhhbmRsZXIgPSBfX2J1aWx0aW5fZnJvYl9y ZXR1cm5fYWRkciAoKFRBUkdFVCktPnJhKTsJXAorICAgICAgQ1IxNl9VV19D T05URVhUKGhhbmRsZXIpOwkJCQkJCVwKKyAgICAgIF9VbndpbmRfRGVidWdI b29rICgoVEFSR0VUKS0+Y2ZhLCBoYW5kbGVyKTsJCQlcCisgICAgICBfX2J1 aWx0aW5fZWhfcmV0dXJuIChvZmZzZXQsIGhhbmRsZXIpOwkJCQlcCisgICAg fQkJCQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZWxzZQogI2RlZmluZSB1d19p bnN0YWxsX2NvbnRleHQoQ1VSUkVOVCwgVEFSR0VUKQkJCQlcCiAgIGRvCQkJ CQkJCQkJXAogICAgIHsJCQkJCQkJCQlcCkBAIC0xNTE5LDYgKzE1NDIsNyBA QCBfVW53aW5kX0RlYnVnSG9vayAodm9pZCAqY2ZhIF9fYXR0cmlidXRlCiAg ICAgICBfX2J1aWx0aW5fZWhfcmV0dXJuIChvZmZzZXQsIGhhbmRsZXIpOwkJ CQlcCiAgICAgfQkJCQkJCQkJCVwKICAgd2hpbGUgKDApCisjZW5kaWYKIAog c3RhdGljIGxvbmcKIHV3X2luc3RhbGxfY29udGV4dF8xIChzdHJ1Y3QgX1Vu d2luZF9Db250ZXh0ICpjdXJyZW50LAotLS0gb3JpZy9saWJnY2MvY29uZmln L2NyMTYvY3J0aS5TCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICsw NTMwCisrKyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGkuUwkyMDExLTA1 LTMwIDE3OjE2OjM1LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDU0IEBA CisjIFNwZWNpYWxpemVkIGNvZGUgbmVlZGVkIHRvIHN1cHBvcnQgY29uc3Ry dWN0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZgorIyBmaWxlLXNjb3BlIG9iamVj dHMgaW4gQysrIGFuZCBKYXZhIGNvZGUsIGFuZCB0byBzdXBwb3J0IGV4Y2Vw dGlvbiBoYW5kbGluZy4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBieSBLUElU IEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworIyBUaGlzIGZpbGUg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLgorIwor IyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BM IHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVy bWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5 IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBM aWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyMg c2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJl c3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworCisvKiBUaGlzIGZpbGUganVzdCBzdXBwbGll cyBmdW5jdGlvbiBwcm9sb2d1ZXMgZm9yIHRoZSAuaW5pdCBhbmQgLmZpbmkK KyAgIHNlY3Rpb25zLiAgSXQgaXMgbGlua2VkIGluIGJlZm9yZSBjcnRiZWdp bi5vLiAgKi8KKworCS5pZGVudCAgIkdOVSBDIGNydGkubyIKKworCS5zZWN0 aW9uIC5pbml0CisJLmdsb2JsICBfX2luaXQKKwkudHlwZSAgIF9faW5pdCxA ZnVuY3Rpb24KK19faW5pdDoKKyNpZiBkZWZpbmVkIChfX0lEX1NIQVJFRF9M SUJfXykKKwlwdXNoCSQyLCByMTIsIHJhCisJbW92ZCAgICAkX19jdXJyZW50 X3NoYXJlZF9saWJyYXJ5X3IxMl9vZmZzZXRfLCAocjEscjApCisJbG9hZGQg ICBbcjEyXTAocjEscjApLCAocjEyKQorI2Vsc2UKKyAgICAgICAgcHVzaAly YQorI2VuZGlmCisKKwkuc2VjdGlvbiAuZmluaQorCS5nbG9ibCAgX19maW5p CisJLnR5cGUgICBfX2ZpbmksQGZ1bmN0aW9uCitfX2Zpbmk6CisjaWYgZGVm aW5lZCAoX19JRF9TSEFSRURfTElCX18pCisJcHVzaAkkMiwgcjEyLCByYQor CW1vdmQgICAgJF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9yMTJfb2Zmc2V0 XywgKHIxLHIwKQorCWxvYWRkICAgW3IxMl0wKHIxLHIwKSwgKHIxMikKKyNl bHNlCisgICAgICAgIHB1c2gJcmEKKyNlbmRpZgorCQotLS0gb3JpZy9saWJn Y2MvY29uZmlnL2NyMTYvY3J0bGliaWQuUwkxOTcwLTAxLTAxIDA1OjMwOjAw LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2xpYmdjYy9jb25maWcvY3IxNi9j cnRsaWJpZC5TCTIwMTEtMDUtMzAgMTc6MTY6MzUuMDAwMDAwMDAwICswNTMw CkBAIC0wLDAgKzEsMjggQEAKKyMgUHJvdmlkZSBhIHdlYWsgZGVmaW5pdGlv biBvZiB0aGUgbGlicmFyeSBJRCwgZm9yIHRoZSBiZW5lZml0IG9mIGNlcnRh aW4KKyMgY29uZmlndXJlIHNjcmlwdHMuCSAKKyMgQ29weXJpZ2h0IChDKSAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmli dXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKwor IyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0 aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0 aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAzLjEsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlO Ry5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisjIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCS5pZGVudCAgIkdOVSBD IGNydGxpYmlkLm8iCisKKy53ZWFrIF9fY3VycmVudF9zaGFyZWRfbGlicmFy eV9yMTJfb2Zmc2V0XworLnNldCBfX2N1cnJlbnRfc2hhcmVkX2xpYnJhcnlf cjEyX29mZnNldF8sIDAKLS0tIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2Ny dG4uUwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysg bW9kL2xpYmdjYy9jb25maWcvY3IxNi9jcnRuLlMJMjAxMS0wNS0zMCAxNzox NjozNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw0NCBAQAorIyBTcGVj aWFsaXplZCBjb2RlIG5lZWRlZCB0byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBh bmQgZGVzdHJ1Y3Rpb24gb2YKKyMgZmlsZS1zY29wZSBvYmplY3RzIGluIEMr KyBhbmQgSmF2YSBjb2RlLCBhbmQgdG8gc3VwcG9ydCBleGNlcHRpb24gaGFu ZGxpbmcuCisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyMgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5z IEluZm9zeXN0ZW1zIExpbWl0ZWQuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBm aWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9u IDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25z IGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24sIHZlcnNpb24KKyMgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYW5kCisjIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF eGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisjIHNlZSB0aGUg ZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZl bHkuICBJZiBub3QsIHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKworLyogVGhpcyBmaWxlIHN1cHBsaWVzIGZ1bmN0aW9uIGVw aWxvZ3VlcyBmb3IgdGhlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucy4KKyAg SXQgaXMgbGlua2VkIGluIGFmdGVyIGFsbCBvdGhlciBmaWxlcy4gICovCisK KwkuaWRlbnQgICJHTlUgQyBjcnRuLm8iCisKKwkuc2VjdGlvbiAuaW5pdAor I2lmIGRlZmluZWQgKF9fSURfU0hBUkVEX0xJQl9fKQorCXBvcHJldAkkMiwg cjEyLCByYQorI2Vsc2UKKwlwb3ByZXQJcmEKKyNlbmRpZgorCisJLnNlY3Rp b24gLmZpbmkKKyNpZiBkZWZpbmVkIChfX0lEX1NIQVJFRF9MSUJfXykKKwlw b3ByZXQJJDIsIHIxMiwgcmEKKyNlbHNlCisJcG9wcmV0CXJhCisjZW5kaWYK KwotLS0gb3JpZy9saWJnY2MvY29uZmlnL2NyMTYvdC1jcjE2CTE5NzAtMDEt MDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2Nv bmZpZy9jcjE2L3QtY3IxNgkyMDExLTA1LTMwIDE3OjE2OjM1LjAwMDAwMDAw MCArMDUzMApAQCAtMCwwICsxLDE0IEBACisjIEFzc2VtYmxlIHN0YXJ0dXAg ZmlsZXMuCitFWFRSQV9NVUxUSUxJQl9QQVJUUyA9IGNydGJlZ2luLm8gY3J0 ZW5kLm8gY3J0aS5vIGNydG4ubyBjcnRsaWJpZC5vCisKKyQoVCljcnRpLm86 ICQoc3JjZGlyKS9jb25maWcvY3IxNi9jcnRpLlMgJChHQ0NfUEFTU0VTKQor CSQoR0NDX0ZPUl9UQVJHRVQpICQoR0NDX0NGTEFHUykgJChNVUxUSUxJQl9D RkxBR1MpICQoSU5DTFVERVMpIFwKKwktYyAtbyAkKFQpY3J0aS5vIC14IGFz c2VtYmxlci13aXRoLWNwcCAkKHNyY2RpcikvY29uZmlnL2NyMTYvY3J0aS5T CisKKyQoVCljcnRsaWJpZC5vOiAkKHNyY2RpcikvY29uZmlnL2NyMTYvY3J0 bGliaWQuUyAkKEdDQ19QQVNTRVMpCisJJChHQ0NfRk9SX1RBUkdFVCkgJChH Q0NfQ0ZMQUdTKSAkKE1VTFRJTElCX0NGTEFHUykgJChJTkNMVURFUykgXAor CS1jIC1vICQoVCljcnRsaWJpZC5vIC14IGFzc2VtYmxlci13aXRoLWNwcCAk KHNyY2RpcikvY29uZmlnL2NyMTYvY3J0bGliaWQuUworCiskKFQpY3J0bi5v OiAkKHNyY2RpcikvY29uZmlnL2NyMTYvY3J0bi5TICQoR0NDX1BBU1NFUykK KwkkKEdDQ19GT1JfVEFSR0VUKSAkKEdDQ19DRkxBR1MpICQoTVVMVElMSUJf Q0ZMQUdTKSAkKElOQ0xVREVTKSBcCisJLWMgLW8gJChUKWNydG4ubyAteCBh c3NlbWJsZXItd2l0aC1jcHAgJChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydG4u UwotLS0gb3JpZy9saWJnY2MvY29uZmlnL2NyMTYvdW53aW5kLWhlbHBlci5o CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2Qv bGliZ2NjL2NvbmZpZy9jcjE2L3Vud2luZC1oZWxwZXIuaAkyMDExLTA1LTMw IDE3OjE2OjM1LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDUxIEBACisv KiBIZWFkZXIgZmlsZSBmb3IgQ1IxNiB1bndpbmQgc3VwcG9ydC4KKyAgIENv cHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVt cyBMaW1pdGVkLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisK KyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAor ICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24g NyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25h bAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGlt ZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBIZWxwZXIgbWFjcm8g dG8gbG9hZCB0aGUgY29ycmVjdCBQQyB2YWx1ZSBmcm9tIFJBIHJlZ2lzdGVy LiAgKi8KKyNpZiBkZWZpbmVkIChfX0NSMTZfXykKKyNkZWZpbmUgQ1IxNl9V V19DT05URVhUKEhBTkRMRVIpCVwKKyAgKHZvaWQqKSggKCAodW5zaWduZWQp SEFORExFUiApID4+IDEgKSA7CisKKy8qIEhlbHBlciBtYWNybyBpbiB1d19p bml0X2NvbnRleHRfMSB0byBjYWxjdWxhdGUgY3VyZW50IAorICAgZnJhbWUg Y2ZhIG9mZnNldC4gICovCisjZGVmaW5lIENSMTZfQVJHU19TSVpFKENPTlRF WFQpCVwKKyAgQ09OVEVYVC0+YXJnc19zaXplOworCisvKiBIZWxwZXIgcm91 dGluZSBvZiBfVW53aW5kX1NldEdSIGZvciBDUjE2LiAgKi8KKyNkZWZpbmUg Q1IxNl9VV19TRVRHUihQVFIsVkFMLFNJWkUsSU5ERVgsQ09OVEVYVCkJXAor ICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBpZiAoIFNJWkUg PT0gc2l6ZW9mKF9VbndpbmRfV29yZCkgKQkJXAorCSogKF9VbndpbmRfV29y ZCAqKSBQVFIgPSBWQUwgOwkJCVwKKyAgICAgIGVsc2UJCQkJCQlcCisJewkJ CQkJCVwKKwkgIHR5cGVkZWYgdW5zaWduZWQgX0NSMTZfVW53aW5kX1dvcmQg CQlcCisJCQkgICAgIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9f KSkpO1wKKwkgIGdjY19hc3NlcnQgKElOREVYICsgMSAgPCAgKGludCkgc2l6 ZW9mKGR3YXJmX3JlZ19zaXplX3RhYmxlKSk7ICBcCisJICAqIChfQ1IxNl9V bndpbmRfV29yZCAqKSBQVFIgPSBWQUwgJiAweGZmZmY7IAlcCisJICBQVFIg PSBDT05URVhULT5yZWdbSU5ERVggKyAxXTsgICAgIAkJXAorCSAgKiAoX0NS MTZfVW53aW5kX1dvcmQgKikgUFRSID0gVkFMID4+IDE2OyAgCVwKKwl9CQkJ CQkJCVwKKyAgICB9IHdoaWxlKDApICAKKyNlbmRpZgotLS0gb3JpZy9saWJn Y2MvY29uZmlnLmhvc3QJMjAxMS0wMy0yMyAwMToyODoxOC4wMDAwMDAwMDAg KzA1MzAKKysrIG1vZC9saWJnY2MvY29uZmlnLmhvc3QJMjAxMS0wNS0zMCAx NzoxNjozNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTc5LDYgKzc5LDggQEAgYXZy LSotKikKIGJmaW4qLSopCiAJY3B1X3R5cGU9YmZpbgogCTs7CitjcjE2LSot KikKKwk7OwogZmlkby0qLSopCiAJY3B1X3R5cGU9bTY4awogCTs7CkBAIC0y MzcsNiArMjM5LDEwIEBAIGJmaW4qLWxpbnV4LXVjbGliYyopCiAJOzsKIGJm aW4qLSopCiAgICAgICAgIDs7CitjcjE2LSotKikKKyAgICAgICAgZXh0cmFf cGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0aS5vIGNydG4ubyBjcnRs aWJpZC5vIgorICAgICAgICB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGNy MTYvdC1jcjE2IgorICAgICAgICA7OwogY3Jpc3YzMi0qLWVsZiB8IGNyaXN2 MzItKi1ub25lIHwgY3Jpcy0qLWVsZiB8IGNyaXMtKi1ub25lKQogCWV4dHJh X3BhcnRzPSJjcnRiZWdpbi5vIGNydGVuZC5vIgogCTs7Cg== --_002_371569CBCFB2E745B891DBB88B2DFDDD1A249C44FAKCINPUNHJCMS0_--