Return-Path: Message-ID: <20050318104405.27323.qmail@web60903.mail.yahoo.com> From: Ka Kin Cheung Subject: Re: [Bluez-users] adding sdp service record attributes To: bluez-users@lists.sourceforge.net In-Reply-To: 6667 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-837334115-1111142644=:25622" Sender: bluez-users-admin@lists.sourceforge.net Errors-To: bluez-users-admin@lists.sourceforge.net Reply-To: bluez-users@lists.sourceforge.net List-Unsubscribe: , List-Id: BlueZ users List-Post: List-Help: List-Subscribe: , List-Archive: Date: Fri, 18 Mar 2005 18:44:04 +0800 (CST) --0-837334115-1111142644=:25622 Content-Type: text/plain; charset=big5 Content-Transfer-Encoding: 8bit Content-Id: Content-Disposition: inline Hi all! I've coded myself about how to add SDP services and its attributes. But everytime I reboot Linux, the service record handle and attribute do not exist, so I have to run my program every time so that the record and attribute are set. Also, even though I added the headset service in my PC, T610 still searched my PC as computer, not headset instead. So, I wish to ask 3 questions: 1.Is there any extra thing I have to put so that the service record and attributes are set in my PC permanently and not being erased after reboot? 2.After I add the service record and attribute, I wish to let T610 to search my PC as headset. So, is there any extra thing that I have to put in my code? 3.Is it possible that to browse the services in T610, and even other mobile devices, and then add the service records and attributes automatically? Attached is my code that I've written referencing to sdptool.c. Hope you can give me solution about it. Thank you very much. Michael _______________________________________________________________________ Yahoo! ?u???C - ???m?????u?X?????u???I http://toolbar.yahoo.com.hk --0-837334115-1111142644=:25622 Content-Type: application/octet-stream; name="bic_sdp2.c" Content-Transfer-Encoding: base64 Content-Description: bic_sdp2.c Content-Disposition: attachment; filename="bic_sdp2.c" I2lmZGVmIEhBVkVfQ09ORklHX0gNCiNpbmNsdWRlIDxjb25maWcuaD4NCiNl bmRpZg0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxlcnJuby5o Pg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGdldG9wdC5oPg0K I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCg0KI2luY2x1ZGUgPGJsdWV0b290 aC9ibHVldG9vdGguaD4NCiNpbmNsdWRlIDxibHVldG9vdGgvaGNpLmg+DQoj aW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4NCiNpbmNsdWRlIDxibHVl dG9vdGgvc2RwLmg+DQojaW5jbHVkZSA8Ymx1ZXRvb3RoL3NkcF9saWIuaD4N Cg0KI2RlZmluZSBmb3JfZWFjaF9vcHQob3B0LCBsb25nLCBzaG9ydCkgd2hp bGUgKChvcHQ9Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgc2hvcnQgPyBzaG9y dDoiKyIsIGxvbmcsIDApKSAhPSAtMSkNCg0KLyoNCiAqIENvbnZlcnQgYSBz dHJpbmcgdG8gYSBCREFERFIsIHdpdGggYSBmZXcgImVuaGFuY2VtZW50cyIg LSBKZWFuIElJDQogKi8NCnN0YXRpYyBpbnQgZXN0cjJiYShjaGFyICpzdHIs IGJkYWRkcl90ICpiYSkNCnsNCgkvKiBPbmx5IHRyYXAgImxvY2FsIiwgImFu eSIgaXMgYWxyZWFkeSBkZWFsdCB3aXRoICovDQoJaWYoIXN0cmNtcChzdHIs ICJsb2NhbCIpKSB7DQoJCWJhY3B5KGJhLCBCREFERFJfTE9DQUwpOw0KCQly ZXR1cm4gMDsNCgl9DQoJcmV0dXJuIHN0cjJiYShzdHIsIGJhKTsNCn0NCg0K LyogUGFzcyBhcmdzIHRvIHRoZSBpbnF1aXJ5L3NlYXJjaCBoYW5kbGVyICov DQpzdHJ1Y3Qgc2VhcmNoX2NvbnRleHQgew0KCWNoYXIJCSpzdmM7CQkvKiBT ZXJ2aWNlICovDQoJdXVpZF90CQlncm91cDsJCS8qIEJyb3dzZSBncm91cCAq Lw0KCWludAkJdHJlZTsJCS8qIERpc3BsYXkgZnVsbCBhdHRyaWJ1dGUgdHJl ZSAqLw0KCXVpbnQzMl90CWhhbmRsZTsJCS8qIFNlcnZpY2UgcmVjb3JkIGhh bmRsZSAqLw0KfTsNCg0KdHlwZWRlZiBpbnQgKCpoYW5kbGVyX3QpKGJkYWRk cl90ICpiZGFkZHIsIHN0cnVjdCBzZWFyY2hfY29udGV4dCAqYXJnKTsNCg0K c3RhdGljIGNoYXIgVVVJRF9zdHJbTUFYX0xFTl9VVUlEX1NUUl07DQpzdGF0 aWMgYmRhZGRyX3QgaW50ZXJmYWNlOw0KDQovKiBEZWZpbml0aW9uIG9mIGF0 dHJpYnV0ZSBtZW1iZXJzICovDQpzdHJ1Y3QgbWVtYmVyX2RlZiB7DQoJY2hh ciAqbmFtZTsNCn07DQoNCi8qIERlZmluaXRpb24gb2YgYW4gYXR0cmlidXRl ICovDQpzdHJ1Y3QgYXR0cmliX2RlZiB7DQoJaW50CQkJbnVtOwkJLyogTnVt ZXJpYyBJRCAtIDE2IGJpdHMgKi8NCgljaGFyCQkJKm5hbWU7CQkvKiBVc2Vy IHJlYWRhYmxlIG5hbWUgKi8NCglzdHJ1Y3QgbWVtYmVyX2RlZgkqbWVtYmVy czsJLyogRGVmaW5pdGlvbiBvZiBhdHRyaWJ1dGUgYXJncyAqLw0KCWludAkJ CW1lbWJlcl9tYXg7CS8qIE1heCBvZiBhdHRyaWJ1dGUgYXJnIGRlZmluaXRp b25zICovDQp9Ow0KDQovKiBEZWZpbml0aW9uIG9mIGEgc2VydmljZSBvciBw cm90b2NvbCAqLw0Kc3RydWN0IHV1aWRfZGVmIHsNCglpbnQJCQludW07CQkv KiBOdW1lcmljIElEIC0gMTYgYml0cyAqLw0KCWNoYXIJCQkqbmFtZTsJCS8q IFVzZXIgcmVhZGFibGUgbmFtZSAqLw0KCXN0cnVjdCBhdHRyaWJfZGVmCSph dHRyaWJzOwkvKiBTcGVjaWZpYyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgKi8N CglpbnQJCQlhdHRyaWJfbWF4OwkvKiBNYXggb2YgYXR0cmlidXRlIGRlZmlu aXRpb25zICovDQp9Ow0KDQovKiBDb250ZXh0IGluZm9ybWF0aW9uIGFib3V0 IGN1cnJlbnQgYXR0cmlidXRlICovDQpzdHJ1Y3QgYXR0cmliX2NvbnRleHQg ew0KCXN0cnVjdCB1dWlkX2RlZgkJKnNlcnZpY2U7CS8qIFNlcnZpY2UgVVVJ RCwgaWYga25vd24gKi8NCglzdHJ1Y3QgYXR0cmliX2RlZgkqYXR0cmliOwkv KiBEZXNjcmlwdGlvbiBvZiB0aGUgYXR0cmlidXRlICovDQoJaW50CQkJbWVt YmVyX2luZGV4OwkvKiBJbmRleCBvZiBjdXJyZW50IGF0dHJpYnV0ZSBtZW1i ZXIgKi8NCn07DQoNCi8qIENvbnRleHQgaW5mb3JtYXRpb24gYWJvdXQgdGhl IHdob2xlIHNlcnZpY2UgKi8NCnN0cnVjdCBzZXJ2aWNlX2NvbnRleHQgew0K CXN0cnVjdCB1dWlkX2RlZgkJKnNlcnZpY2U7CS8qIFNlcnZpY2UgVVVJRCwg aWYga25vd24gKi8NCn07DQoNCi8qIEFsbG93IHVzIHRvIGRvIG5pY2UgZm9y bWF0dGluZyBvZiB0aGUgbGlzdHMgKi8NCnN0YXRpYyBjaGFyICppbmRlbnRf c3BhY2VzID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjsNCg0KLyogSUQgb2YgdGhlIHNlcnZpY2UgYXR0cmlidXRlLg0K ICogTW9zdCBhdHRyaWJ1dGVzIGFmdGVyIDB4MjAwIGFyZSBkZWZpbmVkIGJh c2VkIG9uIHRoZSBzZXJ2aWNlLCBzbw0KICogd2UgbmVlZCB0byBmaW5kIHdo YXQgaXMgdGhlIHNlcnZpY2UgKHdoaWNoIGlzIG1lc3N5KSAtIEplYW4gSUkg Ki8NCiNkZWZpbmUgU0VSVklDRV9BVFRSCTB4MQ0KDQovKiBEZWZpbml0aW9u IG9mIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgaW4gcHJvdG9jb2wgbGlzdCAq Lw0Kc3RhdGljIHN0cnVjdCBtZW1iZXJfZGVmIHByb3RvY29sX21lbWJlcnNb XSA9IHsNCgl7ICJQcm90b2NvbCIJCX0sDQoJeyAiQ2hhbm5lbC9Qb3J0Igl9 LA0KCXsgIlZlcnNpb24iCQl9LA0KfTsNCg0KLyogRGVmaW5pdGlvbiBvZiB0 aGUgb3B0aW9uYWwgYXJndW1lbnRzIGluIHByb2ZpbGUgbGlzdCAqLw0Kc3Rh dGljIHN0cnVjdCBtZW1iZXJfZGVmIHByb2ZpbGVfbWVtYmVyc1tdID0gew0K CXsgIlByb2ZpbGUiCX0sDQoJeyAiVmVyc2lvbiIJfSwNCn07DQoNCi8qIERl ZmluaXRpb24gb2YgdGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBpbiBMYW5ndWFn ZSBsaXN0ICovDQpzdGF0aWMgc3RydWN0IG1lbWJlcl9kZWYgbGFuZ3VhZ2Vf bWVtYmVyc1tdID0gew0KCXsgIkNvZGUgSVNPNjM5IgkJfSwNCgl7ICJFbmNv ZGluZyIJCX0sDQoJeyAiQmFzZSBPZmZzZXQiCQl9LA0KfTsNCg0KLyogTmFt ZSBvZiB0aGUgdmFyaW91cyBjb21tb24gYXR0cmlidXRlcy4gU2VlIEJUIGFz c2lnbmVkIG51bWJlcnMgKi8NCnN0YXRpYyBzdHJ1Y3QgYXR0cmliX2RlZiBh dHRyaWJfbmFtZXNbXSA9IHsNCgl7IDB4MCwgIlNlcnZpY2VSZWNvcmRIYW5k bGUiLCBOVUxMLCAwIH0sDQoJeyAweDEsICJTZXJ2aWNlQ2xhc3NJRExpc3Qi LCBOVUxMLCAwIH0sDQoJeyAweDIsICJTZXJ2aWNlUmVjb3JkU3RhdGUiLCBO VUxMLCAwIH0sDQoJeyAweDMsICJTZXJ2aWNlSUQiLCBOVUxMLCAwIH0sDQoJ eyAweDQsICJQcm90b2NvbERlc2NyaXB0b3JMaXN0IiwNCgkJcHJvdG9jb2xf bWVtYmVycywgc2l6ZW9mKHByb3RvY29sX21lbWJlcnMpL3NpemVvZihzdHJ1 Y3QgbWVtYmVyX2RlZikgfSwNCgl7IDB4NSwgIkJyb3dzZUdyb3VwTGlzdCIs IE5VTEwsIDAgfSwNCgl7IDB4NiwgIkxhbmd1YWdlQmFzZUF0dHJpYnV0ZUlE TGlzdCIsDQoJCWxhbmd1YWdlX21lbWJlcnMsIHNpemVvZihsYW5ndWFnZV9t ZW1iZXJzKS9zaXplb2Yoc3RydWN0IG1lbWJlcl9kZWYpIH0sDQoJeyAweDcs ICJTZXJ2aWNlSW5mb1RpbWVUb0xpdmUiLCBOVUxMLCAwIH0sDQoJeyAweDgs ICJTZXJ2aWNlQXZhaWxhYmlsaXR5IiwgTlVMTCwgMCB9LA0KCXsgMHg5LCAi Qmx1ZXRvb3RoUHJvZmlsZURlc2NyaXB0b3JMaXN0IiwNCgkJcHJvZmlsZV9t ZW1iZXJzLCBzaXplb2YocHJvZmlsZV9tZW1iZXJzKS9zaXplb2Yoc3RydWN0 IG1lbWJlcl9kZWYpIH0sDQoJeyAweEEsICJEb2N1bWVudGF0aW9uVVJMIiwg TlVMTCwgMCB9LA0KCXsgMHhCLCAiQ2xpZW50RXhlY3V0YWJsZVVSTCIsIE5V TEwsIDAgfSwNCgl7IDB4QywgIkljb25VUkwiLCBOVUxMLCAwIH0sDQoJeyAw eEQsICJBZGRpdGlvbmFsUHJvdG9jb2xEZXNjcmlwdG9yTGlzdHMiLCBOVUxM LCAwIH0sDQoJLyogRGVmaW5pdGlvbnMgYWZ0ZXIgdGhhdCBhcmUgdHJpY2t5 IChwZXIgcHJvZmlsZSBvciBvZmZzZXQpICovDQp9Ow0KDQpjb25zdCBpbnQg YXR0cmliX21heCA9IHNpemVvZihhdHRyaWJfbmFtZXMpL3NpemVvZihzdHJ1 Y3QgYXR0cmliX2RlZik7DQoNCi8qIE5hbWUgb2YgdGhlIHZhcmlvdXMgU1BE IGF0dHJpYnV0ZXMuIFNlZSBCVCBhc3NpZ25lZCBudW1iZXJzICovDQpzdGF0 aWMgc3RydWN0IGF0dHJpYl9kZWYgc2RwX2F0dHJpYl9uYW1lc1tdID0gew0K CXsgMHgyMDAsICJWZXJzaW9uTnVtYmVyTGlzdCIsIE5VTEwsIDAgfSwNCgl7 IDB4MjAxLCAiU2VydmljZURhdGFiYXNlU3RhdGUiLCBOVUxMLCAwIH0sDQp9 Ow0KDQovKiBOYW1lIG9mIHRoZSB2YXJpb3VzIFNQRCBhdHRyaWJ1dGVzLiBT ZWUgQlQgYXNzaWduZWQgbnVtYmVycyAqLw0Kc3RhdGljIHN0cnVjdCBhdHRy aWJfZGVmIGJyb3dzZV9hdHRyaWJfbmFtZXNbXSA9IHsNCgl7IDB4MjAwLCAi R3JvdXBJRCIsIE5VTEwsIDAgfSwNCn07DQoNCi8qIE5hbWUgb2YgdGhlIHZh cmlvdXMgRGV2aWNlIElEIGF0dHJpYnV0ZXMuIFNlZSBEZXZpY2UgSWQgc3Bl Yy4gKi8NCnN0YXRpYyBzdHJ1Y3QgYXR0cmliX2RlZiBkaWRfYXR0cmliX25h bWVzW10gPSB7DQoJeyAweDIwMCwgIlNwZWNpZmljYXRpb25JRCIsIE5VTEws IDAgfSwNCgl7IDB4MjAxLCAiVmVuZG9ySUQiLCBOVUxMLCAwIH0sDQoJeyAw eDIwMiwgIlByb2R1Y3RJRCIsIE5VTEwsIDAgfSwNCgl7IDB4MjAzLCAiVmVy c2lvbiIsIE5VTEwsIDAgfSwNCgl7IDB4MjA0LCAiUHJpbWFyeVJlY29yZCIs IE5VTEwsIDAgfSwNCgl7IDB4MjA1LCAiVmVuZG9ySURTb3VyY2UiLCBOVUxM LCAwIH0sDQp9Ow0KDQovKiBOYW1lIG9mIHRoZSB2YXJpb3VzIEhJRCBhdHRy aWJ1dGVzLiBTZWUgSElEIHNwZWMuICovDQpzdGF0aWMgc3RydWN0IGF0dHJp Yl9kZWYgaGlkX2F0dHJpYl9uYW1lc1tdID0gew0KCXsgMHgyMDAsICJEZXZp Y2VSZWxlYXNlTnVtIiwgTlVMTCwgMCB9LA0KCXsgMHgyMDEsICJQYXJzZXJW ZXJzaW9uIiwgTlVMTCwgMCB9LA0KCXsgMHgyMDIsICJEZXZpY2VTdWJjbGFz cyIsIE5VTEwsIDAgfSwNCgl7IDB4MjAzLCAiQ291bnRyeUNvZGUiLCBOVUxM LCAwIH0sDQoJeyAweDIwNCwgIlZpcnR1YWxDYWJsZSIsIE5VTEwsIDAgfSwN Cgl7IDB4MjA1LCAiUmVjb25uZWN0SW5pdGlhdGUiLCBOVUxMLCAwIH0sDQoJ eyAweDIwNiwgIkRlc2NyaXB0b3JMaXN0IiwgTlVMTCwgMCB9LA0KCXsgMHgy MDcsICJMYW5nSURCYXNlTGlzdCIsIE5VTEwsIDAgfSwNCgl7IDB4MjA4LCAi U0RQRGlzYWJsZSIsIE5VTEwsIDAgfSwNCgl7IDB4MjA5LCAiQmF0dGVyeVBv d2VyIiwgTlVMTCwgMCB9LA0KCXsgMHgyMGEsICJSZW1vdGVXYWtldXAiLCBO VUxMLCAwIH0sDQoJeyAweDIwYiwgIlByb2ZpbGVWZXJzaW9uIiwgTlVMTCwg MCB9LA0KCXsgMHgyMGMsICJTdXBlcnZpc2lvblRpbWVvdXQiLCBOVUxMLCAw IH0sDQoJeyAweDIwZCwgIk5vcm1hbGx5Q29ubmVjdGFibGUiLCBOVUxMLCAw IH0sDQoJeyAweDIwZSwgIkJvb3REZXZpY2UiLCBOVUxMLCAwIH0sDQp9Ow0K DQovKiBOYW1lIG9mIHRoZSB2YXJpb3VzIFBBTiBhdHRyaWJ1dGVzLiBTZWUg QlQgYXNzaWduZWQgbnVtYmVycyAqLw0KLyogTm90ZSA6IHRob3NlIG5lZWQg dG8gYmUgZG91YmxlIGNoZWNrZWQgLSBKZWFuIElJICovDQpzdGF0aWMgc3Ry dWN0IGF0dHJpYl9kZWYgcGFuX2F0dHJpYl9uYW1lc1tdID0gew0KCXsgMHgy MDAsICJJcFN1Ym5ldCIsIE5VTEwsIDAgfSwJCS8qIE9ic29sZXRlID8/PyAq Lw0KCXsgMHgzMEEsICJTZWN1cml0eURlc2NyaXB0aW9uIiwgTlVMTCwgMCB9 LA0KCXsgMHgzMEIsICJOZXRBY2Nlc3NUeXBlIiwgTlVMTCwgMCB9LA0KCXsg MHgzMEMsICJNYXhOZXRBY2Nlc3NyYXRlIiwgTlVMTCwgMCB9LA0KCXsgMHgz MEQsICJJUHY0U3VibmV0IiwgTlVMTCwgMCB9LA0KCXsgMHgzMEUsICJJUHY2 U3VibmV0IiwgTlVMTCwgMCB9LA0KfTsNCg0KLyogTmFtZSBvZiB0aGUgdmFy aW91cyBHZW5lcmljLUF1ZGlvIGF0dHJpYnV0ZXMuIFNlZSBCVCBhc3NpZ25l ZCBudW1iZXJzICovDQovKiBOb3RlIDogdG90YWxseSB1bnRlc3RlZCAtIEpl YW4gSUkgKi8NCnN0YXRpYyBzdHJ1Y3QgYXR0cmliX2RlZiBhdWRpb19hdHRy aWJfbmFtZXNbXSA9IHsNCgl7IDB4MzAyLCAiUmVtb3RlIGF1ZGlvIHZvbHVt ZSBjb250cm9sIiwgTlVMTCwgMCB9LA0KfTsNCg0KLyogU2FtZSBmb3IgdGhl IFVVSURzLiBTZWUgQlQgYXNzaWduZWQgbnVtYmVycyAqLw0Kc3RhdGljIHN0 cnVjdCB1dWlkX2RlZiB1dWlkMTZfbmFtZXNbXSA9IHsNCgkvKiAtLSBQcm90 b2NvbHMgLS0gKi8NCgl7IDB4MDAwMSwgIlNEUCAoU2VydmljZSBEaXNjb3Zl cnkgUHJvdG9jb2wpIiwgTlVMTCwgMCB9LA0KCXsgMHgwMDAyLCAiVURQIiwg TlVMTCwgMCB9LA0KCXsgMHgwMDAzLCAiUkZDT01NIiwgTlVMTCwgMCB9LA0K CXsgMHgwMDA0LCAiVENQIiwgTlVMTCwgMCB9LA0KCXsgMHgwMDA1LCAiVENT LUJJTiIsIE5VTEwsIDAgfSwNCgl7IDB4MDAwNiwgIlRDUy1BVCIsIE5VTEws IDAgfSwNCgl7IDB4MDAwOCwgIk9CRVgiLCBOVUxMLCAwIH0sDQoJeyAweDAw MDksICJJUCIsIE5VTEwsIDAgfSwNCgl7IDB4MDAwYSwgIkZUUCIsIE5VTEws IDAgfSwNCgl7IDB4MDAwYywgIkhUVFAiLCBOVUxMLCAwIH0sDQoJeyAweDAw MGUsICJXU1AiLCBOVUxMLCAwIH0sDQoJeyAweDAwMGYsICJCTkVQIChQQU4v Qk5FUCkiLCBOVUxMLCAwIH0sDQoJeyAweDAwMTAsICJVUG5QL0VTRFAiLCBO VUxMLCAwIH0sDQoJeyAweDAwMTEsICJISURQIiwgTlVMTCwgMCB9LA0KCXsg MHgwMDEyLCAiSGFyZGNvcHlDb250cm9sQ2hhbm5lbCIsIE5VTEwsIDAgfSwN Cgl7IDB4MDAxNCwgIkhhcmRjb3B5RGF0YUNoYW5uZWwiLCBOVUxMLCAwIH0s DQoJeyAweDAwMTYsICJIYXJkY29weU5vdGlmaWNhdGlvbiIsIE5VTEwsIDAg fSwNCgl7IDB4MDAxNywgIkFWQ1RQIiwgTlVMTCwgMCB9LA0KCXsgMHgwMDE5 LCAiQVZEVFAiLCBOVUxMLCAwIH0sDQoJeyAweDAwMWIsICJDTVRQIiwgTlVM TCwgMCB9LA0KCXsgMHgwMDFkLCAiVURJX0MtUGxhbmUiLCBOVUxMLCAwIH0s DQoJeyAweDAxMDAsICJMMkNBUCIsIE5VTEwsIDAgfSwNCgkvKiAtLSBTZXJ2 aWNlcyAtLSAqLw0KCXsgMHgxMDAwLCAiU2VydmljZURpc2NvdmVyeVNlcnZl clNlcnZpY2VDbGFzc0lEIChTRFApIiwNCgkJc2RwX2F0dHJpYl9uYW1lcywg c2l6ZW9mKHNkcF9hdHRyaWJfbmFtZXMpL3NpemVvZihzdHJ1Y3QgYXR0cmli X2RlZikgfSwNCgl7IDB4MTAwMSwgIkJyb3dzZUdyb3VwRGVzY3JpcHRvclNl cnZpY2VDbGFzc0lEIChTRFApIiwNCgkJYnJvd3NlX2F0dHJpYl9uYW1lcywg c2l6ZW9mKGJyb3dzZV9hdHRyaWJfbmFtZXMpL3NpemVvZihzdHJ1Y3QgYXR0 cmliX2RlZikgfSwNCgl7IDB4MTAwMiwgIlB1YmxpY0Jyb3dzZUdyb3VwIChT RFApIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTAxLCAiU2VyaWFsUG9ydCIsIE5V TEwsIDAgfSwNCgl7IDB4MTEwMiwgIkxBTkFjY2Vzc1VzaW5nUFBQIiwgTlVM TCwgMCB9LA0KCXsgMHgxMTAzLCAiRGlhbHVwTmV0d29ya2luZyAoRFVOKSIs IE5VTEwsIDAgfSwNCgl7IDB4MTEwNCwgIklyTUNTeW5jIiwgTlVMTCwgMCB9 LA0KCXsgMHgxMTA1LCAiT0JFWE9iamVjdFB1c2giLCBOVUxMLCAwIH0sDQoJ eyAweDExMDYsICJPQkVYRmlsZVRyYW5zZmVyIiwgTlVMTCwgMCB9LA0KCXsg MHgxMTA3LCAiSXJNQ1N5bmNDb21tYW5kIiwgTlVMTCwgMCB9LA0KCXsgMHgx MTA4LCAiSGVhZHNldCIsDQoJCWF1ZGlvX2F0dHJpYl9uYW1lcywgc2l6ZW9m KGF1ZGlvX2F0dHJpYl9uYW1lcykvc2l6ZW9mKHN0cnVjdCBhdHRyaWJfZGVm KSB9LA0KCXsgMHgxMTA5LCAiQ29yZGxlc3NUZWxlcGhvbnkiLCBOVUxMLCAw IH0sDQoJeyAweDExMGEsICJBdWRpb1NvdXJjZSIsIE5VTEwsIDAgfSwNCgl7 IDB4MTEwYiwgIkF1ZGlvU2luayIsIE5VTEwsIDAgfSwNCgl7IDB4MTEwYywg IlJlbW90ZUNvbnRyb2xUYXJnZXQiLCBOVUxMLCAwIH0sDQoJeyAweDExMGQs ICJBZHZhbmNlZEF1ZGlvIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTBlLCAiUmVt b3RlQ29udHJvbCIsIE5VTEwsIDAgfSwNCgl7IDB4MTEwZiwgIlZpZGVvQ29u ZmVyZW5jaW5nIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTEwLCAiSW50ZXJjb20i LCBOVUxMLCAwIH0sDQoJeyAweDExMTEsICJGYXgiLCBOVUxMLCAwIH0sDQoJ eyAweDExMTIsICJIZWFkc2V0QXVkaW9HYXRld2F5IiwgTlVMTCwgMCB9LA0K CXsgMHgxMTEzLCAiV0FQIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTE0LCAiV0FQ IENsaWVudCIsIE5VTEwsIDAgfSwNCgl7IDB4MTExNSwgIlBBTlUgKFBBTi9C TkVQKSIsDQoJCXBhbl9hdHRyaWJfbmFtZXMsIHNpemVvZihwYW5fYXR0cmli X25hbWVzKS9zaXplb2Yoc3RydWN0IGF0dHJpYl9kZWYpIH0sDQoJeyAweDEx MTYsICJOQVAgKFBBTi9CTkVQKSIsDQoJCXBhbl9hdHRyaWJfbmFtZXMsIHNp emVvZihwYW5fYXR0cmliX25hbWVzKS9zaXplb2Yoc3RydWN0IGF0dHJpYl9k ZWYpIH0sDQoJeyAweDExMTcsICJHTiAoUEFOL0JORVApIiwNCgkJcGFuX2F0 dHJpYl9uYW1lcywgc2l6ZW9mKHBhbl9hdHRyaWJfbmFtZXMpL3NpemVvZihz dHJ1Y3QgYXR0cmliX2RlZikgfSwNCgl7IDB4MTExOCwgIkRpcmVjdFByaW50 aW5nIChCUFApIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTE5LCAiUmVmZXJlbmNl UHJpbnRpbmcgKEJQUCkiLCBOVUxMLCAwIH0sDQoJLyogLi4uICovDQoJeyAw eDExMWUsICJIYW5kc2ZyZWUiLCBOVUxMLCAwIH0sDQoJeyAweDExMWYsICJI YW5kc2ZyZWVBdWRpb0dhdGV3YXkiLCBOVUxMLCAwIH0sDQoJeyAweDExMjAs ICJEaXJlY3RQcmludGluZ1JlZmVyZW5jZU9iamVjdHNTZXJ2aWNlIChCUFAp IiwgTlVMTCwgMCB9LA0KCXsgMHgxMTIxLCAiUmVmbGVjdGVkVUkgKEJQUCki LCBOVUxMLCAwIH0sDQoJeyAweDExMjIsICJCYXNpY1ByaW50aW5nIChCUFAp IiwgTlVMTCwgMCB9LA0KCXsgMHgxMTIzLCAiUHJpbnRpbmdTdGF0dXMgKEJQ UCkiLCBOVUxMLCAwIH0sDQoJeyAweDExMjQsICJIdW1hbkludGVyZmFjZURl dmljZVNlcnZpY2UgKEhJRCkiLA0KCQloaWRfYXR0cmliX25hbWVzLCBzaXpl b2YoaGlkX2F0dHJpYl9uYW1lcykvc2l6ZW9mKHN0cnVjdCBhdHRyaWJfZGVm KSB9LA0KCXsgMHgxMTI1LCAiSGFyZGNvcHlDYWJsZVJlcGxhY2VtZW50IChI Q1IpIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTI2LCAiSENSX1ByaW50IChIQ1Ip IiwgTlVMTCwgMCB9LA0KCXsgMHgxMTI3LCAiSENSX1NjYW4gKEhDUikiLCBO VUxMLCAwIH0sDQoJeyAweDExMjgsICJDb21tb24gSVNETiBBY2Nlc3MgKENJ UCkiLCBOVUxMLCAwIH0sDQoJeyAweDExMjksICJWaWRlb0NvbmZlcmVuY2lu Z0dXIChWQ1ApIiwgTlVMTCwgMCB9LA0KCXsgMHgxMTJkLCAiU0lNIEFjY2Vz cyAoU0FQKSIsIE5VTEwsIDAgfSwNCgkvKiAuLi4gKi8NCgl7IDB4MTIwMCwg IlBuUEluZm9ybWF0aW9uIiwNCgkJZGlkX2F0dHJpYl9uYW1lcywgc2l6ZW9m KGRpZF9hdHRyaWJfbmFtZXMpL3NpemVvZihzdHJ1Y3QgYXR0cmliX2RlZikg fSwNCgl7IDB4MTIwMSwgIkdlbmVyaWNOZXR3b3JraW5nIiwgTlVMTCwgMCB9 LA0KCXsgMHgxMjAyLCAiR2VuZXJpY0ZpbGVUcmFuc2ZlciIsIE5VTEwsIDAg fSwNCgl7IDB4MTIwMywgIkdlbmVyaWNBdWRpbyIsDQoJCWF1ZGlvX2F0dHJp Yl9uYW1lcywgc2l6ZW9mKGF1ZGlvX2F0dHJpYl9uYW1lcykvc2l6ZW9mKHN0 cnVjdCBhdHRyaWJfZGVmKSB9LA0KCXsgMHgxMjA0LCAiR2VuZXJpY1RlbGVw aG9ueSIsIE5VTEwsIDAgfSwNCn07DQoNCnN0YXRpYyBjb25zdCBpbnQgdXVp ZDE2X21heCA9IHNpemVvZih1dWlkMTZfbmFtZXMpL3NpemVvZihzdHJ1Y3Qg dXVpZF9kZWYpOw0KDQpzdGF0aWMgdm9pZCBzZHBfZGF0YV9wcmludGYoc2Rw X2RhdGFfdCAqLCBzdHJ1Y3QgYXR0cmliX2NvbnRleHQgKiwgaW50KTsNCg0K LyoNCiAqIFBhcnNlIGEgVVVJRC4NCiAqIFRoZSBCVCBhc3NpZ25lZCBudW1i ZXJzIG9ubHkgbGlzdCBVVUlEMTYsIHNvIEknbSBub3Qgc3VyZSB0aGUNCiAq IG90aGVyIHR5cGVzIHdpbGwgZXZlciBnZXQgdXNlZC4uLg0KICovDQpzdGF0 aWMgdm9pZCBzZHBfdXVpZF9wcmludGYodXVpZF90ICp1dWlkLCBzdHJ1Y3Qg YXR0cmliX2NvbnRleHQgKmNvbnRleHQsIGludCBpbmRlbnQpDQp7DQoJaWYg KHV1aWQpIHsNCgkJaWYgKHV1aWQtPnR5cGUgPT0gU0RQX1VVSUQxNikgew0K CQkJdWludDE2X3QgdXVpZE51bSA9IHV1aWQtPnZhbHVlLnV1aWQxNjsNCgkJ CXN0cnVjdCB1dWlkX2RlZiAqdXVpZERlZiA9IE5VTEw7DQoJCQlpbnQgaTsN Cg0KCQkJZm9yIChpID0gMDsgaSA8IHV1aWQxNl9tYXg7IGkrKykNCgkJCQlp ZiAodXVpZDE2X25hbWVzW2ldLm51bSA9PSB1dWlkTnVtKSB7DQoJCQkJCXV1 aWREZWYgPSAmdXVpZDE2X25hbWVzW2ldOw0KCQkJCQlicmVhazsNCgkJCQl9 DQoNCgkJCS8qIENoZWNrIGlmIGl0J3MgdGhlIHNlcnZpY2UgYXR0cmlidXRl ICovDQoJCQlpZiAoY29udGV4dC0+YXR0cmliICYmIGNvbnRleHQtPmF0dHJp Yi0+bnVtID09IFNFUlZJQ0VfQVRUUikgew0KCQkJCS8qIFdlIGdvdCB0aGUg c2VydmljZSBJRCAhISEgKi8NCgkJCQljb250ZXh0LT5zZXJ2aWNlID0gdXVp ZERlZjsNCgkJCX0NCg0KCQkJaWYgKHV1aWREZWYpDQoJCQkJcHJpbnRmKCIl LipzVVVJRDE2IDogMHglLjR4IC0gJXNcbiIsDQoJCQkJCWluZGVudCwgaW5k ZW50X3NwYWNlcywgdXVpZE51bSwgdXVpZERlZi0+bmFtZSk7DQoJCQllbHNl DQoJCQkJcHJpbnRmKCIlLipzVVVJRDE2IDogMHglLjR4XG4iLA0KCQkJCQlp bmRlbnQsIGluZGVudF9zcGFjZXMsIHV1aWROdW0pOw0KCQl9IGVsc2UgaWYg KHV1aWQtPnR5cGUgPT0gU0RQX1VVSUQzMikgew0KCQkJc3RydWN0IHV1aWRf ZGVmICp1dWlkRGVmID0gTlVMTDsNCgkJCWludCBpOw0KDQoJCQlpZiAoISh1 dWlkLT52YWx1ZS51dWlkMzIgJiAweGZmZmYwMDAwKSkgew0KCQkJCXVpbnQx Nl90IHV1aWROdW0gPSB1dWlkLT52YWx1ZS51dWlkMzI7DQoJCQkJZm9yIChp ID0gMDsgaSA8IHV1aWQxNl9tYXg7IGkrKykNCgkJCQkJaWYgKHV1aWQxNl9u YW1lc1tpXS5udW0gPT0gdXVpZE51bSkgew0KCQkJCQkJdXVpZERlZiA9ICZ1 dWlkMTZfbmFtZXNbaV07DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJfQ0K DQoJCQlpZiAodXVpZERlZikNCgkJCQlwcmludGYoIiUuKnNVVUlEMzIgOiAw eCUuOHggLSAlc1xuIiwNCgkJCQkJaW5kZW50LCBpbmRlbnRfc3BhY2VzLCB1 dWlkLT52YWx1ZS51dWlkMzIsIHV1aWREZWYtPm5hbWUpOw0KCQkJZWxzZQ0K CQkJCXByaW50ZigiJS4qc1VVSUQzMiA6IDB4JS44eFxuIiwNCgkJCQkJaW5k ZW50LCBpbmRlbnRfc3BhY2VzLCB1dWlkLT52YWx1ZS51dWlkMzIpOw0KCQl9 IGVsc2UgaWYgKHV1aWQtPnR5cGUgPT0gU0RQX1VVSUQxMjgpIHsNCgkJCXVu c2lnbmVkIGludCBkYXRhMDsNCgkJCXVuc2lnbmVkIHNob3J0IGRhdGExOw0K CQkJdW5zaWduZWQgc2hvcnQgZGF0YTI7DQoJCQl1bnNpZ25lZCBzaG9ydCBk YXRhMzsNCgkJCXVuc2lnbmVkIGludCBkYXRhNDsNCgkJCXVuc2lnbmVkIHNo b3J0IGRhdGE1Ow0KDQoJCQltZW1jcHkoJmRhdGEwLCAmdXVpZC0+dmFsdWUu dXVpZDEyOC5kYXRhWzBdLCA0KTsNCgkJCW1lbWNweSgmZGF0YTEsICZ1dWlk LT52YWx1ZS51dWlkMTI4LmRhdGFbNF0sIDIpOw0KCQkJbWVtY3B5KCZkYXRh MiwgJnV1aWQtPnZhbHVlLnV1aWQxMjguZGF0YVs2XSwgMik7DQoJCQltZW1j cHkoJmRhdGEzLCAmdXVpZC0+dmFsdWUudXVpZDEyOC5kYXRhWzhdLCAyKTsN CgkJCW1lbWNweSgmZGF0YTQsICZ1dWlkLT52YWx1ZS51dWlkMTI4LmRhdGFb MTBdLCA0KTsNCgkJCW1lbWNweSgmZGF0YTUsICZ1dWlkLT52YWx1ZS51dWlk MTI4LmRhdGFbMTRdLCAyKTsNCg0KCQkJcHJpbnRmKCIlLipzVVVJRDEyOCA6 IDB4JS44eC0lLjR4LSUuNHgtJS40eC0lLjh4LSUuNHhcbiIsDQoJCQkJaW5k ZW50LCBpbmRlbnRfc3BhY2VzLA0KCQkJCW50b2hsKGRhdGEwKSwgbnRvaHMo ZGF0YTEpLCBudG9ocyhkYXRhMiksDQoJCQkJbnRvaHMoZGF0YTMpLCBudG9o bChkYXRhNCksIG50b2hzKGRhdGE1KSk7DQoJCX0gZWxzZQ0KCQkJcHJpbnRm KCIlLipzRW51bSB0eXBlIG9mIFVVSUQgbm90IHNldFxuIiwNCgkJCQlpbmRl bnQsIGluZGVudF9zcGFjZXMpOw0KCX0gZWxzZQ0KCQlwcmludGYoIiUuKnNO dWxsIHBhc3NlZCB0byBwcmludCBVVUlEXG4iLA0KCQkJCWluZGVudCwgaW5k ZW50X3NwYWNlcyk7DQp9DQoNCi8qDQogKiBQYXJzZSBhIHNlcXVlbmNlIG9m IGRhdGEgZWxlbWVudHMgKGkuZS4gYSBsaXN0KQ0KICovDQpzdGF0aWMgdm9p ZCBwcmludGZfZGF0YXNlcShzZHBfZGF0YV90ICogcERhdGEsIHN0cnVjdCBh dHRyaWJfY29udGV4dCAqY29udGV4dCwgaW50IGluZGVudCkNCnsNCglzZHBf ZGF0YV90ICpzZHBkYXRhID0gTlVMTDsNCg0KCXNkcGRhdGEgPSBwRGF0YTsN CglpZiAoc2RwZGF0YSkgew0KCQljb250ZXh0LT5tZW1iZXJfaW5kZXggPSAw Ow0KCQlkbyB7DQoJCQlzZHBfZGF0YV9wcmludGYoc2RwZGF0YSwgY29udGV4 dCwgaW5kZW50ICsgMik7DQoJCQlzZHBkYXRhID0gc2RwZGF0YS0+bmV4dDsN CgkJCWNvbnRleHQtPm1lbWJlcl9pbmRleCsrOw0KCQl9IHdoaWxlIChzZHBk YXRhKTsNCgl9IGVsc2Ugew0KCQlwcmludGYoIiUuKnNCcm9rZW4gZGF0YXNl cSBsaW5rXG4iLCBpbmRlbnQsIGluZGVudF9zcGFjZXMpOw0KCX0NCn0NCg0K LyoNCiAqIFBhcnNlIGEgc2luZ2xlIGRhdGEgZWxlbWVudCAoZWl0aGVyIGlu IHRoZSBhdHRyaWJ1dGUgb3IgaW4gYSBkYXRhDQogKiBzZXF1ZW5jZSkuDQog Ki8NCnN0YXRpYyB2b2lkIHNkcF9kYXRhX3ByaW50ZihzZHBfZGF0YV90ICpz ZHBkYXRhLCBzdHJ1Y3QgYXR0cmliX2NvbnRleHQgKmNvbnRleHQsIGludCBp bmRlbnQpDQp7DQoJY2hhciAqbWVtYmVyX25hbWUgPSBOVUxMOw0KCS8qIEZp bmQgbWVtYmVyIG5hbWUuIEFsbW9zdCBibGFjayBtYWdpYyA7LSkgKi8NCglp ZiAoY29udGV4dC0+YXR0cmliICYmIGNvbnRleHQtPmF0dHJpYi0+bWVtYmVy cyAmJg0KCSAgIGNvbnRleHQtPm1lbWJlcl9pbmRleCA8IGNvbnRleHQtPmF0 dHJpYi0+bWVtYmVyX21heCkgew0KCSAgbWVtYmVyX25hbWUgPSBjb250ZXh0 LT5hdHRyaWItPm1lbWJlcnNbY29udGV4dC0+bWVtYmVyX2luZGV4XS5uYW1l Ow0KCX0NCg0KCXN3aXRjaCAoc2RwZGF0YS0+ZHRkKSB7DQoJY2FzZSBTRFBf REFUQV9OSUw6DQoJCXByaW50ZigiJS4qc05pbFxuIiwgaW5kZW50LCBpbmRl bnRfc3BhY2VzKTsNCgkJYnJlYWs7DQoJY2FzZSBTRFBfQk9PTDoNCgljYXNl IFNEUF9VSU5UODoNCgljYXNlIFNEUF9VSU5UMTY6DQoJY2FzZSBTRFBfVUlO VDMyOg0KCWNhc2UgU0RQX1VJTlQ2NDoNCgljYXNlIFNEUF9VSU5UMTI4Og0K CWNhc2UgU0RQX0lOVDg6DQoJY2FzZSBTRFBfSU5UMTY6DQoJY2FzZSBTRFBf SU5UMzI6DQoJY2FzZSBTRFBfSU5UNjQ6DQoJY2FzZSBTRFBfSU5UMTI4Og0K CQlpZiAobWVtYmVyX25hbWUpIHsNCgkJCXByaW50ZigiJS4qcyVzIChJbnRl Z2VyKSA6IDB4JXhcbiIsDQoJCQkJaW5kZW50LCBpbmRlbnRfc3BhY2VzLCBt ZW1iZXJfbmFtZSwgc2RwZGF0YS0+dmFsLnVpbnQzMik7DQoJCX0gZWxzZSB7 DQoJCQlwcmludGYoIiUuKnNJbnRlZ2VyIDogMHgleFxuIiwgaW5kZW50LCBp bmRlbnRfc3BhY2VzLA0KCQkJCXNkcGRhdGEtPnZhbC51aW50MzIpOw0KCQl9 DQoJCWJyZWFrOw0KDQoJY2FzZSBTRFBfVVVJRDE2Og0KCWNhc2UgU0RQX1VV SUQzMjoNCgljYXNlIFNEUF9VVUlEMTI4Og0KCQkvL3ByaW50ZigiJS4qc1VV SURcbiIsIGluZGVudCwgaW5kZW50X3NwYWNlcyk7DQoJCXNkcF91dWlkX3By aW50Zigmc2RwZGF0YS0+dmFsLnV1aWQsIGNvbnRleHQsIGluZGVudCk7DQoJ CWJyZWFrOw0KDQoJY2FzZSBTRFBfVEVYVF9TVFI4Og0KCWNhc2UgU0RQX1RF WFRfU1RSMTY6DQoJY2FzZSBTRFBfVEVYVF9TVFIzMjoNCgkJaWYgKHNkcGRh dGEtPnVuaXRTaXplID4gc3RybGVuKHNkcGRhdGEtPnZhbC5zdHIpKSB7DQoJ CQlpbnQgaTsNCgkJCXByaW50ZigiJS4qc0RhdGEgOiIsIGluZGVudCwgaW5k ZW50X3NwYWNlcyk7DQoJCQlmb3IgKGkgPSAwOyBpIDwgc2RwZGF0YS0+dW5p dFNpemU7IGkrKykNCgkJCQlwcmludGYoIiAlMDJ4IiwgKHVuc2lnbmVkIGNo YXIpIHNkcGRhdGEtPnZhbC5zdHJbaV0pOw0KCQkJcHJpbnRmKCJcbiIpOw0K CQl9IGVsc2UgDQoJCQkvL2ludCBpPTA7DQoJCQlwcmludGYoIiUuKnNUZXh0 IDogXCIlc1wiXG4iLCBpbmRlbnQsIGluZGVudF9zcGFjZXMsIHNkcGRhdGEt PnZhbC5zdHIpOw0KICAgICAgICAgICAgLypmb3IgKGk9MDsgU3ZjTmFtZUNv bnZbaV0uc2RwX2RhdGFfc3RydWN0LnZhbC5zdHI7IGkrKykNCgkJCQlpZiAo IXN0cmNhc2VjbXAoU3ZjTmFtZUNvbnZbaV0tPnNkcF9kYXRhX3N0cnVjdC0+ dmFsLnN0ciwgc2RwZGF0YS0+dmFsLnN0cikNCgkJCQkJc3RyY3B5KHNpLT5u YW1lLCBTdmNOYW1lQ29udltpXS0+c2VydmljZS5uYW1lKTsgICovDQoJCWJy ZWFrOw0KCWNhc2UgU0RQX1VSTF9TVFI4Og0KCWNhc2UgU0RQX1VSTF9TVFIx NjoNCgljYXNlIFNEUF9VUkxfU1RSMzI6DQoJCXByaW50ZigiJS4qc1VSTCA6 ICVzXG4iLCBpbmRlbnQsIGluZGVudF9zcGFjZXMsIHNkcGRhdGEtPnZhbC5z dHIpOw0KDQoJCWJyZWFrOw0KDQoJY2FzZSBTRFBfU0VRODoNCgljYXNlIFNE UF9TRVExNjoNCgljYXNlIFNEUF9TRVEzMjoNCgkJcHJpbnRmKCIlLipzRGF0 YSBTZXF1ZW5jZVxuIiwgaW5kZW50LCBpbmRlbnRfc3BhY2VzKTsNCgkJcHJp bnRmX2RhdGFzZXEoc2RwZGF0YS0+dmFsLmRhdGFzZXEsIGNvbnRleHQsIGlu ZGVudCk7DQoJCWJyZWFrOw0KDQoJY2FzZSBTRFBfQUxUODoNCgljYXNlIFNE UF9BTFQxNjoNCgljYXNlIFNEUF9BTFQzMjoNCgkJcHJpbnRmKCIlLipzRGF0 YSBTZXF1ZW5jZSBBbHRlcm5hdGVzXG4iLCBpbmRlbnQsIGluZGVudF9zcGFj ZXMpOw0KCQlwcmludGZfZGF0YXNlcShzZHBkYXRhLT52YWwuZGF0YXNlcSwg Y29udGV4dCwgaW5kZW50KTsNCgkJYnJlYWs7DQoJfQ0KCS8vcmV0dXJuIGFk ZF9zZXJ2aWNlKCZiZGFkZHIsICZzaSk7DQp9DQoNCi8qDQogKiBQYXJzZSBh IHNpbmdsZSBhdHRyaWJ1dGUuDQogKi8NCnN0YXRpYyB2b2lkIHNkcF9hdHRy X3ByaW50Zl9mdW5jKHZvaWQgKnZhbHVlLCB2b2lkICp1c2VyRGF0YSkNCnsN CglzZHBfZGF0YV90ICpzZHBkYXRhID0gTlVMTDsNCgl1aW50MTZfdCBhdHRy SWQ7DQoJc3RydWN0IHNlcnZpY2VfY29udGV4dCAqc2VydmljZSA9IChzdHJ1 Y3Qgc2VydmljZV9jb250ZXh0ICopIHVzZXJEYXRhOw0KCXN0cnVjdCBhdHRy aWJfY29udGV4dCBjb250ZXh0Ow0KCXN0cnVjdCBhdHRyaWJfZGVmICphdHRy RGVmID0gTlVMTDsNCglpbnQgaTsNCg0KCXNkcGRhdGEgPSAoc2RwX2RhdGFf dCAqKXZhbHVlOw0KCWF0dHJJZCA9IHNkcGRhdGEtPmF0dHJJZDsNCgkvKiBT ZWFyY2ggYW1vbmdzdCB0aGUgZ2VuZXJpYyBhdHRyaWJ1dGVzICovDQoJZm9y IChpID0gMDsgaSA8IGF0dHJpYl9tYXg7IGkrKykNCgkJaWYgKGF0dHJpYl9u YW1lc1tpXS5udW0gPT0gYXR0cklkKSB7DQoJCQlhdHRyRGVmID0gJmF0dHJp Yl9uYW1lc1tpXTsNCgkJCWJyZWFrOw0KCQl9DQoJLyogU2VhcmNoIGFtb25n c3QgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZXMgb2YgdGhpcyBzZXJ2aWNlICov DQoJaWYgKChhdHRyRGVmID09IE5VTEwpICYmIChzZXJ2aWNlLT5zZXJ2aWNl ICE9IE5VTEwpICYmDQoJCQkJKHNlcnZpY2UtPnNlcnZpY2UtPmF0dHJpYnMg IT0gTlVMTCkpIHsNCgkJc3RydWN0IGF0dHJpYl9kZWYgKnN2Y19hdHRyaWJz ID0gc2VydmljZS0+c2VydmljZS0+YXR0cmliczsNCgkJaW50CQlzdmNfYXR0 cmliX21heCA9IHNlcnZpY2UtPnNlcnZpY2UtPmF0dHJpYl9tYXg7DQoJCWZv ciAoaSA9IDA7IGkgPCBzdmNfYXR0cmliX21heDsgaSsrKQ0KCQkJaWYgKHN2 Y19hdHRyaWJzW2ldLm51bSA9PSBhdHRySWQpIHsNCgkJCQlhdHRyRGVmID0g JnN2Y19hdHRyaWJzW2ldOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCX0NCg0KCWlm IChhdHRyRGVmKQ0KCQlwcmludGYoIkF0dHJpYnV0ZSBJZGVudGlmaWVyIDog MHgleCAtICVzXG4iLCBhdHRySWQsIGF0dHJEZWYtPm5hbWUpOw0KCWVsc2UN CgkJcHJpbnRmKCJBdHRyaWJ1dGUgSWRlbnRpZmllciA6IDB4JXhcbiIsIGF0 dHJJZCk7DQoJLyogQnVpbGQgY29udGV4dCAqLw0KCWNvbnRleHQuc2Vydmlj ZSA9IHNlcnZpY2UtPnNlcnZpY2U7DQoJY29udGV4dC5hdHRyaWIgPSBhdHRy RGVmOw0KCWNvbnRleHQubWVtYmVyX2luZGV4ID0gMDsNCgkvKiBQYXJzZSBh dHRyaWJ1dGUgbWVtYmVycyAqLw0KCWlmIChzZHBkYXRhKQ0KCQlzZHBfZGF0 YV9wcmludGYoc2RwZGF0YSwgJmNvbnRleHQsIDIpOw0KCWVsc2UNCgkJcHJp bnRmKCIgIE5VTEwgdmFsdWVcbiIpOw0KCS8qIFVwZGF0ZSBzZXJ2aWNlICov DQoJc2VydmljZS0+c2VydmljZSA9IGNvbnRleHQuc2VydmljZTsNCn0NCg0K LyoNCiAqIE1haW4gZW50cnkgcG9pbnQgb2YgdGhpcyBsaWJyYXJ5LiBQYXJz ZSBhIFNEUCByZWNvcmQuDQogKiBXZSBhc3N1bWUgdGhlIHJlY29yZCBoYXMg YWxyZWFkeSBiZWVuIHJlYWQsIHBhcnNlZCBhbmQgY2FjaGVkDQogKiBsb2Nh bGx5LiBKZWFuIElJDQogKi8NCnN0YXRpYyB2b2lkIHNkcF9wcmludGZfc2Vy dmljZV9hdHRyKHNkcF9yZWNvcmRfdCAqcmVjKQ0Kew0KCWlmIChyZWMgJiYg cmVjLT5hdHRybGlzdCkgew0KCQlzdHJ1Y3Qgc2VydmljZV9jb250ZXh0IHNl cnZpY2UgPSB7IE5VTEwgfTsNCgkJc2RwX2xpc3RfZm9yZWFjaChyZWMtPmF0 dHJsaXN0LCBzZHBfYXR0cl9wcmludGZfZnVuYywgJnNlcnZpY2UpOw0KCX0N Cn0NCg0KLyoNCiAqIFNldCBhdHRyaWJ1dGVzIHdpdGggc2luZ2xlIHZhbHVl cyBpbiBTRFAgcmVjb3JkDQogKiBKZWFuIElJDQogKi8NCnN0YXRpYyBpbnQg c2V0X2F0dHJpYihzZHBfc2Vzc2lvbl90ICpzZXNzLCB1aW50MzJfdCBoYW5k bGUsIHVpbnQxNl90IGF0dHJpYiwgY2hhciAqdmFsdWUpIA0Kew0KCXNkcF9s aXN0X3QgKmF0dHJpZF9saXN0Ow0KCXVpbnQzMl90IHJhbmdlID0gMHgwMDAw ZmZmZjsNCglzZHBfcmVjb3JkX3QgKnJlYzsNCgkJDQoJLyogR2V0IHRoZSBv bGQgU0RQIHJlY29yZCAqLw0KCWF0dHJpZF9saXN0ID0gc2RwX2xpc3RfYXBw ZW5kKE5VTEwsICZyYW5nZSk7DQogICAgICAgIAlwcmludGYoIk5vdyB3ZSBh cmUgc2V0dGluZyBhdHRyaWJ1dGVcbiIpOw0KCXJlYyA9IHNkcF9zZXJ2aWNl X2F0dHJfcmVxKHNlc3MsIGhhbmRsZSwgU0RQX0FUVFJfUkVRX1JBTkdFLCBh dHRyaWRfbGlzdCk7DQoJaWYgKCFyZWMpIHsNCgkJcHJpbnRmKCJTZXJ2aWNl IGdldCByZXF1ZXN0IGZhaWxlZC5cbiIpOw0KCQlyZXR1cm4gLTE7DQoJfQ0K CQ0KCS8qIENoZWNrIHRoZSB0eXBlIG9mIGF0dHJpYnV0ZSAqLw0KCWlmICgh c3RybmNhc2VjbXAodmFsdWUsICJ1MHgiLCAzKSkgew0KCQkvKiBVVUlEMTYg Ki8NCgkJdWludDE2X3QgdmFsdWVfaW50ID0gMDsNCgkJdXVpZF90IHZhbHVl X3V1aWQ7DQoJCXZhbHVlX2ludCA9IHN0cnRvdWwodmFsdWUgKyAzLCBOVUxM LCAxNik7DQoJCXNkcF91dWlkMTZfY3JlYXRlKCZ2YWx1ZV91dWlkLCB2YWx1 ZV9pbnQpOw0KCQlwcmludGYoIkFkZGluZyBhdHRyaWIgMHglWCB1dWlkMTYg MHglWCB0byByZWNvcmQgMHglWFxuIiwNCgkJCWF0dHJpYiwgdmFsdWVfaW50 LCBoYW5kbGUpOw0KDQoJCXNkcF9hdHRyX2FkZF9uZXcocmVjLCBhdHRyaWIs IFNEUF9VVUlEMTYsICZ2YWx1ZV91dWlkLnZhbHVlLnV1aWQxNik7DQoJfSBl bHNlIGlmICghc3RybmNhc2VjbXAodmFsdWUsICIweCIsIDIpKSB7DQoJCS8q IEludCAqLw0KCQl1aW50MzJfdCB2YWx1ZV9pbnQ7ICANCgkJdmFsdWVfaW50 ID0gc3RydG91bCh2YWx1ZSArIDIsIE5VTEwsIDE2KTsNCgkJcHJpbnRmKCJB ZGRpbmcgYXR0cmliIDB4JVggaW50IDB4JVggdG8gcmVjb3JkIDB4JVhcbiIs DQoJCQlhdHRyaWIsIHZhbHVlX2ludCwgaGFuZGxlKTsNCg0KCQlzZHBfYXR0 cl9hZGRfbmV3KHJlYywgYXR0cmliLCBTRFBfVUlOVDMyLCAmdmFsdWVfaW50 KTsNCgl9IGVsc2Ugew0KCQkvKiBTdHJpbmcgKi8NCgkJcHJpbnRmKCJBZGRp bmcgYXR0cmliIDB4JVggc3RyaW5nIFwiJXNcIiB0byByZWNvcmQgMHglWFxu IiwNCgkJCWF0dHJpYiwgdmFsdWUsIGhhbmRsZSk7DQoNCgkJLyogQWRkL1Vw ZGF0ZSBvdXIgYXR0cmlidXRlIHRvIHRoZSByZWNvcmQgKi8NCgkJc2RwX2F0 dHJfYWRkX25ldyhyZWMsIGF0dHJpYiwgU0RQX1RFWFRfU1RSOCwgdmFsdWUp Ow0KCX0NCg0KCS8qIFVwZGF0ZSBvbiB0aGUgc2VydmVyICovDQoJaWYgKHNk cF9yZWNvcmRfdXBkYXRlKHNlc3MsIHJlYykpIHsNCgkJcHJpbnRmKCJTZXJ2 aWNlIFJlY29yZCB1cGRhdGUgZmFpbGVkICglZCkuXG4iLCBlcnJubyk7DQoJ CXJldHVybiAtMTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCi8qc3RhdGljIHN0 cnVjdCBvcHRpb24gc2V0X29wdGlvbnNbXSA9IHsNCgl7ICJoZWxwIiwgICAg MCwwLCAnaCcgfSwNCgl7IDAsIDAsIDAsIDAgfQ0KfTsNCg0Kc3RhdGljIGNo YXIgKnNldF9oZWxwID0gDQoJIlVzYWdlOlxuIg0KCSJcdGdldCByZWNvcmRf aGFuZGxlIGF0dHJpYl9pZCBhdHRyaWJfdmFsdWVcbiI7DQoNCg0Kc3RhdGlj IGludCBjbWRfc2V0YXR0cihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQp7DQoJ aW50IG9wdCwgc3RhdHVzOw0KCXVpbnQzMl90IGhhbmRsZTsNCgl1aW50MTZf dCBhdHRyaWI7DQoJc2RwX3Nlc3Npb25fdCAqc2VzczsNCg0KCWZvcl9lYWNo X29wdChvcHQsIHNldF9vcHRpb25zLCBOVUxMKSB7DQoJCXN3aXRjaChvcHQp IHsNCgkJZGVmYXVsdDoNCgkJCXByaW50ZihzZXRfaGVscCk7DQoJCQlyZXR1 cm4gLTE7DQoJCX0NCgl9DQoJYXJnYyAtPSBvcHRpbmQ7DQoJYXJndiArPSBv cHRpbmQ7DQoNCglpZiAoYXJnYyA8IDMpIHsNCgkJcHJpbnRmKHNldF9oZWxw KTsNCgkJcmV0dXJuIC0xOw0KCX0NCg0KCWhhbmRsZSA9IHN0cnRvdWwoYXJn dlswXSwgTlVMTCwgMTYpOw0KCWF0dHJpYiA9IHN0cnRvdWwoYXJndlsxXSwg TlVMTCwgMTYpOw0KDQoJc2VzcyA9IHNkcF9jb25uZWN0KEJEQUREUl9BTlks IEJEQUREUl9MT0NBTCwgMCk7DQoJaWYgKCFzZXNzKQ0KCQlyZXR1cm4gLTE7 DQoJc3RhdHVzID0gc2V0X2F0dHJpYihzZXNzLCBoYW5kbGUsIGF0dHJpYiwg YXJndlsyXSk7DQoJc2RwX2Nsb3NlKHNlc3MpOw0KCXJldHVybiBzdGF0dXM7 DQp9Ki8NCg0KLyoNCiAqIFdlIGRvIG9ubHkgc2ltcGxlIGRhdGEgc2VxdWVu Y2VzLiBTZXF1ZW5jZSBvZiBzZXF1ZW5jZXMgaXMgYSBwYWluIDstKQ0KICog SmVhbiBJSQ0KICovDQpzdGF0aWMgaW50IHNldF9hdHRyaWJzZXEoc2RwX3Nl c3Npb25fdCAqc2Vzc2lvbiwgdWludDMyX3QgaGFuZGxlLCB1aW50MTZfdCBh dHRyaWIsIGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCglzZHBfbGlzdF90 ICphdHRyaWRfbGlzdDsNCgl1aW50MzJfdCByYW5nZSA9IDB4MDAwMGZmZmY7 DQoJc2RwX3JlY29yZF90ICpyZWM7DQoJc2RwX2RhdGFfdCAqcFNlcXVlbmNl SG9sZGVyID0gTlVMTDsNCgl2b2lkICoqZHRkQXJyYXk7DQoJdm9pZCAqKnZh bHVlQXJyYXk7DQoJdm9pZCAqKmFsbG9jQXJyYXk7DQoJdWludDhfdCB1dWlk MTYgPSBTRFBfVVVJRDE2Ow0KCXVpbnQ4X3QgdWludDMyID0gU0RQX1VJTlQz MjsNCgl1aW50OF90IHN0cjggPSBTRFBfVEVYVF9TVFI4Ow0KCWludCBpOw0K DQoJLyogR2V0IHRoZSBvbGQgU0RQIHJlY29yZCAqLw0KCWF0dHJpZF9saXN0 ID0gc2RwX2xpc3RfYXBwZW5kKE5VTEwsICZyYW5nZSk7DQoJcmVjID0gc2Rw X3NlcnZpY2VfYXR0cl9yZXEoc2Vzc2lvbiwgaGFuZGxlLCBTRFBfQVRUUl9S RVFfUkFOR0UsIGF0dHJpZF9saXN0KTsNCg0KCWlmICghcmVjKSB7DQoJCXBy aW50ZigiU2VydmljZSBnZXQgcmVxdWVzdCBmYWlsZWQuXG4iKTsNCgkJcmV0 dXJuIC0xOw0KCX0NCg0KCS8qIENyZWF0ZSBhcnJheXMgKi8NCglkdGRBcnJh eSA9ICh2b2lkICoqKW1hbGxvYyhhcmdjICogc2l6ZW9mKHZvaWQgKikpOw0K CXZhbHVlQXJyYXkgPSAodm9pZCAqKiltYWxsb2MoYXJnYyAqIHNpemVvZih2 b2lkICopKTsNCglhbGxvY0FycmF5ID0gKHZvaWQgKiopbWFsbG9jKGFyZ2Mg KiBzaXplb2Yodm9pZCAqKSk7DQoNCgkvKiBMb29wIG9uIGFsbCBhcmdzLCBh ZGQgdGhlbSBpbiBhcnJheXMgKi8NCglmb3IgKGkgPSAwOyBpIDwgYXJnYzsg aSsrKSB7DQoJCS8qIENoZWNrIHRoZSB0eXBlIG9mIGF0dHJpYnV0ZSAqLw0K CQlpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbaV0sICJ1MHgiLCAzKSkgew0KCQkJ LyogVVVJRDE2ICovDQoJCQl1aW50MTZfdCB2YWx1ZV9pbnQgPSBzdHJ0b3Vs KChhcmd2W2ldKSArIDMsIE5VTEwsIDE2KTsNCgkJCXV1aWRfdCAqdmFsdWVf dXVpZCA9ICh1dWlkX3QgKiltYWxsb2Moc2l6ZW9mKHV1aWRfdCkpOw0KCQkJ YWxsb2NBcnJheVtpXSA9IHZhbHVlX3V1aWQ7DQoJCQlzZHBfdXVpZDE2X2Ny ZWF0ZSh2YWx1ZV91dWlkLCB2YWx1ZV9pbnQpOw0KDQoJCQlwcmludGYoIkFk ZGluZyB1dWlkMTYgMHglWCB0byByZWNvcmQgMHglWFxuIiwgdmFsdWVfaW50 LCBoYW5kbGUpOw0KCQkJZHRkQXJyYXlbaV0gPSAmdXVpZDE2Ow0KCQkJdmFs dWVBcnJheVtpXSA9ICZ2YWx1ZV91dWlkLT52YWx1ZS51dWlkMTY7DQoJCX0g ZWxzZSBpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbaV0sICIweCIsIDIpKSB7DQoJ CQkvKiBJbnQgKi8NCgkJCXVpbnQzMl90ICp2YWx1ZV9pbnQgPSAoaW50ICop bWFsbG9jKHNpemVvZihpbnQpKTsNCgkJCWFsbG9jQXJyYXlbaV0gPSB2YWx1 ZV9pbnQ7DQoJCQkqdmFsdWVfaW50ID0gc3RydG91bCgoYXJndltpXSkgKyAy LCBOVUxMLCAxNik7DQoNCgkJCXByaW50ZigiQWRkaW5nIGludCAweCVYIHRv IHJlY29yZCAweCVYXG4iLCAqdmFsdWVfaW50LCBoYW5kbGUpOw0KCQkJZHRk QXJyYXlbaV0gPSAmdWludDMyOw0KCQkJdmFsdWVBcnJheVtpXSA9IHZhbHVl X2ludDsNCgkJfSBlbHNlIHsNCgkJCS8qIFN0cmluZyAqLw0KCQkJcHJpbnRm KCJBZGRpbmcgc3RyaW5nIFwiJXNcIiB0byByZWNvcmQgMHglWFxuIiwgYXJn dltpXSwgaGFuZGxlKTsNCgkJCWR0ZEFycmF5W2ldID0gJnN0cjg7DQoJCQl2 YWx1ZUFycmF5W2ldID0gYXJndltpXTsNCgkJfQ0KCX0NCg0KCS8qIEFkZCB0 aGlzIHNlcXVlbmNlIHRvIHRoZSBhdHRyaWIgbGlzdCAqLw0KCXBTZXF1ZW5j ZUhvbGRlciA9IHNkcF9zZXFfYWxsb2MoZHRkQXJyYXksIHZhbHVlQXJyYXks IGFyZ2MpOw0KCWlmIChwU2VxdWVuY2VIb2xkZXIpIHsNCgkJc2RwX2F0dHJf cmVwbGFjZShyZWMsIGF0dHJpYiwgcFNlcXVlbmNlSG9sZGVyKTsNCg0KCQkv KiBVcGRhdGUgb24gdGhlIHNlcnZlciAqLw0KCQlpZiAoc2RwX3JlY29yZF91 cGRhdGUoc2Vzc2lvbiwgcmVjKSkgew0KCQkJcHJpbnRmKCJTZXJ2aWNlIFJl Y29yZCB1cGRhdGUgZmFpbGVkICglZCkuXG4iLCBlcnJubyk7DQoJCQlyZXR1 cm4gLTE7DQoJCX0NCgl9IGVsc2Ugew0KCQlwcmludGYoIkZhaWxlZCB0byBj cmVhdGUgcFNlcXVlbmNlSG9sZGVyXG4iKTsNCgl9DQoNCgkvKiBDbGVhbnVw ICovDQoJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykNCgkJZnJlZShhbGxv Y0FycmF5W2ldKTsNCglmcmVlKGR0ZEFycmF5KTsNCglmcmVlKHZhbHVlQXJy YXkpOw0KDQoJcmV0dXJuIDA7DQp9DQoNCi8qc3RhdGljIHN0cnVjdCBvcHRp b24gc2VxX29wdGlvbnNbXSA9IHsNCgl7ICJoZWxwIiwgICAgMCwwLCAnaCcg fSwNCgl7IDAsIDAsIDAsIDAgfQ0KfTsNCg0Kc3RhdGljIGNoYXIgKnNlcV9o ZWxwID0gDQoJIlVzYWdlOlxuIg0KCSJcdGdldCByZWNvcmRfaGFuZGxlIGF0 dHJpYl9pZCBhdHRyaWJfdmFsdWVzXG4iOw0KDQpzdGF0aWMgaW50IGNtZF9z ZXRzZXEoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0Kew0KCWludCBvcHQsIHN0 YXR1czsNCgl1aW50MzJfdCBoYW5kbGU7DQoJdWludDE2X3QgYXR0cmliOw0K CXNkcF9zZXNzaW9uX3QgKnNlc3M7DQoNCglmb3JfZWFjaF9vcHQob3B0LCBz ZXFfb3B0aW9ucywgTlVMTCkgew0KCQlzd2l0Y2gob3B0KSB7DQoJCWRlZmF1 bHQ6DQoJCQlwcmludGYoc2VxX2hlbHApOw0KCQkJcmV0dXJuIC0xOw0KCQl9 DQoJfQ0KCWFyZ2MgLT0gb3B0aW5kOw0KCWFyZ3YgKz0gb3B0aW5kOw0KDQoJ aWYgKGFyZ2MgPCAzKSB7DQoJCXByaW50ZihzZXFfaGVscCk7DQoJCXJldHVy biAtMTsNCgl9DQoNCgloYW5kbGUgPSBzdHJ0b3VsKGFyZ3ZbMF0sIE5VTEws IDE2KTsNCglhdHRyaWIgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsN Cg0KCWFyZ2MgLT0gMjsNCglhcmd2ICs9IDI7DQoNCglzZXNzID0gc2RwX2Nv bm5lY3QoQkRBRERSX0FOWSwgQkRBRERSX0xPQ0FMLCAwKTsNCglpZiAoIXNl c3MpDQoJCXJldHVybiAtMTsNCglzdGF0dXMgPSBzZXRfYXR0cmlic2VxKHNl c3MsIGhhbmRsZSwgYXR0cmliLCBhcmdjLCBhcmd2KTsNCglzZHBfY2xvc2Uo c2Vzcyk7DQoJcmV0dXJuIHN0YXR1czsNCn0qLw0KDQpzdGF0aWMgdm9pZCBw cmludF9zZXJ2aWNlX2NsYXNzKHZvaWQgKnZhbHVlLCB2b2lkICp1c2VyRGF0 YSkNCnsNCgljaGFyIFNlcnZpY2VDbGFzc1VVSURfc3RyW01BWF9MRU5fU0VS VklDRUNMQVNTX1VVSURfU1RSXTsNCgl1dWlkX3QgKnV1aWQgPSAodXVpZF90 ICopdmFsdWU7DQoNCglzZHBfdXVpZDJzdHJuKHV1aWQsIFVVSURfc3RyLCBN QVhfTEVOX1VVSURfU1RSKTsNCglzZHBfc3ZjbGFzc191dWlkMnN0cm4odXVp ZCwgU2VydmljZUNsYXNzVVVJRF9zdHIsIE1BWF9MRU5fU0VSVklDRUNMQVNT X1VVSURfU1RSKTsNCglwcmludGYoIiAgXCIlc1wiICgweCVzKVxuIiwgU2Vy dmljZUNsYXNzVVVJRF9zdHIsIFVVSURfc3RyKTsNCn0NCg0Kc3RhdGljIHZv aWQgcHJpbnRfc2VydmljZV9kZXNjKHZvaWQgKnZhbHVlLCB2b2lkICp1c2Vy KQ0Kew0KCWNoYXIgc3RyW01BWF9MRU5fUFJPVE9DT0xfVVVJRF9TVFJdOw0K CXNkcF9kYXRhX3QgKnAgPSAoc2RwX2RhdGFfdCAqKXZhbHVlLCAqczsNCglp bnQgaSA9IDAsIHByb3RvID0gMDsNCgkNCglmb3IgKDsgcDsgcCA9IHAtPm5l eHQsIGkrKykgew0KCQlzd2l0Y2ggKHAtPmR0ZCkgew0KCQljYXNlIFNEUF9V VUlEMTY6DQoJCWNhc2UgU0RQX1VVSUQzMjoNCgkJY2FzZSBTRFBfVVVJRDEy ODoNCgkJCXNkcF91dWlkMnN0cm4oJnAtPnZhbC51dWlkLCBVVUlEX3N0ciwg TUFYX0xFTl9VVUlEX1NUUik7DQoJCQlzZHBfcHJvdG9fdXVpZDJzdHJuKCZw LT52YWwudXVpZCwgc3RyLCBzaXplb2Yoc3RyKSk7DQoJCQlwcm90byA9IHNk cF91dWlkX3RvX3Byb3RvKCZwLT52YWwudXVpZCk7DQoJCQlwcmludGYoIiAg XCIlc1wiICgweCVzKVxuIiwgc3RyLCBVVUlEX3N0cik7DQoJCQlicmVhazsN CgkJY2FzZSBTRFBfVUlOVDg6DQoJCQlpZiAocHJvdG8gPT0gUkZDT01NX1VV SUQpDQoJCQkJcHJpbnRmKCIgICAgQ2hhbm5lbDogJWRcbiIsIHAtPnZhbC51 aW50OCk7DQoJCQllbHNlDQoJCQkJcHJpbnRmKCIgICAgdWludDg6IDB4JXhc biIsIHAtPnZhbC51aW50OCk7DQoJCQlicmVhazsNCgkJY2FzZSBTRFBfVUlO VDE2Og0KCQkJaWYgKHByb3RvID09IEwyQ0FQX1VVSUQpIHsNCgkJCQlpZiAo aSA9PSAxKQ0KCQkJCQlwcmludGYoIiAgICBQU006ICVkXG4iLCBwLT52YWwu dWludDE2KTsNCgkJCQllbHNlDQoJCQkJCXByaW50ZigiICAgIFZlcnNpb246 IDB4JTA0eFxuIiwgcC0+dmFsLnVpbnQxNik7DQoJCQl9IGVsc2UgaWYgKHBy b3RvID09IEJORVBfVVVJRCkNCgkJCQlpZiAoaSA9PSAxKQ0KCQkJCQlwcmlu dGYoIiAgICBWZXJzaW9uOiAweCUwNHhcbiIsIHAtPnZhbC51aW50MTYpOw0K CQkJCWVsc2UNCgkJCQkJcHJpbnRmKCIgICAgdWludDE2OiAweCV4XG4iLCBw LT52YWwudWludDE2KTsNCgkJCWVsc2UNCgkJCQlwcmludGYoIiAgICB1aW50 MTY6IDB4JXhcbiIsIHAtPnZhbC51aW50MTYpOw0KCQkJYnJlYWs7DQoJCWNh c2UgU0RQX1NFUTE2Og0KCQkJcHJpbnRmKCIgICAgU0VRMTY6Iik7DQoJCQlm b3IgKHMgPSBwLT52YWwuZGF0YXNlcTsgczsgcyA9IHMtPm5leHQpDQoJCQkJ cHJpbnRmKCIgJXgiLCBzLT52YWwudWludDE2KTsNCgkJCXByaW50ZigiXG4i KTsNCgkJCWJyZWFrOw0KCQljYXNlIFNEUF9TRVE4Og0KCQkJcHJpbnRmKCIg ICAgU0VRODoiKTsNCgkJCWZvciAocyA9IHAtPnZhbC5kYXRhc2VxOyBzOyBz ID0gcy0+bmV4dCkNCgkJCQlwcmludGYoIiAleCIsIHMtPnZhbC51aW50OCk7 DQoJCQlwcmludGYoIlxuIik7DQoJCQlicmVhazsNCgkJZGVmYXVsdDoNCgkJ CXByaW50ZigiICAgIEZJWE1FOiBkdGQ9MCV4XG4iLCBwLT5kdGQpOw0KCQkJ YnJlYWs7DQoJCX0NCgl9DQp9DQoNCnN0YXRpYyB2b2lkIHByaW50X2xhbmdf YXR0cih2b2lkICp2YWx1ZSwgdm9pZCAqdXNlcikNCnsNCglzZHBfbGFuZ19h dHRyX3QgKmxhbmcgPSAoc2RwX2xhbmdfYXR0cl90ICopdmFsdWU7DQoJcHJp bnRmKCIgIGNvZGVfSVNPNjM5OiAweCUwMnhcbiIsIGxhbmctPmNvZGVfSVNP NjM5KTsNCglwcmludGYoIiAgZW5jb2Rpbmc6ICAgIDB4JTAyeFxuIiwgbGFu Zy0+ZW5jb2RpbmcpOw0KCXByaW50ZigiICBiYXNlX29mZnNldDogMHglMDJ4 XG4iLCBsYW5nLT5iYXNlX29mZnNldCk7DQp9DQoNCnN0YXRpYyB2b2lkIHBy aW50X2FjY2Vzc19wcm90b3Modm9pZCAqdmFsdWUsIHZvaWQgKnVzZXJEYXRh KQ0Kew0KCXNkcF9saXN0X3QgKnByb3REZXNjU2VxID0gKHNkcF9saXN0X3Qg Kil2YWx1ZTsNCglzZHBfbGlzdF9mb3JlYWNoKHByb3REZXNjU2VxLCBwcmlu dF9zZXJ2aWNlX2Rlc2MsIDApOw0KfQ0KDQpzdGF0aWMgdm9pZCBwcmludF9w cm9maWxlX2Rlc2Modm9pZCAqdmFsdWUsIHZvaWQgKnVzZXJEYXRhKQ0Kew0K CXNkcF9wcm9maWxlX2Rlc2NfdCAqZGVzYyA9IChzZHBfcHJvZmlsZV9kZXNj X3QgKil2YWx1ZTsNCgljaGFyIHN0cltNQVhfTEVOX1BST0ZJTEVERVNDUklQ VE9SX1VVSURfU1RSXTsNCg0KCXNkcF91dWlkMnN0cm4oJmRlc2MtPnV1aWQs IFVVSURfc3RyLCBNQVhfTEVOX1VVSURfU1RSKTsNCglzZHBfcHJvZmlsZV91 dWlkMnN0cm4oJmRlc2MtPnV1aWQsIHN0ciwgTUFYX0xFTl9QUk9GSUxFREVT Q1JJUFRPUl9VVUlEX1NUUik7DQoNCglwcmludGYoIiAgXCIlc1wiICgweCVz KVxuIiwgc3RyLCBVVUlEX3N0cik7DQoJaWYgKGRlc2MtPnZlcnNpb24pDQoJ CXByaW50ZigiICAgIFZlcnNpb246IDB4JTA0eFxuIiwgZGVzYy0+dmVyc2lv bik7DQp9DQoNCi8qDQogKiBQYXJzZSBhIFNEUCByZWNvcmQgaW4gdXNlciBm cmllbmRseSBmb3JtLg0KICovDQpzdGF0aWMgdm9pZCBwcmludF9zZXJ2aWNl X2F0dHIoc2RwX3JlY29yZF90ICpyZWMpDQp7DQoJc2RwX2xpc3RfdCAqbGlz dCA9IDAsICpwcm90byA9IDA7DQoNCglzZHBfcmVjb3JkX3ByaW50KHJlYyk7 DQoNCglwcmludGYoIlNlcnZpY2UgUmVjSGFuZGxlOiAweCV4XG4iLCByZWMt PmhhbmRsZSk7DQoNCglpZiAoc2RwX2dldF9zZXJ2aWNlX2NsYXNzZXMocmVj LCAmbGlzdCkgPT0gMCkgew0KCQlwcmludGYoIlNlcnZpY2UgQ2xhc3MgSUQg TGlzdDpcbiIpOw0KCQlzZHBfbGlzdF9mb3JlYWNoKGxpc3QsIHByaW50X3Nl cnZpY2VfY2xhc3MsIDApOw0KCQlzZHBfbGlzdF9mcmVlKGxpc3QsIGZyZWUp Ow0KCX0NCglpZiAoc2RwX2dldF9hY2Nlc3NfcHJvdG9zKHJlYywgJnByb3Rv KSA9PSAwKSB7DQoJCXByaW50ZigiUHJvdG9jb2wgRGVzY3JpcHRvciBMaXN0 OlxuIik7DQoJCXNkcF9saXN0X2ZvcmVhY2gocHJvdG8sIHByaW50X2FjY2Vz c19wcm90b3MsIDApOw0KCQlzZHBfbGlzdF9mcmVlKHByb3RvLCAoc2RwX2Zy ZWVfZnVuY190KXNkcF9kYXRhX2ZyZWUpOw0KCX0NCglpZiAoc2RwX2dldF9s YW5nX2F0dHIocmVjLCAmbGlzdCkgPT0gMCkgew0KCQlwcmludGYoIkxhbmd1 YWdlIEJhc2UgQXR0ciBMaXN0OlxuIik7DQoJCXNkcF9saXN0X2ZvcmVhY2go bGlzdCwgcHJpbnRfbGFuZ19hdHRyLCAwKTsNCgkJc2RwX2xpc3RfZnJlZShs aXN0LCBmcmVlKTsNCgl9DQoJaWYgKHNkcF9nZXRfcHJvZmlsZV9kZXNjcyhy ZWMsICZsaXN0KSA9PSAwKSB7DQoJCXByaW50ZigiUHJvZmlsZSBEZXNjcmlw dG9yIExpc3Q6XG4iKTsNCgkJc2RwX2xpc3RfZm9yZWFjaChsaXN0LCBwcmlu dF9wcm9maWxlX2Rlc2MsIDApOw0KCQlzZHBfbGlzdF9mcmVlKGxpc3QsIGZy ZWUpOw0KCX0NCn0NCg0KLyoNCiAqIFN1cHBvcnQgZm9yIFNlcnZpY2UgKGRl KXJlZ2lzdHJhdGlvbg0KICovDQp0eXBlZGVmIHN0cnVjdCB7DQoJY2hhciAq bmFtZTsNCgljaGFyICpwcm92aWRlcjsNCgljaGFyICpkZXNjOw0KCQ0KCXVu c2lnbmVkIGludCBjbGFzczsNCgl1bnNpZ25lZCBpbnQgcHJvZmlsZTsNCgl1 bnNpZ25lZCBpbnQgY2hhbm5lbDsNCn0gc3ZjX2luZm9fdDsNCg0Kc3RhdGlj IGludCBhZGRfc3Aoc2RwX3Nlc3Npb25fdCAqc2Vzc2lvbiwgc3ZjX2luZm9f dCAqc2kpDQp7DQoJc2RwX2xpc3RfdCAqc3ZjbGFzc19pZCwgKmFwc2VxLCAq cHJvdG9bMl0sICpwcm9maWxlcywgKnJvb3QsICphcHJvdG87DQoJdXVpZF90 IHJvb3RfdXVpZCwgc3BfdXVpZCwgbDJjYXAsIHJmY29tbTsNCiAgICAgICAg c2RwX3JlY29yZF90IHJlY29yZDsNCglzZHBfcHJvZmlsZV9kZXNjX3QgcHJv ZmlsZTsNCgl1aW50OF90IHU4ID0gc2ktPmNoYW5uZWw/IHNpLT5jaGFubmVs OiAxOw0KCXNkcF9kYXRhX3QgKmNoYW5uZWw7DQoJaW50IHJldCA9IDA7DQoN CgltZW1zZXQoKHZvaWQgKikmcmVjb3JkLCAwLCBzaXplb2Yoc2RwX3JlY29y ZF90KSk7DQoJcmVjb3JkLmhhbmRsZSA9IDB4ZmZmZmZmZmY7DQoJc2RwX3V1 aWQxNl9jcmVhdGUoJnJvb3RfdXVpZCwgUFVCTElDX0JST1dTRV9HUk9VUCk7 DQoJcm9vdCA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcm9vdF91dWlkKTsNCglz ZHBfc2V0X2Jyb3dzZV9ncm91cHMoJnJlY29yZCwgcm9vdCk7DQoJc2RwX2xp c3RfZnJlZShyb290LCAwKTsNCg0KCXNkcF91dWlkMTZfY3JlYXRlKCZzcF91 dWlkLCBTRVJJQUxfUE9SVF9TVkNMQVNTX0lEKTsNCglzdmNsYXNzX2lkID0g c2RwX2xpc3RfYXBwZW5kKDAsICZzcF91dWlkKTsNCglzZHBfc2V0X3NlcnZp Y2VfY2xhc3NlcygmcmVjb3JkLCBzdmNsYXNzX2lkKTsNCglzZHBfbGlzdF9m cmVlKHN2Y2xhc3NfaWQsIDApOw0KDQoJc2RwX3V1aWQxNl9jcmVhdGUoJnBy b2ZpbGUudXVpZCwgU0VSSUFMX1BPUlRfUFJPRklMRV9JRCk7DQoJcHJvZmls ZS52ZXJzaW9uID0gMHgwMTAwOw0KCXByb2ZpbGVzID0gc2RwX2xpc3RfYXBw ZW5kKDAsICZwcm9maWxlKTsNCglzZHBfc2V0X3Byb2ZpbGVfZGVzY3MoJnJl Y29yZCwgcHJvZmlsZXMpOw0KCXNkcF9saXN0X2ZyZWUocHJvZmlsZXMsIDAp Ow0KDQoJc2RwX3V1aWQxNl9jcmVhdGUoJmwyY2FwLCBMMkNBUF9VVUlEKTsN Cglwcm90b1swXSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmbDJjYXApOw0KCWFw c2VxID0gc2RwX2xpc3RfYXBwZW5kKDAsIHByb3RvWzBdKTsNCg0KCXNkcF91 dWlkMTZfY3JlYXRlKCZyZmNvbW0sIFJGQ09NTV9VVUlEKTsNCglwcm90b1sx XSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcmZjb21tKTsNCgljaGFubmVsID0g c2RwX2RhdGFfYWxsb2MoU0RQX1VJTlQ4LCAmdTgpOw0KCXByb3RvWzFdID0g c2RwX2xpc3RfYXBwZW5kKHByb3RvWzFdLCBjaGFubmVsKTsNCglhcHNlcSA9 IHNkcF9saXN0X2FwcGVuZChhcHNlcSwgcHJvdG9bMV0pOw0KDQoJYXByb3Rv ID0gc2RwX2xpc3RfYXBwZW5kKDAsIGFwc2VxKTsNCglzZHBfc2V0X2FjY2Vz c19wcm90b3MoJnJlY29yZCwgYXByb3RvKTsNCg0KCXNkcF9zZXRfaW5mb19h dHRyKCZyZWNvcmQsICJTZXJpYWwgUG9ydCIsIDAsIDApOw0KDQoJaWYgKHNk cF9yZWNvcmRfcmVnaXN0ZXIoc2Vzc2lvbiwgJnJlY29yZCwgU0RQX1JFQ09S RF9QRVJTSVNUKSA8IDApIHsNCgkJcHJpbnRmKCJTZXJ2aWNlIFJlY29yZCBy ZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsNCgkJcmV0ID0gLTE7DQoJCWdvdG8g ZW5kOw0KCX0NCglwcmludGYoIlNlcmlhbCBQb3J0IHNlcnZpY2UgcmVnaXN0 ZXJlZFxuIik7DQoJcHJpbnRmKCJTZXJ2aWNlIG5hbWU6ICVzIFxuIiwgc2kt Pm5hbWUpOw0KCXByaW50ZigiU2VydmljZSBwcm92aWRlcjogJXMgXG4iLCBz aS0+cHJvdmlkZXIpOw0KCXByaW50ZigiU2VydmljZSBkZXNjOiAlcyBcbiIs IHNpLT5kZXNjKTsNCglwcmludGYoIlNlcnZpY2UgY2xhc3M6ICVkIFxuIiwg c2ktPmNsYXNzKTsNCglwcmludGYoIlNlcnZpY2UgcHJvZmlsZTogJWQgXG4i LCBzaS0+cHJvZmlsZSk7DQoJcHJpbnRmKCJTZXJ2aWNlIGNoYW5uZWw6ICVk IFxuIiwgc2ktPmNoYW5uZWwpOw0KZW5kOg0KCXNkcF9kYXRhX2ZyZWUoY2hh bm5lbCk7DQoJc2RwX2xpc3RfZnJlZShwcm90b1swXSwgMCk7DQoJc2RwX2xp c3RfZnJlZShwcm90b1sxXSwgMCk7DQoJc2RwX2xpc3RfZnJlZShhcHNlcSwg MCk7DQoJc2RwX2xpc3RfZnJlZShhcHJvdG8sIDApOw0KCXJldHVybiByZXQ7 DQp9DQoNCnN0YXRpYyBpbnQgYWRkX2hlYWRzZXQoc2RwX3Nlc3Npb25fdCAq c2Vzc2lvbiwgc3ZjX2luZm9fdCAqc2kpDQp7DQoJc2RwX2xpc3RfdCAqc3Zj bGFzc19pZCwgKnBmc2VxLCAqYXBzZXEsICpyb290Ow0KCXV1aWRfdCByb290 X3V1aWQsIHN2Y2xhc3NfdXVpZCwgZ2Ffc3ZjbGFzc191dWlkLCBsMmNhcF91 dWlkLCByZmNvbW1fdXVpZDsNCglzZHBfcmVjb3JkX3QgcmVjb3JkOw0KCXNk cF9wcm9maWxlX2Rlc2NfdCBwcm9maWxlOw0KCXNkcF9saXN0X3QgKmFwcm90 bywgKnByb3RvWzJdOw0KCXVpbnQ4X3QgdTggPSBzaS0+Y2hhbm5lbD8gc2kt PmNoYW5uZWw6IDU7DQoJc2RwX2RhdGFfdCAqY2hhbm5lbDsNCglpbnQgcmV0 ID0gMDsNCg0KCW1lbXNldCgodm9pZCAqKSZyZWNvcmQsIDAsIHNpemVvZihz ZHBfcmVjb3JkX3QpKTsNCglyZWNvcmQuaGFuZGxlID0gMHhmZmZmZmZmZjsN CglzZHBfdXVpZDE2X2NyZWF0ZSgmcm9vdF91dWlkLCBQVUJMSUNfQlJPV1NF X0dST1VQKTsNCglyb290ID0gc2RwX2xpc3RfYXBwZW5kKDAsICZyb290X3V1 aWQpOw0KCXNkcF9zZXRfYnJvd3NlX2dyb3VwcygmcmVjb3JkLCByb290KTsN Cg0KCXNkcF91dWlkMTZfY3JlYXRlKCZzdmNsYXNzX3V1aWQsIEhFQURTRVRf U1ZDTEFTU19JRCk7DQoJc3ZjbGFzc19pZCA9IHNkcF9saXN0X2FwcGVuZCgw LCAmc3ZjbGFzc191dWlkKTsNCglzZHBfdXVpZDE2X2NyZWF0ZSgmZ2Ffc3Zj bGFzc191dWlkLCBHRU5FUklDX0FVRElPX1NWQ0xBU1NfSUQpOw0KCXN2Y2xh c3NfaWQgPSBzZHBfbGlzdF9hcHBlbmQoc3ZjbGFzc19pZCwgJmdhX3N2Y2xh c3NfdXVpZCk7DQoJc2RwX3NldF9zZXJ2aWNlX2NsYXNzZXMoJnJlY29yZCwg c3ZjbGFzc19pZCk7DQoNCglzZHBfdXVpZDE2X2NyZWF0ZSgmcHJvZmlsZS51 dWlkLCBIRUFEU0VUX1BST0ZJTEVfSUQpOw0KCXByb2ZpbGUudmVyc2lvbiA9 IDB4MDEwMDsNCglwZnNlcSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcHJvZmls ZSk7DQoJc2RwX3NldF9wcm9maWxlX2Rlc2NzKCZyZWNvcmQsIHBmc2VxKTsN Cg0KCXNkcF91dWlkMTZfY3JlYXRlKCZsMmNhcF91dWlkLCBMMkNBUF9VVUlE KTsNCglwcm90b1swXSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmbDJjYXBfdXVp ZCk7DQoJYXBzZXEgPSBzZHBfbGlzdF9hcHBlbmQoMCwgcHJvdG9bMF0pOw0K DQoJc2RwX3V1aWQxNl9jcmVhdGUoJnJmY29tbV91dWlkLCBSRkNPTU1fVVVJ RCk7DQoJcHJvdG9bMV0gPSBzZHBfbGlzdF9hcHBlbmQoMCwgJnJmY29tbV91 dWlkKTsNCgljaGFubmVsID0gc2RwX2RhdGFfYWxsb2MoU0RQX1VJTlQ4LCAm dTgpOw0KCXByb3RvWzFdID0gc2RwX2xpc3RfYXBwZW5kKHByb3RvWzFdLCBj aGFubmVsKTsNCglhcHNlcSA9IHNkcF9saXN0X2FwcGVuZChhcHNlcSwgcHJv dG9bMV0pOw0KDQoJYXByb3RvID0gc2RwX2xpc3RfYXBwZW5kKDAsIGFwc2Vx KTsNCglzZHBfc2V0X2FjY2Vzc19wcm90b3MoJnJlY29yZCwgYXByb3RvKTsN Cg0KCXNkcF9zZXRfaW5mb19hdHRyKCZyZWNvcmQsICJIZWFkc2V0IiwgMCwg MCk7DQoNCglpZiAoc2RwX3JlY29yZF9yZWdpc3RlcihzZXNzaW9uLCAmcmVj b3JkLCBTRFBfUkVDT1JEX1BFUlNJU1QpIDwgMCkgew0KCQlwcmludGYoIlNl cnZpY2UgUmVjb3JkIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOw0KCQlyZXQg PSAtMTsNCgkJZ290byBlbmQ7DQoJfQ0KCXByaW50ZigiSGVhZHNldCBzZXJ2 aWNlIHJlZ2lzdGVyZWRcbiIpOw0KZW5kOg0KCXNkcF9kYXRhX2ZyZWUoY2hh bm5lbCk7DQoJc2RwX2xpc3RfZnJlZShwcm90b1swXSwgMCk7DQoJc2RwX2xp c3RfZnJlZShwcm90b1sxXSwgMCk7DQoJc2RwX2xpc3RfZnJlZShhcHNlcSwg MCk7DQoJc2RwX2xpc3RfZnJlZShhcHJvdG8sIDApOw0KCXJldHVybiByZXQ7 DQp9DQoNCnN0YXRpYyBpbnQgYWRkX2hhbmRzZnJlZShzZHBfc2Vzc2lvbl90 ICpzZXNzaW9uLCBzdmNfaW5mb190ICpzaSkNCnsNCglzZHBfbGlzdF90ICpz dmNsYXNzX2lkLCAqcGZzZXEsICphcHNlcSwgKnJvb3Q7DQoJdXVpZF90IHJv b3RfdXVpZCwgc3ZjbGFzc191dWlkLCBnYV9zdmNsYXNzX3V1aWQsIGwyY2Fw X3V1aWQsIHJmY29tbV91dWlkOw0KICAgICAgICBzZHBfcmVjb3JkX3QgcmVj b3JkOwkNCglzZHBfcHJvZmlsZV9kZXNjX3QgcHJvZmlsZTsNCglzZHBfbGlz dF90ICphcHJvdG8sICpwcm90b1syXTsNCgl1aW50OF90IHU4ID0gc2ktPmNo YW5uZWw/IHNpLT5jaGFubmVsOiAzOw0KCXVpbnQxNl90IHUxNiA9IDB4MzE7 DQoJc2RwX2RhdGFfdCAqY2hhbm5lbCwgKmZlYXR1cmVzOwkNCglpbnQgcmV0 ID0gMDsNCg0KCW1lbXNldCgodm9pZCAqKSZyZWNvcmQsIDAsIHNpemVvZihz ZHBfcmVjb3JkX3QpKTsNCglyZWNvcmQuaGFuZGxlID0gMHhmZmZmZmZmZjsN CglzZHBfdXVpZDE2X2NyZWF0ZSgmcm9vdF91dWlkLCBQVUJMSUNfQlJPV1NF X0dST1VQKTsNCglyb290ID0gc2RwX2xpc3RfYXBwZW5kKDAsICZyb290X3V1 aWQpOw0KCXNkcF9zZXRfYnJvd3NlX2dyb3VwcygmcmVjb3JkLCByb290KTsN Cg0KCXNkcF91dWlkMTZfY3JlYXRlKCZzdmNsYXNzX3V1aWQsIEhBTkRTRlJF RV9TVkNMQVNTX0lEKTsNCglzdmNsYXNzX2lkID0gc2RwX2xpc3RfYXBwZW5k KDAsICZzdmNsYXNzX3V1aWQpOw0KCXNkcF91dWlkMTZfY3JlYXRlKCZnYV9z dmNsYXNzX3V1aWQsIEdFTkVSSUNfQVVESU9fU1ZDTEFTU19JRCk7DQoJc3Zj bGFzc19pZCA9IHNkcF9saXN0X2FwcGVuZChzdmNsYXNzX2lkLCAmZ2Ffc3Zj bGFzc191dWlkKTsNCglzZHBfc2V0X3NlcnZpY2VfY2xhc3NlcygmcmVjb3Jk LCBzdmNsYXNzX2lkKTsNCg0KCXNkcF91dWlkMTZfY3JlYXRlKCZwcm9maWxl LnV1aWQsIEhBTkRTRlJFRV9QUk9GSUxFX0lEKTsNCglwcm9maWxlLnZlcnNp b24gPSAweDAxMDE7DQoJcGZzZXEgPSBzZHBfbGlzdF9hcHBlbmQoMCwgJnBy b2ZpbGUpOw0KCXNkcF9zZXRfcHJvZmlsZV9kZXNjcygmcmVjb3JkLCBwZnNl cSk7DQoNCglzZHBfdXVpZDE2X2NyZWF0ZSgmbDJjYXBfdXVpZCwgTDJDQVBf VVVJRCk7DQoJcHJvdG9bMF0gPSBzZHBfbGlzdF9hcHBlbmQoMCwgJmwyY2Fw X3V1aWQpOw0KCWFwc2VxID0gc2RwX2xpc3RfYXBwZW5kKDAsIHByb3RvWzBd KTsNCg0KCXNkcF91dWlkMTZfY3JlYXRlKCZyZmNvbW1fdXVpZCwgUkZDT01N X1VVSUQpOw0KCXByb3RvWzFdID0gc2RwX2xpc3RfYXBwZW5kKDAsICZyZmNv bW1fdXVpZCk7DQoJY2hhbm5lbCA9IHNkcF9kYXRhX2FsbG9jKFNEUF9VSU5U OCwgJnU4KTsNCglwcm90b1sxXSA9IHNkcF9saXN0X2FwcGVuZChwcm90b1sx XSwgY2hhbm5lbCk7DQoJYXBzZXEgPSBzZHBfbGlzdF9hcHBlbmQoYXBzZXEs IHByb3RvWzFdKTsNCg0KCWZlYXR1cmVzID0gc2RwX2RhdGFfYWxsb2MoU0RQ X1VJTlQxNiwgJnUxNik7DQoJc2RwX2F0dHJfYWRkKCZyZWNvcmQsIFNEUF9B VFRSX1NVUFBPUlRFRF9GRUFUVVJFUywgZmVhdHVyZXMpOw0KDQoJYXByb3Rv ID0gc2RwX2xpc3RfYXBwZW5kKDAsIGFwc2VxKTsNCglzZHBfc2V0X2FjY2Vz c19wcm90b3MoJnJlY29yZCwgYXByb3RvKTsNCg0KCXNkcF9zZXRfaW5mb19h dHRyKCZyZWNvcmQsICJIYW5kc2ZyZWUiLCAwLCAwKTsNCg0KCWlmIChzZHBf cmVjb3JkX3JlZ2lzdGVyKHNlc3Npb24sICZyZWNvcmQsIFNEUF9SRUNPUkRf UEVSU0lTVCkgPCAwKSB7DQoJCXByaW50ZigiU2VydmljZSBSZWNvcmQgcmVn aXN0cmF0aW9uIGZhaWxlZFxuIik7DQoJCXJldCA9IC0xOw0KCQlnb3RvIGVu ZDsNCgl9DQoJcHJpbnRmKCJIYW5kc2ZyZWUgc2VydmljZSByZWdpc3RlcmVk XG4iKTsNCmVuZDoNCglzZHBfZGF0YV9mcmVlKGNoYW5uZWwpOw0KCXNkcF9s aXN0X2ZyZWUocHJvdG9bMF0sIDApOw0KCXNkcF9saXN0X2ZyZWUocHJvdG9b MV0sIDApOw0KCXNkcF9saXN0X2ZyZWUoYXBzZXEsIDApOw0KCXNkcF9saXN0 X2ZyZWUoYXByb3RvLCAwKTsNCglyZXR1cm4gcmV0Ow0KfQ0KDQpzdGF0aWMg aW50IGFkZF9zaW1hY2Nlc3Moc2RwX3Nlc3Npb25fdCAqc2Vzc2lvbiwgc3Zj X2luZm9fdCAqc2kpDQp7DQoJc2RwX2xpc3RfdCAqc3ZjbGFzc19pZCwgKnBm c2VxLCAqYXBzZXEsICpyb290Ow0KCXV1aWRfdCByb290X3V1aWQsIHN2Y2xh c3NfdXVpZCwgZ2Ffc3ZjbGFzc191dWlkLCBsMmNhcF91dWlkLCByZmNvbW1f dXVpZDsNCiAgICAgICAgc2RwX3JlY29yZF90IHJlY29yZDsJDQoJc2RwX3By b2ZpbGVfZGVzY190IHByb2ZpbGU7DQoJc2RwX2xpc3RfdCAqYXByb3RvLCAq cHJvdG9bMl07DQoJdWludDhfdCB1OCA9IHNpLT5jaGFubmVsPyBzaS0+Y2hh bm5lbDogMzsNCgl1aW50MTZfdCB1MTYgPSAweDMxOw0KCXNkcF9kYXRhX3Qg KmNoYW5uZWwsICpmZWF0dXJlczsJDQoJaW50IHJldCA9IDA7DQoNCgltZW1z ZXQoKHZvaWQgKikmcmVjb3JkLCAwLCBzaXplb2Yoc2RwX3JlY29yZF90KSk7 DQoJcmVjb3JkLmhhbmRsZSA9IDB4ZmZmZmZmZmY7DQoJc2RwX3V1aWQxNl9j cmVhdGUoJnJvb3RfdXVpZCwgUFVCTElDX0JST1dTRV9HUk9VUCk7DQoJcm9v dCA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcm9vdF91dWlkKTsNCglzZHBfc2V0 X2Jyb3dzZV9ncm91cHMoJnJlY29yZCwgcm9vdCk7DQoNCglzZHBfdXVpZDE2 X2NyZWF0ZSgmc3ZjbGFzc191dWlkLCBTQVBfU1ZDTEFTU19JRCk7DQoJc3Zj bGFzc19pZCA9IHNkcF9saXN0X2FwcGVuZCgwLCAmc3ZjbGFzc191dWlkKTsN CglzZHBfdXVpZDE2X2NyZWF0ZSgmZ2Ffc3ZjbGFzc191dWlkLCBHRU5FUklD X1RFTEVQSE9OWV9TVkNMQVNTX0lEKTsNCglzdmNsYXNzX2lkID0gc2RwX2xp c3RfYXBwZW5kKHN2Y2xhc3NfaWQsICZnYV9zdmNsYXNzX3V1aWQpOw0KCXNk cF9zZXRfc2VydmljZV9jbGFzc2VzKCZyZWNvcmQsIHN2Y2xhc3NfaWQpOw0K DQoJc2RwX3V1aWQxNl9jcmVhdGUoJnByb2ZpbGUudXVpZCwgU0FQX1BST0ZJ TEVfSUQpOw0KCXByb2ZpbGUudmVyc2lvbiA9IDB4MDEwMTsNCglwZnNlcSA9 IHNkcF9saXN0X2FwcGVuZCgwLCAmcHJvZmlsZSk7DQoJc2RwX3NldF9wcm9m aWxlX2Rlc2NzKCZyZWNvcmQsIHBmc2VxKTsNCg0KCXNkcF91dWlkMTZfY3Jl YXRlKCZsMmNhcF91dWlkLCBMMkNBUF9VVUlEKTsNCglwcm90b1swXSA9IHNk cF9saXN0X2FwcGVuZCgwLCAmbDJjYXBfdXVpZCk7DQoJYXBzZXEgPSBzZHBf bGlzdF9hcHBlbmQoMCwgcHJvdG9bMF0pOw0KDQoJc2RwX3V1aWQxNl9jcmVh dGUoJnJmY29tbV91dWlkLCBSRkNPTU1fVVVJRCk7DQoJcHJvdG9bMV0gPSBz ZHBfbGlzdF9hcHBlbmQoMCwgJnJmY29tbV91dWlkKTsNCgljaGFubmVsID0g c2RwX2RhdGFfYWxsb2MoU0RQX1VJTlQ4LCAmdTgpOw0KCXByb3RvWzFdID0g c2RwX2xpc3RfYXBwZW5kKHByb3RvWzFdLCBjaGFubmVsKTsNCglhcHNlcSA9 IHNkcF9saXN0X2FwcGVuZChhcHNlcSwgcHJvdG9bMV0pOw0KDQoJZmVhdHVy ZXMgPSBzZHBfZGF0YV9hbGxvYyhTRFBfVUlOVDE2LCAmdTE2KTsNCglzZHBf YXR0cl9hZGQoJnJlY29yZCwgU0RQX0FUVFJfU1VQUE9SVEVEX0ZFQVRVUkVT LCBmZWF0dXJlcyk7DQoNCglhcHJvdG8gPSBzZHBfbGlzdF9hcHBlbmQoMCwg YXBzZXEpOw0KCXNkcF9zZXRfYWNjZXNzX3Byb3RvcygmcmVjb3JkLCBhcHJv dG8pOw0KDQoJc2RwX3NldF9pbmZvX2F0dHIoJnJlY29yZCwgIlNJTSBBY2Nl c3MiLCAwLCAwKTsNCg0KCWlmIChzZHBfcmVjb3JkX3JlZ2lzdGVyKHNlc3Np b24sICZyZWNvcmQsIFNEUF9SRUNPUkRfUEVSU0lTVCkgPCAwKSB7DQoJCXBy aW50ZigiU2VydmljZSBSZWNvcmQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7 DQoJCXJldCA9IC0xOw0KCQlnb3RvIGVuZDsNCgl9DQoJcHJpbnRmKCJIYW5k c2ZyZWUgc2VydmljZSByZWdpc3RlcmVkXG4iKTsNCmVuZDoNCglzZHBfZGF0 YV9mcmVlKGNoYW5uZWwpOw0KCXNkcF9saXN0X2ZyZWUocHJvdG9bMF0sIDAp Ow0KCXNkcF9saXN0X2ZyZWUocHJvdG9bMV0sIDApOw0KCXNkcF9saXN0X2Zy ZWUoYXBzZXEsIDApOw0KCXNkcF9saXN0X2ZyZWUoYXByb3RvLCAwKTsNCgly ZXR1cm4gcmV0Ow0KfQ0KDQpzdGF0aWMgaW50IGFkZF9vcHVzaChzZHBfc2Vz c2lvbl90ICpzZXNzaW9uLCBzdmNfaW5mb190ICpzaSkNCnsNCglzZHBfbGlz dF90ICpzdmNsYXNzX2lkLCAqcGZzZXEsICphcHNlcSwgKnJvb3Q7DQoJdXVp ZF90IHJvb3RfdXVpZCwgb3B1c2hfdXVpZCwgbDJjYXBfdXVpZCwgcmZjb21t X3V1aWQsIG9iZXhfdXVpZDsNCglzZHBfcHJvZmlsZV9kZXNjX3QgcHJvZmls ZVsxXTsNCglzZHBfbGlzdF90ICphcHJvdG8sICpwcm90b1szXTsNCglzZHBf cmVjb3JkX3QgcmVjb3JkOw0KCXVpbnQ4X3QgY2hhbiA9IHNpLT5jaGFubmVs PyBzaS0+Y2hhbm5lbDogNDsNCglzZHBfZGF0YV90ICpjaGFubmVsOw0KCXVp bnQ4X3QgZm9ybWF0c1tdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAw eDA1LCAweDA2IH07DQoJLy91aW50OF90IGZvcm1hdHNbXSA9IHsgMHhmZiB9 Ow0KCXZvaWQgKmR0ZHNbc2l6ZW9mKGZvcm1hdHMpXSwgKnZhbHVlc1tzaXpl b2YoZm9ybWF0cyldOw0KCWludCBpOw0KCXVpbnQ4X3QgZHRkID0gU0RQX1VJ TlQ4Ow0KCXNkcF9kYXRhX3QgKnNmbGlzdDsNCglpbnQgcmV0ID0gMDsNCg0K CW1lbXNldCgodm9pZCAqKSZyZWNvcmQsIDAsIHNpemVvZihzZHBfcmVjb3Jk X3QpKTsNCglyZWNvcmQuaGFuZGxlID0gMHhmZmZmZmZmZjsNCglzZHBfdXVp ZDE2X2NyZWF0ZSgmcm9vdF91dWlkLCBQVUJMSUNfQlJPV1NFX0dST1VQKTsN Cglyb290ID0gc2RwX2xpc3RfYXBwZW5kKDAsICZyb290X3V1aWQpOw0KCXNk cF9zZXRfYnJvd3NlX2dyb3VwcygmcmVjb3JkLCByb290KTsNCg0KCXNkcF91 dWlkMTZfY3JlYXRlKCZvcHVzaF91dWlkLCBPQkVYX09CSlBVU0hfU1ZDTEFT U19JRCk7DQoJc3ZjbGFzc19pZCA9IHNkcF9saXN0X2FwcGVuZCgwLCAmb3B1 c2hfdXVpZCk7DQoJc2RwX3NldF9zZXJ2aWNlX2NsYXNzZXMoJnJlY29yZCwg c3ZjbGFzc19pZCk7DQoNCglzZHBfdXVpZDE2X2NyZWF0ZSgmcHJvZmlsZVsw XS51dWlkLCBPQkVYX09CSlBVU0hfUFJPRklMRV9JRCk7DQoJcHJvZmlsZVsw XS52ZXJzaW9uID0gMHgwMTAwOw0KCXBmc2VxID0gc2RwX2xpc3RfYXBwZW5k KDAsIHByb2ZpbGUpOw0KCXNkcF9zZXRfcHJvZmlsZV9kZXNjcygmcmVjb3Jk LCBwZnNlcSk7DQoNCglzZHBfdXVpZDE2X2NyZWF0ZSgmbDJjYXBfdXVpZCwg TDJDQVBfVVVJRCk7DQoJcHJvdG9bMF0gPSBzZHBfbGlzdF9hcHBlbmQoMCwg JmwyY2FwX3V1aWQpOw0KCWFwc2VxID0gc2RwX2xpc3RfYXBwZW5kKDAsIHBy b3RvWzBdKTsNCg0KCXNkcF91dWlkMTZfY3JlYXRlKCZyZmNvbW1fdXVpZCwg UkZDT01NX1VVSUQpOw0KCXByb3RvWzFdID0gc2RwX2xpc3RfYXBwZW5kKDAs ICZyZmNvbW1fdXVpZCk7DQoJY2hhbm5lbCA9IHNkcF9kYXRhX2FsbG9jKFNE UF9VSU5UOCwgJmNoYW4pOw0KCXByb3RvWzFdID0gc2RwX2xpc3RfYXBwZW5k KHByb3RvWzFdLCBjaGFubmVsKTsNCglhcHNlcSA9IHNkcF9saXN0X2FwcGVu ZChhcHNlcSwgcHJvdG9bMV0pOw0KDQoJc2RwX3V1aWQxNl9jcmVhdGUoJm9i ZXhfdXVpZCwgT0JFWF9VVUlEKTsNCglwcm90b1syXSA9IHNkcF9saXN0X2Fw cGVuZCgwLCAmb2JleF91dWlkKTsNCglhcHNlcSA9IHNkcF9saXN0X2FwcGVu ZChhcHNlcSwgcHJvdG9bMl0pOw0KDQoJYXByb3RvID0gc2RwX2xpc3RfYXBw ZW5kKDAsIGFwc2VxKTsNCglzZHBfc2V0X2FjY2Vzc19wcm90b3MoJnJlY29y ZCwgYXByb3RvKTsNCg0KCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZm9ybWF0 cyk7IGkrKykgew0KCQlkdGRzW2ldID0gJmR0ZDsNCgkJdmFsdWVzW2ldID0g JmZvcm1hdHNbaV07DQoJfQ0KCXNmbGlzdCA9IHNkcF9zZXFfYWxsb2MoZHRk cywgdmFsdWVzLCBzaXplb2YoZm9ybWF0cykpOw0KCXNkcF9hdHRyX2FkZCgm cmVjb3JkLCBTRFBfQVRUUl9TVVBQT1JURURfRk9STUFUU19MSVNULCBzZmxp c3QpOw0KDQoJc2RwX3NldF9pbmZvX2F0dHIoJnJlY29yZCwgIk9CRVggT2Jq ZWN0IFB1c2giLCAwLCAwKTsNCg0KCWlmIChzZHBfcmVjb3JkX3JlZ2lzdGVy KHNlc3Npb24sICZyZWNvcmQsIFNEUF9SRUNPUkRfUEVSU0lTVCkgPCAwKSB7 DQoJCXByaW50ZigiU2VydmljZSBSZWNvcmQgcmVnaXN0cmF0aW9uIGZhaWxl ZFxuIik7DQoJCXJldCA9IC0xOw0KCQlnb3RvIGVuZDsNCgl9DQoJcHJpbnRm KCJPQkVYIE9iamVjdCBQdXNoIHNlcnZpY2UgcmVnaXN0ZXJlZFxuIik7DQpl bmQ6DQoJc2RwX2RhdGFfZnJlZShjaGFubmVsKTsNCglzZHBfbGlzdF9mcmVl KHByb3RvWzBdLCAwKTsNCglzZHBfbGlzdF9mcmVlKHByb3RvWzFdLCAwKTsN CglzZHBfbGlzdF9mcmVlKHByb3RvWzJdLCAwKTsNCglzZHBfbGlzdF9mcmVl KGFwc2VxLCAwKTsNCglzZHBfbGlzdF9mcmVlKGFwcm90bywgMCk7DQoJcmV0 dXJuIHJldDsNCn0NCg0Kc3RhdGljIGludCBhZGRfZmlsZV90cmFucyhzZHBf c2Vzc2lvbl90ICpzZXNzaW9uLCBzdmNfaW5mb190ICpzaSkNCnsNCglzZHBf bGlzdF90ICpzdmNsYXNzX2lkLCAqcGZzZXEsICphcHNlcSwgKnJvb3Q7DQoJ dXVpZF90IHJvb3RfdXVpZCwgZnRybl91dWlkLCBsMmNhcF91dWlkLCByZmNv bW1fdXVpZCwgb2JleF91dWlkOw0KCXNkcF9wcm9maWxlX2Rlc2NfdCBwcm9m aWxlWzFdOw0KCXNkcF9saXN0X3QgKmFwcm90bywgKnByb3RvWzNdOw0KCXNk cF9yZWNvcmRfdCByZWNvcmQ7DQoJdWludDhfdCB1OCA9IHNpLT5jaGFubmVs PyBzaS0+Y2hhbm5lbDogNDsNCglzZHBfZGF0YV90ICpjaGFubmVsOw0KCWlu dCByZXQgPSAwOw0KDQoJbWVtc2V0KCh2b2lkICopJnJlY29yZCwgMCwgc2l6 ZW9mKHNkcF9yZWNvcmRfdCkpOw0KCXJlY29yZC5oYW5kbGUgPSAweGZmZmZm ZmZmOw0KCXNkcF91dWlkMTZfY3JlYXRlKCZyb290X3V1aWQsIFBVQkxJQ19C Uk9XU0VfR1JPVVApOw0KCXJvb3QgPSBzZHBfbGlzdF9hcHBlbmQoMCwgJnJv b3RfdXVpZCk7DQoJc2RwX3NldF9icm93c2VfZ3JvdXBzKCZyZWNvcmQsIHJv b3QpOw0KDQoJc2RwX3V1aWQxNl9jcmVhdGUoJmZ0cm5fdXVpZCwgT0JFWF9G SUxFVFJBTlNfU1ZDTEFTU19JRCk7DQoJc3ZjbGFzc19pZCA9IHNkcF9saXN0 X2FwcGVuZCgwLCAmZnRybl91dWlkKTsNCglzZHBfc2V0X3NlcnZpY2VfY2xh c3NlcygmcmVjb3JkLCBzdmNsYXNzX2lkKTsNCg0KCXNkcF91dWlkMTZfY3Jl YXRlKCZwcm9maWxlWzBdLnV1aWQsIE9CRVhfRklMRVRSQU5TX1BST0ZJTEVf SUQpOw0KCXByb2ZpbGVbMF0udmVyc2lvbiA9IDB4MDEwMDsNCglwZnNlcSA9 IHNkcF9saXN0X2FwcGVuZCgwLCAmcHJvZmlsZVswXSk7DQoJc2RwX3NldF9w cm9maWxlX2Rlc2NzKCZyZWNvcmQsIHBmc2VxKTsNCg0KCXNkcF91dWlkMTZf Y3JlYXRlKCZsMmNhcF91dWlkLCBMMkNBUF9VVUlEKTsNCglwcm90b1swXSA9 IHNkcF9saXN0X2FwcGVuZCgwLCAmbDJjYXBfdXVpZCk7DQoJYXBzZXEgPSBz ZHBfbGlzdF9hcHBlbmQoMCwgcHJvdG9bMF0pOw0KDQoJc2RwX3V1aWQxNl9j cmVhdGUoJnJmY29tbV91dWlkLCBSRkNPTU1fVVVJRCk7DQoJcHJvdG9bMV0g PSBzZHBfbGlzdF9hcHBlbmQoMCwgJnJmY29tbV91dWlkKTsNCgljaGFubmVs ID0gc2RwX2RhdGFfYWxsb2MoU0RQX1VJTlQ4LCAmdTgpOw0KCXByb3RvWzFd ID0gc2RwX2xpc3RfYXBwZW5kKHByb3RvWzFdLCBjaGFubmVsKTsNCglhcHNl cSA9IHNkcF9saXN0X2FwcGVuZChhcHNlcSwgcHJvdG9bMV0pOw0KDQoJc2Rw X3V1aWQxNl9jcmVhdGUoJm9iZXhfdXVpZCwgT0JFWF9VVUlEKTsNCglwcm90 b1syXSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmb2JleF91dWlkKTsNCglhcHNl cSA9IHNkcF9saXN0X2FwcGVuZChhcHNlcSwgcHJvdG9bMl0pOw0KDQoJYXBy b3RvID0gc2RwX2xpc3RfYXBwZW5kKDAsIGFwc2VxKTsNCglzZHBfc2V0X2Fj Y2Vzc19wcm90b3MoJnJlY29yZCwgYXByb3RvKTsNCg0KCXNkcF9zZXRfaW5m b19hdHRyKCZyZWNvcmQsICJPQkVYIEZpbGUgVHJhbnNmZXIiLCAwLCAwKTsN Cg0KCWlmIChzZHBfcmVjb3JkX3JlZ2lzdGVyKHNlc3Npb24sICZyZWNvcmQs IFNEUF9SRUNPUkRfUEVSU0lTVCkgPCAwKSB7DQoJCXByaW50ZigiU2Vydmlj ZSBSZWNvcmQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7DQoJCXJldCA9IC0x Ow0KCQlnb3RvIGVuZDsNCgl9DQoJcHJpbnRmKCJPQkVYIEZpbGUgVHJhbnNm ZXIgc2VydmljZSByZWdpc3RlcmVkXG4iKTsNCmVuZDoNCglzZHBfZGF0YV9m cmVlKGNoYW5uZWwpOw0KCXNkcF9saXN0X2ZyZWUocHJvdG9bMF0sIDApOw0K CXNkcF9saXN0X2ZyZWUocHJvdG9bMV0sIDApOw0KCXNkcF9saXN0X2ZyZWUo cHJvdG9bMl0sIDApOw0KCXNkcF9saXN0X2ZyZWUoYXBzZXEsIDApOw0KCXNk cF9saXN0X2ZyZWUoYXByb3RvLCAwKTsNCglyZXR1cm4gcmV0Ow0KfQ0KDQpz dHJ1Y3Qgew0KCWNoYXIJCSpuYW1lOw0KCXVpbnQxNl90CWNsYXNzOw0KCWlu dAkJKCphZGQpKHNkcF9zZXNzaW9uX3QgKnNlc3MsIHN2Y19pbmZvX3QgKnNp KTsNCn0gc2VydmljZVtdID0gew0KCXsgIlNQIiwJCVNFUklBTF9QT1JUX1NW Q0xBU1NfSUQsCQlhZGRfc3AJCX0sDQoJeyAiT1BVU0giLAlPQkVYX09CSlBV U0hfU1ZDTEFTU19JRCwJYWRkX29wdXNoCX0sDQoJeyAiRlRSTiIsCU9CRVhf RklMRVRSQU5TX1NWQ0xBU1NfSUQsCWFkZF9maWxlX3RyYW5zCX0sDQoJeyAi SFMiLAkJSEVBRFNFVF9TVkNMQVNTX0lELAkJYWRkX2hlYWRzZXQJfSwNCgl7 ICJIRiIsCQlIQU5EU0ZSRUVfU1ZDTEFTU19JRCwJCWFkZF9oYW5kc2ZyZWUJ fSwNCgl7ICJTQVAiLAlTQVBfU1ZDTEFTU19JRCwJCQlhZGRfc2ltYWNjZXNz CX0sDQoJeyAwIH0NCn07DQoNCi8qIEFkZCBsb2NhbCBzZXJ2aWNlICovDQpz dGF0aWMgaW50IGFkZF9zZXJ2aWNlKGJkYWRkcl90ICpiZGFkZHIsIHN2Y19p bmZvX3QgKnNpKQ0Kew0KCWludCBpOw0KCXNkcF9zZXNzaW9uX3QgKnNlc3Mg PSBzZHBfY29ubmVjdCgmaW50ZXJmYWNlLCBCREFERFJfTE9DQUwsIFNEUF9S RVRSWV9JRl9CVVNZKTsNCg0KCWlmICghc2VzcykNCgkJcmV0dXJuIC0xOw0K CWlmIChzaS0+bmFtZSkNCgkJZm9yIChpID0gMDsgc2VydmljZVtpXS5uYW1l OyBpKyspDQoJCQlpZiAoIXN0cmNhc2VjbXAoc2VydmljZVtpXS5uYW1lLCBz aS0+bmFtZSkpIHsNCgkJCQlpbnQgcmV0ID0gLTE7DQoJCQkJaWYgKHNlcnZp Y2VbaV0uYWRkKQ0KCQkJCQlyZXQgPSBzZXJ2aWNlW2ldLmFkZChzZXNzLCBz aSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi c2RwIHNlcnZpY2UgaXMgYWRkZWRcbiIpOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvL2ZyZWUoc2ktPm5hbWUpOw0KCQkJCXNkcF9jbG9z ZShzZXNzKTsNCgkJCQlyZXR1cm4gcmV0Ow0KCQkJfQ0KCXByaW50ZigiVW5r bm93biBzZXJ2aWNlIG5hbWU6ICVzXG4iLCBzaS0+bmFtZSk7DQoJZnJlZShz aS0+bmFtZSk7DQoJc2RwX2Nsb3NlKHNlc3MpOw0KCXJldHVybiAtMTsNCn0N Cg0KLy9yZXR1cm4gYWRkX3NlcnZpY2UoMCwgJnNpKTsNCg0KLypzdGF0aWMg dm9pZCBpbnF1aXJ5KGhhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICphcmcpDQp7 DQoJaW5xdWlyeV9pbmZvIGlpWzIwXTsNCgl1aW50OF90IGNvdW50ID0gMDsN CglpbnQgaTsNCg0KCXByaW50ZigiSW5xdWlyaW5nIC4uLlxuIik7DQoJaWYg KHNkcF9nZW5lcmFsX2lucXVpcnkoaWksIDIwLCA4LCAmY291bnQpIDwgMCkg ew0KCQlwcmludGYoIklucXVpcnkgZmFpbGVkXG4iKTsNCgkJcmV0dXJuOw0K CX0NCglmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCgkJaGFuZGxlcigm aWlbaV0uYmRhZGRyLCBhcmcpOw0KfQ0KDQpzdGF0aWMgaW50IGRvX3NlYXJj aChiZGFkZHJfdCAqYmRhZGRyLCBzdHJ1Y3Qgc2VhcmNoX2NvbnRleHQgKmNv bnRleHQpDQp7DQoJc2RwX2xpc3RfdCAqYXR0cmlkLCAqc2VhcmNoLCAqc2Vx LCAqbmV4dDsNCgl1aW50MzJfdCByYW5nZSA9IDB4MDAwMGZmZmY7DQoJY2hh ciBzdHJbMjBdOw0KCXNkcF9zZXNzaW9uX3QgKnNlc3M7DQoNCglpZiAoIWJk YWRkcikgew0KCQlpbnF1aXJ5KGRvX3NlYXJjaCwgY29udGV4dCk7DQoJCXJl dHVybiAwOw0KCX0NCglzZXNzID0gc2RwX2Nvbm5lY3QoJmludGVyZmFjZSwg YmRhZGRyLCBTRFBfUkVUUllfSUZfQlVTWSk7DQoJYmEyc3RyKGJkYWRkciwg c3RyKTsNCglpZiAoIXNlc3MpIHsNCgkJcHJpbnRmKCJGYWlsZWQgdG8gY29u bmVjdCB0byBTRFAgc2VydmVyIG9uICVzOiAlc1xuIiwgc3RyLCBzdHJlcnJv cihlcnJubykpOw0KCQlyZXR1cm4gLTE7DQoJfQ0KCWlmIChjb250ZXh0LT5z dmMpDQoJCXByaW50ZigiU2VhcmNoaW5nIGZvciAlcyBvbiAlcyAuLi5cbiIs IGNvbnRleHQtPnN2Yywgc3RyKTsNCgllbHNlDQoJCXByaW50ZigiQnJvd3Np bmcgJXMgLi4uXG4iLCBzdHIpOw0KDQoJYXR0cmlkID0gc2RwX2xpc3RfYXBw ZW5kKDAsICZyYW5nZSk7DQoJc2VhcmNoID0gc2RwX2xpc3RfYXBwZW5kKDAs ICZjb250ZXh0LT5ncm91cCk7DQoJaWYgKHNkcF9zZXJ2aWNlX3NlYXJjaF9h dHRyX3JlcShzZXNzLCBzZWFyY2gsIFNEUF9BVFRSX1JFUV9SQU5HRSwgYXR0 cmlkLCAmc2VxKSkgew0KCQlwcmludGYoIlNlcnZpY2UgU2VhcmNoIGZhaWxl ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQoJCXNkcF9jbG9zZShzZXNz KTsNCgkJcmV0dXJuIC0xOw0KCX0NCglzZHBfbGlzdF9mcmVlKGF0dHJpZCwg MCk7DQoJc2RwX2xpc3RfZnJlZShzZWFyY2gsIDApOw0KDQoJZm9yICg7IHNl cTsgc2VxID0gbmV4dCkgew0KCQlzZHBfcmVjb3JkX3QgKnJlYyA9IChzZHBf cmVjb3JkX3QgKikgc2VxLT5kYXRhOw0KCQlzdHJ1Y3Qgc2VhcmNoX2NvbnRl eHQgc3ViX2NvbnRleHQ7DQoNCgkJaWYgKGNvbnRleHQtPnRyZWUpIHsNCgkJ CXNkcF9wcmludGZfc2VydmljZV9hdHRyKHJlYyk7DQoJCX0gZWxzZSB7DQoJ CQlwcmludF9zZXJ2aWNlX2F0dHIocmVjKTsNCgkJfQ0KCQlwcmludGYoIlxu Iik7DQoJCQ0KCQlpZiAoc2RwX2dldF9ncm91cF9pZChyZWMsICZzdWJfY29u dGV4dC5ncm91cCkgIT0gLTEpIHsNCgkJCW1lbWNweSgmc3ViX2NvbnRleHQs IGNvbnRleHQsIHNpemVvZihzdHJ1Y3Qgc2VhcmNoX2NvbnRleHQpKTsNCgkJ CWlmIChzdWJfY29udGV4dC5ncm91cC52YWx1ZS51dWlkMTYgIT0gY29udGV4 dC0+Z3JvdXAudmFsdWUudXVpZDE2KQ0KCQkJCWRvX3NlYXJjaChiZGFkZHIs ICZzdWJfY29udGV4dCk7DQoJCX0NCgkJbmV4dCA9IHNlcS0+bmV4dDsNCgkJ ZnJlZShzZXEpOw0KCQlzZHBfcmVjb3JkX2ZyZWUocmVjKTsNCgl9DQoJc2Rw X2Nsb3NlKHNlc3MpOw0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgc3RydWN0 IG9wdGlvbiBicm93c2Vfb3B0aW9uc1tdID0gew0KCXsgImhlbHAiLCAgICAw LDAsICdoJyB9LA0KCXsgInRyZWUiLCAgICAwLDAsICd0JyB9LA0KCXsgMCwg MCwgMCwgMCB9DQp9OyovDQoNCnR5cGVkZWYgc3RydWN0IHsNCgkJYmRhZGRy X3QgKmJkYWRkcjsNCgkJdWludDMyX3QgaGFuZGxlOw0KCQl1aW50MTZfdCBh dHRyaWI7DQoJCWNoYXIgKmF0dHJpX3ZhbHVlOw0KfSBwcm9maWxlOw0KDQpp bnQgbWFpbigpDQp7DQoJcHJvZmlsZSBUNjEwcHJvZmlsZTsNCiAgICBzdmNf aW5mb190IFQ2MTBzdmM7DQoJYmRhZGRyX3QgYmE7DQogICAgY2hhciAqc3Ry PSIwMDowQTpEOTpERDpEODpBOCI7DQogICAgZXN0cjJiYShzdHIsICZiYSk7 DQoJc2RwX3Nlc3Npb25fdCAqc2VzczsNCglwcmludGYoIldlbGNvbWUgdG8g YmljX3NkcFxuIik7DQoJVDYxMHByb2ZpbGUuaGFuZGxlPTB4MTAwMDE7DQoJ VDYxMHByb2ZpbGUuYXR0cmliPTB4MTAwOw0KICAgIFQ2MTBwcm9maWxlLmF0 dHJpX3ZhbHVlPSIweDExMDgiOw0KCXByaW50ZigiVDYxMCBwcm9maWxlIGlz IGFkZGVkXG4iKTsNCglUNjEwc3ZjLmNsYXNzPTB4MTEwODsNCglwcmludGYo IlNlcnZpY2UgbmFtZSBpcyBhZGRlZFxuIik7DQogICAgVDYxMHN2Yy5wcm9m aWxlPTB4MTEwODsNCglUNjEwc3ZjLmNoYW5uZWw9MzsNCiAgICBUNjEwc3Zj Lm5hbWU9IkhTIjsNCglhZGRfc2VydmljZShUNjEwcHJvZmlsZS5iZGFkZHIs ICZUNjEwc3ZjKTsNCglwcmludGYoIk5vdyBhdHRyaWJ1dGUgd2lsbCBiZSBz ZXRcbiIpOw0KCXNlc3MgPSBzZHBfY29ubmVjdChCREFERFJfQU5ZLCBCREFE RFJfTE9DQUwsIDApOw0KCXNldF9hdHRyaWIoc2VzcywgVDYxMHByb2ZpbGUu aGFuZGxlLCBUNjEwcHJvZmlsZS5hdHRyaWIsIFQ2MTBwcm9maWxlLmF0dHJp X3ZhbHVlKTsNCiAgICBwcmludGYoImF0dHJpYnV0ZXMgYXJlIHNldFxuIik7 DQoJcmV0dXJuIDA7DQp9DQo= --0-837334115-1111142644=:25622-- ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ Bluez-users mailing list Bluez-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-users