From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13712 invoked by alias); 6 Jun 2003 00:35:10 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 13531 invoked from network); 6 Jun 2003 00:35:06 -0000 Received: from unknown (HELO planck.amplepower.com) (216.39.162.139) by sources.redhat.com with SMTP; 6 Jun 2003 00:35:06 -0000 Received: from [192.168.8.30] (helo=knuth.amplepower.com ident=roth) by planck.amplepower.com with esmtp (Exim 3.36 #1 (Debian)) id 19O52q-0004oN-00 for ; Thu, 05 Jun 2003 17:25:24 -0700 Date: Fri, 06 Jun 2003 00:35:00 -0000 From: "Theodore A. Roth" X-X-Sender: roth@knuth.amplepower.com To: gdb@sources.redhat.com Subject: avr and frame unwinding Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1463804408-104843186-1054859453=:29024" Content-ID: X-SW-Source: 2003-06/txt/msg00079.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1463804408-104843186-1054859453=:29024 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Content-length: 2295 Hi, I've pretty much hit a wall on this, so I will have to ask for help now. The attached is what I have so far in my attempt to frame-ify avr-tdep.c. As it stands, things kinda work. I can 'step' around a program fine. Things go wrong as soon as I try to 'next' over a function call, gdb goes into an infinite loop. If I 'step' down into a function called from main(), a backtrace never gets me back to main. Here's a dump of the backtrace output (I'll forego the infinite loop output to save some bandwidth 8-): func1 () at tst.c:23 23 struct cc var = {0}; /* This uses memset()! */ (gdb) bt #0 func1 () at tst.c:23 { get_prev_frame (this_frame=0) { frame_id_p (l={stack=0x8010f9,code=0xd0}) -> 1 } { frame_register_unwind (frame=0,regnum="PC",...) { frame_register_unwind (frame=-1,regnum="PC",...) -> *optimizedp=0 *lvalp=2 *addrp=0x23 *bufferp=[fffffff0000000] } -> *optimizedp=0 *lvalp=2 *addrp=0x23 *bufferp=[fffffff0000000] } { frame_pc_unwind (this_frame=0) -> 0xf0 } -> {level=1,type=UNKNOWN_FRAME,unwind=,pc=0xf0,id=,func=} } #1 0x000000f0 in func1 () at tst.c:22 { get_prev_frame (this_frame=1) { get_frame_id (fi=1) { frame_func_unwind (fi=0) -> 0xd0 } Sending packet: $md0,27#96...Ack Packet received: cf92df92ef92ff920f931f93cf93df93cdb7deb726970fb6f894debf0fbecdbf86e0fe01319611 Sending packet: $mf7,11#98...Ack Packet received: 928a95e9f719821a82ed80fe80cc24dd24 { frame_register_unwind (frame=0,regnum="r28",...) Sending packet: $m801100,1#f4...Ack Packet received: 00 -> *optimizedp=0 *lvalp=1 *addrp=0x801100 *bufferp=[00] } { frame_register_unwind (frame=0,regnum="r29",...) Sending packet: $m801101,1#f5...Ack Packet received: 00 -> *optimizedp=0 *lvalp=1 *addrp=0x801101 *bufferp=[00] } { frame_id_eq (l={stack=0x8010f9,code=0xd0},r={stack=0x80000e,code=0xd0}) -> 0 } -> {stack=0x80000e,code=0xd0} } { frame_id_p (l={stack=0x80000e,code=0xd0}) -> 1 } { frame_id_inner (l={stack=0x80000e,code=0xd0},r={stack=0x8010f9,code=0xd0}) -> 1 } This frame inner-to next frame (corrupt stack?) (gdb) I'm pretty confused as to how frames are getting chained up and unwound. I suspose that I'm not thinking about the the SP in the proper manner in relation to the frames. Could some kind soul lend me some insight? Thanks. Ted Roth ---1463804408-104843186-1054859453=:29024 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="avr-tdep.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="avr-tdep.c" Content-length: 52538 LyogVGFyZ2V0LWRlcGVuZGVudCBjb2RlIGZvciBBdG1lbCBBVlIsIGZvciBH REIuDQogICBDb3B5cmlnaHQgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAw MCwgMjAwMSwgMjAwMiwgMjAwMw0KICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuDQoNCiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4NCg0K ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5DQogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCg0KICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQ0KICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCg0KICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlDQogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UgLSBTdWl0ZSAzMzAsDQogICBCb3N0b24sIE1BIDAyMTExLTEzMDcs IFVTQS4gICovDQoNCi8qIENvbnRyaWJ1dGVkIGJ5IFRoZW9kb3JlIEEuIFJv dGgsIHRyb3RoQG9wZW5hdnIub3JnICovDQoNCi8qIFBvcnRpb25zIG9mIHRo aXMgZmlsZSB3ZXJlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIGdkYi00LjE4 IHBhdGNoIGRldmVsb3BlZA0KICAgYnkgRGVuaXMgQ2hlcnR5a292LCBkZW5p c2NAb3ZlcnRhLnJ1ICovDQoNCiNpbmNsdWRlICJkZWZzLmgiDQojaW5jbHVk ZSAiZnJhbWUuaCINCiNpbmNsdWRlICJmcmFtZS11bndpbmQuaCINCiNpbmNs dWRlICJmcmFtZS1iYXNlLmgiDQojaW5jbHVkZSAiZ2RiY21kLmgiDQojaW5j bHVkZSAiZ2RiY29yZS5oIg0KI2luY2x1ZGUgImluZmVyaW9yLmgiDQojaW5j bHVkZSAic3ltZmlsZS5oIg0KI2luY2x1ZGUgImFyY2gtdXRpbHMuaCINCiNp bmNsdWRlICJyZWdjYWNoZS5oIg0KI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIN Cg0KLyogQVZSIEJhY2tncm91bmQ6DQoNCiAgIChBVlIgbWljcm9zIGFyZSBw dXJlIEhhcnZhcmQgQXJjaGl0ZWN0dXJlIHByb2Nlc3NvcnMuKQ0KDQogICBU aGUgQVZSIGZhbWlseSBvZiBtaWNyb2NvbnRyb2xsZXJzIGhhdmUgdGhyZWUg ZGlzdGluY3RseSBkaWZmZXJlbnQgbWVtb3J5DQogICBzcGFjZXM6IGZsYXNo LCBzcmFtIGFuZCBlZXByb20uIFRoZSBmbGFzaCBpcyAxNiBiaXRzIHdpZGUg YW5kIGlzIHVzZWQgZm9yDQogICB0aGUgbW9zdCBwYXJ0IHRvIHN0b3JlIHBy b2dyYW0gaW5zdHJ1Y3Rpb25zLiBUaGUgc3JhbSBpcyA4IGJpdHMgd2lkZSBh bmQgaXMNCiAgIHVzZWQgZm9yIHRoZSBzdGFjayBhbmQgdGhlIGhlYXAuIFNv bWUgZGV2aWNlcyBsYWNrIHNyYW0gYW5kIHNvbWUgY2FuIGhhdmUNCiAgIGFu IGFkZGl0aW9uYWwgZXh0ZXJuYWwgc3JhbSBhZGRlZCBvbiBhcyBhIHBlcmlw aGVyYWwuDQoNCiAgIFRoZSBlZXByb20gaXMgOCBiaXRzIHdpZGUgYW5kIGlz IHVzZWQgdG8gc3RvcmUgZGF0YSB3aGVuIHRoZSBkZXZpY2UgaXMNCiAgIHBv d2VyZWQgZG93bi4gRWVwcm9tIGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxl LCBpdCBjYW4gb25seSBiZSBhY2Nlc3NlZA0KICAgdmlhIGlvLXJlZ2lzdGVy cyB1c2luZyBhIHNwZWNpYWwgYWxnb3JpdGhtLiBBY2Nlc3NpbmcgZWVwcm9t IHZpYSBnZGIncw0KICAgcmVtb3RlIHNlcmlhbCBwcm90b2NvbCAoJ20nIG9y ICdNJyBwYWNrZXRzKSBsb29rcyBkaWZmaWN1bHQgdG8gZG8gYW5kIGlzDQog ICBub3QgaW5jbHVkZWQgYXQgdGhpcyB0aW1lLg0KDQogICBbVGhlIGVlcHJv bSBjb3VsZCBiZSByZWFkIG1hbnVhbGx5IHZpYSBgYHgvYiA8ZWFkZHIgKyBB VlJfRU1FTV9TVEFSVD4nJyBvcg0KICAgd3JpdHRlbiB1c2luZyBgYHNldCB7 dW5zaWduZWQgY2hhcn08ZWFkZHIgKyBBVlJfRU1FTV9TVEFSVD4nJy4gIEZv ciB0aGlzIHRvDQogICB3b3JrLCB0aGUgcmVtb3RlIHRhcmdldCBtdXN0IGJl IGFibGUgdG8gaGFuZGxlIGVlcHJvbSBhY2Nlc3NlcyBhbmQgcGVyZm9ybQ0K ICAgdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24uXQ0KDQogICBBbGwgdGhyZWUg bWVtb3J5IHNwYWNlcyBoYXZlIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWdpbm5p bmcgYXQgMHgwLiBJbg0KICAgYWRkaXRpb24sIHRoZSBmbGFzaCBpcyBhZGRy ZXNzZWQgYnkgZ2NjL2JpbnV0aWxzL2dkYiB3aXRoIHJlc3BlY3QgdG8gOCBi aXQNCiAgIGJ5dGVzIGluc3RlYWQgb2YgdGhlIDE2IGJpdCB3aWRlIHdvcmRz IHVzZWQgYnkgdGhlIHJlYWwgZGV2aWNlIGZvciB0aGUNCiAgIFByb2dyYW0g Q291bnRlci4NCg0KICAgSW4gb3JkZXIgZm9yIHJlbW90ZSB0YXJnZXRzIHRv IHdvcmsgY29ycmVjdGx5LCBleHRyYSBiaXRzIG11c3QgYmUgYWRkZWQgdG8N CiAgIGFkZHJlc3NlcyBiZWZvcmUgdGhleSBhcmUgc2VuZCB0byB0aGUgdGFy Z2V0IG9yIHJlY2VpdmVkIGZyb20gdGhlIHRhcmdldA0KICAgdmlhIHRoZSBy ZW1vdGUgc2VyaWFsIHByb3RvY29sLiBUaGUgZXh0cmEgYml0cyBhcmUgdGhl IE1TQnMgYW5kIGFyZSB1c2VkIHRvDQogICBkZWNvZGUgd2hpY2ggbWVtb3J5 IHNwYWNlIHRoZSBhZGRyZXNzIGlzIHJlZmVycmluZyB0by4gKi8NCg0KI3Vu ZGVmIFhNQUxMT0MNCiNkZWZpbmUgWE1BTExPQyhUWVBFKSAoKFRZUEUqKSB4 bWFsbG9jIChzaXplb2YgKFRZUEUpKSkNCg0KI3VuZGVmIEVYVFJBQ1RfSU5T Tg0KI2RlZmluZSBFWFRSQUNUX0lOU04oYWRkcikgZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyKGFkZHIsMikNCg0KLyogQ29uc3RhbnRzOiBwcmVmaXhlZCB3 aXRoIEFWUl8gdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzICovDQoNCmVu dW0NCnsNCiAgQVZSX1JFR19XID0gMjQsDQogIEFWUl9SRUdfWCA9IDI2LA0K ICBBVlJfUkVHX1kgPSAyOCwNCiAgQVZSX0ZQX1JFR05VTSA9IDI4LA0KICBB VlJfUkVHX1ogPSAzMCwNCg0KICBBVlJfU1JFR19SRUdOVU0gPSAzMiwNCiAg QVZSX1NQX1JFR05VTSA9IDMzLA0KICBBVlJfUENfUkVHTlVNID0gMzQsDQoN CiAgQVZSX05VTV9SRUdTID0gMzIgKyAxIC8qU1JFRyovICsgMSAvKlNQKi8g KyAxIC8qUEMqLywNCiAgQVZSX05VTV9SRUdfQllURVMgPSAzMiArIDEgLypT UkVHKi8gKyAyIC8qU1AqLyArIDQgLypQQyovLA0KDQogIEFWUl9QQ19SRUdf SU5ERVggPSAzNSwJLyogaW5kZXggaW50byBhcnJheSBvZiByZWdpc3RlcnMg Ki8NCg0KICBBVlJfTUFYX1BST0xPR1VFX1NJWkUgPSA1NiwJLyogYnl0ZXMg Ki8NCg0KICAvKiBDb3VudCBvZiBwdXNoZWQgcmVnaXN0ZXJzLiBGcm9tIHIy IHRvIHIxNyAoaW5jbHVzaXZlbHkpLCByMjgsIHIyOSAqLw0KICBBVlJfTUFY X1BVU0hFUyA9IDE4LA0KDQogIC8qIE51bWJlciBvZiB0aGUgbGFzdCBwdXNo ZWQgcmVnaXN0ZXIuIHIxNyBmb3IgY3VycmVudCBhdnItZ2NjICovDQogIEFW Ul9MQVNUX1BVU0hFRF9SRUdOVU0gPSAxNywNCg0KICAvKiBGSVhNRTogVFJv dGgvMjAwMi0wMS0/PzogQ2FuIHdlIHNoaWZ0IGFsbCB0aGVzZSBtZW1vcnkg bWFza3MgbGVmdCA4DQogICAgIGJpdHM/IERvIHRoZXNlIGhhdmUgdG8gbWF0 Y2ggdGhlIGJmZCB2bWEgdmFsdWVzPy4gSXQgc3VyZSB3b3VsZCBtYWtlDQog ICAgIHRoaW5ncyBlYXNpZXIgaW4gdGhlIGZ1dHVyZSBpZiB0aGV5IGRpZG4n dCBuZWVkIHRvIG1hdGNoLg0KDQogICAgIE5vdGU6IEkgY2hvc2UgdGhlc2Ug dmFsdWVzIHNvIGFzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBiZmQgdm1hDQog ICAgIGFkZHJlc3Nlcy4NCg0KICAgICBUUm90aC8yMDAyLTA0LTA4OiBUaGVy ZSBpcyBhbHJlYWR5IGEgY29uZmxpY3Qgd2l0aCB2ZXJ5IGxhcmdlIHByb2dy YW1zDQogICAgIGluIHRoZSBtZWdhMTI4LiBUaGUgbWVnYTEyOCBoYXMgMTI4 SyBpbnN0cnVjdGlvbiBieXRlcyAoNjRLIHdvcmRzKSwNCiAgICAgdGh1cyB0 aGUgTW9zdCBTaWduaWZpY2FudCBCaXQgaXMgMHgxMDAwMCB3aGljaCBnZXRz IG1hc2tlZCBvZmYgbXkNCiAgICAgQVZSX01FTV9NQVNLLg0KDQogICAgIFRo ZSBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYgd2hlbiB0cnlpbmcgdG8gc2V0 IGEgYnJlYWtwb2ludCBpbiBhDQogICAgIGZ1bmN0aW9uIHdoaWNoIHJlc2lk ZXMgaW4gdGhlIHVwcGVyIGhhbGYgb2YgdGhlIGluc3RydWN0aW9uIHNwYWNl IGFuZA0KICAgICB0aHVzIHJlcXVpcmVzIGEgMTctYml0IGFkZHJlc3MuDQoN CiAgICAgRm9yIG5vdywgSSd2ZSBqdXN0IHJlbW92ZWQgdGhlIEVFUFJPTSBt YXNrIGFuZCBjaGFuZ2VkIEFWUl9NRU1fTUFTSw0KICAgICBmcm9tIDB4MDBm ZjAwMDAgdG8gMHgwMGYwMDAwMC4gRWVwcm9tIGlzIG5vdCBhY2Nlc3NpYmxl IGZyb20gZ2RiIHlldCwNCiAgICAgYnV0IGNvdWxkIGJlIGZvciBzb21lIHJl bW90ZSB0YXJnZXRzIGJ5IGp1c3QgYWRkaW5nIHRoZSBjb3JyZWN0IG9mZnNl dA0KICAgICB0byB0aGUgYWRkcmVzcyBhbmQgbGV0dGluZyB0aGUgcmVtb3Rl IHRhcmdldCBoYW5kbGUgdGhlIGxvdy1sZXZlbA0KICAgICBkZXRhaWxzIG9m IGFjdHVhbGx5IGFjY2Vzc2luZyB0aGUgZWVwcm9tLiAqLw0KDQogIEFWUl9J TUVNX1NUQVJUID0gMHgwMDAwMDAwMCwJLyogSU5TTiBtZW1vcnkgKi8NCiAg QVZSX1NNRU1fU1RBUlQgPSAweDAwODAwMDAwLAkvKiBTUkFNIG1lbW9yeSAq Lw0KI2lmIDENCiAgLyogTm8gZWVwcm9tIG1hc2sgZGVmaW5lZCAqLw0KICBB VlJfTUVNX01BU0sgPSAweDAwZjAwMDAwLAkvKiBtYXNrIHRvIGRldGVybWlu ZSBtZW1vcnkgc3BhY2UgKi8NCiNlbHNlDQogIEFWUl9FTUVNX1NUQVJUID0g MHgwMDgxMDAwMCwJLyogRUVQUk9NIG1lbW9yeSAqLw0KICBBVlJfTUVNX01B U0sgPSAweDAwZmYwMDAwLAkvKiBtYXNrIHRvIGRldGVybWluZSBtZW1vcnkg c3BhY2UgKi8NCiNlbmRpZg0KfTsNCg0KLyogUHJvbG9ndWUgdHlwZXM6DQoN CiAgIE5PUk1BTCBhbmQgQ0FMTCBhcmUgdGhlIHR5cGljYWwgdHlwZXMgKGlu dGVyY2hhbmdlYWJsZSB3aXRoIHRoZQ0KICAgLW1jYWxsLXByb2xvZ3VlcyBn Y2Mgb3B0aW9uLg0KDQogICBNQUlOLCBJTlRSIGFuZCBTSUcgYXJlIGludmFy aWFudCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gICovDQoNCmVudW0gew0KICAg IEFWUl9QUk9MT0dVRV9OT05FLCAgICAgICAgICAgICAgLyogTm8gcHJvbG9n dWUgKi8NCiAgICBBVlJfUFJPTE9HVUVfTk9STUFMLA0KICAgIEFWUl9QUk9M T0dVRV9DQUxMLCAgICAgICAgICAgICAgLyogLW1jYWxsLXByb2xvZ3VlcyAq Lw0KICAgIEFWUl9QUk9MT0dVRV9NQUlOLA0KICAgIEFWUl9QUk9MT0dVRV9J TlRSLCAgICAgICAgICAgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKi8NCiAg ICBBVlJfUFJPTE9HVUVfU0lHLCAgICAgICAgICAgICAgIC8qIHNpZ25hbCBo YW5kbGVyICovDQp9Ow0KDQpzdHJ1Y3QgZ2RiYXJjaF90ZGVwDQp7DQogIC8q IEZJWE1FOiBUUm90aDogaXMgdGhlcmUgYW55dGhpbmcgdG8gcHV0IGhlcmU/ ICovDQogIGludCBmb287DQp9Ow0KDQovKiBBbnkgZnVuY3Rpb24gd2l0aCBh IGZyYW1lIGxvb2tzIGxpa2UgdGhpcw0KICAgLi4uLi4uLiAgICA8LVNQIFBP SU5UUyBIRVJFDQogICBMT0NBTFMxICAgIDwtRlAgUE9JTlRTIEhFUkUNCiAg IExPQ0FMUzANCiAgIFNBVkVEIEZQDQogICBTQVZFRCBSMw0KICAgU0FWRUQg UjINCiAgIFJFVCBQQw0KICAgRklSU1QgQVJHDQogICBTRUNPTkQgQVJHICov DQoNCnN0cnVjdCBhdnJfdW53aW5kX2NhY2hlDQp7DQovKiAgIENPUkVfQURE UiByZXR1cm5fcGM7ICovDQogIC8qIFRoZSBwcmV2aW91cyBmcmFtZSdzIGlu bmVyIG1vc3Qgc3RhY2sgYWRkcmVzcy4gIFVzZWQgYXMgdGhpcw0KICAgICBm cmFtZSBJRCdzIHN0YWNrX2FkZHIuICAqLw0KICBDT1JFX0FERFIgcHJldl9z cDsNCiAgLyogVGhlIGZyYW1lJ3MgYmFzZSwgb3B0aW9uYWxseSB1c2VkIGJ5 IHRoZSBoaWdoLWxldmVsIGRlYnVnIGluZm8uICAqLw0KICBDT1JFX0FERFIg YmFzZTsNCiAgaW50IHNpemU7DQogIENPUkVfQUREUiAqc2F2ZWRfcmVnczsN CiAgLyogSG93IGZhciB0aGUgU1AgaGFzIGJlZW4gb2Zmc2V0IGZyb20gdGhl IHN0YXJ0IG9mIHRoZSBzdGFjayBmcmFtZSAoYXMNCiAgICAgZGVmaW5lZCBi eSB0aGUgcHJldmlvdXMgZnJhbWUncyBzdGFjayBwb2ludGVyKS4gICovDQog IExPTkdFU1Qgc3Bfb2Zmc2V0Ow0KICBpbnQgcHJvbG9ndWVfdHlwZTsNCiAg dm9pZCAqKnJlZ3M7DQp9Ow0KDQovKiBMb29rdXAgdGhlIG5hbWUgb2YgYSBy ZWdpc3RlciBnaXZlbiBpdCdzIG51bWJlci4gKi8NCg0Kc3RhdGljIGNvbnN0 IGNoYXIgKg0KYXZyX3JlZ2lzdGVyX25hbWUgKGludCByZWdudW0pDQp7DQog IHN0YXRpYyBjaGFyICpyZWdpc3Rlcl9uYW1lc1tdID0gew0KICAgICJyMCIs ICJyMSIsICJyMiIsICJyMyIsICJyNCIsICJyNSIsICJyNiIsICJyNyIsDQog ICAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIsICJy MTQiLCAicjE1IiwNCiAgICAicjE2IiwgInIxNyIsICJyMTgiLCAicjE5Iiwg InIyMCIsICJyMjEiLCAicjIyIiwgInIyMyIsDQogICAgInIyNCIsICJyMjUi LCAicjI2IiwgInIyNyIsICJyMjgiLCAicjI5IiwgInIzMCIsICJyMzEiLA0K ICAgICJTUkVHIiwgIlNQIiwgIlBDIg0KICB9Ow0KDQogIGlmIChyZWdudW0g PCAwKQ0KICAgIHJldHVybiBOVUxMOw0KICBpZiAocmVnbnVtID49IChzaXpl b2YgKHJlZ2lzdGVyX25hbWVzKSAvIHNpemVvZiAoKnJlZ2lzdGVyX25hbWVz KSkpDQogICAgcmV0dXJuIE5VTEw7DQogIHJldHVybiByZWdpc3Rlcl9uYW1l c1tyZWdudW1dOw0KfQ0KDQovKiBSZXR1cm4gdGhlIEdEQiB0eXBlIG9iamVj dCBmb3IgdGhlICJzdGFuZGFyZCIgZGF0YSB0eXBlDQogICBvZiBkYXRhIGlu IHJlZ2lzdGVyIE4uICAqLw0KDQpzdGF0aWMgc3RydWN0IHR5cGUgKg0KYXZy X3JlZ2lzdGVyX3R5cGUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQg cmVnX25yKQ0Kew0KICBpZiAocmVnX25yID09IEFWUl9QQ19SRUdOVU0pDQog ICAgcmV0dXJuIGJ1aWx0aW5fdHlwZV91bnNpZ25lZF9sb25nOw0KICBpZiAo cmVnX25yID09IEFWUl9TUF9SRUdOVU0pDQogICAgcmV0dXJuIGJ1aWx0aW5f dHlwZV92b2lkX2RhdGFfcHRyOw0KICBlbHNlDQogICAgcmV0dXJuIGJ1aWx0 aW5fdHlwZV91aW50ODsNCn0NCg0KLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBj aGVja3MgYW5kIGNvbnZlcnRpb25zLiAqLw0KDQpzdGF0aWMgQ09SRV9BRERS DQphdnJfbWFrZV9pYWRkciAoQ09SRV9BRERSIHgpDQp7DQogIHJldHVybiAo KHgpIHwgQVZSX0lNRU1fU1RBUlQpOw0KfQ0KDQpzdGF0aWMgaW50DQphdnJf aWFkZHJfcCAoQ09SRV9BRERSIHgpDQp7DQogIHJldHVybiAoKCh4KSAmIEFW Ul9NRU1fTUFTSykgPT0gQVZSX0lNRU1fU1RBUlQpOw0KfQ0KDQovKiBGSVhN RTogVFJvdGg6IFJlYWxseSBuZWVkIHRvIHVzZSBhIGxhcmdlciBtYXNrIGZv ciBpbnN0cnVjdGlvbnMuIFNvbWUNCiAgIGRldmljZXMgYXJlIGFscmVhZHkg dXAgdG8gMTI4S0J5dGVzIG9mIGZsYXNoIHNwYWNlLg0KDQogICBUUm90aC8y MDAyLTA0LTg6IFNlZSBjb21tZW50IGFib3ZlIHdoZXJlIEFWUl9JTUVNX1NU QVJUIGlzIGRlZmluZWQuICovDQoNCnN0YXRpYyBDT1JFX0FERFINCmF2cl9j b252ZXJ0X2lhZGRyX3RvX3JhdyAoQ09SRV9BRERSIHgpDQp7DQogIHJldHVy biAoKHgpICYgMHhmZmZmZmZmZik7DQp9DQoNCi8qIFNSQU0gYWRkcmVzcyBj aGVja3MgYW5kIGNvbnZlcnRpb25zLiAqLw0KDQpzdGF0aWMgQ09SRV9BRERS DQphdnJfbWFrZV9zYWRkciAoQ09SRV9BRERSIHgpDQp7DQogIHJldHVybiAo KHgpIHwgQVZSX1NNRU1fU1RBUlQpOw0KfQ0KDQpzdGF0aWMgaW50DQphdnJf c2FkZHJfcCAoQ09SRV9BRERSIHgpDQp7DQogIHJldHVybiAoKCh4KSAmIEFW Ul9NRU1fTUFTSykgPT0gQVZSX1NNRU1fU1RBUlQpOw0KfQ0KDQpzdGF0aWMg Q09SRV9BRERSDQphdnJfY29udmVydF9zYWRkcl90b19yYXcgKENPUkVfQURE UiB4KQ0Kew0KICByZXR1cm4gKCh4KSAmIDB4ZmZmZmZmZmYpOw0KfQ0KDQov KiBFRVBST00gYWRkcmVzcyBjaGVja3MgYW5kIGNvbnZlcnRpb25zLiBJIGRv bid0IGtub3cgaWYgdGhlc2Ugd2lsbCBldmVyDQogICBhY3R1YWxseSBiZSB1 c2VkLCBidXQgSSd2ZSBhZGRlZCB0aGVtIGp1c3QgdGhlIHNhbWUuIFRSb3Ro ICovDQoNCi8qIFRSb3RoLzIwMDItMDQtMDg6IENvbW1lbnRlZCBvdXQgZm9y IG5vdyB0byBhbGxvdyBmaXggZm9yIHByb2JsZW0gd2l0aCBsYXJnZQ0KICAg cHJvZ3JhbXMgaW4gdGhlIG1lZ2ExMjguICovDQoNCi8qICBzdGF0aWMgQ09S RV9BRERSICovDQovKiAgYXZyX21ha2VfZWFkZHIgKENPUkVfQUREUiB4KSAq Lw0KLyogIHsgKi8NCi8qICAgIHJldHVybiAoKHgpIHwgQVZSX0VNRU1fU1RB UlQpOyAqLw0KLyogIH0gKi8NCg0KLyogIHN0YXRpYyBpbnQgKi8NCi8qICBh dnJfZWFkZHJfcCAoQ09SRV9BRERSIHgpICovDQovKiAgeyAqLw0KLyogICAg cmV0dXJuICgoKHgpICYgQVZSX01FTV9NQVNLKSA9PSBBVlJfRU1FTV9TVEFS VCk7ICovDQovKiAgfSAqLw0KDQovKiAgc3RhdGljIENPUkVfQUREUiAqLw0K LyogIGF2cl9jb252ZXJ0X2VhZGRyX3RvX3JhdyAoQ09SRV9BRERSIHgpICov DQovKiAgeyAqLw0KLyogICAgcmV0dXJuICgoeCkgJiAweGZmZmZmZmZmKTsg Ki8NCi8qICB9ICovDQoNCi8qIENvbnZlcnQgZnJvbSBhZGRyZXNzIHRvIHBv aW50ZXIgYW5kIHZpY2UtdmVyc2EuICovDQoNCnN0YXRpYyB2b2lkDQphdnJf YWRkcmVzc190b19wb2ludGVyIChzdHJ1Y3QgdHlwZSAqdHlwZSwgdm9pZCAq YnVmLCBDT1JFX0FERFIgYWRkcikNCnsNCiAgLyogSXMgaXQgYSBjb2RlIGFk ZHJlc3M/ICAqLw0KICBpZiAoVFlQRV9DT0RFIChUWVBFX1RBUkdFVF9UWVBF ICh0eXBlKSkgPT0gVFlQRV9DT0RFX0ZVTkMNCiAgICAgIHx8IFRZUEVfQ09E RSAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkpID09IFRZUEVfQ09ERV9NRVRI T0QpDQogICAgew0KICAgICAgc3RvcmVfdW5zaWduZWRfaW50ZWdlciAoYnVm LCBUWVBFX0xFTkdUSCAodHlwZSksDQoJCQkgICAgICBhdnJfY29udmVydF9p YWRkcl90b19yYXcgKGFkZHIpKTsNCiAgICB9DQogIGVsc2UNCiAgICB7DQog ICAgICAvKiBTdHJpcCBvZmYgYW55IHVwcGVyIHNlZ21lbnQgYml0cy4gICov DQogICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyIChidWYsIFRZUEVfTEVO R1RIICh0eXBlKSwNCgkJCSAgICAgIGF2cl9jb252ZXJ0X3NhZGRyX3RvX3Jh dyAoYWRkcikpOw0KICAgIH0NCn0NCg0Kc3RhdGljIENPUkVfQUREUg0KYXZy X3BvaW50ZXJfdG9fYWRkcmVzcyAoc3RydWN0IHR5cGUgKnR5cGUsIGNvbnN0 IHZvaWQgKmJ1ZikNCnsNCiAgQ09SRV9BRERSIGFkZHIgPSBleHRyYWN0X3Vu c2lnbmVkX2ludGVnZXIgKGJ1ZiwgVFlQRV9MRU5HVEggKHR5cGUpKTsNCg0K ICBpZiAoVFlQRV9DT0RFX1NQQUNFIChUWVBFX1RBUkdFVF9UWVBFICh0eXBl KSkpDQogICAgew0KICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk ZXJyLCAiQ09ERV9TUEFDRSAtLS0tPj4gcHRyLT5hZGRyOiAweCVseFxuIiwN CgkJCSAgYWRkcik7DQogICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRlcnIsDQoJCQkgICIrKysgSWYgeW91IHNlZSB0aGlzLCBwbGVhc2Ugc2Vu ZCBtZSBhbiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJlbWFpbCA8 dHJvdGhAb3BlbmF2ci5vcmc+XG4iKTsNCiAgICB9DQoNCiAgLyogSXMgaXQg YSBjb2RlIGFkZHJlc3M/ICAqLw0KICBpZiAoVFlQRV9DT0RFIChUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSkgPT0gVFlQRV9DT0RFX0ZVTkMNCiAgICAgIHx8 IFRZUEVfQ09ERSAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkpID09IFRZUEVf Q09ERV9NRVRIT0QNCiAgICAgIHx8IFRZUEVfQ09ERV9TUEFDRSAoVFlQRV9U QVJHRVRfVFlQRSAodHlwZSkpKQ0KICAgIHJldHVybiBhdnJfbWFrZV9pYWRk ciAoYWRkcik7DQogIGVsc2UNCiAgICByZXR1cm4gYXZyX21ha2Vfc2FkZHIg KGFkZHIpOw0KfQ0KDQpzdGF0aWMgQ09SRV9BRERSDQphdnJfcmVhZF9wYyAo cHRpZF90IHB0aWQpDQp7DQogIHB0aWRfdCBzYXZlX3B0aWQ7DQogIENPUkVf QUREUiBwYzsNCiAgQ09SRV9BRERSIHJldHZhbDsNCg0KICBzYXZlX3B0aWQg PSBpbmZlcmlvcl9wdGlkOw0KICBpbmZlcmlvcl9wdGlkID0gcHRpZDsNCiAg cGMgPSAoaW50KSByZWFkX3JlZ2lzdGVyIChBVlJfUENfUkVHTlVNKTsNCiAg aW5mZXJpb3JfcHRpZCA9IHNhdmVfcHRpZDsNCiAgcmV0dmFsID0gYXZyX21h a2VfaWFkZHIgKHBjKTsNCiAgcmV0dXJuIHJldHZhbDsNCn0NCg0Kc3RhdGlj IHZvaWQNCmF2cl93cml0ZV9wYyAoQ09SRV9BRERSIHZhbCwgcHRpZF90IHB0 aWQpDQp7DQogIHB0aWRfdCBzYXZlX3B0aWQ7DQoNCiAgc2F2ZV9wdGlkID0g aW5mZXJpb3JfcHRpZDsNCiAgaW5mZXJpb3JfcHRpZCA9IHB0aWQ7DQogIHdy aXRlX3JlZ2lzdGVyIChBVlJfUENfUkVHTlVNLCBhdnJfY29udmVydF9pYWRk cl90b19yYXcgKHZhbCkpOw0KICBpbmZlcmlvcl9wdGlkID0gc2F2ZV9wdGlk Ow0KfQ0KDQpzdGF0aWMgQ09SRV9BRERSDQphdnJfcmVhZF9zcCAodm9pZCkN CnsNCiAgcmV0dXJuIChhdnJfbWFrZV9zYWRkciAocmVhZF9yZWdpc3RlciAo QVZSX1NQX1JFR05VTSkpKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmF2cl93cml0 ZV9zcCAoQ09SRV9BRERSIHZhbCkNCnsNCiAgd3JpdGVfcmVnaXN0ZXIgKEFW Ul9TUF9SRUdOVU0sIGF2cl9jb252ZXJ0X3NhZGRyX3RvX3JhdyAodmFsKSk7 DQp9DQoNCi8qIFRyYW5zbGF0ZSBhIEdEQiB2aXJ0dWFsIEFERFIvTEVOIGlu dG8gYSBmb3JtYXQgdGhlIHJlbW90ZSB0YXJnZXQNCiAgIHVuZGVyc3RhbmRz LiAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgdHJhbnNm ZXJlZA0KICAgc3RhcnRpbmcgYXQgVEFSR19BRERSLiAgUmV0dXJuIFpFUk8g aWYgbm8gYnl0ZXMgY2FuIGJlIHRyYW5zZmVyZWQNCiAgIChzZWdtZW50YXRp b24gZmF1bHQpLg0KDQogICBUUm90aC8yMDAyLTA0LTA4OiBDb3VsZCB0aGlz IGJlIHVzZWQgdG8gY2hlY2sgZm9yIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxp ZA0KICAgcG9pbnRlcj8gKi8NCg0Kc3RhdGljIHZvaWQNCmF2cl9yZW1vdGVf dHJhbnNsYXRlX3hmZXJfYWRkcmVzcyAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsDQoJCQkJICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCgkJCQkg ICBDT1JFX0FERFIgbWVtYWRkciwgaW50IG5yX2J5dGVzLA0KCQkJCSAgIENP UkVfQUREUiAqdGFyZ19hZGRyLCBpbnQgKnRhcmdfbGVuKQ0Kew0KICBsb25n IG91dF9hZGRyOw0KICBsb25nIG91dF9sZW47DQoNCiAgLyogRklYTUU6IFRS b3RoOiBEbyBub3RoaW5nIGZvciBub3cuIFdpbGwgbmVlZCB0byBleGFtaW5l IG1lbWFkZHIgYXQgdGhpcw0KICAgICBwb2ludCBhbmQgc2VlIGlmIHRoZSBo aWdoIGJpdCBhcmUgc2V0IHdpdGggdGhlIG1hc2tzIHRoYXQgd2Ugd2FudC4g Ki8NCg0KICAqdGFyZ19hZGRyID0gbWVtYWRkcjsNCiAgKnRhcmdfbGVuID0g bnJfYnl0ZXM7DQp9DQoNCi8qIEZ1bmN0aW9uIHBvaW50ZXJzIG9idGFpbmVk IGZyb20gdGhlIHRhcmdldCBhcmUgaGFsZiBvZiB3aGF0IGdkYiBleHBlY3Rz IHNvDQogICBtdWx0aXBseSBieSAyLiAqLw0KDQpzdGF0aWMgQ09SRV9BRERS DQphdnJfY29udmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIgKENPUkVfQUREUiBh ZGRyKQ0Kew0KICByZXR1cm4gYWRkciAqIDI7DQp9DQoNCi8qIFJldHVybnMg dGhlIHJldHVybiBhZGRyZXNzIGZvciBhIGR1bW15LiAqLw0KDQpzdGF0aWMg Q09SRV9BRERSDQphdnJfY2FsbF9kdW1teV9hZGRyZXNzICh2b2lkKQ0Kew0K ICByZXR1cm4gZW50cnlfcG9pbnRfYWRkcmVzcyAoKTsNCn0NCg0KLyogRnVu Y3Rpb246IGF2cl9zY2FuX3Byb2xvZ3VlDQoNCiAgIFRoaXMgZnVuY3Rpb24g ZGVjb2RlcyBhbiBBVlIgZnVuY3Rpb24gcHJvbG9ndWUgdG8gZGV0ZXJtaW5l Og0KICAgICAxKSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgZnJhbWUNCiAgICAg Mikgd2hpY2ggcmVnaXN0ZXJzIGFyZSBzYXZlZCBvbiBpdA0KICAgICAzKSB0 aGUgb2Zmc2V0cyBvZiBzYXZlZCByZWdzDQogICBUaGlzIGluZm9ybWF0aW9u IGlzIHN0b3JlZCBpbiB0aGUgYXZyX3Vud2luZF9jYWNoZSBzdHJ1Y3R1cmUu DQoNCiAgIFNvbWUgZGV2aWNlcyBsYWNrIHRoZSBzYml3IGluc3RydWN0aW9u LCBzbyBvbiB0aG9zZSByZXBsYWNlIHRoaXM6DQogICAgICAgIHNiaXcgICAg cjI4LCBYWA0KICAgd2l0aCB0aGlzOg0KICAgICAgICBzdWJpICAgIHIyOCxs bzgoWFgpDQogICAgICAgIHNiY2kgICAgcjI5LGhpOChYWCkNCg0KICAgQSB0 eXBpY2FsIEFWUiBmdW5jdGlvbiBwcm9sb2d1ZSB3aXRoIGEgZnJhbWUgcG9p bnRlciBtaWdodCBsb29rIGxpa2UgdGhpczoNCiAgICAgICAgcHVzaCAgICBy WFggICAgICAgIDsgc2F2ZWQgcmVncw0KICAgICAgICAuLi4NCiAgICAgICAg cHVzaCAgICByMjgNCiAgICAgICAgcHVzaCAgICByMjkNCiAgICAgICAgaW4g ICAgICByMjgsX19TUF9MX18NCiAgICAgICAgaW4gICAgICByMjksX19TUF9I X18NCiAgICAgICAgc2JpdyAgICByMjgsPExPQ0FMU19TSVpFPg0KICAgICAg ICBpbiAgICAgIF9fdG1wX3JlZ19fLF9fU1JFR19fDQogICAgICAgIGNsaQ0K ICAgICAgICBvdXQgICAgIF9fU1BfTF9fLHIyOA0KICAgICAgICBvdXQgICAg IF9fU1JFR19fLF9fdG1wX3JlZ19fDQogICAgICAgIG91dCAgICAgX19TUF9I X18scjI5DQoNCiAgIEEgdHlwaWNhbCBBVlIgZnVuY3Rpb24gcHJvbG9ndWUg d2l0aG91dCBhIGZyYW1lIHBvaW50ZXIgbWlnaHQgbG9vayBsaWtlDQogICB0 aGlzOg0KICAgICAgICBwdXNoICAgIHJYWCAgICAgICAgOyBzYXZlZCByZWdz DQogICAgICAgIC4uLg0KDQogICBBIG1haW4gZnVuY3Rpb24gcHJvbG9ndWUg bG9va3MgbGlrZSB0aGlzOg0KICAgICAgICBsZGkgICAgIHIyOCxsbzgoPFJB TV9BRERSPiAtIDxMT0NBTFNfU0laRT4pDQogICAgICAgIGxkaSAgICAgcjI5 LGhpOCg8UkFNX0FERFI+IC0gPExPQ0FMU19TSVpFPikNCiAgICAgICAgb3V0 ICAgICBfX1NQX0hfXyxyMjkNCiAgICAgICAgb3V0ICAgICBfX1NQX0xfXyxy MjgNCg0KICAgQSBzaWduYWwgaGFuZGxlciBwcm9sb2d1ZSBsb29rcyBsaWtl IHRoaXM6DQogICAgICAgIHB1c2ggICAgX196ZXJvX3JlZ19fDQogICAgICAg IHB1c2ggICAgX190bXBfcmVnX18NCiAgICAgICAgaW4gICAgICBfX3RtcF9y ZWdfXywgX19TUkVHX18NCiAgICAgICAgcHVzaCAgICBfX3RtcF9yZWdfXw0K ICAgICAgICBjbHIgICAgIF9femVyb19yZWdfXw0KICAgICAgICBwdXNoICAg IHJYWCAgICAgICAgICAgICA7IHNhdmUgcmVnaXN0ZXJzIHIxODpyMjcsIHIz MDpyMzENCiAgICAgICAgLi4uDQogICAgICAgIHB1c2ggICAgcjI4ICAgICAg ICAgICAgIDsgc2F2ZSBmcmFtZSBwb2ludGVyDQogICAgICAgIHB1c2ggICAg cjI5DQogICAgICAgIGluICAgICAgcjI4LCBfX1NQX0xfXw0KICAgICAgICBp biAgICAgIHIyOSwgX19TUF9IX18NCiAgICAgICAgc2JpdyAgICByMjgsIDxM T0NBTFNfU0laRT4NCiAgICAgICAgb3V0ICAgICBfX1NQX0hfXywgcjI5DQog ICAgICAgIG91dCAgICAgX19TUF9MX18sIHIyOA0KICAgICAgICANCiAgIEEg aW50ZXJydXB0IGhhbmRsZXIgcHJvbG9ndWUgbG9va3MgbGlrZSB0aGlzOg0K ICAgICAgICBzZWkNCiAgICAgICAgcHVzaCAgICBfX3plcm9fcmVnX18NCiAg ICAgICAgcHVzaCAgICBfX3RtcF9yZWdfXw0KICAgICAgICBpbiAgICAgIF9f dG1wX3JlZ19fLCBfX1NSRUdfXw0KICAgICAgICBwdXNoICAgIF9fdG1wX3Jl Z19fDQogICAgICAgIGNsciAgICAgX196ZXJvX3JlZ19fDQogICAgICAgIHB1 c2ggICAgclhYICAgICAgICAgICAgIDsgc2F2ZSByZWdpc3RlcnMgcjE4OnIy NywgcjMwOnIzMQ0KICAgICAgICAuLi4NCiAgICAgICAgcHVzaCAgICByMjgg ICAgICAgICAgICAgOyBzYXZlIGZyYW1lIHBvaW50ZXINCiAgICAgICAgcHVz aCAgICByMjkNCiAgICAgICAgaW4gICAgICByMjgsIF9fU1BfTF9fDQogICAg ICAgIGluICAgICAgcjI5LCBfX1NQX0hfXw0KICAgICAgICBzYml3ICAgIHIy OCwgPExPQ0FMU19TSVpFPg0KICAgICAgICBjbGkNCiAgICAgICAgb3V0ICAg ICBfX1NQX0hfXywgcjI5DQogICAgICAgIHNlaSAgICAgDQogICAgICAgIG91 dCAgICAgX19TUF9MX18sIHIyOA0KDQogICBBIGAtbWNhbGwtcHJvbG9ndWVz JyBwcm9sb2d1ZSBsb29rcyBsaWtlIHRoaXMgKE5vdGUgdGhhdCB0aGUgbWVn YXMgdXNlIGENCiAgIGptcCBpbnN0ZWFkIG9mIGEgcmptcCwgdGh1cyB0aGUg cHJvbG9ndWUgaXMgb25lIHdvcmQgbGFyZ2VyIHNpbmNlIGptcCBpcyBhDQog ICAzMiBiaXQgaW5zbiBhbmQgcmptcCBpcyBhIDE2IGJpdCBpbnNuKToNCiAg ICAgICAgbGRpICAgICByMjYsbG84KDxMT0NBTFNfU0laRT4pDQogICAgICAg IGxkaSAgICAgcjI3LGhpOCg8TE9DQUxTX1NJWkU+KQ0KICAgICAgICBsZGkg ICAgIHIzMCxwbV9sbzgoLkxfZm9vX2JvZHkpDQogICAgICAgIGxkaSAgICAg cjMxLHBtX2hpOCguTF9mb29fYm9keSkNCiAgICAgICAgcmptcCAgICBfX3By b2xvZ3VlX3NhdmVzX18rUlJSDQogICAuTF9mb29fYm9keTogICovDQoNCnN0 YXRpYyBDT1JFX0FERFINCmF2cl9zY2FuX3Byb2xvZ3VlIChDT1JFX0FERFIg cGMsIHN0cnVjdCBhdnJfdW53aW5kX2NhY2hlICppbmZvKQ0Kew0KICBpbnQg aTsNCiAgdW5zaWduZWQgc2hvcnQgaW5zbjsNCiAgaW50IHNjYW5fc3RhZ2Ug PSAwOw0KICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW1ib2w7DQogIHVu c2lnbmVkIGNoYXIgcHJvbG9ndWVbQVZSX01BWF9QUk9MT0dVRV9TSVpFXTsN CiAgaW50IHZwYyA9IDA7DQoNCiAgcmVhZF9tZW1vcnkgKHBjLCBwcm9sb2d1 ZSwgQVZSX01BWF9QUk9MT0dVRV9TSVpFKTsNCg0KICAvKiBTY2FubmluZyBt YWluKCkncyBwcm9sb2d1ZQ0KICAgICBsZGkgcjI4LGxvOCg8UkFNX0FERFI+ IC0gPExPQ0FMU19TSVpFPikNCiAgICAgbGRpIHIyOSxoaTgoPFJBTV9BRERS PiAtIDxMT0NBTFNfU0laRT4pDQogICAgIG91dCBfX1NQX0hfXyxyMjkNCiAg ICAgb3V0IF9fU1BfTF9fLHIyOCAqLw0KDQogIGlmICgxKQ0KICAgIHsNCiAg ICAgIENPUkVfQUREUiBsb2NhbHM7DQogICAgICB1bnNpZ25lZCBjaGFyIGlt Z1tdID0gew0KICAgICAgICAweGRlLCAweGJmLAkJLyogb3V0IF9fU1BfSF9f LHIyOSAqLw0KICAgICAgICAweGNkLCAweGJmCQkvKiBvdXQgX19TUF9MX18s cjI4ICovDQogICAgICB9Ow0KDQogICAgICBpbnNuID0gRVhUUkFDVF9JTlNO ICgmcHJvbG9ndWVbdnBjXSk7DQogICAgICAvKiBsZGkgcjI4LGxvOCg8UkFN X0FERFI+IC0gPExPQ0FMU19TSVpFPikgKi8NCiAgICAgIGlmICgoaW5zbiAm IDB4ZjBmMCkgPT0gMHhlMGMwKQ0KICAgICAgICB7DQogICAgICAgICAgbG9j YWxzID0gKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+PiA0KTsN CiAgICAgICAgICBpbnNuID0gRVhUUkFDVF9JTlNOICgmcHJvbG9ndWVbdnBj ICsgMl0pOw0KICAgICAgICAgIC8qIGxkaSByMjksaGk4KDxSQU1fQUREUj4g LSA8TE9DQUxTX1NJWkU+KSAqLw0KICAgICAgICAgIGlmICgoaW5zbiAmIDB4 ZjBmMCkgPT0gMHhlMGQwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBsb2NhbHMgfD0gKChpbnNuICYgMHhmKSB8ICgoaW5zbiAmIDB4MGYwMCkg Pj4gNCkpIDw8IDg7DQogICAgICAgICAgICAgIGlmIChtZW1jbXAgKHByb2xv Z3VlICsgdnBjICsgNCwgaW1nLCBzaXplb2YgKGltZykpID09IDApDQogICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgaW5mby0+cHJvbG9n dWVfdHlwZSA9IEFWUl9QUk9MT0dVRV9NQUlOOw0KICAgICAgICAgICAgICAg ICAgaW5mby0+YmFzZSA9IGxvY2FsczsNCiAgICAgICAgICAgICAgICAgIHJl dHVybiBwYyArIDQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgfQ0KDQogIC8qIFNjYW5uaW5nIGAtbWNhbGwt cHJvbG9ndWVzJyBwcm9sb2d1ZQ0KICAgICBGSVhNRTogbWVnYSBwcm9sb2d1 ZSBpcyBhIDEyIGJ5dGVzIGxvbmcgKi8NCg0KICB3aGlsZSAoMSkJLyogVXNl IHdoaWxlIHRvIGF2b2lkIG1hbnkgZ290bydzICovDQogICAgew0KICAgICAg aW50IGxvY19zaXplOw0KICAgICAgaW50IGJvZHlfYWRkcjsNCiAgICAgIHVu c2lnbmVkIG51bV9wdXNoZXM7DQogICAgICBpbnQgcGNfb2Zmc2V0ID0gMDsN Cg0KICAgICAgaW5zbiA9IEVYVFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwY10p Ow0KICAgICAgLyogbGRpIHIyNiw8TE9DQUxTX1NJWkU+ICovDQogICAgICBp ZiAoKGluc24gJiAweGYwZjApICE9IDB4ZTBhMCkNCglicmVhazsNCiAgICAg IGxvY19zaXplID0gKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+ PiA0KTsNCiAgICAgIHBjX29mZnNldCArPSAyOw0KDQogICAgICBpbnNuID0g RVhUUkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjICsgMl0pOw0KICAgICAgLyog bGRpIHIyNyw8TE9DQUxTX1NJWkU+IC8gMjU2ICovDQogICAgICBpZiAoKGlu c24gJiAweGYwZjApICE9IDB4ZTBiMCkNCglicmVhazsNCiAgICAgIGxvY19z aXplIHw9ICgoaW5zbiAmIDB4ZikgfCAoKGluc24gJiAweDBmMDApID4+IDQp KSA8PCA4Ow0KICAgICAgcGNfb2Zmc2V0ICs9IDI7DQoNCiAgICAgIGluc24g PSBFWFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGMgKyA0XSk7DQogICAgICAv KiBsZGkgcjMwLHBtX2xvOCguTF9mb29fYm9keSkgKi8NCiAgICAgIGlmICgo aW5zbiAmIDB4ZjBmMCkgIT0gMHhlMGUwKQ0KCWJyZWFrOw0KICAgICAgYm9k eV9hZGRyID0gKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+PiA0 KTsNCiAgICAgIHBjX29mZnNldCArPSAyOw0KDQogICAgICBpbnNuID0gRVhU UkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjICsgNl0pOw0KICAgICAgLyogbGRp IHIzMSxwbV9oaTgoLkxfZm9vX2JvZHkpICovDQogICAgICBpZiAoKGluc24g JiAweGYwZjApICE9IDB4ZTBmMCkNCglicmVhazsNCiAgICAgIGJvZHlfYWRk ciB8PSAoKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+PiA0KSkg PDwgODsNCiAgICAgIHBjX29mZnNldCArPSAyOw0KDQogICAgICBtc3ltYm9s ID0gbG9va3VwX21pbmltYWxfc3ltYm9sICgiX19wcm9sb2d1ZV9zYXZlc19f IiwgTlVMTCwgTlVMTCk7DQogICAgICBpZiAoIW1zeW1ib2wpDQoJYnJlYWs7 DQoNCiAgICAgIGluc24gPSBFWFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGMg KyA4XSk7DQogICAgICAvKiByam1wIF9fcHJvbG9ndWVfc2F2ZXNfXytSUlIg Ki8NCiAgICAgIGlmICgoaW5zbiAmIDB4ZjAwMCkgPT0gMHhjMDAwKQ0KICAg ICAgICB7DQogICAgICAgICAgLyogRXh0cmFjdCBQQyByZWxhdGl2ZSBvZmZz ZXQgZnJvbSBSSk1QICovDQogICAgICAgICAgaSA9IChpbnNuICYgMHhmZmYp IHwgKGluc24gJiAweDgwMCA/ICgtMSBeIDB4ZmZmKSA6IDApOw0KICAgICAg ICAgIC8qIENvbnZlcnQgb2Zmc2V0IHRvIGJ5dGUgYWRkcmVzc2FibGUgbW9k ZSAqLw0KICAgICAgICAgIGkgKj0gMjsNCiAgICAgICAgICAvKiBEZXN0aW5h dGlvbiBhZGRyZXNzICovDQogICAgICAgICAgaSArPSBwY19vZmZzZXQgKyBw YyArIDEwOw0KDQogICAgICAgICAgaWYgKGJvZHlfYWRkciAhPSAocGMgKyAx MCkvMikNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgcGNfb2Zm c2V0ICs9IDI7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKChpbnNuICYg MHhmZTBlKSA9PSAweDk0MGMpDQogICAgICAgIHsNCiAgICAgICAgICAvKiBF eHRyYWN0IGFic29sdXRlIFBDIGFkZHJlc3MgZnJvbSBKTVAgKi8NCiAgICAg ICAgICBpID0gKCgoaW5zbiAmIDB4MSkgfCAoKGluc24gJiAweDFmMCkgPj4g MykgPDwgMTYpDQogICAgICAgICAgICB8IChFWFRSQUNUX0lOU04gKCZwcm9s b2d1ZVt2cGMgKyAxMF0pICYgMHhmZmZmKSk7DQogICAgICAgICAgLyogQ29u dmVydCBhZGRyZXNzIHRvIGJ5dGUgYWRkcmVzc2FibGUgbW9kZSAqLw0KICAg ICAgICAgIGkgKj0gMjsNCg0KICAgICAgICAgIGlmIChib2R5X2FkZHIgIT0g KHBjICsgMTIpLzIpDQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAg IHBjX29mZnNldCArPSA0Ow0KICAgICAgICB9DQogICAgICBlbHNlDQogICAg ICAgIGJyZWFrOw0KDQogICAgICAvKiBSZXNvbHZlIG9mZnNldCAoaW4gd29y ZHMpIGZyb20gX19wcm9sb2d1ZV9zYXZlc19fIHN5bWJvbC4NCiAgICAgICAg IFdoaWNoIGlzIGEgcHVzaGVzIGNvdW50IGluIGAtbWNhbGwtcHJvbG9ndWVz JyBtb2RlICovDQogICAgICBudW1fcHVzaGVzID0gQVZSX01BWF9QVVNIRVMg LSAoaSAtIFNZTUJPTF9WQUxVRV9BRERSRVNTIChtc3ltYm9sKSkgLyAyOw0K DQogICAgICBpZiAobnVtX3B1c2hlcyA+IEFWUl9NQVhfUFVTSEVTKQ0KICAg ICAgICB7DQogICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk ZXJyLCAiTnVtIHB1c2hlcyB0b28gbGFyZ2U6ICVkXG4iLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnVtX3B1c2hlcyk7DQogICAgICAgICAg bnVtX3B1c2hlcyA9IDA7DQogICAgICAgIH0NCg0KICAgICAgaWYgKG51bV9w dXNoZXMpDQoJew0KCSAgaW50IGZyb207DQoNCgkgIGluZm8tPnNhdmVkX3Jl Z3NbQVZSX0ZQX1JFR05VTSArIDFdID0gbnVtX3B1c2hlczsNCgkgIGlmIChu dW1fcHVzaGVzID49IDIpDQoJICAgIGluZm8tPnNhdmVkX3JlZ3NbQVZSX0ZQ X1JFR05VTV0gPSBudW1fcHVzaGVzIC0gMTsNCg0KCSAgaSA9IDA7DQoJICBm b3IgKGZyb20gPSBBVlJfTEFTVF9QVVNIRURfUkVHTlVNICsgMSAtIChudW1f cHVzaGVzIC0gMik7DQoJICAgICAgIGZyb20gPD0gQVZSX0xBU1RfUFVTSEVE X1JFR05VTTsgKytmcm9tKQ0KCSAgICBpbmZvLT5zYXZlZF9yZWdzIFtmcm9t XSA9ICsraTsNCgl9DQogICAgICBpbmZvLT5zaXplID0gbG9jX3NpemUgKyBu dW1fcHVzaGVzOw0KICAgICAgaW5mby0+cHJvbG9ndWVfdHlwZSA9IEFWUl9Q Uk9MT0dVRV9DQUxMOw0KDQogICAgICByZXR1cm4gcGMgKyBwY19vZmZzZXQg KyBudW1fcHVzaGVzKjI7DQogICAgfQ0KDQogIC8qIFNjYW4gZm9yIHRoZSBi ZWdpbm5pbmcgb2YgdGhlIHByb2xvZ3VlIGZvciBhbiBpbnRlcnJ1cHQgb3Ig c2lnbmFsDQogICAgIGZ1bmN0aW9uICovDQoNCiAgaWYgKDEpDQogICAgew0K ICAgICAgdW5zaWduZWQgY2hhciBpbWdbXSA9IHsNCgkweDc4LCAweDk0LAkJ Lyogc2VpICovDQoJMHgxZiwgMHg5MiwJCS8qIHB1c2ggcjEgKi8NCgkweDBm LCAweDkyLAkJLyogcHVzaCByMCAqLw0KCTB4MGYsIDB4YjYsCQkvKiBpbiBy MCwweDNmIFNSRUcgKi8NCgkweDBmLCAweDkyLAkJLyogcHVzaCByMCAqLw0K CTB4MTEsIDB4MjQJCS8qIGNsciByMSAqLw0KICAgICAgfTsNCiAgICAgIGlm IChtZW1jbXAgKHByb2xvZ3VlLCBpbWcsIHNpemVvZiAoaW1nKSkgPT0gMCkN Cgl7DQoJICB2cGMgKz0gc2l6ZW9mIChpbWcpOw0KCSAgaW5mby0+c2F2ZWRf cmVnc1swXSA9IDI7DQoJICBpbmZvLT5zYXZlZF9yZWdzWzFdID0gMTsNCgkg IGluZm8tPnNpemUgKz0gMzsNCgl9DQogICAgICBlbHNlIGlmIChtZW1jbXAg KGltZyArIDIsIHByb2xvZ3VlLCBzaXplb2YgKGltZykgLSAyKSA9PSAwKQ0K CXsNCgkgIHZwYyArPSBzaXplb2YgKGltZykgLSAyOw0KCSAgaW5mby0+c2F2 ZWRfcmVnc1swXSA9IDI7DQoJICBpbmZvLT5zYXZlZF9yZWdzWzFdID0gMTsN CgkgIGluZm8tPnNpemUgKz0gMzsNCgl9DQogICAgfQ0KDQogIC8qIEZpcnN0 IHN0YWdlIG9mIHRoZSBwcm9sb2d1ZSBzY2FubmluZy4NCiAgICAgU2NhbiBw dXNoZXMgKHNhdmVkIHJlZ2lzdGVycykgKi8NCg0KICBmb3IgKDsgdnBjIDwg QVZSX01BWF9QUk9MT0dVRV9TSVpFOyB2cGMgKz0gMikNCiAgICB7DQogICAg ICBpbnNuID0gRVhUUkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjXSk7DQogICAg ICBpZiAoKGluc24gJiAweGZlMGYpID09IDB4OTIwZikJLyogcHVzaCByWFgg Ki8NCgl7DQoJICAvKiBCaXRzIDQtOSBjb250YWluIGEgbWFzayBmb3IgcmVn aXN0ZXJzIFIwLVIzMi4gKi8NCgkgIGludCByZWdubyA9IChpbnNuICYgMHgx ZjApID4+IDQ7DQoJICBpbmZvLT5zaXplKys7DQoJICBpbmZvLT5zYXZlZF9y ZWdzW3JlZ25vXSA9IGluZm8tPnNpemU7DQoJICBzY2FuX3N0YWdlID0gMTsN Cgl9DQogICAgICBlbHNlDQogICAgICAgICAgYnJlYWs7DQogICAgfQ0KDQog IGlmICh2cGMgPj0gQVZSX01BWF9QUk9MT0dVRV9TSVpFKQ0KICAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgIkhpdCBlbmQgb2YgcHJvbG9ndWUgd2hpbGUgc2Nhbm5pbmcg cHVzaGVzXG4iKTsNCg0KICAvKiBTZWNvbmQgc3RhZ2Ugb2YgdGhlIHByb2xv Z3VlIHNjYW5uaW5nLg0KICAgICBTY2FuOg0KICAgICBpbiByMjgsX19TUF9M X18NCiAgICAgaW4gcjI5LF9fU1BfSF9fICovDQoNCiAgaWYgKHNjYW5fc3Rh Z2UgPT0gMSAmJiB2cGMgPCBBVlJfTUFYX1BST0xPR1VFX1NJWkUpDQogICAg ew0KICAgICAgdW5zaWduZWQgY2hhciBpbWdbXSA9IHsNCgkweGNkLCAweGI3 LAkJLyogaW4gcjI4LF9fU1BfTF9fICovDQoJMHhkZSwgMHhiNwkJLyogaW4g cjI5LF9fU1BfSF9fICovDQogICAgICB9Ow0KICAgICAgdW5zaWduZWQgc2hv cnQgaW5zbjE7DQoNCiAgICAgIGlmIChtZW1jbXAgKHByb2xvZ3VlICsgdnBj LCBpbWcsIHNpemVvZiAoaW1nKSkgPT0gMCkNCgl7DQoJICB2cGMgKz0gNDsN CgkgIHNjYW5fc3RhZ2UgPSAyOw0KCX0NCiAgICB9DQoNCiAgLyogVGhpcmQg c3RhZ2Ugb2YgdGhlIHByb2xvZ3VlIHNjYW5uaW5nLiAoUmVhbGx5IHR3byBz dGFnZXMpDQogICAgIFNjYW4gZm9yOg0KICAgICBzYml3IHIyOCxYWCBvciBz dWJpIHIyOCxsbzgoWFgpDQogICAgICAgICAgICAgICAgICAgIHNiY2kgcjI5 LGhpOChYWCkNCiAgICAgaW4gX190bXBfcmVnX18sX19TUkVHX18NCiAgICAg Y2xpDQogICAgIG91dCBfX1NQX0hfXyxyMjkNCiAgICAgb3V0IF9fU1JFR19f LF9fdG1wX3JlZ19fDQogICAgIG91dCBfX1NQX0xfXyxyMiogKi8NCg0KICBp ZiAoc2Nhbl9zdGFnZSA9PSAyICYmIHZwYyA8IEFWUl9NQVhfUFJPTE9HVUVf U0laRSkNCiAgICB7DQogICAgICBpbnQgbG9jYWxzX3NpemUgPSAwOw0KICAg ICAgdW5zaWduZWQgY2hhciBpbWdbXSA9IHsNCgkweDBmLCAweGI2LAkJLyog aW4gcjAsMHgzZiAgIDsgc3RvcmUgU1JFRyBpbiByMCAqLw0KCTB4ZjgsIDB4 OTQsCQkvKiBjbGkgKi8NCgkweGRlLCAweGJmLAkJLyogb3V0IDB4M2UscjI5 IDsgU1BIICovDQoJMHgwZiwgMHhiZSwJCS8qIG91dCAweDNmLHIwICA7IFNS RUcgKi8NCgkweGNkLCAweGJmCQkvKiBvdXQgMHgzZCxyMjggOyBTUEwgKi8N CiAgICAgIH07DQogICAgICB1bnNpZ25lZCBjaGFyIGltZ19zaWdbXSA9IHsN CgkweGRlLCAweGJmLAkJLyogb3V0IDB4M2UscjI5IDsgU1BIICovDQoJMHhj ZCwgMHhiZgkJLyogb3V0IDB4M2QscjI4IDsgU1BMICovDQogICAgICB9Ow0K ICAgICAgdW5zaWduZWQgY2hhciBpbWdfaW50cltdID0gew0KCTB4ZjgsIDB4 OTQsCQkvKiBjbGkgKi8NCgkweGRlLCAweGJmLAkJLyogb3V0IDB4M2UscjI5 IDsgU1BIICovDQoJMHg3OCwgMHg5NCwJCS8qIHNlaSAqLw0KCTB4Y2QsIDB4 YmYJCS8qIG91dCAweDNkLHIyOCA7IFNQTCAqLw0KICAgICAgfTsNCg0KICAg ICAgaW5zbiA9IEVYVFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwY10pOw0KICAg ICAgdnBjICs9IDI7DQogICAgICBpZiAoKGluc24gJiAweGZmMzApID09IDB4 OTcyMCkJLyogc2JpdyByMjgsWFhYICovDQoJbG9jYWxzX3NpemUgPSAoaW5z biAmIDB4ZikgfCAoKGluc24gJiAweGMwKSA+PiAyKTsNCiAgICAgIGVsc2Ug aWYgKChpbnNuICYgMHhmMGYwKSA9PSAweDUwYzApCS8qIHN1YmkgcjI4LGxv OChYWCkgKi8NCgl7DQoJICBsb2NhbHNfc2l6ZSA9IChpbnNuICYgMHhmKSB8 ICgoaW5zbiAmIDB4ZjAwKSA+PiA0KTsNCgkgIGluc24gPSBFWFRSQUNUX0lO U04gKCZwcm9sb2d1ZVt2cGNdKTsNCgkgIHZwYyArPSAyOw0KCSAgbG9jYWxz X3NpemUgKz0gKChpbnNuICYgMHhmKSB8ICgoaW5zbiAmIDB4ZjAwKSA+PiA0 KSA8PCA4KTsNCgl9DQogICAgICBlbHNlDQoJcmV0dXJuIHBjICsgdnBjOw0K DQogICAgICAvKiBTY2FuIHRoZSBsYXN0IHBhcnQgb2YgdGhlIHByb2xvZ3Vl LiAqLw0KICAgICAgaWYgKG1lbWNtcCAocHJvbG9ndWUgKyB2cGMsIGltZ19z aWcsIHNpemVvZiAoaW1nX3NpZykpID09IDApDQogICAgICAgIHsNCiAgICAg ICAgICBpbmZvLT5wcm9sb2d1ZV90eXBlID0gQVZSX1BST0xPR1VFX1NJRzsN CiAgICAgICAgICB2cGMgKz0gc2l6ZW9mIChpbWdfc2lnKTsNCiAgICAgICAg fQ0KICAgICAgZWxzZSBpZiAobWVtY21wIChwcm9sb2d1ZSArIHZwYywgaW1n X2ludHIsIHNpemVvZiAoaW1nX2ludHIpKSA9PSAwKQ0KICAgICAgICB7DQog ICAgICAgICAgaW5mby0+cHJvbG9ndWVfdHlwZSA9IEFWUl9QUk9MT0dVRV9J TlRSOw0KICAgICAgICAgIHZwYyArPSBzaXplb2YgKGltZ19pbnRyKTsNCiAg ICAgICAgfQ0KICAgICAgaWYgKG1lbWNtcCAocHJvbG9ndWUgKyB2cGMsIGlt Zywgc2l6ZW9mIChpbWcpKSA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAg aW5mby0+cHJvbG9ndWVfdHlwZSA9IEFWUl9QUk9MT0dVRV9OT1JNQUw7DQog ICAgICAgICAgdnBjICs9IHNpemVvZiAoaW1nKTsNCiAgICAgICAgfQ0KDQog ICAgICBpbmZvLT5zaXplICs9IGxvY2Fsc19zaXplOw0KDQogICAgICByZXR1 cm4gcGMgKyB2cGM7DQogICAgfQ0KDQogIC8qIElmIHdlIGdvdCB0aGlzIGZh ciwgd2UgY291bGQgbm90IHNjYW4gdGhlIHByb2xvZ3VlLCBzbyBqdXN0IHJl dHVybiB0aGUgcGMNCiAgICAgb2YgdGhlIGZyYW1lLiAqLw0KDQogIHJldHVy biBwYzsNCn0NCg0Kc3RhdGljIENPUkVfQUREUg0KYXZyX3NraXBfcHJvbG9n dWUgKENPUkVfQUREUiBwYykNCnsNCiAgQ09SRV9BRERSIGZ1bmNfYWRkciwg ZnVuY19lbmQ7DQogIENPUkVfQUREUiBwcm9sb2d1ZV9lbmQgPSBwYzsNCg0K ICAvKiBTZWUgd2hhdCB0aGUgc3ltYm9sIHRhYmxlIHNheXMgKi8NCg0KICBp ZiAoZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgTlVMTCwgJmZ1bmNf YWRkciwgJmZ1bmNfZW5kKSkNCiAgICB7DQogICAgICBzdHJ1Y3Qgc3ltdGFi X2FuZF9saW5lIHNhbDsNCiAgICAgIHN0cnVjdCBhdnJfdW53aW5kX2NhY2hl IGluZm8gPSB7MH07DQogICAgICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tBVlJf TlVNX1JFR1NdID0gezB9Ow0KDQogICAgICBpbmZvLnNhdmVkX3JlZ3MgPSBz YXZlZF9yZWdzOw0KDQogICAgICAvKiBOZWVkIHRvIHJ1biB0aGUgcHJvbG9n dWUgc2Nhbm5lciB0byBmaWd1cmUgb3V0IGlmIHRoZSBmdW5jdGlvbiBoYXMg YQ0KICAgICAgICAgcHJvbG9ndWUgYW5kIHBvc3NpYmx5IHNraXAgb3ZlciBt b3ZpbmcgZGF0YSBhcm91bmQgc29tZSByZWdpc3RlcnMuICovDQoNCiAgICAg IHByb2xvZ3VlX2VuZCA9IGF2cl9zY2FuX3Byb2xvZ3VlIChwYywgJmluZm8p Ow0KDQogICAgICBpZiAoaW5mby5wcm9sb2d1ZV90eXBlICE9IEFWUl9QUk9M T0dVRV9OT05FKQ0KICAgICAgICB7DQogICAgICAgICAgc2FsID0gZmluZF9w Y19saW5lIChmdW5jX2FkZHIsIDApOw0KDQogICAgICAgICAgaWYgKHNhbC5s aW5lICE9IDAgJiYgc2FsLmVuZCA8IGZ1bmNfZW5kKQ0KICAgICAgICAgICAg cmV0dXJuIHNhbC5lbmQ7DQogICAgICAgIH0NCiAgICB9DQoNCi8qIEVpdGhl ciB3ZSBkaWRuJ3QgZmluZCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvbiAo bm90aGluZyB3ZSBjYW4gZG8pLA0KICAgb3IgdGhlcmUncyBubyBsaW5lIGlu Zm8sIG9yIHRoZSBsaW5lIGFmdGVyIHRoZSBwcm9sb2d1ZSBpcyBhZnRlcg0K ICAgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gKHRoZXJlIHByb2JhYmx5IGlz bid0IGEgcHJvbG9ndWUpLiAqLw0KDQogIHJldHVybiBwcm9sb2d1ZV9lbmQ7 DQp9DQoNCnN0YXRpYyBDT1JFX0FERFINCmF2cl9mcmFtZV9hZGRyZXNzIChz dHJ1Y3QgZnJhbWVfaW5mbyAqZmkpDQp7DQogIHJldHVybiBhdnJfbWFrZV9z YWRkciAoZ2V0X2ZyYW1lX2Jhc2UgKGZpKSk7DQp9DQoNCi8qIE5vdCBhbGwg YXZyIGRldmljZXMgc3VwcG9ydCB0aGUgQlJFQUsgaW5zbi4gVGhvc2UgdGhh dCBkb24ndCBzaG91bGQgdHJlYXQNCiAgIGl0IGFzIGEgTk9QLiBUaHVzLCBp dCBzaG91bGQgYmUgb2suIFNpbmNlIHRoZSBhdnIgaXMgY3VycmVudGx5IGEg cmVtb3RlDQogICBvbmx5IHRhcmdldCwgdGhpcyBzaG91bGRuJ3QgYmUgYSBw cm9ibGVtIChJIGhvcGUpLiBUUm90aC8yMDAzLTA1LTE0ICAqLw0KDQpjb25z dCB1bnNpZ25lZCBjaGFyICoNCmF2cl9icmVha3BvaW50X2Zyb21fcGMgKENP UkVfQUREUiAqIHBjcHRyLCBpbnQgKmxlbnB0cikNCnsNCiAgICBzdGF0aWMg dW5zaWduZWQgY2hhciBhdnJfYnJlYWtfaW5zbiBbXSA9IHsgMHg5OCwgMHg5 NSB9Ow0KICAgICpsZW5wdHIgPSBzaXplb2YgKGF2cl9icmVha19pbnNuKTsN CiAgICByZXR1cm4gYXZyX2JyZWFrX2luc247DQp9DQoNCnN0YXRpYyB2b2lk DQphdnJfc2F2ZWRfcmVnc191bndpbmRlciAoc3RydWN0IGZyYW1lX2luZm8g Km5leHRfZnJhbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgQ09SRV9B RERSICp0aGlzX3NhdmVkX3JlZ3MsDQogICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHJlZ251bSwgaW50ICpvcHRpbWl6ZWRwLA0KICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gbHZhbF90eXBlICpsdmFscCwgQ09SRV9BRERS ICphZGRycCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJlYWxu dW1wLCB2b2lkICpidWZmZXJwKQ0Kew0KICBpZiAodGhpc19zYXZlZF9yZWdz W3JlZ251bV0gIT0gMCkNCiAgICB7DQogICAgICAqb3B0aW1pemVkcCA9IDA7 DQogICAgICAqbHZhbHAgPSBsdmFsX21lbW9yeTsNCiAgICAgICphZGRycCA9 IHRoaXNfc2F2ZWRfcmVnc1tyZWdudW1dOw0KICAgICAgKnJlYWxudW1wID0g LTE7DQogICAgICBpZiAoYnVmZmVycCAhPSBOVUxMKQ0KICAgICAgICB7DQog ICAgICAgICAgLyogUmVhZCB0aGUgdmFsdWUgaW4gZnJvbSBtZW1vcnkuICAq Lw0KICAgICAgICAgIHJlYWRfbWVtb3J5ICh0aGlzX3NhdmVkX3JlZ3NbcmVn bnVtXSwgYnVmZmVycCwNCiAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0 ZXJfc2l6ZSAoY3VycmVudF9nZGJhcmNoLCByZWdudW0pKTsNCiAgICAgICAg fQ0KDQogICAgICByZXR1cm47DQogICAgfQ0KDQogIC8qIE5vIGx1Y2ssIGFz c3VtZSB0aGlzIGFuZCB0aGUgbmV4dCBmcmFtZSBoYXZlIHRoZSBzYW1lIHJl Z2lzdGVyDQogICAgIHZhbHVlLiAgSWYgYSB2YWx1ZSBpcyBuZWVkZWQsIHBh c3MgdGhlIHJlcXVlc3Qgb24gZG93biB0aGUgY2hhaW47DQogICAgIG90aGVy d2lzZSBqdXN0IHJldHVybiBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHZhbHVl IGlzIGluIHRoZSBzYW1lDQogICAgIHJlZ2lzdGVyIGFzIHRoZSBuZXh0IGZy YW1lLiAgKi8NCiAgZnJhbWVfcmVnaXN0ZXJfdW53aW5kIChuZXh0X2ZyYW1l LCByZWdudW0sIG9wdGltaXplZHAsIGx2YWxwLCBhZGRycCwNCgkJCSByZWFs bnVtcCwgYnVmZmVycCk7DQp9DQoNCi8qIFB1dCBoZXJlIHRoZSBjb2RlIHRv IHN0b3JlLCBpbnRvIGZpLT5zYXZlZF9yZWdzLCB0aGUgYWRkcmVzc2VzIG9m DQogICB0aGUgc2F2ZWQgcmVnaXN0ZXJzIG9mIGZyYW1lIGRlc2NyaWJlZCBi eSBGUkFNRV9JTkZPLiAgVGhpcw0KICAgaW5jbHVkZXMgc3BlY2lhbCByZWdp c3RlcnMgc3VjaCBhcyBwYyBhbmQgZnAgc2F2ZWQgaW4gc3BlY2lhbCB3YXlz DQogICBpbiB0aGUgc3RhY2sgZnJhbWUuICBzcCBpcyBldmVuIG1vcmUgc3Bl Y2lhbDogdGhlIGFkZHJlc3Mgd2UgcmV0dXJuDQogICBmb3IgaXQgSVMgdGhl IHNwIGZvciB0aGUgbmV4dCBmcmFtZS4gKi8NCg0Kc3RydWN0IGF2cl91bndp bmRfY2FjaGUgKg0KYXZyX2ZyYW1lX3Vud2luZF9jYWNoZSAoc3RydWN0IGZy YW1lX2luZm8gKm5leHRfZnJhbWUsDQogICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSkNCnsNCiAgQ09SRV9BRERS IHBjOw0KICBVTE9OR0VTVCBwcmV2X3NwOw0KICBVTE9OR0VTVCB0aGlzX2Jh c2U7DQogIHN0cnVjdCBhdnJfdW53aW5kX2NhY2hlICppbmZvOw0KLyogICBV TE9OR0VTVCByZXR1cm5fcGM7ICovDQogIGludCBpOw0KDQogIGlmICgoKnRo aXNfcHJvbG9ndWVfY2FjaGUpKQ0KICAgIHJldHVybiAoKnRoaXNfcHJvbG9n dWVfY2FjaGUpOw0KDQogIGluZm8gPSBGUkFNRV9PQlNUQUNLX1pBTExPQyAo c3RydWN0IGF2cl91bndpbmRfY2FjaGUpOw0KICAoKnRoaXNfcHJvbG9ndWVf Y2FjaGUpID0gaW5mbzsNCiAgaW5mby0+c2F2ZWRfcmVncyA9IEZSQU1FX09C U1RBQ0tfQ0FMTE9DIChOVU1fUkVHUywgQ09SRV9BRERSKTsNCg0KICBpbmZv LT5zaXplID0gMDsNCiAgLyogUmV0dXJuIFBDIGlzIGVpdGhlciB0aGUgZmly c3QgMiBieXRlcyBvZiB0aGUgdGhpcyBmcmFtZSBvciB0aGUgbGFzdCB0d28N CiAgICAgYnl0ZXMgb2YgdGhlIHByZXZpc291cyBmcmFtZS4gTm90IHF1aXRl IHN1cmUgd2hlcmUgdGhlIGJvdW5kYXJ5IGlzDQogICAgIHlldC4gKi8NCi8q ICAgaW5mby0+cmV0dXJuX3BjID0gMDsgKi8NCiAgaW5mby0+c3Bfb2Zmc2V0 ID0gMDsNCiAgaW5mby0+cHJvbG9ndWVfdHlwZSA9IEFWUl9QUk9MT0dVRV9O T05FOw0KDQogIHBjID0gZnJhbWVfZnVuY191bndpbmQgKG5leHRfZnJhbWUp Ow0KDQogIGF2cl9zY2FuX3Byb2xvZ3VlIChwYywgaW5mbyk7DQoNCiAgaWYg KGluZm8tPnByb2xvZ3VlX3R5cGUgIT0gQVZSX1BST0xPR1VFX05PTkUpDQog ICAgew0KICAgICAgVUxPTkdFU1QgaGlnaF9iYXNlOyAgICAgICAvKiBIaWdo IGJ5dGUgb2YgRlAgKi8NCg0KICAgICAgLyogVGhlIFNQIHdhcyBtb3ZlZCB0 byB0aGUgRlAuICBUaGlzIGluZGljYXRlcyB0aGF0IGEgbmV3IGZyYW1lDQog ICAgICAgICB3YXMgY3JlYXRlZC4gIEdldCBUSElTIGZyYW1lJ3MgRlAgdmFs dWUgYnkgdW53aW5kaW5nIGl0IGZyb20NCiAgICAgICAgIHRoZSBuZXh0IGZy YW1lLiAgKi8NCiAgICAgIGZyYW1lX3Vud2luZF91bnNpZ25lZF9yZWdpc3Rl ciAobmV4dF9mcmFtZSwgQVZSX0ZQX1JFR05VTSwgJnRoaXNfYmFzZSk7DQog ICAgICBmcmFtZV91bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIgKG5leHRfZnJh bWUsIEFWUl9GUF9SRUdOVU0rMSwgJmhpZ2hfYmFzZSk7DQogICAgICB0aGlz X2Jhc2UgKz0gKGhpZ2hfYmFzZSA8PCA4KTsNCiAgICAgIA0KICAgICAgLyog VGhlIEZQIHBvaW50cyBhdCB0aGUgbGFzdCBzYXZlZCByZWdpc3Rlci4gIEFk anVzdCB0aGUgRlAgYmFjaw0KICAgICAgICAgdG8gYmVmb3JlIHRoZSBmaXJz dCBzYXZlZCByZWdpc3RlciBnaXZpbmcgdGhlIFNQLiAgKi8NCiAgICAgIHBy ZXZfc3AgPSB0aGlzX2Jhc2UgKyBpbmZvLT5zaXplOw0KICAgIH0NCiAgZWxz ZQ0KICAgIHsNCiAgICAgIC8qIEFzc3VtZSB0aGF0IHRoZSBGUCBpcyB0aGlz IGZyYW1lJ3MgU1AgYnV0IHdpdGggdGhhdCBwdXNoZWQNCiAgICAgICAgIHN0 YWNrIHNwYWNlIGFkZGVkIGJhY2suICAqLw0KICAgICAgZnJhbWVfdW53aW5k X3Vuc2lnbmVkX3JlZ2lzdGVyIChuZXh0X2ZyYW1lLCBBVlJfU1BfUkVHTlVN LCAmdGhpc19iYXNlKTsNCiAgICAgIHByZXZfc3AgPSB0aGlzX2Jhc2UgKyBp bmZvLT5zaXplOw0KICAgIH0NCg0KICBpbmZvLT5iYXNlID0gYXZyX21ha2Vf c2FkZHIgKHRoaXNfYmFzZSk7DQogIGluZm8tPnByZXZfc3AgPSBhdnJfbWFr ZV9zYWRkciAocHJldl9zcCk7DQoNCiAgLyogQWRqdXN0IGFsbCB0aGUgc2F2 ZWQgcmVnaXN0ZXJzIHNvIHRoYXQgdGhleSBjb250YWluIGFkZHJlc3NlcyBh bmQNCiAgICAgbm90IG9mZnNldHMuICAqLw0KICBmb3IgKGkgPSAwOyBpIDwg TlVNX1JFR1MgLSAxOyBpKyspDQogICAgaWYgKGluZm8tPnNhdmVkX3JlZ3Nb aV0pDQogICAgICB7DQoJaW5mby0+c2F2ZWRfcmVnc1tpXSA9IChpbmZvLT5w cmV2X3NwICsgaW5mby0+c2F2ZWRfcmVnc1tpXSk7DQogICAgICB9DQoNCiNp ZiAwDQogIC8qIENhbGN1bGF0ZSB0aGUgcmV0dXJuIFBDLiBNYWluIGhhcyBu byByZXR1cm4gdmFsdWUgb24gdGhlIHN0YWNrLCBzbyBpZ25vcmUNCiAgICAg dGhhdCBjYXNlLiAqLw0KDQogIGlmIChpbmZvLT5wcm9sb2d1ZV90eXBlICE9 IEFWUl9QUk9MT0dVRV9NQUlOKQ0KICAgIHsNCiAgICAgIGZyYW1lX3Vud2lu ZF91bnNpZ25lZF9yZWdpc3RlciAobmV4dF9mcmFtZSwgQVZSX1NQX1JFR05V TSwgJnJldHVybl9wYyk7DQogICAgICBpbmZvLT5yZXR1cm5fcGMgPSBhdnJf bWFrZV9pYWRkciAocmV0dXJuX3BjKTsNCiAgICB9DQojZW5kaWYNCg0KICBy ZXR1cm4gaW5mbzsNCn0NCg0Kc3RhdGljIENPUkVfQUREUg0KYXZyX3Vud2lu ZF9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCBmcmFtZV9p bmZvICpuZXh0X2ZyYW1lKQ0Kew0KICBVTE9OR0VTVCBwYzsNCg0KICBmcmFt ZV91bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIgKG5leHRfZnJhbWUsIEFWUl9Q Q19SRUdOVU0sICZwYyk7DQoNCiAgcmV0dXJuIGF2cl9tYWtlX2lhZGRyIChw Yyk7DQp9DQoNCi8qIEdpdmVuIGEgR0RCIGZyYW1lLCBkZXRlcm1pbmUgdGhl IGFkZHJlc3Mgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24ncw0KICAgZnJhbWUu ICBUaGlzIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgR0RCIGZyYW1l IHN0cnVjdC4gICovDQoNCnN0YXRpYyB2b2lkDQphdnJfZnJhbWVfdGhpc19p ZCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsDQogICAgICAgICAg ICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUsDQogICAgICAg ICAgICAgICAgICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQ0Kew0KICBz dHJ1Y3QgYXZyX3Vud2luZF9jYWNoZSAqaW5mbw0KICAgID0gYXZyX2ZyYW1l X3Vud2luZF9jYWNoZSAobmV4dF9mcmFtZSwgdGhpc19wcm9sb2d1ZV9jYWNo ZSk7DQogIENPUkVfQUREUiBiYXNlOw0KICBDT1JFX0FERFIgZnVuYzsNCiAg c3RydWN0IGZyYW1lX2lkIGlkOw0KDQogIC8qIFRoZSBGVU5DIGlzIGVhc3ku ICAqLw0KICBmdW5jID0gZnJhbWVfZnVuY191bndpbmQgKG5leHRfZnJhbWUp Ow0KDQogIC8qIFRoaXMgaXMgbWVhbnQgdG8gaGFsdCB0aGUgYmFja3RyYWNl IGF0ICJfc3RhcnQiLiAgTWFrZSBzdXJlIHdlDQogICAgIGRvbid0IGhhbHQg aXQgYXQgYSBnZW5lcmljIGR1bW15IGZyYW1lLiAqLw0KICBpZiAoaW5zaWRl X2VudHJ5X2ZpbGUgKGZ1bmMpKQ0KICAgIHJldHVybjsNCg0KICAvKiBIb3Bl ZnVsbHkgdGhlIHByb2xvZ3VlIGFuYWx5c2lzIGVpdGhlciBjb3JyZWN0bHkg ZGV0ZXJtaW5lZCB0aGUNCiAgICAgZnJhbWUncyBiYXNlICh3aGljaCBpcyB0 aGUgU1AgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUpLCBvciBzZXQNCiAgICAg dGhhdCBiYXNlIHRvICJOVUxMIi4gICovDQogIGJhc2UgPSBpbmZvLT5wcmV2 X3NwOw0KICBpZiAoYmFzZSA9PSAwKQ0KICAgIHJldHVybjsNCg0KICBpZCA9 IGZyYW1lX2lkX2J1aWxkIChiYXNlLCBmdW5jKTsNCg0KICAvKiBDaGVjayB0 aGF0IHdlJ3JlIG5vdCBnb2luZyByb3VuZCBpbiBjaXJjbGVzIHdpdGggdGhl IHNhbWUgZnJhbWUNCiAgICAgSUQgKGJ1dCBhdm9pZCBhcHBseWluZyB0aGUg dGVzdCB0byBzZW50aW5lbCBmcmFtZXMgd2hpY2ggZG8gZ28NCiAgICAgcm91 bmQgaW4gY2lyY2xlcykuICBDYW4ndCB1c2UgZnJhbWVfaWRfZXEoKSBhcyB0 aGF0IGRvZXNuJ3QgeWV0DQogICAgIGNvbXBhcmUgdGhlIGZyYW1lJ3MgUEMg dmFsdWUuICAqLw0KICBpZiAoZnJhbWVfcmVsYXRpdmVfbGV2ZWwgKG5leHRf ZnJhbWUpID49IDANCiAgICAgICYmIGdldF9mcmFtZV90eXBlIChuZXh0X2Zy YW1lKSAhPSBEVU1NWV9GUkFNRQ0KICAgICAgJiYgZnJhbWVfaWRfZXEgKGdl dF9mcmFtZV9pZCAobmV4dF9mcmFtZSksIGlkKSkNCiAgICByZXR1cm47DQoN CiAgKCp0aGlzX2lkKSA9IGlkOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYXZyX2Zy YW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2Zy YW1lLA0KCQkJICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSwNCgkJCSAg aW50IHJlZ251bSwgaW50ICpvcHRpbWl6ZWRwLA0KCQkJICBlbnVtIGx2YWxf dHlwZSAqbHZhbHAsIENPUkVfQUREUiAqYWRkcnAsDQoJCQkgIGludCAqcmVh bG51bXAsIHZvaWQgKmJ1ZmZlcnApDQp7DQogIHN0cnVjdCBhdnJfdW53aW5k X2NhY2hlICppbmZvDQogICAgPSBhdnJfZnJhbWVfdW53aW5kX2NhY2hlIChu ZXh0X2ZyYW1lLCB0aGlzX3Byb2xvZ3VlX2NhY2hlKTsNCg0KICBhdnJfc2F2 ZWRfcmVnc191bndpbmRlciAobmV4dF9mcmFtZSwgaW5mby0+c2F2ZWRfcmVn cywgcmVnbnVtLCBvcHRpbWl6ZWRwLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgbHZhbHAsIGFkZHJwLCByZWFsbnVtcCwgYnVmZmVycCk7DQp9DQoN CnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIGF2cl9mcmFtZV91 bndpbmQgPSB7DQogIE5PUk1BTF9GUkFNRSwNCiAgYXZyX2ZyYW1lX3RoaXNf aWQsDQogIGF2cl9mcmFtZV9wcmV2X3JlZ2lzdGVyDQp9Ow0KDQpjb25zdCBz dHJ1Y3QgZnJhbWVfdW53aW5kICoNCmF2cl9mcmFtZV9wIChDT1JFX0FERFIg cGMpDQp7DQogIHJldHVybiAmYXZyX2ZyYW1lX3Vud2luZDsNCn0NCg0Kc3Rh dGljIENPUkVfQUREUg0KYXZyX2ZyYW1lX2Jhc2VfYWRkcmVzcyAoc3RydWN0 IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQ0K ew0KICBzdHJ1Y3QgYXZyX3Vud2luZF9jYWNoZSAqaW5mbw0KICAgID0gYXZy X2ZyYW1lX3Vud2luZF9jYWNoZSAobmV4dF9mcmFtZSwgdGhpc19jYWNoZSk7 DQoNCiAgcmV0dXJuIGluZm8tPmJhc2U7DQp9DQoNCnN0YXRpYyBjb25zdCBz dHJ1Y3QgZnJhbWVfYmFzZSBhdnJfZnJhbWVfYmFzZSA9IHsNCiAgJmF2cl9m cmFtZV91bndpbmQsDQogIGF2cl9mcmFtZV9iYXNlX2FkZHJlc3MsDQogIGF2 cl9mcmFtZV9iYXNlX2FkZHJlc3MsDQogIGF2cl9mcmFtZV9iYXNlX2FkZHJl c3MNCn07DQoNCi8qIEFzc3VtaW5nIE5FWFRfRlJBTUUtPnByZXYgaXMgYSBk dW1teSwgcmV0dXJuIHRoZSBmcmFtZSBJRCBvZiB0aGF0DQogICBkdW1teSBm cmFtZS4gIFRoZSBmcmFtZSBJRCdzIGJhc2UgbmVlZHMgdG8gbWF0Y2ggdGhl IFRPUyB2YWx1ZQ0KICAgc2F2ZWQgYnkgc2F2ZV9kdW1teV9mcmFtZV90b3Mo KSwgYW5kIHRoZSBQQyBtYXRjaCB0aGUgZHVtbXkgZnJhbWUncw0KICAgYnJl YWtwb2ludC4gICovDQoNCnN0YXRpYyBzdHJ1Y3QgZnJhbWVfaWQNCmF2cl91 bndpbmRfZHVtbXlfaWQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1 Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkNCnsNCiAgVUxPTkdFU1QgYmFz ZTsNCg0KICBmcmFtZV91bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIgKG5leHRf ZnJhbWUsIEFWUl9TUF9SRUdOVU0sICZiYXNlKTsNCiAgcmV0dXJuIGZyYW1l X2lkX2J1aWxkIChhdnJfbWFrZV9zYWRkciAoYmFzZSksIGZyYW1lX3BjX3Vu d2luZCAobmV4dF9mcmFtZSkpOw0KfQ0KDQovKiBJbml0aWFsaXplIHRoZSBn ZGJhcmNoIHN0cnVjdHVyZSBmb3IgdGhlIEFWUidzLiAqLw0KDQpzdGF0aWMg c3RydWN0IGdkYmFyY2ggKg0KYXZyX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdk YmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMp DQp7DQogIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOw0KICBzdHJ1Y3QgZ2Ri YXJjaF90ZGVwICp0ZGVwOw0KDQogIC8qIEZpbmQgYSBjYW5kaWRhdGUgYW1v bmcgdGhlIGxpc3Qgb2YgcHJlLWRlY2xhcmVkIGFyY2hpdGVjdHVyZXMuICov DQogIGFyY2hlcyA9IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJj aGVzLCAmaW5mbyk7DQogIGlmIChhcmNoZXMgIT0gTlVMTCkNCiAgICByZXR1 cm4gYXJjaGVzLT5nZGJhcmNoOw0KDQogIC8qIE5vbmUgZm91bmQsIGNyZWF0 ZSBhIG5ldyBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgaW5mb3JtYXRpb24gcHJv dmlkZWQuICovDQogIHRkZXAgPSBYTUFMTE9DIChzdHJ1Y3QgZ2RiYXJjaF90 ZGVwKTsNCiAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVw KTsNCg0KICAvKiBJZiB3ZSBldmVyIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSB0 aGUgZGV2aWNlIHR5cGVzLCBkbyBpdCBoZXJlLiAqLw0KICBzd2l0Y2ggKGlu Zm8uYmZkX2FyY2hfaW5mby0+bWFjaCkNCiAgICB7DQogICAgY2FzZSBiZmRf bWFjaF9hdnIxOg0KICAgIGNhc2UgYmZkX21hY2hfYXZyMjoNCiAgICBjYXNl IGJmZF9tYWNoX2F2cjM6DQogICAgY2FzZSBiZmRfbWFjaF9hdnI0Og0KICAg IGNhc2UgYmZkX21hY2hfYXZyNToNCiAgICAgIGJyZWFrOw0KICAgIH0NCg0K ICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdkYmFyY2gsIDIgKiBUQVJHRVRf Q0hBUl9CSVQpOw0KICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCAy ICogVEFSR0VUX0NIQVJfQklUKTsNCiAgc2V0X2dkYmFyY2hfbG9uZ19iaXQg KGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KICBzZXRfZ2RiYXJj aF9sb25nX2xvbmdfYml0IChnZGJhcmNoLCA4ICogVEFSR0VUX0NIQVJfQklU KTsNCiAgc2V0X2dkYmFyY2hfcHRyX2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdF VF9DSEFSX0JJVCk7DQogIHNldF9nZGJhcmNoX2FkZHJfYml0IChnZGJhcmNo LCA0ICogVEFSR0VUX0NIQVJfQklUKTsNCg0KICBzZXRfZ2RiYXJjaF9mbG9h dF9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KICBzZXRf Z2RiYXJjaF9kb3VibGVfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJf QklUKTsNCiAgc2V0X2dkYmFyY2hfbG9uZ19kb3VibGVfYml0IChnZGJhcmNo LCA0ICogVEFSR0VUX0NIQVJfQklUKTsNCg0KICBzZXRfZ2RiYXJjaF9mbG9h dF9mb3JtYXQgKGdkYmFyY2gsICZmbG9hdGZvcm1hdF9pZWVlX3NpbmdsZV9s aXR0bGUpOw0KICBzZXRfZ2RiYXJjaF9kb3VibGVfZm9ybWF0IChnZGJhcmNo LCAmZmxvYXRmb3JtYXRfaWVlZV9zaW5nbGVfbGl0dGxlKTsNCiAgc2V0X2dk YmFyY2hfbG9uZ19kb3VibGVfZm9ybWF0IChnZGJhcmNoLCAmZmxvYXRmb3Jt YXRfaWVlZV9zaW5nbGVfbGl0dGxlKTsNCg0KICBzZXRfZ2RiYXJjaF9yZWFk X3BjIChnZGJhcmNoLCBhdnJfcmVhZF9wYyk7DQogIHNldF9nZGJhcmNoX3dy aXRlX3BjIChnZGJhcmNoLCBhdnJfd3JpdGVfcGMpOw0KICBzZXRfZ2RiYXJj aF9yZWFkX3NwIChnZGJhcmNoLCBhdnJfcmVhZF9zcCk7DQoNCiAgc2V0X2dk YmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gsIEFWUl9OVU1fUkVHUyk7DQoNCiAg c2V0X2dkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoLCBBVlJfU1BfUkVHTlVN KTsNCiAgc2V0X2dkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoLCBBVlJfUENf UkVHTlVNKTsNCg0KICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJh cmNoLCBhdnJfcmVnaXN0ZXJfbmFtZSk7DQogIHNldF9nZGJhcmNoX3JlZ2lz dGVyX3R5cGUgKGdkYmFyY2gsIGF2cl9yZWdpc3Rlcl90eXBlKTsNCg0KICBz ZXRfZ2RiYXJjaF9wcmludF9pbnNuIChnZGJhcmNoLCBwcmludF9pbnNuX2F2 cik7DQoNCiAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9hZGRyZXNzIChnZGJh cmNoLCBhdnJfY2FsbF9kdW1teV9hZGRyZXNzKTsNCg0KICBzZXRfZ2RiYXJj aF9hZGRyZXNzX3RvX3BvaW50ZXIgKGdkYmFyY2gsIGF2cl9hZGRyZXNzX3Rv X3BvaW50ZXIpOw0KICBzZXRfZ2RiYXJjaF9wb2ludGVyX3RvX2FkZHJlc3Mg KGdkYmFyY2gsIGF2cl9wb2ludGVyX3RvX2FkZHJlc3MpOw0KDQogIHNldF9n ZGJhcmNoX3VzZV9zdHJ1Y3RfY29udmVudGlvbiAoZ2RiYXJjaCwgZ2VuZXJp Y191c2Vfc3RydWN0X2NvbnZlbnRpb24pOw0KDQogIHNldF9nZGJhcmNoX3Nr aXBfcHJvbG9ndWUgKGdkYmFyY2gsIGF2cl9za2lwX3Byb2xvZ3VlKTsNCiAg c2V0X2dkYmFyY2hfaW5uZXJfdGhhbiAoZ2RiYXJjaCwgY29yZV9hZGRyX2xl c3N0aGFuKTsNCg0KICBzZXRfZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFr IChnZGJhcmNoLCAwKTsNCiAgc2V0X2dkYmFyY2hfYnJlYWtwb2ludF9mcm9t X3BjIChnZGJhcmNoLCBhdnJfYnJlYWtwb2ludF9mcm9tX3BjKTsNCg0KICBz ZXRfZ2RiYXJjaF9mdW5jdGlvbl9zdGFydF9vZmZzZXQgKGdkYmFyY2gsIDAp Ow0KICBzZXRfZ2RiYXJjaF9yZW1vdGVfdHJhbnNsYXRlX3hmZXJfYWRkcmVz cyAoZ2RiYXJjaCwNCgkJCQkJICAgICBhdnJfcmVtb3RlX3RyYW5zbGF0ZV94 ZmVyX2FkZHJlc3MpOw0KICBzZXRfZ2RiYXJjaF9mcmFtZV9hcmdzX3NraXAg KGdkYmFyY2gsIDApOw0KICBzZXRfZ2RiYXJjaF9mcmFtZWxlc3NfZnVuY3Rp b25faW52b2NhdGlvbiAoZ2RiYXJjaCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lbGVzc19sb29rX2Zvcl9w cm9sb2d1ZSk7DQogIHNldF9nZGJhcmNoX2ZyYW1lX2FyZ3NfYWRkcmVzcyAo Z2RiYXJjaCwgYXZyX2ZyYW1lX2FkZHJlc3MpOw0KICBzZXRfZ2RiYXJjaF9m cmFtZV9sb2NhbHNfYWRkcmVzcyAoZ2RiYXJjaCwgYXZyX2ZyYW1lX2FkZHJl c3MpOw0KICBzZXRfZ2RiYXJjaF9mcmFtZV9udW1fYXJncyAoZ2RiYXJjaCwg ZnJhbWVfbnVtX2FyZ3NfdW5rbm93bik7DQoNCiAgc2V0X2dkYmFyY2hfY29u dmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIgKGdkYmFyY2gsDQoJCQkJCSAgYXZy X2NvbnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyKTsNCg0KICBmcmFtZV91bndp bmRfYXBwZW5kX3ByZWRpY2F0ZSAoZ2RiYXJjaCwgYXZyX2ZyYW1lX3ApOw0K ICBmcmFtZV9iYXNlX3NldF9kZWZhdWx0IChnZGJhcmNoLCAmYXZyX2ZyYW1l X2Jhc2UpOw0KDQogIHNldF9nZGJhcmNoX3Vud2luZF9kdW1teV9pZCAoZ2Ri YXJjaCwgYXZyX3Vud2luZF9kdW1teV9pZCk7DQogIHNldF9nZGJhcmNoX3Nh dmVfZHVtbXlfZnJhbWVfdG9zIChnZGJhcmNoLCBnZW5lcmljX3NhdmVfZHVt bXlfZnJhbWVfdG9zKTsNCg0KICBzZXRfZ2RiYXJjaF91bndpbmRfcGMgKGdk YmFyY2gsIGF2cl91bndpbmRfcGMpOw0KDQogIHJldHVybiBnZGJhcmNoOw0K fQ0KDQovKiBTZW5kIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgYXZyIHJlbW90 ZSB0YXJnZXQgYXNraW5nIGZvciB2YWx1ZXMgb2YgdGhlIGlvDQogICByZWdp c3RlcnMuIElmIGFyZ3MgcGFyYW1ldGVyIGlzIG5vdCBOVUxMLCB0aGVuIHRo ZSB1c2VyIGhhcyByZXF1ZXN0ZWQgaW5mbw0KICAgb24gYSBzcGVjaWZpYyBp byByZWdpc3RlciBbVGhpcyBzdGlsbCBuZWVkcyBpbXBsZW1lbnRlZCBhbmQg aXMgaWdub3JlZCBmb3INCiAgIG5vd10uIFRoZSBxdWVyeSBzdHJpbmcgc2hv dWxkIGJlIG9uZSBvZiB0aGVzZSBmb3JtczoNCg0KICAgIlJhdnIuaW9fcmVn IiAtPiByZXBseSBpcyAiTk4iIG51bWJlciBvZiBpbyByZWdpc3RlcnMNCg0K ICAgIlJhdnIuaW9fcmVnOmFkZHIsbGVuIiB3aGVyZSBhZGRyIGlzIGZpcnN0 IHJlZ2lzdGVyIGFuZCBsZW4gaXMgbnVtYmVyIG9mDQogICByZWdpc3RlcnMg dG8gYmUgcmVhZC4gVGhlIHJlcGx5IHNob3VsZCBiZSAiPE5BTUU+LFZWOyIg Zm9yIGVhY2ggaW8gcmVnaXN0ZXINCiAgIHdoZXJlLCA8TkFNRT4gaXMgYSBz dHJpbmcsIGFuZCBWViBpcyB0aGUgaGV4IHZhbHVlIG9mIHRoZSByZWdpc3Rl ci4NCg0KICAgQWxsIGlvIHJlZ2lzdGVycyBhcmUgOC1iaXQuICovDQoNCnN0 YXRpYyB2b2lkDQphdnJfaW9fcmVnX3JlYWRfY29tbWFuZCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KQ0Kew0KICBpbnQgYnVmc2l6ID0gMDsNCiAgY2hh ciBidWZbNDAwXTsNCiAgY2hhciBxdWVyeVs0MDBdOw0KICBjaGFyICpwOw0K ICB1bnNpZ25lZCBpbnQgbnJlZyA9IDA7DQogIHVuc2lnbmVkIGludCB2YWw7 DQogIGludCBpLCBqLCBrLCBzdGVwOw0KDQovKiAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRlcnIsICJERUJVRzogYXZyX2lvX3JlZ19yZWFkX2Nv bW1hbmQgIiAqLw0KLyogICAgICAgICAgICAgICAgICAgICAgICAiKFwiJXNc IiwgJWQpXG4iLCBhcmdzLCBmcm9tX3R0eSk7ICovDQoNCiAgaWYgKCFjdXJy ZW50X3RhcmdldC50b19xdWVyeSkNCiAgICB7DQogICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRlcnIsDQoJCQkgICJFUlI6IGluZm8gaW9fcmVn aXN0ZXJzIE5PVCBzdXBwb3J0ZWQgYnkgY3VycmVudCAiDQogICAgICAgICAg ICAgICAgICAgICAgICAgICJ0YXJnZXRcbiIpOw0KICAgICAgcmV0dXJuOw0K ICAgIH0NCg0KICAvKiBKdXN0IGdldCB0aGUgbWF4aW11bSBidWZmZXIgc2l6 ZS4gKi8NCiAgdGFyZ2V0X3F1ZXJ5ICgoaW50KSAnUicsIDAsIDAsICZidWZz aXopOw0KICBpZiAoYnVmc2l6ID4gc2l6ZW9mIChidWYpKQ0KICAgIGJ1ZnNp eiA9IHNpemVvZiAoYnVmKTsNCg0KICAvKiBGaW5kIG91dCBob3cgbWFueSBp byByZWdpc3RlcnMgdGhlIHRhcmdldCBoYXMuICovDQogIHN0cmNweSAocXVl cnksICJhdnIuaW9fcmVnIik7DQogIHRhcmdldF9xdWVyeSAoKGludCkgJ1In LCBxdWVyeSwgYnVmLCAmYnVmc2l6KTsNCg0KICBpZiAoc3RybmNtcCAoYnVm LCAiIiwgYnVmc2l6KSA9PSAwKQ0KICAgIHsNCiAgICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGVyciwNCgkJCSAgImluZm8gaW9fcmVnaXN0ZXJz IE5PVCBzdXBwb3J0ZWQgYnkgdGFyZ2V0XG4iKTsNCiAgICAgIHJldHVybjsN CiAgICB9DQoNCiAgaWYgKHNzY2FuZiAoYnVmLCAiJXgiLCAmbnJlZykgIT0g MSkNCiAgICB7DQogICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRl cnIsDQoJCQkgICJFcnJvciBmZXRjaGluZyBudW1iZXIgb2YgaW8gcmVnaXN0 ZXJzXG4iKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgcmVpbml0aWFs aXplX21vcmVfZmlsdGVyICgpOw0KDQogIHByaW50Zl91bmZpbHRlcmVkICgi VGFyZ2V0IGhhcyAldSBpbyByZWdpc3RlcnM6XG5cbiIsIG5yZWcpOw0KDQog IC8qIG9ubHkgZmV0Y2ggdXAgdG8gOCByZWdpc3RlcnMgYXQgYSB0aW1lIHRv IGtlZXAgdGhlIGJ1ZmZlciBzbWFsbCAqLw0KICBzdGVwID0gODsNCg0KICBm b3IgKGkgPSAwOyBpIDwgbnJlZzsgaSArPSBzdGVwKQ0KICAgIHsNCiAgICAg IC8qIGhvdyBtYW55IHJlZ2lzdGVycyB0aGlzIHJvdW5kPyAqLw0KICAgICAg aiA9IHN0ZXA7DQogICAgICBpZiAoKGkraikgPj0gbnJlZykNCiAgICAgICAg aiA9IG5yZWcgLSBpOyAgICAgICAgICAgLyogbGFzdCBibG9jayBpcyBsZXNz IHRoYW4gOCByZWdpc3RlcnMgKi8NCg0KICAgICAgc25wcmludGYgKHF1ZXJ5 LCBzaXplb2YgKHF1ZXJ5KSAtIDEsICJhdnIuaW9fcmVnOiV4LCV4IiwgaSwg aik7DQogICAgICB0YXJnZXRfcXVlcnkgKChpbnQpICdSJywgcXVlcnksIGJ1 ZiwgJmJ1ZnNpeik7DQoNCiAgICAgIHAgPSBidWY7DQogICAgICBmb3IgKGsg PSBpOyBrIDwgKGkgKyBqKTsgaysrKQ0KCXsNCgkgIGlmIChzc2NhbmYgKHAs ICIlW14sXSwleDsiLCBxdWVyeSwgJnZhbCkgPT0gMikNCgkgICAgew0KCSAg ICAgIHByaW50Zl9maWx0ZXJlZCAoIlslMDJ4XSAlLTE1cyA6ICUwMnhcbiIs IGssIHF1ZXJ5LCB2YWwpOw0KCSAgICAgIHdoaWxlICgoKnAgIT0gJzsnKSAm JiAoKnAgIT0gJ1wwJykpDQoJCXArKzsNCgkgICAgICBwKys7CQkvKiBza2lw IG92ZXIgJzsnICovDQoJICAgICAgaWYgKCpwID09ICdcMCcpDQoJCWJyZWFr Ow0KCSAgICB9DQoJfQ0KICAgIH0NCn0NCg0Kdm9pZA0KX2luaXRpYWxpemVf YXZyX3RkZXAgKHZvaWQpDQp7DQogIHJlZ2lzdGVyX2dkYmFyY2hfaW5pdCAo YmZkX2FyY2hfYXZyLCBhdnJfZ2RiYXJjaF9pbml0KTsNCg0KICAvKiBBZGQg YSBuZXcgY29tbWFuZCB0byBhbGxvdyB0aGUgdXNlciB0byBxdWVyeSB0aGUg YXZyIHJlbW90ZSB0YXJnZXQgZm9yDQogICAgIHRoZSB2YWx1ZXMgb2YgdGhl IGlvIHNwYWNlIHJlZ2lzdGVycyBpbiBhIHNhbmVyIHdheSB0aGFuIGp1c3Qg dXNpbmcNCiAgICAgYHgvTk5OYiBBRERSYC4gKi8NCg0KICAvKiBGSVhNRTog VFJvdGgvMjAwMi0wMi0xODogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2hh bmdlZCB0byAnaW5mbyBhdnINCiAgICAgaW9fcmVnaXN0ZXJzJyB0byBzaWdu aWZ5IGl0IGlzIG5vdCBhdmFpbGFibGUgb24gb3RoZXIgcGxhdGZvcm1zLiAq Lw0KDQogIGFkZF9jbWQgKCJpb19yZWdpc3RlcnMiLCBjbGFzc19pbmZvLCBh dnJfaW9fcmVnX3JlYWRfY29tbWFuZCwNCgkgICAicXVlcnkgcmVtb3RlIGF2 ciB0YXJnZXQgZm9yIGlvIHNwYWNlIHJlZ2lzdGVyIHZhbHVlcyIsICZpbmZv bGlzdCk7DQp9DQo= ---1463804408-104843186-1054859453=:29024--