From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21249 invoked by alias); 12 Jul 2012 11:21:17 -0000 Received: (qmail 21240 invoked by uid 22791); 12 Jul 2012 11:21:16 -0000 X-SWARE-Spam-Status: No, hits=-3.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 12 Jul 2012 11:20:52 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1SpHRs-0004bj-OX from Hafiz_Abid@mentor.com for gdb-patches@sourceware.org; Thu, 12 Jul 2012 04:20:44 -0700 Received: from SVR-IES-FEM-04.mgc.mentorg.com ([137.202.0.110]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 12 Jul 2012 04:19:44 -0700 Received: from EU-MBX-03.mgc.mentorg.com ([169.254.2.57]) by SVR-IES-FEM-04.mgc.mentorg.com ([137.202.0.110]) with mapi id 14.01.0289.001; Thu, 12 Jul 2012 12:20:37 +0100 From: "Abid, Hafiz" To: "gdb-patches@sourceware.org" Subject: [patch] MI telnet service Date: Thu, 12 Jul 2012 11:21:00 -0000 Message-ID: Content-Type: multipart/mixed; boundary="_002_EB3B29AD43CA924DA27099BC8519237629DF36EUMBX03mgcmentorg_" MIME-Version: 1.0 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-07/txt/msg00154.txt.bz2 --_002_EB3B29AD43CA924DA27099BC8519237629DF36EUMBX03mgcmentorg_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1804 Hi, This patch provides implementation of telnet service. This is based on init= ial work by Grigory Tolstolytkin.(http://sourceware.org/ml/gdb-patches/2011= -11/msg00466.html) This service can accept and execute CLI commands from the remote user. It c= an be started by MI command "-start-telnet-service [port]". After the serv= ice is running, user can connect to the GDB via telnet and execute CLI comm= ands in parallel with existing MI interface. This service can be stopped by= another MI command "-stop-telnet-service". For these commands to work, GDB= has to be configured with --enable-gdbmitel=3Dyes.=20 This service can be useful, for example, when GDB is running as a backend o= f an IDE. Testing infrastructure can run the tests by sending commands thro= ugh socket. In case of an error, a user can debug the problem in the IDE.=20 The test case that I added only checks that port is opened after the servic= e is started. I am looking to improve it and would appreciate if the review= ers can help me with some ideas.=20 How does it all look? Regards, Abid 2012-07-12 Hafiz Abid Qadeer * Makefile.in: Variable definitions related to mi-telnet.c. (mi-telnet.o): New rule. * configure.ac: Add AC_ARG_ENABLE(gdbmitel). * configure: Generated. * mi/mi-cmds.c (mi_cmds): Add -start-telnet-service and stop-telnet-service MI commands. * mi/mi-cmds.h (mi_cmd_start_telnet_service): Add declaration. (mi_cmd_stop_telnet_service): Add declaration. * mi/mi-telnet.c: New file. * gdb/testsuite: gdb.mi/mi-telnet.exp: New file gdb.mi/mi-telnet.c: New file * gdb.texinfo (Miscellaneous GDB/MI Commands): Added=20 -start-telnet-service and -stop-telnet-service. --_002_EB3B29AD43CA924DA27099BC8519237629DF36EUMBX03mgcmentorg_ Content-Type: application/octet-stream; name="mi-telnet.patch" Content-Description: mi-telnet.patch Content-Disposition: attachment; filename="mi-telnet.patch"; size=29537; creation-date="Wed, 11 Jul 2012 13:58:52 GMT"; modification-date="Thu, 12 Jul 2012 10:35:54 GMT" Content-Transfer-Encoding: base64 Content-length: 40041 SW5kZXg6IGdkYi9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL01ha2VmaWxlLmluLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjEyMTAKZGlmZiAtdSAtcjEuMTIxMCBNYWtl ZmlsZS5pbgotLS0gZ2RiL01ha2VmaWxlLmluCTIgSnVsIDIwMTIgMTU6Mjk6 MzMgLTAwMDAJMS4xMjEwCisrKyBnZGIvTWFrZWZpbGUuaW4JMTIgSnVsIDIw MTIgMTA6MzU6MTEgLTAwMDAKQEAgLTIxNiw2ICsyMTYsMTUgQEAKIFNVQkRJ Ul9NSV9DRkxBR1M9CiAKICMKKyMgTUkgdGVsbmV0IGRlZmluaXRpb25zCisj CitTVUJESVJfTUlURUxfT0JTID0gbWktdGVsbmV0Lm8KK1NVQkRJUl9NSVRF TF9TUkNTID0gbWkvbWktdGVsbmV0LmMKK1NVQkRJUl9NSVRFTF9ERVBTPQor U1VCRElSX01JVEVMX0xERkxBR1M9CitTVUJESVJfTUlURUxfQ0ZMQUdTPSAt REVOQUJMRV9HREJNSVRFTAorCisjCiAjIFRVSSBzdWIgZGlyZWN0b3J5IGRl ZmluaXRpb25zCiAjCiAKQEAgLTE4OTQsNiArMTkwMywxMCBAQAogCSQoQ09N UElMRSkgJChzcmNkaXIpL21pL21pLWNvbW1vbi5jCiAJJChQT1NUQ09NUElM RSkKIAorbWktdGVsbmV0Lm86ICQoc3JjZGlyKS9taS9taS10ZWxuZXQuYwor CSQoQ09NUElMRSkgJChzcmNkaXIpL21pL21pLXRlbG5ldC5jCisJJChQT1NU Q09NUElMRSkKKwogIyBnZGIvY29tbW9uLyBkZXBlbmRlbmNpZXMKICMKICMg TmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGNvbXBpbGUgcnVsZSBh cyBtYWtlIHdpbGwgZG8gbm90aGluZwpJbmRleDogZ2RiL2NvbmZpZ3VyZQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL2NvbmZpZ3VyZSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNzAKZGlm ZiAtdSAtcjEuMzcwIGNvbmZpZ3VyZQotLS0gZ2RiL2NvbmZpZ3VyZQkyIEp1 bCAyMDEyIDIwOjMxOjA3IC0wMDAwCTEuMzcwCisrKyBnZGIvY29uZmlndXJl CTEyIEp1bCAyMDEyIDEwOjM1OjEzIC0wMDAwCkBAIC03ODQsNiArNzg0LDcg QEAKIGVuYWJsZV82NF9iaXRfYmZkCiBlbmFibGVfZ2RiY2xpCiBlbmFibGVf Z2RibWkKK2VuYWJsZV9nZGJtaXRlbAogZW5hYmxlX3R1aQogZW5hYmxlX2dk YnRrCiB3aXRoX2xpYnVud2luZF9pYTY0CkBAIC0xNDYyLDYgKzE0NjMsNyBA QAogICAtLWVuYWJsZS02NC1iaXQtYmZkICAgICA2NC1iaXQgc3VwcG9ydCAo b24gaG9zdHMgd2l0aCBuYXJyb3dlciB3b3JkIHNpemVzKQogICAtLWRpc2Fi bGUtZ2RiY2xpICAgICAgICBkaXNhYmxlIGNvbW1hbmQtbGluZSBpbnRlcmZh Y2UgKENMSSkKICAgLS1kaXNhYmxlLWdkYm1pICAgICAgICAgZGlzYWJsZSBt YWNoaW5lLWludGVyZmFjZSAoTUkpCisgIC0tZW5hYmxlLWdkYm1pdGVsICAg ICAgIGVuYWJsZSByZW1vdGUgaW50ZXJmYWNlIG92ZXIgdGVsbmV0CiAgIC0t ZW5hYmxlLXR1aSAgICAgICAgICAgIGVuYWJsZSBmdWxsLXNjcmVlbiB0ZXJt aW5hbCB1c2VyIGludGVyZmFjZSAoVFVJKQogICAtLWVuYWJsZS1nZGJ0ayAg ICAgICAgICBlbmFibGUgZ2RidGsgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNl IChHVUkpCiAgIC0tZW5hYmxlLXByb2ZpbGluZyAgICAgIGVuYWJsZSBwcm9m aWxpbmcgb2YgR0RCCkBAIC01MjM3LDYgKzUyMzksMjggQEAKICAgZmkKIGZp CiAKKyMgRW5hYmxlIE1JIHRlbG5ldC4KKyMgQ2hlY2sgd2hldGhlciAtLWVu YWJsZS1nZGJtaXRlbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9n ZGJtaXRlbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5h YmxlX2dkYm1pdGVsOyBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMgfCBu bykKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFzX2ZuX2Vycm9yICJiYWQg dmFsdWUgJGVuYWJsZXZhbCBmb3IgLS1lbmFibGUtZ2RibWl0ZWwiICIkTElO RU5PIiA1IDs7CisgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2dkYm1pdGVsPW5v CitmaQorCitpZiB0ZXN0IHgiJGVuYWJsZV9nZGJtaXRlbCIgPSB4eWVzOyB0 aGVuCisgIGlmIHRlc3QgLWQgJHNyY2Rpci9taTsgdGhlbgorICAgIENPTkZJ R19PQlM9IiRDT05GSUdfT0JTIFwkKFNVQkRJUl9NSVRFTF9PQlMpIgorICAg IENPTkZJR19ERVBTPSIkQ09ORklHX0RFUFMgXCQoU1VCRElSX01JVEVMX0RF UFMpIgorICAgIENPTkZJR19TUkNTPSIkQ09ORklHX1NSQ1MgXCQoU1VCRElS X01JVEVMX1NSQ1MpIgorICAgIEVOQUJMRV9DRkxBR1M9IiRFTkFCTEVfQ0ZM QUdTIFwkKFNVQkRJUl9NSVRFTF9DRkxBR1MpIgorICBmaQorZmkKKwogIyBF bmFibGUgVFVJLgogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXR1aSB3YXMg Z2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV90dWkrc2V0fSIgPSBzZXQ7IHRo ZW4gOgpJbmRleDogZ2RiL2NvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2NvbmZpZ3VyZS5h Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODEKZGlmZiAtdSAtcjEuMTgx IGNvbmZpZ3VyZS5hYwotLS0gZ2RiL2NvbmZpZ3VyZS5hYwkyIEp1bCAyMDEy IDIwOjMxOjA5IC0wMDAwCTEuMTgxCisrKyBnZGIvY29uZmlndXJlLmFjCTEy IEp1bCAyMDEyIDEwOjM1OjEzIC0wMDAwCkBAIC0zMjksNiArMzI5LDI1IEBA CiAgIGZpCiBmaQogCisjIEVuYWJsZSBNSSB0ZWxuZXQuCitBQ19BUkdfRU5B QkxFKGdkYm1pdGVsLAorQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdkYm1p dGVsXSwgW2VuYWJsZSByZW1vdGUgaW50ZXJmYWNlIG92ZXIgdGVsbmV0XSks CisgIFtjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMgfCBubykKKyAgICAg IDs7CisgICAgKikKKyAgICAgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRl bmFibGV2YWwgZm9yIC0tZW5hYmxlLWdkYm1pdGVsXSkgOzsKKyAgZXNhY10s CisgIFtlbmFibGVfZ2RibWl0ZWw9bm9dKQoraWYgdGVzdCB4IiRlbmFibGVf Z2RibWl0ZWwiID0geHllczsgdGhlbgorICBpZiB0ZXN0IC1kICRzcmNkaXIv bWk7IHRoZW4KKyAgICBDT05GSUdfT0JTPSIkQ09ORklHX09CUyBcJChTVUJE SVJfTUlURUxfT0JTKSIKKyAgICBDT05GSUdfREVQUz0iJENPTkZJR19ERVBT IFwkKFNVQkRJUl9NSVRFTF9ERVBTKSIKKyAgICBDT05GSUdfU1JDUz0iJENP TkZJR19TUkNTIFwkKFNVQkRJUl9NSVRFTF9TUkNTKSIKKyAgICBFTkFCTEVf Q0ZMQUdTPSIkRU5BQkxFX0NGTEFHUyBcJChTVUJESVJfTUlURUxfQ0ZMQUdT KSIKKyAgZmkKK2ZpCisKICMgRW5hYmxlIFRVSS4KIEFDX0FSR19FTkFCTEUo dHVpLAogQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXR1aV0sIFtlbmFibGUg ZnVsbC1zY3JlZW4gdGVybWluYWwgdXNlciBpbnRlcmZhY2UgKFRVSSldKSwK SW5kZXg6IGdkYi9kb2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGlu Zm8sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTkwCmRpZmYgLXUgLXIxLjk5 MCBnZGIudGV4aW5mbwotLS0gZ2RiL2RvYy9nZGIudGV4aW5mbwk1IEp1bCAy MDEyIDAxOjA4OjI0IC0wMDAwCTEuOTkwCisrKyBnZGIvZG9jL2dkYi50ZXhp bmZvCTEyIEp1bCAyMDEyIDEwOjM1OjE2IC0wMDAwCkBAIC0zMjg5Miw2ICsz Mjg5Miw2MSBAQAogKGdkYikKIEBlbmQgc21hbGxleGFtcGxlCiAKK0BzdWJo ZWFkaW5nIFRoZSBAY29kZXstc3RhcnQtdGVsbmV0LXNlcnZpY2V9IENvbW1h bmQKK0BmaW5kZXggLXN0YXJ0LXRlbG5ldC1zZXJ2aWNlCisKK0BzdWJoZWFk aW5nIFN5bm9wc2lzCisKK0BzbWFsbGV4YW1wbGUKKy1zdGFydC10ZWxuZXQt c2VydmljZSBbcG9ydF0KK0BlbmQgc21hbGxleGFtcGxlCisKK1N0YXJ0IGEg dGVsbmV0IHNlcnZpY2Ugb24gdGhlIGdpdmVuIHBvcnQuIEFmdGVyIHRoZSBz ZXJ2aWNlIGlzIHN0YXJ0ZWQsIAordXNlciBjYW4gY29ubmVjdCB0byB0aGUg Z2RiIHZpYSB0ZWxuZXQgYW5kIGV4ZWN1dGUgQ0xJIGNvbW1hbmRzIGluIAor cGFyYWxsZWwgd2l0aCBleGlzdGluZyBNSSBpbnRlcmZhY2UuIElmIG5vIEBz YW1we3BvcnR9IGFyZ3VtZW50IGlzIGdpdmVuCit0aGVuIGRlZmF1bHQgcG9y dCA5OTUwIGlzIHVzZWQuIE9ubHkgb25lIHNlcnZpY2UgaXMgYWxsb3dlZCBh dCBvbmUgdGltZS4KK1NvIHVzZXIgd2lsbCBoYXZlIHRvIHN0b3AgdGhlIGFs cmVhZHkgcnVubmluZyBzZXJ2aWNlIGJlZm9yZSBzdGFydGluZyBhCituZXcg b25lLiBGb3IgdGVsbmV0IHNlcnZpY2UgdG8gd29yaywgQHZhbHVle0dEQk59 CitzaG91bGQgYmUgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWdkYm1pdGVs PXllcy4gICAKKworQHN1YmhlYWRpbmcgQHZhbHVle0dEQk59IENvbW1hbmQK KworTm8gZXF1aXZhbGVudC4KKworQHN1YmhlYWRpbmcgRXhhbXBsZQorCitA c21hbGxleGFtcGxlCisoZ2RiKQorLXN0YXJ0LXRlbG5ldC1zZXJ2aWNlIDgw MDIKK15kb25lCisoZ2RiKQorQGVuZCBzbWFsbGV4YW1wbGUKKworQHN1Ymhl YWRpbmcgVGhlIEBjb2Rley1zdG9wLXRlbG5ldC1zZXJ2aWNlfSBDb21tYW5k CitAZmluZGV4IC1zdG9wLXRlbG5ldC1zZXJ2aWNlCisKK0BzdWJoZWFkaW5n IFN5bm9wc2lzCisKK0BzbWFsbGV4YW1wbGUKKy1zdG9wLXRlbG5ldC1zZXJ2 aWNlCitAZW5kIHNtYWxsZXhhbXBsZQorCitTdG9wIHRoZSB0ZWxuZXQgc2Vy dmljZSBpZiBpdCBpcyBhbHJlYWR5IHN0YXJ0ZWQuIE90aGVyd2lzZSB0aGlz IAorY29tbWFuZCBoYXMgbm8gZWZmZWN0LiAgIAorCitAc3ViaGVhZGluZyBA dmFsdWV7R0RCTn0gQ29tbWFuZAorCitObyBlcXVpdmFsZW50LgorCitAc3Vi aGVhZGluZyBFeGFtcGxlCisKK0BzbWFsbGV4YW1wbGUKKyhnZGIpCistc3Rv cC10ZWxuZXQtc2VydmljZQorXmRvbmUKKyhnZGIpCitAZW5kIHNtYWxsZXhh bXBsZQorCiBAbm9kZSBBbm5vdGF0aW9ucwogQGNoYXB0ZXIgQHZhbHVle0dE Qk59IEFubm90YXRpb25zCiAKSW5kZXg6IGdkYi9taS9taS1jbWRzLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9taS9taS1jbWRzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlm ZiAtdSAtcjEuNjAgbWktY21kcy5jCi0tLSBnZGIvbWkvbWktY21kcy5jCTI0 IE1heSAyMDEyIDAwOjMzOjQ2IC0wMDAwCTEuNjAKKysrIGdkYi9taS9taS1j bWRzLmMJMTIgSnVsIDIwMTIgMTA6MzU6MTYgLTAwMDAKQEAgLTEzNyw2ICsx MzcsMTAgQEAKICAgeyAidmFyLXNob3ctYXR0cmlidXRlcyIsIHsgTlVMTCwg MCB9LCBtaV9jbWRfdmFyX3Nob3dfYXR0cmlidXRlc30sCiAgIHsgInZhci1z aG93LWZvcm1hdCIsIHsgTlVMTCwgMCB9LCBtaV9jbWRfdmFyX3Nob3dfZm9y bWF0fSwKICAgeyAidmFyLXVwZGF0ZSIsIHsgTlVMTCwgMCB9LCBtaV9jbWRf dmFyX3VwZGF0ZX0sCisjaWZkZWYgRU5BQkxFX0dEQk1JVEVMCisgIHsgInN0 YXJ0LXRlbG5ldC1zZXJ2aWNlIiwgeyBOVUxMLCAwIH0sIG1pX2NtZF9zdGFy dF90ZWxuZXRfc2VydmljZX0sCisgIHsgInN0b3AtdGVsbmV0LXNlcnZpY2Ui LCB7IE5VTEwsIDAgfSwgbWlfY21kX3N0b3BfdGVsbmV0X3NlcnZpY2V9LAor I2VuZGlmCiAgIHsgTlVMTCwgfQogfTsKIApJbmRleDogZ2RiL21pL21pLWNt ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL21pL21pLWNtZHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS41NQpkaWZmIC11IC1yMS41NSBtaS1jbWRzLmgKLS0tIGdkYi9taS9taS1j bWRzLmgJMjQgTWF5IDIwMTIgMDA6MzM6NDYgLTAwMDAJMS41NQorKysgZ2Ri L21pL21pLWNtZHMuaAkxMiBKdWwgMjAxMiAxMDozNToxNiAtMDAwMApAQCAt MTE4LDYgKzExOCwxMCBAQAogZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1p X2NtZF92YXJfdXBkYXRlOwogZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1p X2NtZF9lbmFibGVfcHJldHR5X3ByaW50aW5nOwogZXh0ZXJuIG1pX2NtZF9h cmd2X2Z0eXBlIG1pX2NtZF92YXJfc2V0X3VwZGF0ZV9yYW5nZTsKKyNpZmRl ZiBFTkFCTEVfR0RCTUlURUwKK2V4dGVybiBtaV9jbWRfYXJndl9mdHlwZSBt aV9jbWRfc3RhcnRfdGVsbmV0X3NlcnZpY2U7CitleHRlcm4gbWlfY21kX2Fy Z3ZfZnR5cGUgbWlfY21kX3N0b3BfdGVsbmV0X3NlcnZpY2U7CisjZW5kaWYK IAogLyogRGVzY3JpcHRpb24gb2YgYSBzaW5nbGUgY29tbWFuZC4gICovCiAK SW5kZXg6IGdkYi9taS9taS10ZWxuZXQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiBnZGIvbWkvbWktdGVsbmV0LmMKZGlmZiAtTiBnZGIv bWkvbWktdGVsbmV0LmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAw OjAwIC0wMDAwCisrKyBnZGIvbWkvbWktdGVsbmV0LmMJMTIgSnVsIDIwMTIg MTA6MzU6MTYgLTAwMDAKQEAgLTAsMCArMSw2NzAgQEAKKy8qIE1JIHRlbG5l dCBzdXBwb3J0CisKKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAw MiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwK KyAgIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIENvbnRyaWJ1dGVkIGJ5IE1lbnRvciBHcmFwaGljcyBDb3Jwb3Jh dGlvbiA8d3d3Lm1lbnRvci5jb20+CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyog TUkgdGVsbmV0IHN1cHBvcnQgYWxsb3dzIHJlbW90ZSB1c2VyIHRvIGNvbm5l Y3QgdG8gZ2RiIHVzaW5nIHRlbG5ldC4KKyAgIEdEQiBzaG91bGQgYmUgYnVp bHQgd2l0aCAiLS1lbmFibGUtZ2RibWl0ZWw9eWVzIiBvcHRpb24gdG8gZW5h YmxlIE1JIHRlbG5ldC4KKworICAgVG8gU3RhcnQgdGhlIHNlcnZpY2UgdXNl IE1JIGNvbW1hbmQgIi1zdGFydC10ZWxuZXQtc2VydmljZSBbcG9ydF0iLgor ICAgRGVmYXVsdCBwb3J0IHZhbHVlIGlzIDk5NTAuCisgICBTZXJ2aWNlIGNh biBiZSBzdG9wcGVkIGJ5IGlzc3VpbmcgIi1zdG9wLXRlbG5ldC1zZXJ2aWNl IiBjb21tYW5kLgorCisgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHJl cXVpcmVkIGZvciBpbnRlcmFjdGl2ZSBjb21tYW5kcworICAgYW5kIGNhbiBi ZSB0dXJuZWQgb24gZGlyZWN0bHkgdmlhIHRlbG5ldCBvbiB0aGUgZmx5Ogor ICAgInNldCBjb25maXJtIG9uIgorICAgInNldCBpbnRlcmFjdGl2ZSBvbiIK KyovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2luY2x1ZGUgInRv cC5oIgorI2luY2x1ZGUgIm1pLWNtZHMuaCIKKyNpbmNsdWRlICJnZGJfc3Ry aW5nLmgiCisjaW5jbHVkZSAiZXZlbnQtbG9vcC5oIgorI2luY2x1ZGUgImlu dGVycHMuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiYnJlYWtw b2ludC5oIgorI2luY2x1ZGUgImNsaS9jbGktY21kcy5oIgorI2luY2x1ZGUg ImNsaS9jbGktZGVjb2RlLmgiCisjaW5jbHVkZSAicmVhZGxpbmUvcmVhZGxp bmUuaCIKKyNpbmNsdWRlICJyZWFkbGluZS9oaXN0b3J5LmgiCisKKyNkZWZp bmUgREVGQVVMVF9QT1JUIDk5NTAKKyNkZWZpbmUgTUFYX0NNRF9MRU5HVEgg NTEyCisKKy8qIEhvb2sgdG8gYXNrIHJlbW90ZSBjbGllbnQgZm9yCisgICBh ZGRpdGlvbmFsICd5ZXMgb3Igbm8nIHF1ZXN0aW9uLiAgKi8KK3N0YXRpYyBp bnQgdGVsbmV0X3F1ZXJ5X2hvb2sgKGNvbnN0IGNoYXIgKm1zZywgdmFfbGlz dCBhcmdwKTsKKworLyogRXhlY3V0ZSB0ZWxuZXQgY29tbWFuZC4gICovCitz dGF0aWMgdm9pZCBleGVjdXRlX3RlbG5ldF9jb21tYW5kIChjaGFyKiBsaW5l KTsKKworLyogVGhpcyBpcyBjYWxsZWQgd2hlbiBkYXRhIGlzIGF2YWlsYWJs ZSBvbiB0ZWxuZXQgcG9ydC4gICovCitzdGF0aWMgdm9pZCBnZXRfaW5wdXRf ZnJvbV90ZWxuZXQgKGludCBlcnIsIGdkYl9jbGllbnRfZGF0YSBjbGllbnRf ZGF0YSk7CisKKy8qIEFjY2VwdCBjbGllbnQgY29ubmVjdGlvbiBhbmQgcmVn aXN0ZXIgaXQKKyAgIHdpdGggZXZlbnRfbG9vcCB0byBnZXQgZGF0YSBmcm9t IHRlbG5ldCBjbGllbnQuICAqLworc3RhdGljIHZvaWQgdGVsbmV0X2FjY2Vw dF9oYW5kbGVyKGludCBlcnIsIGdkYl9jbGllbnRfZGF0YSk7CisKKy8qIFJl bW92ZSB0aGUgc29ja2V0IGRlc2NyaXB0b3IgZnJvbSB0aGUgZXZlbnQgaGFu ZGxlciBhbmQgY2xvc2UgaXQuICAqLworc3RhdGljIHZvaWQgY2xvc2Vfc29j a2V0X2Rlc2MgKGludCAqZmQpOworCisvKiBBIHV0aWxpdHkgZnVuY3Rpb24g dG8gcmVjZWl2ZSBkYXRhIGZyb20gc29ja2V0CisgICBhbmQgZG8gZXJyb3Ig Y2hlY2tpbmcuICAqLworc3RhdGljIGludCByZWNlaXZlIChpbnQgKmZkLCB2 b2lkICpidWYsCisJCSAgICBzaXplX3QgbiwgaW50IGZsYWdzKTsKKworLyog QSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIGxpbmUgb2YgaW5wdXQgZnJv bSBzb2NrZXQuICAqLworc3RhdGljIGludCByZWNlaXZlX2xpbmUgKGludCAq ZmQsIGNoYXIqIGJ1ZiwgaW50IGJ1Zl9zaXplKTsKKworLyogQSB1dGlsaXR5 IGZ1bmN0aW9uIHRvIHNlbmQgdGhlIG91dHB1dCB0byBjbGllbnQuICAqLwor c3RhdGljIHZvaWQgcmVwbHlfbXNnIChjb25zdCBjaGFyICptc2cpOworCisv KiBTZW5kcyB0aGUgcmVwbHkgdG8gcmVtb3RlIGNsaWVudCB3aXRoIGV4dHJh ICdccicgY2hhcmFjdGVyCisgICBmb3IgZXZlcnkgJ1xuJyBpbiB0aGUgbXNn IHNvIHRoYXQgaXQgd2lsbCBzaG93IHVwIGNvcnJlY3RseSBvbgorICAgdGVs bmV0IGNvbnNvbGUuICAqLworc3RhdGljIHZvaWQgcmVwbHlfbXNnX3dpdGhf Y2FycmlhZ2VfcmV0dXJuIChjb25zdCBjaGFyICptc2cpOworCisvKiBTZXR1 cCB0aGUgaG9va3MgdG8gZG8gbW9zdCBvZiB0aGUgY29tbXVuaWNhdGlvbiB3 b3JrLiAgKi8KK3N0YXRpYyB2b2lkIHNldHVwX2hvb2tzIChpbnQpOworCisv KiBTb2NrZXQgZm9yIGFjY2VwdGluZyB0ZWxuZXQgY29ubmVjdGlvbnMuICAq Lworc3RhdGljIGludCB0ZWxuZXRfcyA9IC0xOworCisvKiBDbGllbnQgY29u bmVjdGlvbiBkZXNjcmlwdG9yLiAgKi8KK3N0YXRpYyBpbnQgY2xpZW50X2Zk ID0gLTE7CisKKy8qIEZvciBvdXRwdXQgcmVkaXJlY3RpbmcuICAqLworc3Rh dGljIHN0cnVjdCB1aV9maWxlICpzdHJfZmlsZSA9IE5VTEw7CisKKy8qIFRo ZSBQcm9tcHQgdG8gc2hvdyBvbiB0ZWxuZXQuICAqLworc3RhdGljIGNoYXIq IG1pX3Byb21wdCA9ICIiOworCisvKiBIb29rcyB3aGljaCBhcmUgY2FsbGVk IGF0IHZhcmlvdXMgcG9pbnRzIGR1cmluZyB0ZWxuZXQKKyAgIGNvbW1hbmQg cHJvY2Vzc2luZy4gKi8KKworLyogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBh cmUgYWJvdXQgdG8gcHJvY2VzcyBhIGNvbW1hbmQuICAqLworaW50ICgqY21k X3N0YXJ0X2hvb2spIChpbnQgKmZkKTsKKworLyogVGhpcyBpcyBjYWxsZWQg d2hlbiB3ZSBoYXZlIHByb2Nlc3NlZCBhIGNvbW1hbmQuICAqLworaW50ICgq Y21kX2VuZF9ob29rKSAoaW50ICpmZCk7CisKKy8qIFRoaXMgaXMgY2FsbGVk IGFmdGVyIGNvbm5lY3Rpb24gaXMgY29tcGxldGUgdG8gc2V0dXAKKyAgIHRo ZSBtb2RlLiAgKi8KK2ludCAoKmluaXRfbW9kZV9ob29rKSAoaW50ICpmZCk7 CisKKy8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gZGF0YSBpcyBhdmFpYWxibGUg b24gdGhlIHNvY2tldC4gICAqLwordm9pZCAoKmRhdGFfYXZhaWxhYmxlX2hv b2spIChpbnQgKmZkKTsKKworLyogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBh cmUgY2xvc2VpbmcgdGVsbmV0IHNlcnZpY2UuICAqLwordm9pZCAoKnN0b3Bf c2VydmljZV9ob29rKSAoKTsKKworLyogVGhpcyBpcyBjYWxsZWQgd2hlbiB1 c2VyIG5lZWQgdG8gcmVzcG9uZCB0byBhIHF1ZXN0aW9uLiAgKi8KK2NoYXIg KCpnZXRfYW5zd2VyX2hvb2spIChpbnQgKmZkKTsKKworLyogVGhpcyBpcyBj YWxsZWQgd2hlbiB1c2VyIG5lZWRzIHRvIHByb3ZpZGUgc29tZSBpbnB1dCwg bW9zdGx5IGZvcgorICAgZ2V0dGluZyBsaXN0IG9mIGNvbW1hbmRzLiAgKi8K K2NoYXIqICgqZ2V0X2lucHV0X2hvb2spIChpbnQgKmZkLCBjaGFyKiBwcm9t cHQpOworCisKKy8qIENvbW1hbmQgdG8gc3RhcnQgbGlzdGVuaW5nIGZvciBj bGllbnQgb24gc3BlY2lmaWVkIHBvcnQuICAqLworCit2b2lkCittaV9jbWRf c3RhcnRfdGVsbmV0X3NlcnZpY2UgKGNoYXIgKmNvbW1hbmQsIGNoYXIgKiph cmd2LCBpbnQgYXJnYykKK3sKKyAgc3RydWN0IHNvY2thZGRyX2luIHNlcnYs IGNsaWVudDsKKyAgc29ja2xlbl90IGxlbjsKKyAgaW50IHBvcnQ7CisgIGlu dCB2YWw7CisgIGNoYXIqIHRtcF9uYW1lOworCisgIGlmICh0ZWxuZXRfcyAh PSAtMSB8fCBjbGllbnRfZmQgIT0gLTEpCisgICAgeworICAgICAgZXJyb3Ig KF8oIkVycm9yOiB0ZWxuZXQgc2VydmljZSBhbHJlYWR5IHN0YXJ0ZWQiKSk7 CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChhcmdjICE9IDAgJiYg YXJnYyAhPSAxKQorICAgIHsKKyAgICAgIGVycm9yIChfKCJVc2FnZTogLXN0 YXJ0X3RlbG5ldF9zZXJ2aWNlIFtwb3J0XSIpKTsKKyAgICAgIHJldHVybjsK KyAgICB9CisKKyAgaWYgKGFyZ2MgPT0gMSkKKyAgICBwb3J0ID0gYXRvaSAo YXJndlswXSk7CisgIGVsc2UKKyAgICBwb3J0ID0gREVGQVVMVF9QT1JUOwor CisgIGlmIChwb3J0IDw9IDApCisgICAgeworICAgICAgZXJyb3IgKF8oIkVy cm9yOiB3cm9uZyBwb3J0IHZhbHVlOiAlZCIpLCBwb3J0KTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgLyogU2V0dXAgc2VydmVyIHNpZGUgb2YgdGVs bmV0IHNlcnZpY2UuICAqLworICBtZW1zZXQgKChjaGFyICopJnNlcnYsIDAs IHNpemVvZiAoc2VydikpOworICBzZXJ2LnNpbl9mYW1pbHkgPSBBRl9JTkVU OworICBzZXJ2LnNpbl9wb3J0ID0gaHRvbnMgKHBvcnQpOworICBzZXJ2LnNp bl9hZGRyLnNfYWRkciA9IGh0b25sIChJTkFERFJfQU5ZKTsKKworICB0ZWxu ZXRfcyA9IHNvY2tldCAoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9f VENQKTsKKyAgaWYgKHRlbG5ldF9zID09IC0xKQorICAgIHsKKyAgICAgIGVy cm9yIChfKCJFcnJvcjogc29ja2V0IGNhbid0IGJlIGNyZWF0ZWQiKSk7Cisg ICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChiaW5kICh0ZWxuZXRfcywg KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2LCBzaXplb2YgKHNlcnYp KSA9PSAtMSkKKyAgICB7CisgICAgICBjbG9zZSAodGVsbmV0X3MpOworICAg ICAgdGVsbmV0X3MgPSAtMTsKKyAgICAgIGVycm9yIChfKCJFcnJvcjogcG9y dCAlZCBjYW4ndCBiZSBiaW5kIiksIHBvcnQpOworICAgICAgcmV0dXJuOwor ICAgIH0KKworICAvKiBvbmUgY2xpZW50IHNvIGZhciBhbGxvd2VkICovCisg IGlmIChsaXN0ZW4gKHRlbG5ldF9zLCAxKSA9PSAtMSkKKyAgICB7CisgICAg ICBjbG9zZSAodGVsbmV0X3MpOworICAgICAgdGVsbmV0X3MgPSAtMTsKKyAg ICAgIGVycm9yIChfKCJFcnJvcjogJXMiKSwgc2FmZV9zdHJlcnJvciAoZXJy bm8pKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogQWxsb2NhdGUg ZmlsZSBmb3Igb3V0cHV0LiAgKi8KKyAgaWYgKCFzdHJfZmlsZSkKKyAgICBz dHJfZmlsZSA9IG1lbV9maWxlb3BlbiAoKTsKKworICBtaV9wcm9tcHQgPSBn ZXRfcHJvbXB0ICgpOworCisgIC8qIFNldHVwIHRoZSBob29rcyB0byBoYW5k bGUgdmFyaW91cyBzaXR1YXRpb25zLiAgKi8KKyAgc2V0dXBfaG9va3MgKDAp OworCisgIC8qIFJlZ2lzdGVyIGhhbmRsZXIgdGhhdCB3aWxsIGFjY2VwdCBj b25uZWN0aW9ucy4gICovCisgIGFkZF9maWxlX2hhbmRsZXIgKHRlbG5ldF9z LCB0ZWxuZXRfYWNjZXB0X2hhbmRsZXIsIDApOworfQorCisvKiBDb21tYW5k IHRvIHN0b3AgbGlzdGVuaW5nIGZvciByZW1vdGUgY2xpZW50cy4gICovCisK K3ZvaWQKK21pX2NtZF9zdG9wX3RlbG5ldF9zZXJ2aWNlIChjaGFyICpjb21t YW5kLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCit7CisgIGNsb3NlX3NvY2tl dF9kZXNjICgmY2xpZW50X2ZkKTsKKworICBjbG9zZV9zb2NrZXRfZGVzYyAo JnRlbG5ldF9zKTsKKworICBpZihzdHJfZmlsZSAhPSBOVUxMKQorICAgIHsK KyAgICAgIHVpX2ZpbGVfZGVsZXRlIChzdHJfZmlsZSk7CisgICAgICBzdHJf ZmlsZSA9IE5VTEw7CisgICAgfQorCisgIGlmIChzdG9wX3NlcnZpY2VfaG9v aykKKyAgICAoKnN0b3Bfc2VydmljZV9ob29rKSAoKTsKK30KKworLyogSG9v ayBmb3IgcXVlcnkgdG8gYXNrIHJlbW90ZSBjbGllbnQgZm9yCisgICBhZGRp dGlvbmFsICd5ZXMgb3Igbm8nIHF1ZXN0aW9uLiAgKi8KKworc3RhdGljIGlu dAordGVsbmV0X3F1ZXJ5X2hvb2sgKGNvbnN0IGNoYXIgKm1zZywgdmFfbGlz dCBhcmdwKQoreworICBpbnQgcmV0dmFsID0gMDsKKyAgY2hhciAqcXVlc3Rp b24gPSBOVUxMOworICBjaGFyIGNtZDsKKworICBnZGJfZmx1c2ggKGdkYl9z dGRvdXQpOworICBxdWVzdGlvbiA9IHhzdHJ2cHJpbnRmIChtc2csIGFyZ3Ap OworCisgIHJlcGx5X21zZ193aXRoX2NhcnJpYWdlX3JldHVybiAocXVlc3Rp b24pOworICByZXBseV9tc2cgKCIoeSBvciBuKSAiKTsKKworICBpZihnZXRf YW5zd2VyX2hvb2spCisgICAgeworICAgICAgY21kID0gKCpnZXRfYW5zd2Vy X2hvb2spICgmY2xpZW50X2ZkKTsKKworICAgICAgLyogQ2hlY2sgdGhlIGZp cnN0IGxldHRlciBpbiB0aGUgYW5zd2VyLiAgKi8KKyAgICAgIHN3aXRjaCAo Y21kKQorCXsKKwljYXNlICd5JzoKKwljYXNlICdZJzoKKwkgIHJldHZhbCA9 IDE7CisJYnJlYWs7CisKKwljYXNlICduJzoKKwljYXNlICdOJzoKKwlkZWZh dWx0OgorCSAgcmV0dmFsID0gMDsKKwlicmVhazsKKwl9CisgICAgfQorCisg IHhmcmVlIChxdWVzdGlvbik7CisgIHJldHVybiByZXR2YWw7Cit9CisKKy8q IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gR0RCIG5lZWRzIHRvIGdl dCB0aGUgbGlzdCBvZgorICAgY29tbWFuZHMgdG8gcnVuIG9uIGJyZWFrcG9p bnRzLiAgKi8KKworc3RhdGljIGNoYXIgKgordGVsbmV0X3JlYWRsaW5lX2hv b2sgKGNoYXIgKnByb21wdCkKK3sKKyAgaWYgKGdldF9pbnB1dF9ob29rKQor ICAgIHJldHVybiAoKmdldF9pbnB1dF9ob29rKSAoJmNsaWVudF9mZCwgcHJv bXB0KTsKKyAgZWxzZQorICAgIHJldHVybiAiIjsKK307CisKKy8qIEV4ZWN1 dGUgdGVsbmV0IGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorZXhlY3V0 ZV90ZWxuZXRfY29tbWFuZCAoY2hhciogbGluZSkKK3sKKyAgc3RydWN0IGdk Yl9leGNlcHRpb24gZTsKKyAgY2hhciAqcmVzdWx0ID0gTlVMTDsKKyAgc3Ry dWN0IGNsZWFudXAgKmNsZWFudXA7CisgIHN0cnVjdCBpbnRlcnAgKm9sZF9p bnRlcnAgPSBOVUxMOworICBzdHJ1Y3QgaW50ZXJwICppbnRlcnBfdG9fdXNl ID0gTlVMTDsKKyAgSElTVF9FTlRSWSAqaGlzdCA9IE5VTEw7CisgIGxvbmcg bGVuID0gMDsKKyAgdm9pZCogb2xkX3F1ZXJ5X2hvb2s7CisgIHZvaWQqIG9s ZF9yZWFkbGluZV9ob29rOworCisgIGlmIChsaW5lID09IE5VTEwpCisgICAg cmV0dXJuOworCisgIC8qIElmIHRoaXMgaXMgYSB2YWxpZCBjb21tYW5kIHRo ZW4gYWRkIGl0IHRvIGhpc3RvcnkuICAqLworICBpZiAoKmxpbmUgIT0gJ1ww JyApCisgICAgYWRkX2hpc3RvcnkgKGxpbmUpOworICBlbHNlCisgICAgewor ICAgICAgLyogVGhpcyBpcyBhbiBlbXB0eSBjb21tYW5kLiBMb29rIGluIHRo ZSBoaXN0b3J5LiBJZiBub3RoaW5nIGlzCisJIGF2YWlsYWJsZSBpbiBoaXN0 b3J5IHRoZW4gZnVuY3Rpb24gd2lsbCByZXR1cm4uICAqLworICAgICAgaGlz dCA9IHByZXZpb3VzX2hpc3RvcnkgKCk7CisgICAgICBpZiAoIChoaXN0ICE9 IE5VTEwpICYmIChoaXN0LT5saW5lICE9IE5VTEwpICYmICgqaGlzdC0+bGlu ZSAhPSAnXDAnKSApCisJbGluZSA9IGhpc3QtPmxpbmU7CisgICAgICBlbHNl CisJcmV0dXJuOworICAgIH0KKworICBpZiAoY21kX3N0YXJ0X2hvb2spCisg ICAgKCpjbWRfc3RhcnRfaG9vaykgKCZjbGllbnRfZmQpOworCisgIC8qIHNl dHVwIGNsZWFudXBzIGZvciBpbnB1dC9vdXRwdXQuICAqLworICBjbGVhbnVw ID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworICBtYWtl X2NsZWFudXBfcmVzdG9yZV91aV9maWxlICgmZ2RiX3N0ZGluKTsKKyAgbWFr ZV9jbGVhbnVwX3Jlc3RvcmVfdWlfZmlsZSAoJmdkYl9zdGRvdXQpOworICBt YWtlX2NsZWFudXBfcmVzdG9yZV91aV9maWxlICgmZ2RiX3N0ZGVycik7Cisg IG1ha2VfY2xlYW51cF9yZXN0b3JlX3VpX2ZpbGUgKCZnZGJfc3RkbG9nKTsK KyAgbWFrZV9jbGVhbnVwX3Jlc3RvcmVfdWlfZmlsZSAoJmdkYl9zdGR0YXJn KTsKKyAgbWFrZV9jbGVhbnVwX3Jlc3RvcmVfdWlfZmlsZSAoJmdkYl9zdGR0 YXJnZXJyKTsKKworICAvKiBleGVjdXRlIGNvbW1hbmQgaW4gc3luYywgc2V0 IGJhdGNoIG1vZGUgdG8gb2ZmICovCisgIG1ha2VfY2xlYW51cF9yZXN0b3Jl X2ludGVnZXIgKCZiYXRjaF9mbGFnKTsKKyAgYmF0Y2hfZmxhZyA9IDA7CisK KyAgLyogZmlndXJlIG91dCBjdXJyZW50IGludGVycHJldGVyICovCisgIGlm IChjdXJyZW50X2ludGVycF9uYW1lZF9wIChJTlRFUlBfTUkpKQorICAgIHsK KyAgICAgIG9sZF9pbnRlcnAgPSBpbnRlcnBfbG9va3VwIChJTlRFUlBfTUkp OworICAgIH0KKyAgZWxzZSBpZiAoY3VycmVudF9pbnRlcnBfbmFtZWRfcCAo SU5URVJQX01JMSkpCisgICAgeworICAgICAgb2xkX2ludGVycCA9IGludGVy cF9sb29rdXAgKElOVEVSUF9NSTEpOworICAgIH0KKyAgZWxzZSBpZiAoY3Vy cmVudF9pbnRlcnBfbmFtZWRfcCAoSU5URVJQX01JMikpCisgICAgeworICAg ICAgb2xkX2ludGVycCA9IGludGVycF9sb29rdXAgKElOVEVSUF9NSTIpOwor ICAgIH0KKyAgZWxzZSBpZiAoY3VycmVudF9pbnRlcnBfbmFtZWRfcCAoSU5U RVJQX01JMykpCisgICAgeworICAgICAgb2xkX2ludGVycCA9IGludGVycF9s b29rdXAgKElOVEVSUF9NSTMpOworICAgIH0KKworICAvKiBzd2l0Y2ggdG8g Y29uc29sZSBpbnRlcnAgKi8KKyAgaW50ZXJwX3RvX3VzZSA9IGludGVycF9s b29rdXAgKElOVEVSUF9DT05TT0xFKTsKKyAgaWYgKCFpbnRlcnBfc2V0IChp bnRlcnBfdG9fdXNlLCAwKSkKKyAgICB7CisgICAgICByZXBseV9tc2cgKCJF cnJvcjogdW5leHBlY3RlZGx5IGZhaWxlZCB0byB1c2UgQ0xJIHRoZSBpbnRl cnByZXRlclxyXG4iKTsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogcmVkaXJlY3QgYW5kIGNh dGNoIGFsbCBpbnB1dC9vdXRwdXQgaW50byBzdHJpbmcgKi8KKyAgaWYgKHVp X291dF9yZWRpcmVjdCAoY3VycmVudF91aW91dCwgc3RyX2ZpbGUpIDwgMCkK KyAgICByZXBseV9tc2cgKCJFcnJvcjogdW5leHBlY3RlZGx5IGZhaWxlZCB0 byByZWRpcmVjdCB1c2VyIGludGVyZmFjZS4gIgorCSAgICAgICAiTm8gY29t bWFuZCByZXN1bHRzIHdpbGwgYmUgcHJpbnRcclxuIik7CisgIGVsc2UKKyAg ICBtYWtlX2NsZWFudXBfdWlfb3V0X3JlZGlyZWN0X3BvcCAoY3VycmVudF91 aW91dCk7CisKKyAgZ2RiX3N0ZG91dCA9IHN0cl9maWxlOworICBnZGJfc3Rk ZXJyID0gc3RyX2ZpbGU7CisgIGdkYl9zdGRsb2cgPSBzdHJfZmlsZTsKKyAg Z2RiX3N0ZHRhcmcgPSBzdHJfZmlsZTsKKyAgZ2RiX3N0ZHRhcmdlcnIgPSBz dHJfZmlsZTsKKworICAvKiBIb29rIGZvciBjb21tYW5kIHRoYXQgbWF5IGFz ayB1c2VyIGZvciBxdWVzdGlvbnMuICAqLworICBvbGRfcXVlcnlfaG9vayA9 IGRlcHJlY2F0ZWRfcXVlcnlfaG9vazsKKyAgb2xkX3JlYWRsaW5lX2hvb2sg PSBkZXByZWNhdGVkX3JlYWRsaW5lX2hvb2s7CisgIGRlcHJlY2F0ZWRfcXVl cnlfaG9vayA9IHRlbG5ldF9xdWVyeV9ob29rOworICBkZXByZWNhdGVkX3Jl YWRsaW5lX2hvb2sgPSB0ZWxuZXRfcmVhZGxpbmVfaG9vazsKKworICAvKiBD b25zb2xlIGludGVycCBpcyBwcm9wZXJseSBzZXQgdXAsIGV4ZWN1dGUgdGhl IGNvbW1hbmQuICAqLworICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0FM TCkKKyAgICB7CisgICAgICBleGVjdXRlX2NvbW1hbmQgKGxpbmUsIDEpOwor ICAgIH0KKworICAvKiBEbyBhbnkgYnJlYWtwb2ludC1yZWxhdGVkIHN0dWZm LiAgKi8KKyAgYnBzdGF0X2RvX2FjdGlvbnMgKCk7CisKKyAgLyogUmVzdG9y ZSB0aGUgaG9va3MuICAqLworICBkZXByZWNhdGVkX3F1ZXJ5X2hvb2sgPSBv bGRfcXVlcnlfaG9vazsKKyAgZGVwcmVjYXRlZF9yZWFkbGluZV9ob29rID0g b2xkX3JlYWRsaW5lX2hvb2s7CisKKyAgZ2RiX2ZsdXNoIChzdHJfZmlsZSk7 CisKKyAgaWYgKGUucmVhc29uIDwgMCkKKyAgICB7CisgICAgICByZXBseV9t c2cgKCJFcnJvcjogIik7CisgICAgICByZXBseV9tc2cgKGUubWVzc2FnZSk7 CisgICAgICByZXBseV9tc2cgKCJcclxuIik7CisgICAgfQorCisgIC8qIFNl bmQgdGhlIHJlcGx5IHRvIHRoZSBjbGllbnQuICAqLworICByZXN1bHQgPSB1 aV9maWxlX3hzdHJkdXAgKHN0cl9maWxlLCAmbGVuKTsKKworICBpZiAobGVu ID4gMCkKKyAgICB7CisgICAgICByZXBseV9tc2dfd2l0aF9jYXJyaWFnZV9y ZXR1cm4gKHJlc3VsdCk7CisgICAgfQorCisgIHhmcmVlIChyZXN1bHQpOwor CisgIC8qIENsZWFyIG91dHB1dCBidWZmZXIgYW5kIHJlc3RvcmUgR0RCIHNl dHRpbmdzLiAgKi8KKyAgdWlfZmlsZV9yZXdpbmQgKHN0cl9maWxlKTsKKyAg ZG9fY2xlYW51cHMgKGNsZWFudXApOworCisgIC8qIEdldCBiYWNrIHRvIE1J IGludGVycC4gICovCisgIGludGVycF9zZXQgKG9sZF9pbnRlcnAsIDApOwor CisgIGlmIChjbWRfZW5kX2hvb2spCisgICAgKCpjbWRfZW5kX2hvb2spICgm Y2xpZW50X2ZkKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg d2hlbiBkYXRhIGlzIHJlYWR5IG9uIHRlaCBzb2NrZXQgYW5kIGNhbGxzCisg ICB0aGUgY29ycmVzcG9uZGluZyBob29rLiAgKi8KK3N0YXRpYyB2b2lkCitn ZXRfaW5wdXRfZnJvbV90ZWxuZXQgKGludCBlcnIsIGdkYl9jbGllbnRfZGF0 YSBjbGllbnRfZGF0YSkKK3sKKyAgaWYgKGRhdGFfYXZhaWxhYmxlX2hvb2sp CisgICAgKCpkYXRhX2F2YWlsYWJsZV9ob29rKSAoJmNsaWVudF9mZCk7Cit9 CisKKy8qIEhhbmRsZXIgZm9yIHRoZSBsaXN0ZW5pbmcgc29ja2V0LgorICAg QWNjZXB0cyBjbGllbnQgY29ubmVjdGlvbiBhbmQgcmVnaXN0ZXJzIGl0IHdp dGggZXZlbnRfbG9vcC4gICovCisKK3N0YXRpYyB2b2lkCit0ZWxuZXRfYWNj ZXB0X2hhbmRsZXIoaW50IGVyciwgZ2RiX2NsaWVudF9kYXRhIGNsaWVudF9k YXRhKQoreworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50OworICBzb2Nr bGVuX3QgbGVuOworICBpbnQgcyA9IC0xOworCisgIGlmIChjbGllbnRfZmQg IT0gLTEpCisgICAgcmV0dXJuOyAgICAgIC8qIEFub3RoZXIgY2xpZW50IGlz IGFscmVhZHkgY29ubmVjdGVkLiAgKi8KKworICBzID0gYWNjZXB0ICh0ZWxu ZXRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZjbGllbnQsICZsZW4pOworICBp ZiAocyAhPSAtMSkKKyAgICB7CisgICAgICBjbGllbnRfZmQgPSBzOworCisg ICAgICBpZiAoaW5pdF9tb2RlX2hvb2spCisJeworCSAgaWYgKCgqaW5pdF9t b2RlX2hvb2spICgmY2xpZW50X2ZkKSA9PSAwKQorCSAgICB7CisJICAgICAg Y2xvc2Vfc29ja2V0X2Rlc2MgKCZ0ZWxuZXRfcyk7CisJICAgICAgcmV0dXJu OworCSAgICB9CisJfQorCisgICAgICAvKiBJbml0aWFsaXplIHRoZSBoaXN0 b3J5IGxpYnJhcnkgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQorICAgICAgICAg cHJldmlvdXMgY29tbWFuZCBpZiB1c2VyIGp1c3QgcHJlc3MgcmV0dXJuLiAg Ki8KKyAgICAgIHVzaW5nX2hpc3RvcnkgKCk7CisKKyAgICAgIC8qIFJlZ2lz dGVyIHRoZSBzb2NrZXQgd2l0aCBldmVudCBoYW5kbGVyLiAgKi8KKyAgICAg IGFkZF9maWxlX2hhbmRsZXIgKGNsaWVudF9mZCwgZ2V0X2lucHV0X2Zyb21f dGVsbmV0LCAwKTsKKworICAgICAgLyogUmVtb3RlIGNvbm5lY3Rpb24gaXMg c2V0IHVwLCBzaG93IHByb21wdC4gICovCisgICAgICBzZW5kIChjbGllbnRf ZmQsIG1pX3Byb21wdCwgc3RybGVuIChtaV9wcm9tcHQpLCAwKTsKKyAgICB9 CisKKyAgLyogSW4gYW55IGNhc2UsIGNsb3NlIHRoZSBsaXN0ZW5pbmcgc29j a2V0IGFzIHdlIG9ubHkKKyAgICAgYWxsb3cgb25lIGNvbm5lY3Rpb24uICAq LworICBjbG9zZV9zb2NrZXRfZGVzYyAoJnRlbG5ldF9zKTsKK30KKworc3Rh dGljIHZvaWQKK2Nsb3NlX3NvY2tldF9kZXNjIChpbnQgKmZkKQoreworICBp ZigoZmQgIT0gTlVMTCkgJiYgKCpmZCAhPSAtMSkgKQorICAgIHsKKyAgICAg IGRlbGV0ZV9maWxlX2hhbmRsZXIgKCpmZCk7CisgICAgICBjbG9zZSAoKmZk KTsKKyAgICAgICpmZCA9IC0xOworICAgIH0KK30KKworLyogVGhpcyBpcyB3 cmFwcGVyIG92ZXIgcmVjdi4gSWYgcmVjdiByZXR1cm5zIHNvbWUgZXJyb3Ig dGhlbiBpdCBjbG9zZXMKKyAgIHRoZSBzb2NrZXQuICAqLworCitzdGF0aWMg aW50CityZWNlaXZlIChpbnQgKmZkLCB2b2lkICpidWYsIHNpemVfdCBuLCBp bnQgZmxhZ3MpCit7CisgIGludCByZXQ7CisKKyAgaWYgKGZkID09IE5VTEwp CisgICAgcmV0dXJuIC0xOworCisgIHJldCA9IHJlY3YgKCpmZCwgYnVmLCBu LCBmbGFncyk7CisgIGlmIChyZXQgPCAxKQorICAgIHsKKyAgICAgIGNsb3Nl X3NvY2tldF9kZXNjIChmZCk7CisgICAgfQorICByZXR1cm4gcmV0OworfQor CisvKiBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gc2VuZCB0aGUgb3V0cHV0IHRv IGNsaWVudC4gICovCisKK3N0YXRpYyB2b2lkCityZXBseV9tc2cgKGNvbnN0 IGNoYXIgKm1zZykKK3sKKyAgY2hhciAqcmVzdWx0ID0gTlVMTDsKKyAgbG9u ZyBsZW47CisKKyAgaWYgKGNsaWVudF9mZCAhPSAtMSAmJiBtc2cgIT0gTlVM TCkKKyAgICB7CisgICAgICAvKiBmbHVzaCBhZGRpdGlvbmFsIG91dHB1dCBp ZiBhbnkgKi8KKyAgICAgIGlmIChzdHJfZmlsZSkKKwl7CisJICBnZGJfZmx1 c2ggKHN0cl9maWxlKTsKKwkgIHJlc3VsdCA9IHVpX2ZpbGVfeHN0cmR1cCAo c3RyX2ZpbGUsICZsZW4pOworCisJICBzZW5kIChjbGllbnRfZmQsIHJlc3Vs dCwgbGVuLCAwKTsKKworCSAgeGZyZWUgKHJlc3VsdCk7CisJICB1aV9maWxl X3Jld2luZCAoc3RyX2ZpbGUpOworCX0KKyAgICAgIHNlbmQgKGNsaWVudF9m ZCwgbXNnLCBzdHJsZW4gKG1zZyksIDApOworICAgIH0KK30KKworLyogU2Vu ZHMgdGhlIHJlcGx5IHRvIHJlbW90ZSBjbGllbnQgd2l0aCBleHRyYSAnXHIn IGNoYXJhY3RlcgorICAgZm9yIGV2ZXJ5ICdcbicgaW4gdGhlIG1zZyBzbyB0 aGF0IGl0IHdpbGwgc2hvdyB1cCBjb3JyZWN0bHkgb24KKyAgIHRlbG5ldCBj b25zb2xlLiAgKi8KK3N0YXRpYyB2b2lkCityZXBseV9tc2dfd2l0aF9jYXJy aWFnZV9yZXR1cm4gKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgaW50IGxlbjsK KyAgY2hhciBkYXRhOworICBpbnQgaSA9MDsKKworICBpZiAoY2xpZW50X2Zk ICE9IC0xICYmIG1zZyAhPSBOVUxMKQorICAgIHsKKyAgICAgIGxlbiA9IHN0 cmxlbiAobXNnKTsKKworICAgICAgZm9yKGk9MDsgaSA8IGxlbjsgaSsrKQor CXsKKwkgIHNlbmQgKGNsaWVudF9mZCwgJm1zZ1tpXSwgMSwgMCk7CisKKwkg IGlmKG1zZ1tpXSA9PSAnXG4nKQorCSAgICB7CisJICAgICAgZGF0YSA9ICdc cic7CisJICAgICAgc2VuZCAoY2xpZW50X2ZkLCAmZGF0YSwgMSwgMCk7CisJ ICAgIH0KKwl9CisgICAgfQorfQorCisvKiBHZXQgYSBsaW5lIGZyb20gdGhl IGNsaWVudCBhbmQgcHV0IHRoZSB0ZXJtaW5hdGluZyBOVUxMCisgICBhdCBj b3JyZWN0IHBsYWNlLiAgKi8KKworc3RhdGljIGludAorcmVjZWl2ZV9saW5l IChpbnQgKmZkLCBjaGFyKiBidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgaW50 IHNpemU7CisgIGludCBlbXB0eV9zdHJpbmcgPSAxOworICBpbnQgaTsKKwor ICAvKiBSZWFkIGEgbGluZSBmcm9tIHRoZSBzb2NrZXQuICAqLworICBzaXpl ID0gcmVjZWl2ZSAoZmQsIGJ1ZiwgKGJ1Zl9zaXplIC0gMSksIDApOworCisg IGlmIChzaXplIDw9IDApCisgICAgcmV0dXJuIHNpemU7CisKKyAgLyogUHV0 IGEgc3RyaW5nIHRlcm1pbmF0aW5nIE5VTEwgY2hhcmFjdGVyIGFmdGVyIHRo ZSBmaXJzdCBjaGFyYWN0ZXIKKyAgICAgdGhhdCBpcyBub3QgXG4gb3IgXHIu ICAqLworICBmb3IgKGkgPSAoc2l6ZSAtIDEpOyBpID49MDsgaS0tKQorICAg IHsKKyAgICAgIGlmICggKGJ1ZltpXSAhPSAnXG4nKSAmJiAoYnVmW2ldICE9 ICdccicpICkKKwl7CisJICBidWZbaSArIDFdID0gJ1wwJzsKKwkgIGVtcHR5 X3N0cmluZyA9IDA7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIFRo ZSBjbGllbnQgZGlkIG5vdCBzZW5kIGFueXRoaW5nIGV4Y2VwdCBcbiBhbmQg XHIsIHNvIGp1c3Qgc2VuZCBhbgorICAgICBlbXB0eSBzdHJpbmcgdG8gZXhl Y3V0ZV90ZWxuZXRfY29tbWFuZC4gICovCisgIGlmIChlbXB0eV9zdHJpbmcg PT0gMSkKKyAgICBidWZbMF0gPSAnXDAnOworCisgIHJldHVybiBzaXplOwor Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gd2UgbmVl ZCB0byB0YWtlIGEgeWVzIG9yIG5vIGFuc3dlcgorICAgZnJvbSB0aGUgdXNl ci4gICovCisKK3N0YXRpYyBjaGFyCitnZXRfYW5zd2VyX2hvb2tfbGluZSAo aW50ICpmZCkKK3sKKyAgaW50IHNpemU7CisgIGNoYXIgY21kW01BWF9DTURf TEVOR1RIXTsKKworICBzaXplID0gcmVjZWl2ZSAoZmQsICZjbWQsIE1BWF9D TURfTEVOR1RILCAwKTsKKworICBpZiAoc2l6ZSA8PSAwKQorICAgIHsKKyAg ICAgIHJldHVybiAwOyAvKiBJZiBlcnJvciByZXR1cm4gMCAqLworICAgIH0K KyAgcmV0dXJuIGNtZFswXTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgd2hlbiBHREIgbmVlZHMgdG8gZ2V0IHRoZSBsaXN0IG9mCisgICBj b21tYW5kcyB0byBydW4gb24gYnJlYWtwb2ludHMuIFNlZSAnY29tbWFuZHMn LiAgKi8KKworc3RhdGljIGNoYXIqCitnZXRfaW5wdXRfaG9va19saW5lIChp bnQqIGZkLCBjaGFyKiBwcm9tcHQpCit7CisgIGxvbmcgbGVuOworICBjaGFy IGJ1ZltNQVhfQ01EX0xFTkdUSCArIDFdOworCisgIHJlcGx5X21zZyAocHJv bXB0KTsKKworICBsZW4gPSByZWNlaXZlX2xpbmUgKCZjbGllbnRfZmQsIGJ1 ZiwgTUFYX0NNRF9MRU5HVEggKyAxKTsKKworICBpZiAobGVuIDw9IDApCisg ICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIHhzdHJkdXAgKGJ1Zik7Cit9 CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZGF0YSBpcyBh dmFpbGFibGUgb24gdGhlIHNvY2tldCB0byByZWFkLiAqLworCitzdGF0aWMg dm9pZAorZGF0YV9hdmFpbGFibGVfaG9va19saW5lIChpbnQgKmZkKQorewor ICBpbnQgc2l6ZTsKKyAgdW5zaWduZWQgY2hhciBidWZbTUFYX0NNRF9MRU5H VEgrMV07CisKKyAgc2l6ZSA9IHJlY2VpdmVfbGluZSAoJmNsaWVudF9mZCwg YnVmLCBNQVhfQ01EX0xFTkdUSCArIDEpOworCisgIGlmIChzaXplIDw9IDAp CisgICAgcmV0dXJuOworCisgIGV4ZWN1dGVfdGVsbmV0X2NvbW1hbmQgKGJ1 Zik7CisKKyAgLyogUHJpbnQgdGhlIHByb21wdC4gICovCisgIHNlbmQgKCpm ZCwgbWlfcHJvbXB0LCBzdHJsZW4gKG1pX3Byb21wdCksIDApOworfQorCisv KiBUaGlzIGZ1bmN0aW9uIHNldHVwIHRoZSBob29rcyB0aGF0IGFyZSBjYWxs ZWQgYXQgdmFyaW91cyBwb2ludHMuCisgICBUaGUgbW9kZSBwYXJhbWV0ZXIg Z2l2ZXMgdXMgZmxleGliaWxpdHkgdG8gc3VwcG9ydCBvdGhlciBtb2RlcyBp bgorICAgZnV0dXJlLiAqLworCitzdGF0aWMgdm9pZAorc2V0dXBfaG9va3Mg KGludCBtb2RlKQoreworICAvKiBDdXJyZW50bHksIHdlIGFyZSBzdXBwb3J0 aW5nIG9ubHkgb25lIG1vZGUgd2hlcmUgd2UgZ2V0IHRoZQorICAgICB3aG9s ZSBsaW5lIGZyb20gdGhlIGNsaWVudC4gU28gdGhlIF9saW5lIGluIHRoZSBl bmQuIFdlIGNhbgorICAgICAsIGluIGZ1dHVyZSwgc3VwcG9ydCBnZXR0aW5n IGlucHV0IGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuIFRoZQorICAgICBob29r IG1lY2hhbmlzbSBwcm92aWRlcyB1cyB0aGUgZmxleGliaWxpdHkuICAqLwor ICBpZiAobW9kZSA9PSAwKQorICAgIHsKKyAgICAgIGNtZF9zdGFydF9ob29r ID0gTlVMTDsKKworICAgICAgY21kX2VuZF9ob29rID0gTlVMTDsKKworICAg ICAgaW5pdF9tb2RlX2hvb2sgPSBOVUxMOworCisgICAgICBkYXRhX2F2YWls YWJsZV9ob29rID0gZGF0YV9hdmFpbGFibGVfaG9va19saW5lOworCisgICAg ICBzdG9wX3NlcnZpY2VfaG9vayA9IE5VTEw7CisKKyAgICAgIGdldF9hbnN3 ZXJfaG9vayA9IGdldF9hbnN3ZXJfaG9va19saW5lOworCisgICAgICBnZXRf aW5wdXRfaG9vayA9IGdldF9pbnB1dF9ob29rX2xpbmU7CisgICAgfQorfQor CkluZGV4OiBnZGIvdGVzdHN1aXRlL2dkYi5taS9taS10ZWxuZXQuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBnZGIvdGVzdHN1aXRlL2dk Yi5taS9taS10ZWxuZXQuYwpkaWZmIC1OIGdkYi90ZXN0c3VpdGUvZ2RiLm1p L21pLXRlbG5ldC5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow MCAtMDAwMAorKysgZ2RiL3Rlc3RzdWl0ZS9nZGIubWkvbWktdGVsbmV0LmMJ MTIgSnVsIDIwMTIgMTA6MzU6MTcgLTAwMDAKQEAgLTAsMCArMSw3MyBAQAor LyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1 Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK KyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9p bi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ CisKK2ludCB0ZXN0X2Nvbm5lY3QoaW50IHBvcnQpCit7CisJc3RydWN0IHNv Y2thZGRyX2luIGNsaWVudDsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJaW50 IHRlbG5ldF9zOworCWludCByZXN1bHQgPSAwOworCWludCBlcnI7CisKKwlp ZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikpICE9IDApCisJ eworCQltZW1zZXQgKChjaGFyICopJmNsaWVudCwgMCwgc2l6ZW9mIChjbGll bnQpKTsKKwkJY2xpZW50LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQljbGll bnQuc2luX3BvcnQgPSBodG9ucyAocG9ydCk7CisJCWNsaWVudC5zaW5fYWRk ci5zX2FkZHIgPSAoKHN0cnVjdCBpbl9hZGRyICopKGhwLT5oX2FkZHIpKS0+ c19hZGRyOworCisJCXRlbG5ldF9zID0gc29ja2V0IChBRl9JTkVULCBTT0NL X1NUUkVBTSwgSVBQUk9UT19UQ1ApOworCQlpZiAodGVsbmV0X3MgIT0gLTEp CisJCXsKKwkJCS8qIGNvbm5lY3QgdG8gUE9SVCBvbiBIT1NUICovCisJCQll cnIgPSBjb25uZWN0KHRlbG5ldF9zLCAoc3RydWN0IHNvY2thZGRyICopICAm Y2xpZW50LCBzaXplb2YoY2xpZW50KSk7CisJCQlpZiAoZXJyID09IC0xKQor CQkJeworCQkJCXJlc3VsdCA9IDA7ICAvKiBDb25uZWN0LWZhaWwtYnJlYWtw b2ludCAqLworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJlc3VsdCA9IDE7 IC8qIENvbm5lY3Qtc3VjY2VlZC1icmVha3BvaW50ICovCisJCQl9CisJCQlj bG9zZSh0ZWxuZXRfcyk7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30K KworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworCWlu dCBwb3J0OworCWludCByZXN1bHQgPSAxOworCisJaWYgKGFyZ2MgPT0gMikK Kwl7CisJCXBvcnQgPSBhdG9pIChhcmd2WzFdKTsKKworCQlpZiAocG9ydCA+ IDApCisJCXsKKwkJCXJlc3VsdCA9IHRlc3RfY29ubmVjdCAocG9ydCk7CisJ CX0KKwl9CisJcmV0dXJuIHJlc3VsdDsgLyogcHJvZ3JhbS1lbmQtYnJlYWtw b2ludCAqLworfQpJbmRleDogZ2RiL3Rlc3RzdWl0ZS9nZGIubWkvbWktdGVs bmV0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBnZGIv dGVzdHN1aXRlL2dkYi5taS9taS10ZWxuZXQuZXhwCmRpZmYgLU4gZ2RiL3Rl c3RzdWl0ZS9nZGIubWkvbWktdGVsbmV0LmV4cAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGdkYi90ZXN0c3VpdGUvZ2Ri Lm1pL21pLXRlbG5ldC5leHAJMTIgSnVsIDIwMTIgMTA6MzU6MTcgLTAwMDAK QEAgLTAsMCArMSwxMDkgQEAKKyMgQ29weXJpZ2h0IDE5OTktMjAwMiwgMjAw NC0yMDA1LCAyMDA3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAor IyBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRlc3QgLXN0YXJ0LXRl bG5ldC1zZXJ2aWNlIGFuZCAtc3RvcC10ZWxuZXQtc2VydmljZSBjb21hbmRz LgorIworCitsb2FkX2xpYiBtaS1zdXBwb3J0LmV4cAorc2V0IE1JRkxBR1Mg Ii1pPW1pMiIKK3NldCBQT1JUMSA4MDA1CitzZXQgUE9SVDIgODAwNgorCisj IEV4ZWN1dGVzIHRoZSB0ZXN0IGZvciB0ZWxuZXQgc2VydmljZS4gCisjIHBv cnQgaXMgdGhlIHBvcnQgb24gd2hpY2ggdGVsbmV0IHNlcnZpY2Ugd2lsbCBs aXN0ZW4uCisjIGJwX2xpbmUgaXMgdGhlIGxpbmUgaW4gdGVzdCBDIGZpbGUg d2hlcmUgd2Ugd2FudCB0byBoaXQgdGhlCisjIGJyZWFrcG9pbnQuCisjIG1l c3NhZ2UgaXMgdGhlIG1lc3NhZ2UgdG8gcHJpbnQgZm9yIHRoaXMgdGVzdC4K K3Byb2MgY29ubmVjdF90ZXN0IHtwb3J0IGJwX2xpbmUgbWVzc2FnZX0gewor ICAgIGdsb2JhbCBzcmNmaWxlCisgICAgZ2xvYmFsIGNvbm5lY3Rfc3VjY2Vl ZF9icmVhaworICAgIGdsb2JhbCBjb25uZWN0X2ZhaWxfYnJlYWsKKyAgICBn bG9iYWwgcHJvZ3JhbV9lbmRfYnJlYWtwb2ludAorICAgIAorICAgICMgc2V0 IHRoZSBhcmd1bWVudCBvZiB0aGUgdGVzdCBwcm9ncmFtCisgICAgbWlfZ2Ri X3Rlc3QgIi1pbnRlcnByZXRlci1leGVjIGNvbnNvbGUgXCJzZXQgYXJncyAk cG9ydFwiIiBcCisgICAgICB7XF5kb25lfSBcCisgICAgICAiLWludGVycHJl dGVyLWV4ZWMgY29uc29sZSBcInNldCBhcmdzICRwb3J0XCIiCisKKyAgICBt aV9jcmVhdGVfYnJlYWtwb2ludCAiJHtzcmNmaWxlfToke2Nvbm5lY3Rfc3Vj Y2VlZF9icmVha30iIFwKKyAgICAyIC4qIHRlc3RfY29ubmVjdCAiLioke3Ny Y2ZpbGV9IiAke2Nvbm5lY3Rfc3VjY2VlZF9icmVha30gLiogIkNvbm5lY3Rp b24gU3VjY2VlZCBicmVha3BvaW50LiIKKyAgICAKKyAgICBtaV9jcmVhdGVf YnJlYWtwb2ludCAiJHtzcmNmaWxlfToke2Nvbm5lY3RfZmFpbF9icmVha30i IFwKKyAgICAzIC4qIHRlc3RfY29ubmVjdCAiLioke3NyY2ZpbGV9IiAke2Nv bm5lY3RfZmFpbF9icmVha30gLiogIkNvbm5lY3Rpb24gZmFpbCBicmVha3Bv aW50LiIKKyAgICAKKyAgICBtaV9jcmVhdGVfYnJlYWtwb2ludCAiJHtzcmNm aWxlfToke3Byb2dyYW1fZW5kX2JyZWFrcG9pbnR9IiBcCisgICAgNCAuKiBt YWluICIuKiR7c3JjZmlsZX0iICR7cHJvZ3JhbV9lbmRfYnJlYWtwb2ludH0g LiogIlByb2dyYW0gZXhpdC4iCisgICAgCisgICAgbWlfcnVuX2NtZCAgICAK KyAgICAKKyAgICBtaV9leHBlY3Rfc3RvcCAiYnJlYWtwb2ludC1oaXQiICJ0 ZXN0X2Nvbm5lY3QiICIuKiIgIi4qbWktdGVsbmV0LmMiICIkYnBfbGluZSIg XAorICAgICAgeyIiICJkaXNwPVwia2VlcFwiIiB9ICRtZXNzYWdlICAgIAor fQorCitnZGJfZXhpdAoraWYgW21pX2dkYl9zdGFydF0geworICAgIGNvbnRp bnVlCit9CisKK3NldCB0ZXN0ZmlsZSAibWktdGVsbmV0Igorc2V0IHNyY2Zp bGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3Vi ZGlyfS9taS10ZWxuZXQKK2lmICB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9 LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJs ZSB7ZGVidWd9XSAhPSAiIiB9IHsKKyAgICAgdW50ZXN0ZWQgImNvdWxkIG5v dCBjb21waWxlIHRlc3QgcHJvZ3JhbSIKKyAgICAgcmV0dXJuIC0xCit9CisK K21pX2RlbGV0ZV9icmVha3BvaW50cworbWlfZ2RiX3JlaW5pdGlhbGl6ZV9k aXIgJHNyY2Rpci8kc3ViZGlyCittaV9nZGJfbG9hZCAke2JpbmZpbGV9CisK K21pX3J1bl90b19tYWluCisKK3NldCBjb25uZWN0X3N1Y2NlZWRfYnJlYWsg ICAgIFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJDb25uZWN0LXN1Y2NlZWQtYnJl YWtwb2ludCJdCitzZXQgY29ubmVjdF9mYWlsX2JyZWFrICAgICAgICBbZ2Ri X2dldF9saW5lX251bWJlciAiQ29ubmVjdC1mYWlsLWJyZWFrcG9pbnQiXQor c2V0IHByb2dyYW1fZW5kX2JyZWFrcG9pbnQgICAgW2dkYl9nZXRfbGluZV9u dW1iZXIgInByb2dyYW0tZW5kLWJyZWFrcG9pbnQiXQorCisjIFNlbmQgdGhl IGNvbW1hbmQgdG8gc3RhcnQgdGhlIHRlbG5ldCBzZXJ2aWNlCittaV9nZGJf dGVzdCAiLXN0YXJ0LXRlbG5ldC1zZXJ2aWNlICRQT1JUMSIgIlxcXF5kb25l IiAiU3RhcnQgVGVsbmV0IFNlcnZpY2UiCisKKyMgQ2hlY2sgaWYgdGVzdCBw cm9ncmFtIGNhbiBjb25uZWN0IHRvIHRoZSBwb3J0LgorY29ubmVjdF90ZXN0 ICRQT1JUMSAkY29ubmVjdF9zdWNjZWVkX2JyZWFrICJDbGllbnQgY2FuIGNv bm5lY3Qgd2hlbiBwb3J0IGlzIG9wZW4uIgorCisjIFJlLXJ1biB0aGUgc2Ft ZSB0ZXN0IGJ1dCBhZnRlciBjbG9zaW5nIHRoZSB0ZWxuZXQgc2VydmljZS4g VGVzdCBpZiBjbGllbnQKKyMgY2FuIGNvbm5lY3QuCittaV9nZGJfZXhpdAor aWYgW21pX2dkYl9zdGFydF0geworICAgIGNvbnRpbnVlCit9CisKK21pX2Rl bGV0ZV9icmVha3BvaW50cworbWlfZ2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNy Y2Rpci8kc3ViZGlyCittaV9nZGJfbG9hZCAke2JpbmZpbGV9CisKK21pX3J1 bl90b19tYWluCisKKyMgT3BlbiB0aGUgdGVsbmV0IHNlcnZpY2UgYW5kIHRo ZW4gY2xvc2UgaXQuCittaV9nZGJfdGVzdCAiLXN0YXJ0LXRlbG5ldC1zZXJ2 aWNlICRQT1JUMiIgIlxcXF5kb25lIiAiU3RhcnQgVGVsbmV0IFNlcnZpY2Ui CisKK21pX2dkYl90ZXN0ICItc3RvcC10ZWxuZXQtc2VydmljZSIgIlxcXF5k b25lIiAiU3RvcCBUZWxuZXQgU2VydmljZSIKKworIyBDbGllbnQgcHJvZ3Jh bSBzaG91bGQgbm90IGJlIGFibGUgdG8gY29ubmVjdCBub3cuCitjb25uZWN0 X3Rlc3QgJFBPUlQyICRjb25uZWN0X2ZhaWxfYnJlYWsgIkNsaWVudCBjYW5u b3QgY29ubmVjdCB3aGVuIHBvcnQgaXMgY2xvc2VkLiIKKworbWlfZ2RiX2V4 aXQKKworcmV0dXJuIDAKKwo= --_002_EB3B29AD43CA924DA27099BC8519237629DF36EUMBX03mgcmentorg_--