From owner-freebsd-hackers@FreeBSD.ORG Fri Jan 30 19:44:14 2009 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B99011065731 for ; Fri, 30 Jan 2009 19:44:14 +0000 (UTC) (envelope-from matthew.fleming@isilon.com) Received: from seaxch09.isilon.com (seaxch09.isilon.com [74.85.160.25]) by mx1.freebsd.org (Postfix) with ESMTP id 9A0EC8FC1C for ; Fri, 30 Jan 2009 19:44:14 +0000 (UTC) (envelope-from matthew.fleming@isilon.com) Received: from 10.54.190.89 ([10.54.190.89]) by seaxch09.desktop.isilon.com ([10.10.2.96]) with Microsoft Exchange Server HTTP-DAV ; Fri, 30 Jan 2009 19:44:14 +0000 Received: from amaretto by SEAXCH09.isilon.com; 30 Jan 2009 11:44:23 -0800 From: Matthew Fleming To: Sam Leffler In-Reply-To: <49834710.9070908@freebsd.org> References: <1233337318.13748.101.camel@amaretto> <49834710.9070908@freebsd.org> Content-Type: multipart/mixed; boundary="=-fq7uZMe0OJhocqSP8KeS" Organization: The Q Continuum Date: Fri, 30 Jan 2009 11:44:23 -0800 Message-Id: <1233344663.13748.120.camel@amaretto> Mime-Version: 1.0 X-Mailer: Evolution 2.24.2 Cc: freebsd-hackers Subject: Re: Dynamic ddb commands X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Jan 2009 19:44:15 -0000 --=-fq7uZMe0OJhocqSP8KeS Content-Type: text/plain Content-Transfer-Encoding: 7bit > If I recall it was painful to find entries in the help listing w/o sorting. So it's a human reading problem, where ddb spat out the command names in order that they were in the in-memory struct, and if I wanted to look over the listing I had to visually scan every one since they weren't in order? > Feel free to propose an alternative implementation; noone's wed to > what's in the tree. Here's a patch for 6.x. The display order for the commands is an interesting issue; it would also make sense to group commands (perhaps alphabetically) by the module that defined them, so that when I added a module all my ddb commands stayed together. The patch I have here will leave commands grouped by module, so it would be relatively trivial to have linker_file_register_ddb add a new kind of dummy command that specifies the module name for the following set of commands. N.B. It appears from the FAQ that attachments are acceptable so I'm sending the patch as an attachment. Apologies if this is incorrect. Thanks, matthew --=-fq7uZMe0OJhocqSP8KeS Content-Disposition: attachment; filename="ddb.diff" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="ddb.diff"; charset="UTF-8" SW5kZXg6IGtlcm4va2Vybl9saW5rZXIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGtlcm4va2Vybl9saW5r ZXIuYwkocmV2aXNpb24gMTA4NjU5KQ0KKysrIGtlcm4va2Vybl9saW5rZXIuYwkod29ya2luZyBj b3B5KQ0KQEAgLTQwLDQzICs0MCw1MyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vy bi9rZXJuX2xpDQogI2luY2x1ZGUgPHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ DQogI2luY2x1ZGUgPHN5cy9tdXRleC5oPg0KICNpbmNsdWRlIDxzeXMvc3guaD4NCiAjaW5jbHVk ZSA8c3lzL21hYy5oPg0KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+DQogI2luY2x1ZGUgPHN5cy9s aW5rZXIuaD4NCiAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+DQogI2luY2x1ZGUgPHN5cy9saWJrZXJu Lmg+DQogI2luY2x1ZGUgPHN5cy9uYW1laS5oPg0KICNpbmNsdWRlIDxzeXMvdm5vZGUuaD4NCiAj aW5jbHVkZSA8c3lzL3N5c2N0bC5oPg0KICNpZmRlZiBLREINCiAjaW5jbHVkZSA8c3lzL2tkYi5o Pg0KICNlbmRpZg0KKyNpZmRlZiBEREINCisjaW5jbHVkZSA8ZGRiL2RkYi5oPg0KKyNlbmRpZiAv KiBEREIgKi8NCiANCiAjaW5jbHVkZSA8dm0vdW1hLmg+DQogI2luY2x1ZGUgImxpbmtlcl9pZi5o Ig0KIA0KICNpZmRlZiBLTERfREVCVUcNCiBpbnQga2xkX2RlYnVnID0gMDsNCiAjZW5kaWYNCiAN CiAvKg0KICAqIHN0YXRpYyBjaGFyICpsaW5rZXJfc2VhcmNoX3BhdGgoY29uc3QgY2hhciAqbmFt ZSwgc3RydWN0IG1vZF9kZXBlbmQNCiAgKiAqdmVyaW5mbyk7DQogICovDQogc3RhdGljIGNvbnN0 IGNoYXIgCSpsaW5rZXJfYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCk7DQorI2lmZGVmIEREQg0K K3N0YXRpYyB2b2lkIGxpbmtlcl9maWxlX3JlZ2lzdGVyX2RkYihsaW5rZXJfZmlsZV90IGZpbGUp Ow0KK3N0YXRpYyB2b2lkIGxpbmtlcl9maWxlX3VucmVnaXN0ZXJfZGRiKGxpbmtlcl9maWxlX3Qg ZmlsZSk7DQorI2Vsc2UgLyogIS4uLiBEREIgKi8NCisjZGVmaW5lIGxpbmtlcl9maWxlX3JlZ2lz dGVyX2RkYihmaWxlKQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUgbGlua2VyX2ZpbGVfdW5y ZWdpc3Rlcl9kZGIoZmlsZSkJZG8geyB9IHdoaWxlICgwKQ0KKyNlbmRpZiAvKiBEREIgKi8NCiAN CiAvKiBNZXRhZGF0YSBmcm9tIHRoZSBzdGF0aWMga2VybmVsICovDQogU0VUX0RFQ0xBUkUobW9k bWV0YWRhdGFfc2V0LCBzdHJ1Y3QgbW9kX21ldGFkYXRhKTsNCiANCiBNQUxMT0NfREVGSU5FKE1f TElOS0VSLCAibGlua2VyIiwgImtlcm5lbCBsaW5rZXIiKTsNCiANCiBsaW5rZXJfZmlsZV90IGxp bmtlcl9rZXJuZWxfZmlsZTsNCiANCiBzdGF0aWMgc3RydWN0IG10eCBrbGRfbXR4OwkvKiBrZXJu ZWwgbGlua2VyIG11dGV4ICovDQogDQogc3RhdGljIGxpbmtlcl9jbGFzc19saXN0X3QgY2xhc3Nl czsNCiBsaW5rZXJfZmlsZV9saXN0X3QgbGlua2VyX2ZpbGVzOw0KIHN0YXRpYyBpbnQgbmV4dF9m aWxlX2lkID0gMTsNCiBzdGF0aWMgaW50IGxpbmtlcl9ub19tb3JlX2NsYXNzZXMgPSAwOw0KIA0K QEAgLTM2MSwzMCArMzcxLDM2IEBAIGxpbmtlcl9sb2FkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5h bWUsIGwNCiAJCUtMRF9EUEYoRklMRSwgKCJsaW5rZXJfbG9hZF9maWxlOiB0cnlpbmcgdG8gbG9h ZCAlc1xuIiwNCiAJCSAgICBmaWxlbmFtZSkpOw0KIAkJZXJyb3IgPSBMSU5LRVJfTE9BRF9GSUxF KGxjLCBmaWxlbmFtZSwgJmxmKTsNCiAJCS8qDQogCQkgKiBJZiB3ZSBnb3Qgc29tZXRoaW5nIG90 aGVyIHRoYW4gRU5PRU5ULCB0aGVuIGl0IGV4aXN0cyBidXQNCiAJCSAqIHdlIGNhbm5vdCBsb2Fk IGl0IGZvciBzb21lIG90aGVyIHJlYXNvbi4NCiAJCSAqLw0KIAkJaWYgKGVycm9yICE9IEVOT0VO VCkNCiAJCQlmb3VuZGZpbGUgPSAxOw0KIAkJaWYgKGxmKSB7DQogCQkJZXJyb3IgPSBsaW5rZXJf ZmlsZV9yZWdpc3Rlcl9tb2R1bGVzKGxmKTsNCiAJCQlpZiAoZXJyb3IgPT0gRUVYSVNUKSB7DQog CQkJCWxpbmtlcl9maWxlX3VubG9hZChsZiwgTElOS0VSX1VOTE9BRF9GT1JDRSk7DQogCQkJCWdv dG8gb3V0Ow0KIAkJCX0NCisJCQkvKg0KKwkJCSAqIFJlZ2lzdGVyIGRkYiBjb21tYW5kcyBiZWZv cmUgYW55dGhpbmcsIHNvDQorCQkJICogdGhleSdyZSBhdmFpbGFibGUgaW4gY2FzZSBzeXNpbml0 IGJ1Zw0KKwkJCSAqIGNhdXNlcyBhIGNyYXNoLg0KKwkJCSAqLw0KKwkJCWxpbmtlcl9maWxlX3Jl Z2lzdGVyX2RkYihsZik7DQogCQkJbGlua2VyX2ZpbGVfcmVnaXN0ZXJfc3lzY3RscyhsZik7DQog CQkJbGlua2VyX2ZpbGVfc3lzaW5pdChsZik7DQogCQkJbGYtPmZsYWdzIHw9IExJTktFUl9GSUxF X0xJTktFRDsNCiAJCQkqcmVzdWx0ID0gbGY7DQogCQkJZXJyb3IgPSAwOw0KIAkJCWdvdG8gb3V0 Ow0KIAkJfQ0KIAl9DQogCS8qDQogCSAqIExlc3MgdGhhbiBpZGVhbCwgYnV0IHRlbGxzIHRoZSB1 c2VyIHdoZXRoZXIgaXQgZmFpbGVkIHRvIGxvYWQgb3INCiAJICogdGhlIG1vZHVsZSB3YXMgbm90 IGZvdW5kLg0KIAkgKi8NCiAJaWYgKGZvdW5kZmlsZSkgew0KIAkJLyoNCiAJCSAqIEZvcm1hdCBu b3QgcmVjb2duaXplZCBvciBvdGhlcndpc2UgdW5sb2FkYWJsZS4NCkBAIC01NDAsMzAgKzU1Niwz MSBAQCBsaW5rZXJfZmlsZV91bmxvYWQobGlua2VyX2ZpbGVfdCBmaWxlLCBpDQogCWZvciAobWwg PSBUQUlMUV9GSVJTVCgmZm91bmRfbW9kdWxlcyk7IG1sOyBtbCA9IG5leHRtbCkgew0KIAkJbmV4 dG1sID0gVEFJTFFfTkVYVChtbCwgbGluayk7DQogCQlpZiAobWwtPmNvbnRhaW5lciA9PSBmaWxl KSB7DQogCQkJVEFJTFFfUkVNT1ZFKCZmb3VuZF9tb2R1bGVzLCBtbCwgbGluayk7DQogCQkJZnJl ZShtbCwgTV9MSU5LRVIpOw0KIAkJfQ0KIAl9DQogDQogCS8qIA0KIAkgKiBEb24ndCB0cnkgdG8g cnVuIFNZU1VOSU5JVHMgaWYgd2UgYXJlIHVubG9hZGVkIGR1ZSB0byBhIA0KIAkgKiBsaW5rIGVy cm9yLg0KIAkgKi8NCiAJaWYgKGZpbGUtPmZsYWdzICYgTElOS0VSX0ZJTEVfTElOS0VEKSB7DQog CQlsaW5rZXJfZmlsZV9zeXN1bmluaXQoZmlsZSk7DQogCQlsaW5rZXJfZmlsZV91bnJlZ2lzdGVy X3N5c2N0bHMoZmlsZSk7DQorCQlsaW5rZXJfZmlsZV91bnJlZ2lzdGVyX2RkYihmaWxlKTsNCiAJ fQ0KIAltdHhfbG9jaygma2xkX210eCk7DQogCVRBSUxRX1JFTU9WRSgmbGlua2VyX2ZpbGVzLCBm aWxlLCBsaW5rKTsNCiAJbXR4X3VubG9jaygma2xkX210eCk7DQogDQogCWlmIChmaWxlLT5kZXBz KSB7DQogCQlmb3IgKGkgPSAwOyBpIDwgZmlsZS0+bmRlcHM7IGkrKykNCiAJCQlsaW5rZXJfZmls ZV91bmxvYWQoZmlsZS0+ZGVwc1tpXSwgZmxhZ3MpOw0KIAkJZnJlZShmaWxlLT5kZXBzLCBNX0xJ TktFUik7DQogCQlmaWxlLT5kZXBzID0gTlVMTDsNCiAJfQ0KIAlmb3IgKGNwID0gU1RBSUxRX0ZJ UlNUKCZmaWxlLT5jb21tb24pOyBjcDsNCiAJICAgIGNwID0gU1RBSUxRX0ZJUlNUKCZmaWxlLT5j b21tb24pKSB7DQogCQlTVEFJTFFfUkVNT1ZFKCZmaWxlLT5jb21tb24sIGNwLCBjb21tb25fc3lt Ym9sLCBsaW5rKTsNCiAJCWZyZWUoY3AsIE1fTElOS0VSKTsNCkBAIC03NDIsMzEgKzc1OSw3NCBA QCBsaW5rZXJfZGRiX3NlYXJjaF9zeW1ib2woY2FkZHJfdCB2YWx1ZSwgDQogCQlyZXR1cm4gKEVO T0VOVCk7DQogCX0NCiB9DQogDQogaW50DQogbGlua2VyX2RkYl9zeW1ib2xfdmFsdWVzKGNfbGlu a2VyX3N5bV90IHN5bSwgbGlua2VyX3N5bXZhbF90ICpzeW12YWwpDQogew0KIAlsaW5rZXJfZmls ZV90IGxmOw0KIA0KIAlUQUlMUV9GT1JFQUNIKGxmLCAmbGlua2VyX2ZpbGVzLCBsaW5rKSB7DQog CQlpZiAoTElOS0VSX1NZTUJPTF9WQUxVRVMobGYsIHN5bSwgc3ltdmFsKSA9PSAwKQ0KIAkJCXJl dHVybiAoMCk7DQogCX0NCiAJcmV0dXJuIChFTk9FTlQpOw0KIH0NCi0jZW5kaWYNCisNCisvKg0K KyAqIEFkZCBhbmQgcmVtb3ZlIGRiX2NtZCBhbmQgZGJfc2hvd19jbWQgdGhhdCBhcmUgZGVmaW5l ZCBpbiBhIG1vZHVsZS4NCisgKi8NCitzdGF0aWMgdm9pZA0KK2xpbmtlcl9maWxlX3JlZ2lzdGVy X2RkYihsaW5rZXJfZmlsZV90IGZpbGUpDQorew0KKwlzdHJ1Y3QgY29tbWFuZCAqKmNfc3RhcnQs ICoqY19zdG9wOw0KKwljaGFyICpzZXQ7DQorDQorCXNldCA9ICJkYl9jbWRfc2V0IjsNCisJaWYg KGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgc2V0LCAmY19zdGFydCwgJmNfc3RvcCwgTlVM TCkgPT0gMCkgew0KKwkJaWYgKGRiX2NtZF9hZGQoY19zdGFydCwgY19zdG9wLCBmYWxzZSkgIT0g MCkgew0KKwkJCXByaW50ZigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSB0byBhZGQgdG8gJXM7 ICINCisJCQkgICAgIm1vZHVsZSAlcydzIGRiIGNvbW1hbmRzIGFyZSBub3QgbWVyZ2VkXG4iLA0K KwkJCSAgICBzZXQsIGZpbGUtPmZpbGVuYW1lKTsNCisJCX0NCisJfQ0KKw0KKwlzZXQgPSAiZGJf c2hvd19jbWRfc2V0IjsNCisJaWYgKGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgc2V0LCAm Y19zdGFydCwgJmNfc3RvcCwgTlVMTCkgPT0gMCkgew0KKwkJaWYgKGRiX2NtZF9hZGQoY19zdGFy dCwgY19zdG9wLCB0cnVlKSAhPSAwKSB7DQorCQkJcHJpbnRmKCJDb3VsZCBub3QgYWxsb2NhdGUg bWVtb3J5IHRvIGFkZCB0byAlczsgIg0KKwkJCSAgICAibW9kdWxlICVzJ3MgZGIgY29tbWFuZHMg YXJlIG5vdCBtZXJnZWRcbiIsDQorCQkJICAgIHNldCwgZmlsZS0+ZmlsZW5hbWUpOw0KKwkJfQ0K Kwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbGlua2VyX2ZpbGVfdW5yZWdpc3Rlcl9kZGIobGlu a2VyX2ZpbGVfdCBmaWxlKQ0KK3sNCisJc3RydWN0IGNvbW1hbmQgKipjX3N0YXJ0LCAqKmNfc3Rv cDsNCisNCisJaWYgKGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgImRiX2NtZF9zZXQiLCAm Y19zdGFydCwNCisJICAgICZjX3N0b3AsIE5VTEwpID09IDApDQorCQlkYl9jbWRfcmVtKGNfc3Rh cnQsIGNfc3RvcCwgZmFsc2UpOw0KKw0KKwlpZiAobGlua2VyX2ZpbGVfbG9va3VwX3NldChmaWxl LCAiZGJfc2hvd19jbWRfc2V0IiwgJmNfc3RhcnQsDQorCSAgICAmY19zdG9wLCBOVUxMKSA9PSAw KQ0KKwkJZGJfY21kX3JlbShjX3N0YXJ0LCBjX3N0b3AsIHRydWUpOw0KK30NCisNCisjZW5kaWYg LyogRERCICovDQogDQogLyoNCiAgKiBTeXNjYWxscy4NCiAgKi8NCiAvKg0KICAqIE1QU0FGRQ0K ICAqLw0KIGludA0KIGtsZGxvYWQoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBrbGRsb2FkX2Fy Z3MgKnVhcCkNCiB7DQogCWNoYXIgKmtsZG5hbWUsICptb2RuYW1lOw0KIAljaGFyICpwYXRobmFt ZSA9IE5VTEw7DQogCWxpbmtlcl9maWxlX3QgbGY7DQogCWludCBlcnJvciA9IDA7DQogCXNpemVf dCBzaXplOw0KQEAgLTE1NTIsMzAgKzE2MTIsMzEgQEAgcmVzdGFydDoNCiAJCQl9DQogCQl9DQog CQkvKg0KIAkJICogTm93IGRvIHJlbG9jYXRpb24gZXRjIHVzaW5nIHRoZSBzeW1ib2wgc2VhcmNo IHBhdGhzDQogCQkgKiBlc3RhYmxpc2hlZCBieSB0aGUgZGVwZW5kZW5jaWVzDQogCQkgKi8NCiAJ CWVycm9yID0gTElOS0VSX0xJTktfUFJFTE9BRF9GSU5JU0gobGYpOw0KIAkJaWYgKGVycm9yKSB7 DQogCQkJcHJpbnRmKCJLTEQgZmlsZSAlcyAtIGNvdWxkIG5vdCBmaW5hbGl6ZSBsb2FkaW5nXG4i LA0KIAkJCSAgICBsZi0+ZmlsZW5hbWUpOw0KIAkJCVRBSUxRX1JFTU9WRSgmZGVwZW5kZWRfZmls ZXMsIGxmLCBsb2FkZWQpOw0KIAkJCWxpbmtlcl9maWxlX3VubG9hZChsZiwgTElOS0VSX1VOTE9B RF9GT1JDRSk7DQogCQkJY29udGludWU7DQogCQl9DQogCQlsaW5rZXJfZmlsZV9yZWdpc3Rlcl9t b2R1bGVzKGxmKTsNCisJCWxpbmtlcl9maWxlX3JlZ2lzdGVyX2RkYihsZik7DQogCQlpZiAobGlu a2VyX2ZpbGVfbG9va3VwX3NldChsZiwgInN5c2luaXRfc2V0IiwgJnNpX3N0YXJ0LA0KIAkJICAg ICZzaV9zdG9wLCBOVUxMKSA9PSAwKQ0KIAkJCXN5c2luaXRfYWRkKHNpX3N0YXJ0LCBzaV9zdG9w KTsNCiAJCWxpbmtlcl9maWxlX3JlZ2lzdGVyX3N5c2N0bHMobGYpOw0KIAkJbGYtPmZsYWdzIHw9 IExJTktFUl9GSUxFX0xJTktFRDsNCiAJfQ0KIAkvKiB3b29ob28hIHdlIG1hZGUgaXQhICovDQog fQ0KIA0KIFNZU0lOSVQocHJlbG9hZCwgU0lfU1VCX0tMRCwgU0lfT1JERVJfTUlERExFLCBsaW5r ZXJfcHJlbG9hZCwgMCkNCiANCiAvKg0KICAqIFNlYXJjaCBmb3IgYSBub3QtbG9hZGVkIG1vZHVs ZSBieSBuYW1lLg0KICAqIA0KICAqIE1vZHVsZXMgbWF5IGJlIGZvdW5kIGluIHRoZSBmb2xsb3dp bmcgbG9jYXRpb25zOg0KSW5kZXg6IGRkYi9kZGIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGRkYi9kZGIu aAkocmV2aXNpb24gMTA4NjU5KQ0KKysrIGRkYi9kZGIuaAkod29ya2luZyBjb3B5KQ0KQEAgLTc3 LDYwICs3Nyw2MyBAQCBmdW5jX25hbWUoYWRkciwgaGF2ZV9hZGRyLCBjb3VudCwgbW9kaWYpDQog CWRiX2V4cHJfdCBjb3VudDsJCQkJCVwNCiAJY2hhciAqbW9kaWY7DQogDQogZXh0ZXJuIGRiX2V4 cHJfdCBkYl9tYXhvZmY7DQogZXh0ZXJuIGludCBkYl9pbmRlbnQ7DQogZXh0ZXJuIGludCBkYl9p bnN0X2NvdW50Ow0KIGV4dGVybiBpbnQgZGJfbG9hZF9jb3VudDsNCiBleHRlcm4gaW50IGRiX3N0 b3JlX2NvdW50Ow0KIGV4dGVybiBkYl9leHByX3QgZGJfcmFkaXg7DQogZXh0ZXJuIGRiX2V4cHJf dCBkYl9tYXhfd2lkdGg7DQogZXh0ZXJuIGRiX2V4cHJfdCBkYl90YWJfc3RvcF93aWR0aDsNCiBl eHRlcm4gZGJfZXhwcl90IGRiX2xpbmVzX3Blcl9wYWdlOw0KIA0KIHN0cnVjdCB0aHJlYWQ7DQog c3RydWN0IHZtX21hcDsNCitzdHJ1Y3QgY29tbWFuZDsNCiANCiB2b2lkCQlkYl9jaGVja19pbnRl cnJ1cHQodm9pZCk7DQogdm9pZAkJZGJfY2xlYXJfd2F0Y2hwb2ludHModm9pZCk7DQogZGJfYWRk cl90CWRiX2Rpc2FzbShkYl9hZGRyX3QgbG9jLCBib29sZWFuX3QgYWx0Zm10KTsNCiAJCQkJLyog aW5zdHJ1Y3Rpb24gZGlzYXNzZW1ibGVyICovDQogdm9pZAkJZGJfZXJyb3IoY29uc3QgY2hhciAq cyk7DQogaW50CQlkYl9leHByZXNzaW9uKGRiX2V4cHJfdCAqdmFsdWVwKTsNCiBpbnQJCWRiX2dl dF92YXJpYWJsZShkYl9leHByX3QgKnZhbHVlcCk7DQogdm9pZAkJZGJfaXByaW50Zihjb25zdCBj aGFyICosLi4uKSBfX2twcmludGZsaWtlKDEsIDIpOw0KIHN0cnVjdCB2bV9tYXAJKmRiX21hcF9h ZGRyKHZtX29mZnNldF90KTsNCiBib29sZWFuX3QJZGJfbWFwX2N1cnJlbnQoc3RydWN0IHZtX21h cCAqKTsNCiBib29sZWFuX3QJZGJfbWFwX2VxdWFsKHN0cnVjdCB2bV9tYXAgKiwgc3RydWN0IHZt X21hcCAqKTsNCiB2b2lkCQlkYl9wcmludF9sb2NfYW5kX2luc3QoZGJfYWRkcl90IGxvYyk7DQog dm9pZAkJZGJfcHJpbnRfdGhyZWFkKHZvaWQpOw0KIHZvaWQJCWRiX3ByaW50Zihjb25zdCBjaGFy ICpmbXQsIC4uLikgX19rcHJpbnRmbGlrZSgxLCAyKTsNCiBpbnQJCWRiX3JlYWRfYnl0ZXModm1f b2Zmc2V0X3QgYWRkciwgc2l6ZV90IHNpemUsIGNoYXIgKmRhdGEpOw0KIAkJCQkvKiBtYWNoaW5l LWRlcGVuZGVudCAqLw0KIGludAkJZGJfcmVhZGxpbmUoY2hhciAqbHN0YXJ0LCBpbnQgbHNpemUp Ow0KIHZvaWQJCWRiX3Jlc3RhcnRfYXRfcGMoYm9vbGVhbl90IHdhdGNocHQpOw0KIGludAkJZGJf c2V0X3ZhcmlhYmxlKGRiX2V4cHJfdCB2YWx1ZSk7DQogdm9pZAkJZGJfc2V0X3dhdGNocG9pbnRz KHZvaWQpOw0KIHZvaWQJCWRiX3NldHVwX3BhZ2luZyhkYl9wYWdlX2NhbGxvdXRmY25fdCAqY2Fs bG91dCwgdm9pZCAqYXJnLA0KIAkJCQlpbnQgbWF4bGluZXMpOw0KIHZvaWQJCWRiX3NraXBfdG9f ZW9sKHZvaWQpOw0KIGJvb2xlYW5fdAlkYl9zdG9wX2F0X3BjKGJvb2xlYW5fdCAqaXNfYnJlYWtw b2ludCk7DQogI2RlZmluZQkJZGJfc3RyY3B5CXN0cmNweQ0KIHZvaWQJCWRiX3RyYWNlX3NlbGYo dm9pZCk7DQogaW50CQlkYl90cmFjZV90aHJlYWQoc3RydWN0IHRocmVhZCAqLCBpbnQpOw0KIGlu dAkJZGJfdmFsdWVfb2ZfbmFtZShjb25zdCBjaGFyICpuYW1lLCBkYl9leHByX3QgKnZhbHVlcCk7 DQogaW50CQlkYl93cml0ZV9ieXRlcyh2bV9vZmZzZXRfdCBhZGRyLCBzaXplX3Qgc2l6ZSwgY2hh ciAqZGF0YSk7DQoraW50CQlkYl9jbWRfYWRkKHN0cnVjdCBjb21tYW5kICoqLCBzdHJ1Y3QgY29t bWFuZCAqKiwgYm9vbGVhbl90KTsNCit2b2lkCQlkYl9jbWRfcmVtKHN0cnVjdCBjb21tYW5kICoq LCBzdHJ1Y3QgY29tbWFuZCAqKiwgYm9vbGVhbl90KTsNCiANCiBkYl9jbWRmY25fdAlkYl9icmVh a3BvaW50X2NtZDsNCiBkYl9jbWRmY25fdAlkYl9jb250aW51ZV9jbWQ7DQogZGJfY21kZmNuX3QJ ZGJfZGVsZXRlX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9kZWxldGVod2F0Y2hfY21kOw0KIGRiX2Nt ZGZjbl90CWRiX2RlbGV0ZXdhdGNoX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9leGFtaW5lX2NtZDsN CiBkYl9jbWRmY25fdAlkYl9od2F0Y2hwb2ludF9jbWQ7DQogZGJfY21kZmNuX3QJZGJfbGlzdGJy ZWFrX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9wcmludF9jbWQ7DQogZGJfY21kZmNuX3QJZGJfcHM7 DQogZGJfY21kZmNuX3QJZGJfc2VhcmNoX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9zZXRfY21kOw0K IGRiX2NtZGZjbl90CWRiX3NldF90aHJlYWQ7DQogZGJfY21kZmNuX3QJZGJfc2hvd19yZWdzOw0K SW5kZXg6IGRkYi9kYl9jb21tYW5kLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBkZGIvZGJfY29tbWFuZC5j CShyZXZpc2lvbiAxMDg2NTkpDQorKysgZGRiL2RiX2NvbW1hbmQuYwkod29ya2luZyBjb3B5KQ0K QEAgLTMzLDUxICszMyw2MCBAQA0KIA0KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4NCiBfX0ZCU0RJ RCgiJEZyZWVCU0Q6IHNyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYyx2IDEuNjAuMi4yIDIwMDUvMTAv MjUgMjA6MTA6NTYgamhiIEV4cCAkIik7DQogDQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KICNp bmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPg0KICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KICNpbmNs dWRlIDxzeXMva2RiLmg+DQogI2luY2x1ZGUgPHN5cy9tdXRleC5oPg0KICNpbmNsdWRlIDxzeXMv cHJvYy5oPg0KICNpbmNsdWRlIDxzeXMvcmVib290Lmg+DQogI2luY2x1ZGUgPHN5cy9zaWduYWx2 YXIuaD4NCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQogI2luY2x1ZGUgPHN5cy9jb25zLmg+DQog I2luY2x1ZGUgPHN5cy93YXRjaGRvZy5oPg0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQogDQog I2luY2x1ZGUgPGRkYi9kZGIuaD4NCiAjaW5jbHVkZSA8ZGRiL2RiX2NvbW1hbmQuaD4NCiAjaW5j bHVkZSA8ZGRiL2RiX2xleC5oPg0KICNpbmNsdWRlIDxkZGIvZGJfb3V0cHV0Lmg+DQogDQogI2lu Y2x1ZGUgPG1hY2hpbmUvY3B1Lmg+DQogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+DQogDQog LyoNCiAgKiBFeHBvcnRlZCBnbG9iYWwgdmFyaWFibGVzDQogICovDQogYm9vbGVhbl90CWRiX2Nt ZF9sb29wX2RvbmU7DQogZGJfYWRkcl90CWRiX2RvdDsNCiBkYl9hZGRyX3QJZGJfbGFzdF9hZGRy Ow0KIGRiX2FkZHJfdAlkYl9wcmV2Ow0KIGRiX2FkZHJfdAlkYl9uZXh0Ow0KIA0KIFNFVF9ERUNM QVJFKGRiX2NtZF9zZXQsIHN0cnVjdCBjb21tYW5kKTsNCiBTRVRfREVDTEFSRShkYl9zaG93X2Nt ZF9zZXQsIHN0cnVjdCBjb21tYW5kKTsNCiANCisNCitzdHJ1Y3QgY29tbWFuZCAqKmRiX2NtZF9z dGFydCA9IFNFVF9CRUdJTihkYl9jbWRfc2V0KTsNCitzdHJ1Y3QgY29tbWFuZCAqKmRiX2NtZF9l bmQgPSBTRVRfTElNSVQoZGJfY21kX3NldCk7DQorc3RydWN0IGNvbW1hbmQgKipkYl9zaG93X2Nt ZF9zdGFydCA9IFNFVF9CRUdJTihkYl9zaG93X2NtZF9zZXQpOw0KK3N0cnVjdCBjb21tYW5kICoq ZGJfc2hvd19jbWRfZW5kID0gU0VUX0xJTUlUKGRiX3Nob3dfY21kX3NldCk7DQoraW50IGRiX2Nt ZF9pc19tYWxsb2NkID0gMDsNCitpbnQgZGJfc2hvd19jbWRfaXNfbWFsbG9jZCA9IDA7DQorDQog c3RhdGljIGRiX2NtZGZjbl90CWRiX2ZuY2FsbDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfZ2Ri Ow0KIHN0YXRpYyBkYl9jbWRmY25fdAlkYl9raWxsOw0KIHN0YXRpYyBkYl9jbWRmY25fdAlkYl9y ZXNldDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfc3RhY2tfdHJhY2U7DQogc3RhdGljIGRiX2Nt ZGZjbl90CWRiX3N0YWNrX3RyYWNlX2FsbDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfd2F0Y2hk b2c7DQogDQogLyogWFhYIHRoaXMgaXMgYWN0dWFsbHkgZm9yd2FyZC1zdGF0aWMuICovDQogZXh0 ZXJuIHN0cnVjdCBjb21tYW5kCWRiX3Nob3dfY21kc1tdOw0KIA0KIC8qDQogICogaWYgJ2VkJyBz dHlsZTogJ2RvdCcgaXMgc2V0IGF0IHN0YXJ0IG9mIGxhc3QgaXRlbSBwcmludGVkLA0KICAqIGFu ZCAnKycgcG9pbnRzIHRvIG5leHQgbGluZS4NCiAgKiBPdGhlcndpc2U6ICdkb3QnIHBvaW50cyB0 byBuZXh0IGl0ZW0sICcuLicgcG9pbnRzIHRvIGxhc3QuDQpAQCAtMTU0LDMwICsxNjMsMzMgQEAg ZGJfY21kX3NlYXJjaChuYW1lLCB0YWJsZSwgYXV4X3RhYmxlcCwgYQ0KIAkJICAgICAgIHRoaXMg bGV0cyB1cyBtYXRjaCBzaW5nbGUgbGV0dGVycyAqLw0KIAkJfQ0KIAkJZWxzZSB7DQogCQkgICAg KmNtZHAgPSBjbWQ7DQogCQkgICAgcmVzdWx0ID0gQ01EX0ZPVU5EOw0KIAkJfQ0KIAkgICAgfQ0K IAl9DQogCWlmIChhdXhfdGFibGVwICE9IDApDQogCSAgICAvKiBYWFggcmVwZWF0IHRvbyBtdWNo IGNvZGUuICovDQogCSAgICBmb3IgKGF1eF9jbWRwID0gYXV4X3RhYmxlcDsgYXV4X2NtZHAgPCBh dXhfdGFibGVwX2VuZDsgYXV4X2NtZHArKykgew0KIAkJcmVnaXN0ZXIgY2hhciAqbHA7DQogCQly ZWdpc3RlciBjaGFyICpycDsNCiAJCXJlZ2lzdGVyIGludCAgYzsNCiANCisJCWlmICgqYXV4X2Nt ZHAgPT0gTlVMTCkNCisJCSAgICBjb250aW51ZTsNCisNCiAJCWxwID0gbmFtZTsNCiAJCXJwID0g KCphdXhfY21kcCktPm5hbWU7DQogCQl3aGlsZSAoKGMgPSAqbHApID09ICpycCkgew0KIAkJICAg IGlmIChjID09IDApIHsNCiAJCQkvKiBjb21wbGV0ZSBtYXRjaCAqLw0KIAkJCSpjbWRwID0gKmF1 eF9jbWRwOw0KIAkJCXJldHVybiAoQ01EX1VOSVFVRSk7DQogCQkgICAgfQ0KIAkJICAgIGxwKys7 DQogCQkgICAgcnArKzsNCiAJCX0NCiAJCWlmIChjID09IDApIHsNCiAJCSAgICAvKiBlbmQgb2Yg bmFtZSwgbm90IGVuZCBvZiBjb21tYW5kIC0NCiAJCSAgICAgICBwYXJ0aWFsIG1hdGNoICovDQog CQkgICAgaWYgKHJlc3VsdCA9PSBDTURfRk9VTkQpIHsNCkBAIC0yMDQsMzAgKzIxNiwzMiBAQCBz dGF0aWMgdm9pZA0KIGRiX2NtZF9saXN0KHRhYmxlLCBhdXhfdGFibGVwLCBhdXhfdGFibGVwX2Vu ZCkNCiAJc3RydWN0IGNvbW1hbmQgKnRhYmxlOw0KIAlzdHJ1Y3QgY29tbWFuZCAqKmF1eF90YWJs ZXA7DQogCXN0cnVjdCBjb21tYW5kICoqYXV4X3RhYmxlcF9lbmQ7DQogew0KIAlyZWdpc3RlciBz dHJ1Y3QgY29tbWFuZCAqY21kOw0KIAlyZWdpc3RlciBzdHJ1Y3QgY29tbWFuZCAqKmF1eF9jbWRw Ow0KIA0KIAlmb3IgKGNtZCA9IHRhYmxlOyBjbWQtPm5hbWUgIT0gMDsgY21kKyspIHsNCiAJICAg IGRiX3ByaW50ZigiJS0xMnMiLCBjbWQtPm5hbWUpOw0KIAkgICAgZGJfZW5kX2xpbmUoKTsNCiAJ fQ0KIAlpZiAoYXV4X3RhYmxlcCA9PSAwKQ0KIAkgICAgcmV0dXJuOw0KIAlmb3IgKGF1eF9jbWRw ID0gYXV4X3RhYmxlcDsgYXV4X2NtZHAgPCBhdXhfdGFibGVwX2VuZDsgYXV4X2NtZHArKykgew0K KwkgICAgaWYgKCphdXhfY21kcCA9PSBOVUxMKQ0KKwkJY29udGludWU7DQogCSAgICBkYl9wcmlu dGYoIiUtMTJzIiwgKCphdXhfY21kcCktPm5hbWUpOw0KIAkgICAgZGJfZW5kX2xpbmUoKTsNCiAJ fQ0KIH0NCiANCiBzdGF0aWMgdm9pZA0KIGRiX2NvbW1hbmQobGFzdF9jbWRwLCBjbWRfdGFibGUs IGF1eF9jbWRfdGFibGVwLCBhdXhfY21kX3RhYmxlcF9lbmQpDQogCXN0cnVjdCBjb21tYW5kCSoq bGFzdF9jbWRwOwkvKiBJTl9PVVQgKi8NCiAJc3RydWN0IGNvbW1hbmQJKmNtZF90YWJsZTsNCiAJ c3RydWN0IGNvbW1hbmQJKiphdXhfY21kX3RhYmxlcDsNCiAJc3RydWN0IGNvbW1hbmQJKiphdXhf Y21kX3RhYmxlcF9lbmQ7DQogew0KIAlzdHJ1Y3QgY29tbWFuZAkqY21kOw0KIAlpbnQJCXQ7DQog CWNoYXIJCW1vZGlmW1RPS19TVFJJTkdfU0laRV07DQpAQCAtMjcxLDMyICsyODUsMzIgQEAgZGJf Y29tbWFuZChsYXN0X2NtZHAsIGNtZF90YWJsZSwgYXV4X2NtZA0KIAkJICAgIGNhc2UgQ01EX0FN QklHVU9VUzoNCiAJCQlkYl9wcmludGYoIkFtYmlndW91c1xuIik7DQogCQkJZGJfZmx1c2hfbGV4 KCk7DQogCQkJcmV0dXJuOw0KIAkJICAgIGNhc2UgQ01EX0hFTFA6DQogCQkJZGJfY21kX2xpc3Qo Y21kX3RhYmxlLCBhdXhfY21kX3RhYmxlcCwgYXV4X2NtZF90YWJsZXBfZW5kKTsNCiAJCQlkYl9m bHVzaF9sZXgoKTsNCiAJCQlyZXR1cm47DQogCQkgICAgZGVmYXVsdDoNCiAJCQlicmVhazsNCiAJ CX0NCiAJCWlmICgoY21kX3RhYmxlID0gY21kLT5tb3JlKSAhPSAwKSB7DQogCQkgICAgLyogWFhY IHVzdWFsbHkgbm8gbW9yZSBhdXgncy4gKi8NCiAJCSAgICBhdXhfY21kX3RhYmxlcCA9IDA7DQog CQkgICAgaWYgKGNtZF90YWJsZSA9PSBkYl9zaG93X2NtZHMpIHsNCi0JCQlhdXhfY21kX3RhYmxl cCA9IFNFVF9CRUdJTihkYl9zaG93X2NtZF9zZXQpOw0KLQkJCWF1eF9jbWRfdGFibGVwX2VuZCA9 IFNFVF9MSU1JVChkYl9zaG93X2NtZF9zZXQpOw0KKwkJCWF1eF9jbWRfdGFibGVwID0gZGJfc2hv d19jbWRfc3RhcnQ7DQorCQkJYXV4X2NtZF90YWJsZXBfZW5kID0gZGJfc2hvd19jbWRfZW5kOw0K IAkJICAgIH0NCiANCiAJCSAgICB0ID0gZGJfcmVhZF90b2tlbigpOw0KIAkJICAgIGlmICh0ICE9 IHRJREVOVCkgew0KIAkJCWRiX2NtZF9saXN0KGNtZF90YWJsZSwgYXV4X2NtZF90YWJsZXAsIGF1 eF9jbWRfdGFibGVwX2VuZCk7DQogCQkJZGJfZmx1c2hfbGV4KCk7DQogCQkJcmV0dXJuOw0KIAkJ ICAgIH0NCiAJCX0NCiAJICAgIH0NCiANCiAJICAgIGlmICgoY21kLT5mbGFnICYgQ1NfT1dOKSA9 PSAwKSB7DQogCQkvKg0KIAkJICogU3RhbmRhcmQgc3ludGF4Og0KIAkJICogY29tbWFuZCBbL21v ZGlmaWVyXSBbYWRkcl0gWyxjb3VudF0NCkBAIC0zNjAsMzAgKzM3NCwxMzggQEAgZGJfY29tbWFu ZChsYXN0X2NtZHAsIGNtZF90YWJsZSwgYXV4X2NtZA0KIAkJfQ0KIAkJZWxzZSB7DQogCQkgICAg ZGJfZG90ID0gZGJfbmV4dDsNCiAJCX0NCiAJICAgIH0NCiAJICAgIGVsc2Ugew0KIAkJLyoNCiAJ CSAqIElmIGNvbW1hbmQgZG9lcyBub3QgY2hhbmdlIGRvdCwNCiAJCSAqIHNldCAnbmV4dCcgbG9j YXRpb24gdG8gYmUgdGhlIHNhbWUuDQogCQkgKi8NCiAJCWRiX25leHQgPSBkYl9kb3Q7DQogCSAg ICB9DQogCX0NCiB9DQogDQorDQoraW50DQorZGJfY21kX2FkZChzdHJ1Y3QgY29tbWFuZCAqKnNl dCwgc3RydWN0IGNvbW1hbmQgKipzZXRfZW5kLCBib29sZWFuX3QgaXNfc2hvdykNCit7DQorCXN0 cnVjdCBjb21tYW5kICoqbmV3c2V0LCAqKm5ld3NldF9lbmQ7DQorCXN0cnVjdCBjb21tYW5kICoq Km9sZHNldCwgKioqb2xkc2V0X2VuZDsNCisJc3RydWN0IGNvbW1hbmQgKipjcHAsICoqeHBwOw0K KwlpbnQgKmlzX21hbGxvY2Q7DQorCXNpemVfdCBvbGRfY291bnQsIG5ld19jb3VudCwgaG9sZXM7 DQorDQorCWlmIChpc19zaG93KSB7DQorCQlvbGRzZXQgPSAmZGJfc2hvd19jbWRfc3RhcnQ7DQor CQlvbGRzZXRfZW5kID0gJmRiX3Nob3dfY21kX2VuZDsNCisJCWlzX21hbGxvY2QgPSAmZGJfc2hv d19jbWRfaXNfbWFsbG9jZDsNCisJfSBlbHNlIHsNCisJCW9sZHNldCA9ICZkYl9jbWRfc3RhcnQ7 DQorCQlvbGRzZXRfZW5kID0gJmRiX2NtZF9lbmQ7DQorCQlpc19tYWxsb2NkID0gJmRiX2NtZF9p c19tYWxsb2NkOw0KKwl9DQorDQorCW5ld19jb3VudCA9IHNldF9lbmQgLSBzZXQ7DQorCW9sZF9j b3VudCA9ICpvbGRzZXRfZW5kIC0gKm9sZHNldDsNCisJaG9sZXMgPSAwOw0KKw0KKwlmb3IgKGNw cCA9ICpvbGRzZXQ7IGNwcCA8ICpvbGRzZXRfZW5kOyBjcHArKykgew0KKwkJaWYgKCpjcHAgPT0g TlVMTCkNCisJCQlob2xlcysrOw0KKwl9DQorDQorCWlmIChuZXdfY291bnQgPiBob2xlcykgew0K KwkJc2l6ZV90IGNvdW50Ow0KKw0KKwkJY291bnQgPSBvbGRfY291bnQgLSBob2xlcyArIG5ld19j b3VudDsNCisJCW5ld3NldCA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigqY3BwKSwgTV9URU1QLCBN X05PV0FJVCk7DQorCQlpZiAobmV3c2V0ID09IE5VTEwpDQorCQkJcmV0dXJuIEVOT01FTTsNCisJ CW5ld3NldF9lbmQgPSBuZXdzZXQgKyBjb3VudDsNCisJfSBlbHNlIHsNCisJCW5ld3NldCA9ICpv bGRzZXQ7DQorCQluZXdzZXRfZW5kID0gKm9sZHNldF9lbmQ7DQorCX0NCisNCisJeHBwID0gbmV3 c2V0Ow0KKwlmb3IgKGNwcCA9ICpvbGRzZXQ7IGNwcCA8ICpvbGRzZXRfZW5kOyBjcHArKykgew0K KwkJaWYgKCpjcHAgIT0gTlVMTCkNCisJCQkqeHBwKysgPSAqY3BwOw0KKwl9DQorCWZvciAoY3Bw ID0gc2V0OyBjcHAgPCBzZXRfZW5kOyBjcHArKykNCisJCSp4cHArKyA9ICpjcHA7DQorCXdoaWxl ICh4cHAgPCBuZXdzZXRfZW5kKQ0KKwkgICAgICAgKnhwcCsrID0gTlVMTDsNCisNCisJY3BwID0g Km9sZHNldDsNCisNCisJLyoNCisJICogVXNpbmcgdGhlIGRlYnVnZ2VyIG92ZXIgdGhlc2UgdHdv IGFzc2lnbm1lbnRzIHdvdWxkIGJlIGENCisJICogYmFkIGlkZWEuDQorCSAqLw0KKwkqb2xkc2V0 ID0gbmV3c2V0Ow0KKwkqb2xkc2V0X2VuZCA9IG5ld3NldF9lbmQ7DQorDQorCWlmIChuZXdfY291 bnQgPiBob2xlcykgew0KKwkJaWYgKCppc19tYWxsb2NkKQ0KKwkJCWZyZWUoY3BwLCBNX1RFTVAp Ow0KKwkJKmlzX21hbGxvY2QgPSAxOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lk DQorZGJfY21kX3JlbShzdHJ1Y3QgY29tbWFuZCAqKnNldCwgc3RydWN0IGNvbW1hbmQgKipzZXRf ZW5kLCBib29sZWFuX3QgaXNfc2hvdykNCit7DQorCXN0cnVjdCBjb21tYW5kICoqb2xkc2V0LCAq Km9sZHNldF9lbmQ7DQorCXN0cnVjdCBjb21tYW5kICoqY3BwLCAqKnhwcDsNCisJc2l6ZV90IG5l d19jb3VudCwgaG9sZXM7DQorDQorCW5ld19jb3VudCA9IHNldF9lbmQgLSBzZXQ7DQorCWlmIChp c19zaG93KSB7DQorCQlvbGRzZXQgPSBkYl9zaG93X2NtZF9zdGFydDsNCisJCW9sZHNldF9lbmQg PSBkYl9zaG93X2NtZF9lbmQ7DQorCX0gZWxzZSB7DQorCQlvbGRzZXQgPSBkYl9jbWRfc3RhcnQ7 DQorCQlvbGRzZXRfZW5kID0gZGJfY21kX2VuZDsNCisJfQ0KKw0KKwl4cHAgPSBvbGRzZXQ7DQor CWhvbGVzID0gMDsNCisJZm9yIChjcHAgPSBzZXQ7IGNwcCA8IHNldF9lbmQ7IGNwcCsrKSB7DQor CQkvKg0KKwkJICogRmluZCAqY3BwLiAgSXRlbXMgd2VyZSBjb3BpZWQgaW50byB0aGUgZ2xvYmFs IHNldA0KKwkJICogaW4gb3JkZXIsIHNvIHRoZXkgc2hvdWxkIGJlIGZvdW5kIGluIG9yZGVyLg0K KwkJICovDQorCQlmb3IgKDsgeHBwIDwgb2xkc2V0X2VuZDsgeHBwKyspIHsNCisJCQlpZiAoKnhw cCA9PSAqY3BwKSB7DQorCQkJCSp4cHAgPSBOVUxMOw0KKwkJCQlob2xlcysrOw0KKwkJCQlicmVh azsNCisJCQl9DQorCQl9DQorCX0NCisNCisJaWYgKGhvbGVzICE9IG5ld19jb3VudCkNCisJCXBy aW50ZigiJXMgZm91bmQgJXpkICVzY21kJ3M7IHRoZXJlIHNob3VsZCBiZSAlemQuXG4iLA0KKwkJ ICAgIF9fZnVuY19fLCBob2xlcywgaXNfc2hvdyA/ICJzaG93XyIgOiAiIiwgbmV3X2NvdW50KTsN Cit9DQorDQorDQogLyoNCiAgKiAnc2hvdycgY29tbWFuZHMNCiAgKi8NCiANCiBzdGF0aWMgc3Ry dWN0IGNvbW1hbmQgZGJfc2hvd19hbGxfY21kc1tdID0gew0KIAl7ICJwcm9jcyIsCWRiX3BzLAkJ CTAsCTAgfSwNCiAJeyAoY2hhciAqKTAgfQ0KIH07DQogDQogc3RhdGljIHN0cnVjdCBjb21tYW5k IGRiX3Nob3dfY21kc1tdID0gew0KIAl7ICJhbGwiLAkwLAkJCTAsCWRiX3Nob3dfYWxsX2NtZHMg fSwNCiAJeyAicmVnaXN0ZXJzIiwJZGJfc2hvd19yZWdzLAkJMCwJMCB9LA0KIAl7ICJicmVha3Mi LAlkYl9saXN0YnJlYWtfY21kLCAJMCwJMCB9LA0KIAl7ICJ0aHJlYWRzIiwJZGJfc2hvd190aHJl YWRzLAkwLAkwIH0sDQogCXsgKGNoYXIgKikwLCB9DQpAQCAtNDQ0LDMxICs1NjYsMzEgQEAgZGJf Y29tbWFuZF9sb29wKCkNCiAJLyoNCiAJICogSW5pdGlhbGl6ZSAncHJldicgYW5kICduZXh0JyB0 byBkb3QuDQogCSAqLw0KIAlkYl9wcmV2ID0gZGJfZG90Ow0KIAlkYl9uZXh0ID0gZGJfZG90Ow0K IA0KIAlkYl9jbWRfbG9vcF9kb25lID0gMDsNCiAJd2hpbGUgKCFkYl9jbWRfbG9vcF9kb25lKSB7 DQogCSAgICBpZiAoZGJfcHJpbnRfcG9zaXRpb24oKSAhPSAwKQ0KIAkJZGJfcHJpbnRmKCJcbiIp Ow0KIA0KIAkgICAgZGJfcHJpbnRmKCJkYj4gIik7DQogCSAgICAodm9pZCkgZGJfcmVhZF9saW5l KCk7DQogDQogCSAgICBkYl9jb21tYW5kKCZkYl9sYXN0X2NvbW1hbmQsIGRiX2NvbW1hbmRfdGFi bGUsDQotCQkgICAgICAgU0VUX0JFR0lOKGRiX2NtZF9zZXQpLCBTRVRfTElNSVQoZGJfY21kX3Nl dCkpOw0KKwkJICAgICAgIGRiX2NtZF9zdGFydCwgZGJfY21kX2VuZCk7DQogCX0NCiB9DQogDQog dm9pZA0KIGRiX2Vycm9yKHMpDQogCWNvbnN0IGNoYXIgKnM7DQogew0KIAlpZiAocykNCiAJICAg IGRiX3ByaW50ZigiJXMiLCBzKTsNCiAJZGJfZmx1c2hfbGV4KCk7DQogCWtkYl9yZWVudGVyKCk7 DQogfQ0KIA0KIA0KIC8qDQo= --=-fq7uZMe0OJhocqSP8KeS--