Return-Path: From: Olivier Dole To: BlueZ development Content-Type: multipart/mixed; boundary="=-d5Dn9630ri/GhcUsQAzh" Date: Thu, 02 Nov 2006 11:34:06 +0100 Message-Id: <1162463647.19652.28.camel@ODole-Ubuntu> Mime-Version: 1.0 Subject: [Bluez-devel] Proposal: patch for pand Reply-To: BlueZ development List-Id: BlueZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: bluez-devel-bounces@lists.sourceforge.net Errors-To: bluez-devel-bounces@lists.sourceforge.net --=-d5Dn9630ri/GhcUsQAzh Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi everyone, For my work I need a similar mechanism to "devup" script in pand when a PAN disconnection occurs. That's why I've done the following patch (see attachment for source code) which allows PAN daemon to run a "devdown" script either when a disconnection is spotted i.e. remote device closes the connection or when you explicitly do the disconnection. To use it, simply add the following option to your command line: pand --options --devdown /path/to/devdown-script or pand -options -o /path/to/devdown-script or you can also read the pand man page ;) The behaviour is the same as for "devup" script. I mean when the script is run the following arguments are supplied to the script: $1 <-> device interface e.g. "bnep0" $2 <-> bluetooth address of the disconnected device e.g. "00:45:78:AE:B4:01" and of course your script must have the correct permissions to run. Any feedback about this patch is of course welcome ;) Hope you will find this patch usefull. Regards, Olivier DOLE --=-d5Dn9630ri/GhcUsQAzh Content-Disposition: attachment; filename=bluez_pand_dev-down.patch Content-Type: text/x-patch; name=bluez_pand_dev-down.patch; charset=UTF-8 Content-Transfer-Encoding: base64 ZGlmZiAtTmF1ciBwYW5kLm9yaWcvbWFpbi5jIHBhbmQubmV3L21haW4uYw0KLS0tIHBhbmQub3Jp Zy9tYWluLmMJMjAwNi0wOS0zMCAwMDoyMzoyOC4wMDAwMDAwMDAgKzAyMDANCisrKyBwYW5kLm5l dy9tYWluLmMJMjAwNi0xMS0wMiAxMTowMzoyNy4wMDAwMDAwMDAgKzAxMDANCkBAIC03Myw2ICs3 Myw3IEBADQogc3RhdGljIGNoYXIgbmV0ZGV2WzE2XSA9ICJibmVwJWQiOw0KIHN0YXRpYyBjaGFy ICpwaWRmaWxlID0gTlVMTDsNCiBzdGF0aWMgY2hhciAqZGV2dXBjbWQgPSBOVUxMOw0KK3N0YXRp YyBjaGFyICpkZXZkb3duY21kID0gTlVMTDsNCiANCiBzdGF0aWMgYmRhZGRyX3Qgc3JjX2FkZHIg PSAqQkRBRERSX0FOWTsNCiBzdGF0aWMgaW50IHNyY19kZXYgPSAtMTsNCkBAIC04OSwxNSArOTAs MjIgQEANCiAJS0lMTA0KIH0gbW9kZXM7DQogDQotc3RhdGljIHZvaWQgcnVuX2RldnVwKGNoYXIg KmRldiwgY2hhciAqZHN0LCBpbnQgc2ssIGludCBuc2spDQorc3RydWN0IHNjcmlwdF9hcmcgew0K KwljaGFyCWRldlsyMF07DQorCWNoYXIJZHN0WzIwXTsNCisJaW50CQlzazsNCisJaW50CQluc2s7 DQorfTsNCisJDQorc3RhdGljIHZvaWQgcnVuX3NjcmlwdChjaGFyICpzY3JpcHQsIGNoYXIgKmRl diwgY2hhciAqZHN0LCBpbnQgc2ssIGludCBuc2spDQogew0KIAljaGFyICphcmd2WzRdOw0KIAlz dHJ1Y3Qgc2lnYWN0aW9uIHNhOw0KIA0KLQlpZiAoIWRldnVwY21kKQ0KKwlpZiAoIXNjcmlwdCkN CiAJCXJldHVybjsNCi0NCi0JaWYgKGFjY2VzcyhkZXZ1cGNtZCwgUl9PSyB8IFhfT0spKQ0KKwkJ DQorCWlmIChhY2Nlc3Moc2NyaXB0LCBSX09LIHwgWF9PSykpDQogCQlyZXR1cm47DQogDQogCWlm IChmb3JrKCkpDQpAQCAtMTE0LDE2ICsxMjIsNTcgQEANCiAJc2lnYWN0aW9uKFNJR0NITEQsICZz YSwgTlVMTCk7DQogCXNpZ2FjdGlvbihTSUdQSVBFLCAmc2EsIE5VTEwpOw0KIA0KLQlhcmd2WzBd ID0gZGV2dXBjbWQ7DQorCWFyZ3ZbMF0gPSBzY3JpcHQ7DQogCWFyZ3ZbMV0gPSBkZXY7DQogCWFy Z3ZbMl0gPSBkc3Q7DQogCWFyZ3ZbM10gPSBOVUxMOw0KIA0KLQlleGVjdihkZXZ1cGNtZCwgYXJn dik7DQorCWV4ZWN2KHNjcmlwdCwgYXJndik7DQogDQogCWV4aXQoMSk7DQogfQ0KIA0KKy8qIFdh aXQgZm9yIGRpc2Nvbm5lY3Qgb3IgZXJyb3IgY29uZGl0aW9uIG9uIHRoZSBzb2NrZXQgKi8NCitz dGF0aWMgaW50IHc0X2h1cChpbnQgc2ssIHN0cnVjdCBzY3JpcHRfYXJnICpkb3duX2NtZCkNCit7 DQorCXN0cnVjdCBwb2xsZmQgcGY7DQorCXNpZ3NldF90IHNpZ3M7DQorCWludCBuOw0KKw0KKwlz aWdmaWxsc2V0KCZzaWdzKTsNCisJc2lnZGVsc2V0KCZzaWdzLCBTSUdDSExEKTsNCisJc2lnZGVs c2V0KCZzaWdzLCBTSUdQSVBFKTsNCisJc2lnZGVsc2V0KCZzaWdzLCBTSUdURVJNKTsNCisJc2ln ZGVsc2V0KCZzaWdzLCBTSUdJTlQpOw0KKwlzaWdkZWxzZXQoJnNpZ3MsIFNJR0hVUCk7DQorDQor CXdoaWxlICghdGVybWluYXRlKSB7DQorCQlwZi5mZCA9IHNrOw0KKwkJcGYuZXZlbnRzID0gUE9M TEVSUiB8IFBPTExIVVA7DQorCQluID0gcHBvbGwoJnBmLCAxLCBOVUxMLCAmc2lncyk7DQorCQlp ZiAobiA8IDApIHsNCisJCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQ0K KwkJCQljb250aW51ZTsNCisJCQlzeXNsb2coTE9HX0VSUiwgIlBvbGwgZmFpbGVkLiAlcyglZCki LA0KKwkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOw0KKwkJCXJldHVybiAxOw0KKwkJfQ0K Kw0KKwkJaWYgKG4pIHsNCisJCQlpbnQgZXJyID0gMDsNCisJCQlzb2NrbGVuX3Qgb2xlbiA9IHNp emVvZihlcnIpOw0KKwkJCWdldHNvY2tvcHQoc2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJy LCAmb2xlbik7DQorCQkJc3lzbG9nKExPR19JTkZPLCAiJXMgZGlzY29ubmVjdGVkJXMlcyIsIG5l dGRldiwNCisJCQkJZXJyID8gIiA6ICIgOiAiIiwgZXJyID8gc3RyZXJyb3IoZXJyKSA6ICIiKTsN CisJCQlpZiAoZG93bl9jbWQpIA0KKwkJCQlydW5fc2NyaXB0KGRldmRvd25jbWQsIGRvd25fY21k LT5kZXYsIGRvd25fY21kLT5kc3QsIGRvd25fY21kLT5zaywgZG93bl9jbWQtPm5zayk7DQorCQkJ Y2xvc2Uoc2spOw0KKwkJCXJldHVybiAwOw0KKwkJfQ0KKwl9DQorCXJldHVybiAwOw0KK30NCisN CiBzdGF0aWMgaW50IGRvX2xpc3Rlbih2b2lkKQ0KIHsNCiAJc3RydWN0IGwyY2FwX29wdGlvbnMg bDJvOw0KQEAgLTIwNywxMiArMjU2LDIxIEBADQogDQogCQlpZiAoIWJuZXBfYWNjZXB0X2Nvbm5l Y3Rpb24obnNrLCByb2xlLCBkZXZuYW1lKSkgew0KIAkJCWNoYXIgc3RyWzQwXTsNCisJCQlzdHJ1 Y3Qgc2NyaXB0X2FyZyBkb3duX2NtZDsNCisNCiAJCQliYTJzdHIoJmwyYS5sMl9iZGFkZHIsIHN0 cik7DQogDQogCQkJc3lzbG9nKExPR19JTkZPLCAiTmV3IGNvbm5lY3Rpb24gZnJvbSAlcyAlcyIs DQotCQkJCQkJCQlzdHIsIGRldm5hbWUpOw0KKwkJCQkJCQkJc3RyLCBuZXRkZXYpOw0KIA0KLQkJ CXJ1bl9kZXZ1cChkZXZuYW1lLCBzdHIsIHNrLCBuc2spOw0KKwkJCXJ1bl9zY3JpcHQoZGV2dXBj bWQsIGRldm5hbWUsIHN0ciwgc2ssIG5zayk7DQorCQ0KKwkJCW1lbXNldCgmZG93bl9jbWQsIDAs IHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2FyZykpOw0KKwkJCXN0cm5jcHkoZG93bl9jbWQuZGV2LCBk ZXZuYW1lLCBzdHJsZW4oZGV2bmFtZSkgKyAxKTsNCisJCQlzdHJuY3B5KGRvd25fY21kLmRzdCwg c3RyLCBzdHJsZW4oc3RyKSArIDEpOw0KKwkJCWRvd25fY21kLnNrID0gc2s7DQorCQkJZG93bl9j bWQubnNrID0gbnNrOw0KKwkJCXc0X2h1cChuc2ssICZkb3duX2NtZCk7DQogCQl9IGVsc2Ugew0K IAkJCXN5c2xvZyhMT0dfRVJSLCAiQ29ubmVjdGlvbiBmYWlsZWQuICVzKCVkKSIsDQogCQkJCQkJ c3RyZXJyb3IoZXJybm8pLCBlcnJubyk7DQpAQCAtMjI3LDQ2ICsyODUsNiBAQA0KIAlyZXR1cm4g MDsNCiB9DQogDQotLyogV2FpdCBmb3IgZGlzY29ubmVjdCBvciBlcnJvciBjb25kaXRpb24gb24g dGhlIHNvY2tldCAqLw0KLXN0YXRpYyBpbnQgdzRfaHVwKGludCBzaykNCi17DQotCXN0cnVjdCBw b2xsZmQgcGY7DQotCXNpZ3NldF90IHNpZ3M7DQotCWludCBuOw0KLQ0KLQlzaWdmaWxsc2V0KCZz aWdzKTsNCi0Jc2lnZGVsc2V0KCZzaWdzLCBTSUdDSExEKTsNCi0Jc2lnZGVsc2V0KCZzaWdzLCBT SUdQSVBFKTsNCi0Jc2lnZGVsc2V0KCZzaWdzLCBTSUdURVJNKTsNCi0Jc2lnZGVsc2V0KCZzaWdz LCBTSUdJTlQpOw0KLQlzaWdkZWxzZXQoJnNpZ3MsIFNJR0hVUCk7DQotDQotCXdoaWxlICghdGVy bWluYXRlKSB7DQotCQlwZi5mZCA9IHNrOw0KLQkJcGYuZXZlbnRzID0gUE9MTEVSUiB8IFBPTExI VVA7DQotCQluID0gcHBvbGwoJnBmLCAxLCBOVUxMLCAmc2lncyk7DQotCQlpZiAobiA8IDApIHsN Ci0JCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQ0KLQkJCQljb250aW51 ZTsNCi0JCQlzeXNsb2coTE9HX0VSUiwgIlBvbGwgZmFpbGVkLiAlcyglZCkiLA0KLQkJCQkJCXN0 cmVycm9yKGVycm5vKSwgZXJybm8pOw0KLQkJCXJldHVybiAxOw0KLQkJfQ0KLQ0KLQkJaWYgKG4p IHsNCi0JCQlpbnQgZXJyID0gMDsNCi0JCQlzb2NrbGVuX3Qgb2xlbiA9IHNpemVvZihlcnIpOw0K LQkJCWdldHNvY2tvcHQoc2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJyLCAmb2xlbik7DQot CQkJc3lzbG9nKExPR19JTkZPLCAiJXMgZGlzY29ubmVjdGVkJXMlcyIsIG5ldGRldiwNCi0JCQkJ ZXJyID8gIiA6ICIgOiAiIiwgZXJyID8gc3RyZXJyb3IoZXJyKSA6ICIiKTsNCi0NCi0JCQljbG9z ZShzayk7DQotCQkJcmV0dXJuIDA7DQotCQl9DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KIC8q IENvbm5lY3QgYW5kIGluaXRpYXRlIEJORVAgc2Vzc2lvbg0KICAqIFJldHVybnM6DQogICogICAt MSAtIGNyaXRpY2FsIGVycm9yIChleGl0IHBlcnNpc3QgbW9kZSkNCkBAIC0yNzksNiArMjk3LDcg QEANCiAJc3RydWN0IHNvY2thZGRyX2wyIGwyYTsNCiAJc29ja2xlbl90IG9sZW47DQogCWludCBz aywgciA9IDA7DQorCXN0cnVjdCBzY3JpcHRfYXJnIGRvd25fY21kOw0KIA0KIAlzeXNsb2coTE9H X0lORk8sICJDb25uZWN0aW5nIHRvICVzIiwgZHN0KTsNCiANCkBAIC0zMTQsMTAgKzMzMywxNSBA QA0KIA0KIAkJc3lzbG9nKExPR19JTkZPLCAiJXMgY29ubmVjdGVkIiwgbmV0ZGV2KTsNCiANCi0J CXJ1bl9kZXZ1cChuZXRkZXYsIGRzdCwgc2ssIC0xKTsNCisJCXJ1bl9zY3JpcHQoZGV2dXBjbWQs IG5ldGRldiwgZHN0LCBzaywgLTEpOw0KIA0KLQkJaWYgKHBlcnNpc3QpIHsNCi0JCQl3NF9odXAo c2spOw0KKwkJaWYgKHBlcnNpc3QgfHwgZGV2ZG93bmNtZCkgew0KKwkJCQltZW1zZXQoJmRvd25f Y21kLCAwLCBzaXplb2Yoc3RydWN0IHNjcmlwdF9hcmcpKTsNCisJCQkJc3RybmNweShkb3duX2Nt ZC5kZXYsIG5ldGRldiwgc3RybGVuKG5ldGRldikgKyAxKTsNCisJCQkJc3RybmNweShkb3duX2Nt ZC5kc3QsIGRzdCwgc3RybGVuKGRzdCkgKyAxKTsNCisJCQkJZG93bl9jbWQuc2sgPSBzazsNCisJ CQkJZG93bl9jbWQubnNrID0gLTE7DQorCQkJCXc0X2h1cChzaywgJmRvd25fY21kKTsNCiANCiAJ CQlpZiAodGVybWluYXRlICYmIGNsZWFudXApIHsNCiAJCQkJc3lzbG9nKExPR19JTkZPLCAiRGlz Y29ubmVjdGluZyBmcm9tICVzLiIsIGRzdCk7DQpAQCAtNTI1LDExICs1NDksMTIgQEANCiAJeyAi Y2FjaGUiLCAgICAwLCAwLCAnQycgfSwNCiAJeyAicGlkZmlsZSIsICAxLCAwLCAnUCcgfSwNCiAJ eyAiZGV2dXAiLCAgICAxLCAwLCAndScgfSwNCisJeyAiZGV2ZG93biIsICAxLCAwLCAnbycgfSwN CiAJeyAiYXV0b3phcCIsICAwLCAwLCAneicgfSwNCiAJeyAwLCAwLCAwLCAwIH0NCiB9Ow0KIA0K LXN0YXRpYyBjaGFyIG1haW5fc29wdHNbXSA9ICJoc2M6azpLcjpkOmU6aTpsbnA6OkRROjpBRVNN Qzo6UDp1OnoiOw0KK3N0YXRpYyBjaGFyIG1haW5fc29wdHNbXSA9ICJoc2M6azpLcjpkOmU6aTps bnA6OkRROjpBRVNNQzo6UDp1Om86eiI7DQogDQogc3RhdGljIGNoYXIgbWFpbl9oZWxwW10gPSAN CiAJIkJsdWV0b290aCBQQU4gZGFlbW9uIHZlcnNpb24gIiBWRVJTSU9OICIgXG4iDQpAQCAtNTU2 LDcgKzU4MSw4IEBADQogCSJcdC0tcGVyc2lzdCAtcFtpbnRlcnZhbF0gICAgUGVyc2lzdCBtb2Rl XG4iDQogCSJcdC0tY2FjaGUgLUNbdmFsaWRdICAgICAgICAgQ2FjaGUgYWRkcmVzc2VzXG4iDQog CSJcdC0tcGlkZmlsZSAtUCA8cGlkZmlsZT4gICAgQ3JlYXRlIFBJRCBmaWxlXG4iDQotCSJcdC0t ZGV2dXAgLXUgPHNjcmlwdD4gICAgICAgU2NyaXB0IHRvIHJ1biB3aGVuIGludGVyZmFjZSBjb21l cyB1cFxuIjsNCisJIlx0LS1kZXZ1cCAtdSA8c2NyaXB0PiAgICAgICBTY3JpcHQgdG8gcnVuIHdo ZW4gaW50ZXJmYWNlIGNvbWVzIHVwXG4iDQorCSJcdC0tZGV2ZG93biAtbyA8c2NyaXB0PgkgU2Ny aXB0IHRvIHJ1biB3aGVuIGludGVyZmFjZSBjb21lcyBkb3duXG4iOw0KIA0KIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pDQogew0KQEAgLTY2MSw2ICs2ODcsMTAgQEANCiAJCQlkZXZ1 cGNtZCA9IHN0cmR1cChvcHRhcmcpOw0KIAkJCWJyZWFrOw0KIA0KKwkJY2FzZSAnbyc6DQorCQkJ ZGV2ZG93bmNtZCA9IHN0cmR1cChvcHRhcmcpOw0KKwkJCWJyZWFrOw0KKw0KIAkJY2FzZSAneic6 DQogCQkJY2xlYW51cCA9IDE7DQogCQkJYnJlYWs7DQpkaWZmIC1OYXVyIHBhbmQub3JpZy8ubWFp bi5jLnN3cCBwYW5kLm5ldy8ubWFpbi5jLnN3cA0KLS0tIHBhbmQub3JpZy8ubWFpbi5jLnN3cAkx OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIHBhbmQubmV3Ly5tYWluLmMu c3dwCTIwMDYtMTEtMDIgMTE6MDM6MzEuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDcwIEBA DQorYjBWSU0gNi40AAAAABAAAG/CSUVHlEkAUzcAAG9kb2xlAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABPRG9sZS1VYnVudHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfm9k b2xlL0JsdWV6LUNWUy91dGlscy9wYW5kLm5ldy9tYWluLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzIxMCMiISATElUAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwBQD/ AAAAAgAAAKMAAAABAAAAAQAAAAQAAACWAAAApQAAAAEAAAAFAAAApgAAADsBAAABAAAABgAAAH8A AADhAQAAAQAAAAMAAACzAAAAYAIAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhZAAAHwAAAL8CAAAA EAAAowAAAP0PAAD6DwAAyw8AAMgPAACFDwAAQg8AAD8PAAA8DwAA8w4AAKoOAABkDgAAPA4AADkO AAD1DQAAsg0AAHANAAA/DQAAPA0AAPYMAAC2DAAAZwwAAGQMAABgDAAAXwwAAEoMAAA2DAAALwwA AC4MAAAaDAAABwwAAPQLAADhCwAAzQsAALkLAAClCwAAkQsAAH0LAABpCwAAUwsAAD0LAAAmCwAA DgsAAA0LAADsDQorAADRDQorAACyDQorAACVDQorAAB5DQorAAB4DQorAABmDQorAABlDQorAABT DQorAABADQorAAA5DQorAAA4DQorAADxCQAAswkAALIJAACbCQAAhwkAAG8JAABZCQAAPwkAACsJ AAANCisJAAAJCQAA+QgAAOgIAADVCAAAwwgAALoIAAC5CAAAlggAAHkIAABbCAAAOwgAADoIAAAS CAAA+QcAAPgHAADZBwAA2AcAALgHAAC3BwAAsAcAAKkHAACiBwAAmQcAAI8HAACJBwAAgAcAAH8H AABrBwAAXAcAAE0HAABDBwAAOAcAADUHAAAzBwAA5wYAAOUGAADVBgAAvwYAAL4GAACwBgAApgYA AKMGAACBBgAAdwYAAHYGAABpBgAAXwYAAF4GAABQBgAAQwYAAEIGAAAzBgAAJQYAACQGAAAHBgAA 7QUAAM0FAACtBQAArAUAAJkFAACJBQAAeQUAAGgFAABnBQAAUQUAAFAFAABGBQAARAUAAEMFAAAI BQAA0QQAAM8EAAC8BAAArAQAAKQEAACjBAAAjwQAAHMEAABXBAAAOwQAACAEAAAFBAAABAQAAO4D AADgAwAAvwMAAJ0DAACOAwAAZAMAAFYDAAAsAwAADQMAAAADAAD8AgAA+wIAAPACAADgAgAAvwIA AL4CAAC9AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQlzb2NrbGVuX3Qgb2xlbiA9IHNpemVv ZihlcnIpOwAJCQlpbnQgZXJyID0gMDsACQlpZiAobikgewAACQl9AAkJCXJldHVybiAxOwAJCQkJ CQlzdHJlcnJvcihlcnJubyksIGVycm5vKTsACQkJc3lzbG9nKExPR19FUlIsICJQb2xsIGZhaWxl ZC4gJXMoJWQpIiwACQkJCWNvbnRpbnVlOwAJCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8g PT0gRUFHQUlOKQAJCWlmIChuIDwgMCkgewAJCW4gPSBwcG9sbCgmcGYsIDEsIE5VTEwsICZzaWdz KTsACQlwZi5ldmVudHMgPSBQT0xMRVJSIHwgUE9MTEhVUDsACQlwZi5mZCA9IHNrOwAJd2hpbGUg KCF0ZXJtaW5hdGUpIHsAAAlzaWdkZWxzZXQoJnNpZ3MsIFNJR0hVUCk7AAlzaWdkZWxzZXQoJnNp Z3MsIFNJR0lOVCk7AAlzaWdkZWxzZXQoJnNpZ3MsIFNJR1RFUk0pOwAJc2lnZGVsc2V0KCZzaWdz LCBTSUdQSVBFKTsACXNpZ2RlbHNldCgmc2lncywgU0lHQ0hMRCk7AAlzaWdmaWxsc2V0KCZzaWdz KTsAAAlpbnQgbjsACXNpZ3NldF90IHNpZ3M7AAlzdHJ1Y3QgcG9sbGZkIHBmOwB7AHN0YXRpYyBp bnQgdzRfaHVwKGludCBzaywgc3RydWN0IHNjcmlwdF9hcmcgKmRvd25fY21kKQAvKiBXYWl0IGZv ciBkaXNjb25uZWN0IG9yIGVycm9yIGNvbmRpdGlvbiBvbiB0aGUgc29ja2V0ICovAAB9AAlleGl0 KDEpOwAACWV4ZWN2KHNjcmlwdCwgYXJndik7AAAJYXJndlszXSA9IE5VTEw7AAlhcmd2WzJdID0g ZHN0OwAJYXJndlsxXSA9IGRldjsACWFyZ3ZbMF0gPSBzY3JpcHQ7AAAJc2lnYWN0aW9uKFNJR1BJ UEUsICZzYSwgTlVMTCk7AAlzaWdhY3Rpb24oU0lHQ0hMRCwgJnNhLCBOVUxMKTsACXNhLnNhX2hh bmRsZXIgPSBTSUdfREZMOwAJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7AAAJCWNsb3NlKG5z ayk7AAlpZiAobnNrID49IDApAAAJCWNsb3NlKHNrKTsACWlmIChzayA+PSAwKQAACQlyZXR1cm47 AAlpZiAoZm9yaygpKQAACQlyZXR1cm47AAlpZiAoYWNjZXNzKHNjcmlwdCwgUl9PSyB8IFhfT0sp KQAJCQAJCXJldHVybjsACWlmICghc2NyaXB0KQAACXN0cnVjdCBzaWdhY3Rpb24gc2E7AAljaGFy ICphcmd2WzRdOwB7AHN0YXRpYyB2b2lkIHJ1bl9zY3JpcHQoY2hhciAqc2NyaXB0LCBjaGFyICpk ZXYsIGNoYXIgKmRzdCwgaW50IHNrLCBpbnQgbnNrKQAJAH07AAlpbnQJCW5zazsACWludAkJc2s7 AAljaGFyCWRzdFsyMF07AAljaGFyCWRldlsyMF07AHN0cnVjdCBzY3JpcHRfYXJnIHsAAH0gbW9k ZXM7AAlLSUxMAAlDT05ORUNULAAJTElTVEVOLAAJU0hPVywACU5PTkUsAGVudW0gewAAc3RhdGlj IHZvaWQgZG9fa2lsbChjaGFyICpkc3QpOwAAc3RhdGljIHZvbGF0aWxlIGludCB0ZXJtaW5hdGU7 AABzdGF0aWMgaW50IHNyY19kZXYgPSAtMTsAc3RhdGljIGJkYWRkcl90IHNyY19hZGRyID0gKkJE QUREUl9BTlk7AABzdGF0aWMgY2hhciAqZGV2ZG93bmNtZCA9IE5VTEw7AHN0YXRpYyBjaGFyICpk ZXZ1cGNtZCA9IE5VTEw7AHN0YXRpYyBjaGFyICpwaWRmaWxlID0gTlVMTDsAc3RhdGljIGNoYXIg bmV0ZGV2WzE2XSA9ICJibmVwJWQiOwAAfSBjYWNoZTsACWJkYWRkcl90IGJkYWRkcjsACWNoYXIg ICAgIGRzdFs0MF07AAlpbnQgICAgICB2YWxpZDsAc3RhdGljIHN0cnVjdCB7AABzdGF0aWMgaW50 IHNlYXJjaF9kdXJhdGlvbiA9IDEwOwBzdGF0aWMgaW50IGNsZWFudXA7AHN0YXRpYyBpbnQgbGlu a19tb2RlID0gMDsAc3RhdGljIGludCB1c2VfY2FjaGU7AHN0YXRpYyBpbnQgdXNlX3NkcCA9IDE7 AHN0YXRpYyBpbnQgcGVyc2lzdDsAc3RhdGljIGludCBkZXRhY2ggPSAxOwAAc3RhdGljIHVpbnQx Nl90IHNlcnZpY2UgPSBCTkVQX1NWQ19OQVA7CQkvKiBSZW1vdGUgc2VydmljZSAqLwBzdGF0aWMg dWludDE2X3Qgcm9sZSAgICA9IEJORVBfU1ZDX1BBTlU7CS8qIExvY2FsIHJvbGUgKGllIHNlcnZp Y2UpICovAAAjZW5kaWYAI2luY2x1ZGUgInBwb2xsLmgiACNpZmRlZiBORUVEX1BQT0xMAAAjaW5j bHVkZSAicGFuZC5oIgAAI2luY2x1ZGUgPGJsdWV0b290aC9ibmVwLmg+ACNpbmNsdWRlIDxibHVl dG9vdGgvbDJjYXAuaD4AI2luY2x1ZGUgPGJsdWV0b290aC9oY2lfbGliLmg+ACNpbmNsdWRlIDxi bHVldG9vdGgvaGNpLmg+ACNpbmNsdWRlIDxibHVldG9vdGgvYmx1ZXRvb3RoLmg+AAAjaW5jbHVk ZSA8c3lzL3NvY2tldC5oPgAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ACNpbmNsdWRlIDxzeXMvc3Rh dC5oPgAjaW5jbHVkZSA8c3lzL3BvbGwuaD4AI2luY2x1ZGUgPGdldG9wdC5oPgAjaW5jbHVkZSA8 c2lnbmFsLmg+ACNpbmNsdWRlIDxzeXNsb2cuaD4AI2luY2x1ZGUgPHN0cmluZy5oPgAjaW5jbHVk ZSA8c3RkbGliLmg+ACNpbmNsdWRlIDx1bmlzdGQuaD4AI2luY2x1ZGUgPGZjbnRsLmg+ACNpbmNs dWRlIDxlcnJuby5oPgAjaW5jbHVkZSA8c3RkaW8uaD4AI2RlZmluZSBfR05VX1NPVVJDRQAAI2Vu ZGlmACNpbmNsdWRlIDxjb25maWcuaD4AI2lmZGVmIEhBVkVfQ09ORklHX0gAACAqLwAgKgAgKiAg Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B ICAwMjExMC0xMzAxICBVU0EAICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlACAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQAgKgAgKiAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4AICogIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUAICogIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mACAqICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwAICoAICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uACAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkAICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ACAqACAqACAqICBDb3B5cmlnaHQg KEMpIDIwMDItMjAwNiAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgAgKiAg Q29weXJpZ2h0IChDKSAyMDAyLTIwMDMgIE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21t LmNvbT4AICoAICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAAg KgAvKgBhZAAA5gIAAMYFAAAAEAAAswAAAOYPAADcDwAA2w8AAM8PAAC8DwAArQ8AAIkPAAB/DwAA fg8AAHIPAABiDwAAUw8AADkPAAAvDwAALg8AACIPAAASDwAAAw8AAPkOAAD4DgAA7A4AANMOAADJ DgAAyA4AALwOAACcDgAAkg4AAJEOAACFDgAAYg4AAFgOAABXDgAASw4AADsOAAAxDgAAMA4AACQO AAAFDgAA+w0AAPoNAADuDQAAzA0AAMINAADBDQAAtQ0AAJQNAACKDQAAiQ0AAH0NAABcDQAAUg0A AFENAABFDQAAJQ0AAA8NAAAFDQAABA0AAPgMAADpDAAA3wwAAN4MAADSDAAAwwwAAKcMAACfDAAA jgwAAIQMAACDDAAAdwwAAGgMAABKDAAAQgwAAC8MAAAlDAAAJAwAABgMAAD7CwAA8QsAAPALAADk CwAAxgsAALwLAAC7CwAArwsAAI8LAACFCwAAhAsAAHgLAABoCwAAXgsAAF0LAABRCwAARgsAADAL AAAkCwAAIAsAAB0LAAAcCwAACwsAAPoNCisAAO0NCisAAOwNCisAANoNCisAAM0NCisAAMwNCisA AKgNCisAAJcNCisAAIsNCisAAH4NCisAAHINCisAAHENCisAAGUNCisAAFUNCisAAEkNCisAAEgN CisAADwNCisAACcNCisAABsNCisAABgNCisAABcNCisAAP0JAADgCQAAwQkAAKcJAACHCQAAZwkA AGYJAABMCQAALQkAACwJAAARCQAA8QgAANEIAADQCAAAsQgAAJEIAACGCAAAgwgAAIIIAABBCAAA AggAAAEIAAD1BwAA2QcAAJ8HAAByBwAAUwcAAEUHAABBBwAAPgcAAD0HAAAcBwAADwcAAA4HAAAC BwAA3wYAAM4GAADNBgAAmwYAAH0GAABqBgAAXQYAAFoGAABZBgAASAYAADkGAAApBgAAIAYAAB8G AAARBgAAAgYAAPkFAAD2BQAA9QUAAOcFAADUBQAA0wUAAMgFAADGBQAAxQUAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0ACXJldHVybiAwOwAA CQl1bmxpbmsocGlkZmlsZSk7AAlpZiAocGlkZmlsZSkAAAl9AAkJYnJlYWs7AAkJZG9fbGlzdGVu KCk7AAljYXNlIExJU1RFTjoAAAkJYnJlYWs7AAkJZG9fY29ubmVjdCgpOwAJY2FzZSBDT05ORUNU OgAJc3dpdGNoIChtb2RlKSB7AAAJfQAJCWZyZWUoZHN0KTsACQljYWNoZS52YWxpZCA9IDE7AAkJ c3RyMmJhKGRzdCwgJmNhY2hlLmJkYWRkcik7AAkJc3RybmNweShjYWNoZS5kc3QsIGRzdCwgc2l6 ZW9mKGNhY2hlLmRzdCkgLSAxKTsAAAkJdXNlX2NhY2hlID0gMDsACQkvKiBEaXNhYmxlIGNhY2hl IGludmFsaWRhdGlvbiAqLwAJaWYgKGRzdCkgewAACQlyZXR1cm4gLTE7AAlpZiAocGlkZmlsZSAm JiB3cml0ZV9waWRmaWxlKCkpAAAJfQAJCX0ACQkJcmV0dXJuIC0xOwAJCQkJCQlzdHJlcnJvcihl cnJubyksIGVycm5vKTsACQkJc3lzbG9nKExPR19FUlIsICJJbnZhbGlkIHNvdXJjZS4gJXMoJWQp IiwACQlpZiAoc3JjX2RldiA8IDAgfHwgaGNpX2RldmJhKHNyY19kZXYsICZzcmNfYWRkcikgPCAw KSB7AAkJc3JjX2RldiA9IGhjaV9kZXZpZChzcmMpOwAJaWYgKHNyYykgewAACXN5c2xvZyhMT0df SU5GTywgIkJsdWV0b290aCBQQU4gZGFlbW9uIHZlcnNpb24gJXMiLCBWRVJTSU9OKTsACW9wZW5s b2coInBhbmQiLCBMT0dfUElEIHwgTE9HX05ERUxBWSB8IExPR19QRVJST1IsIExPR19EQUVNT04p OwAACX0ACQlleGl0KDEpOwAJCXBlcnJvcigiQ2FuJ3Qgc3RhcnQgZGFlbW9uIik7AAlpZiAoZGV0 YWNoICYmIGRhZW1vbigwLCAwKSkgewAACXNpZ2FjdGlvbihTSUdJTlQsICAmc2EsIE5VTEwpOwAJ c2lnYWN0aW9uKFNJR1RFUk0sICZzYSwgTlVMTCk7AAlzYS5zYV9oYW5kbGVyID0gc2lnX3Rlcm07 AAAJc2lnYWN0aW9uKFNJR0hVUCwgJnNhLCBOVUxMKTsACXNhLnNhX2hhbmRsZXIgPSBzaWdfaHVw OwAACXNpZ2FjdGlvbihTSUdQSVBFLCAmc2EsIE5VTEwpOwAJc2lnYWN0aW9uKFNJR0NITEQsICZz YSwgTlVMTCk7AAlzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjsACXNhLnNhX2ZsYWdzICAgPSBTQV9O T0NMRFNUT1A7AAltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsACS8qIEluaXRpYWxpemUgc2ln bmFscyAqLwAACX0ACQlyZXR1cm4gMDsACQlwcmludGYobWFpbl9oZWxwKTsACWNhc2UgTk9ORToA AAkJcmV0dXJuIDA7AAkJZG9fa2lsbChkc3QpOwAJY2FzZSBLSUxMOgAACQlyZXR1cm4gMDsACQlk b19zaG93KCk7AAljYXNlIFNIT1c6AAlzd2l0Y2ggKG1vZGUpIHsACS8qIENoZWNrIG5vbiBkYWVt b24gbW9kZXMgZmlyc3QgKi8AAAkJcmV0dXJuIC0xOwAJaWYgKGJuZXBfaW5pdCgpKQAACW9wdGlu ZCA9IDA7AAlhcmd2ICs9IG9wdGluZDsACWFyZ2MgLT0gb3B0aW5kOwAACX0ACQl9AAkJCWV4aXQo MCk7AAkJCXByaW50ZihtYWluX2hlbHApOwAJCWRlZmF1bHQ6AAkJY2FzZSAnaCc6AAAJCQlicmVh azsACQkJY2xlYW51cCA9IDE7AAkJY2FzZSAneic6AAAJCQlicmVhazsACQkJZGV2ZG93bmNtZCA9 IHN0cmR1cChvcHRhcmcpOwAJCWNhc2UgJ28nOgAACQkJYnJlYWs7AAkJCWRldnVwY21kID0gc3Ry ZHVwKG9wdGFyZyk7AAkJY2FzZSAndSc6AAAJCQlicmVhazsACQkJcGlkZmlsZSA9IHN0cmR1cChv cHRhcmcpOwAJCWNhc2UgJ1AnOgAACQkJYnJlYWs7AAkJCQl1c2VfY2FjaGUgPSAyOwAJCQllbHNl AAkJCQl1c2VfY2FjaGUgPSBhdG9pKG9wdGFyZyk7AAkJCWlmIChvcHRhcmcpAAkJY2FzZSAnQyc6 AAAJCQlicmVhazsACQkJCXBlcnNpc3QgPSA1OwAJCQllbHNlAAkJCQlwZXJzaXN0ID0gYXRvaShv cHRhcmcpOwAJCQlpZiAob3B0YXJnKQAJCWNhc2UgJ3AnOgAACQkJYnJlYWs7AAkJCWRldGFjaCA9 IDA7AAkJY2FzZSAnbic6AAAJCQlicmVhazsACQkJbmV0ZGV2WzE1XSA9ICdcMCc7AAkJCXN0cm5j cHkobmV0ZGV2LCBvcHRhcmcsIDE2KTsACQljYXNlICdlJzoAAAkJCWJyZWFrOwAJCQlsaW5rX21v ZGUgfD0gTDJDQVBfTE1fTUFTVEVSOwAJCWNhc2UgJ00nOgAACQkJYnJlYWs7AAkJCWxpbmtfbW9k ZSB8PSBMMkNBUF9MTV9TRUNVUkU7AAkJY2FzZSAnUyc6AAAJCQlicmVhazsACQkJbGlua19tb2Rl IHw9IEwyQ0FQX0xNX0VOQ1JZUFQ7AAkJY2FzZSAnRSc6AAAJCQlicmVhazsACQkJbGlua19tb2Rl IHw9IEwyQ0FQX0xNX0FVVEg7AAkJY2FzZSAnQSc6AAAJCQlicmVhazsACQkJdXNlX3NkcCA9IDA7 AAkJY2FzZSAnRCc6AAAJCQlicmVhazsACQkJYm5lcF9zdHIyc3ZjKG9wdGFyZywgJnNlcnZpY2Up OwAJCWNhc2UgJ2QnOgAACQkJYnJlYWs7AAkJCWJuZXBfc3RyMnN2YyhvcHRhcmcsICZyb2xlKTsA CQljYXNlICdyJzoAAAkJCWJyZWFrOwAJCQlzcmMgPSBzdHJkdXAob3B0YXJnKTsACQljYXNlICdp JzoAAAkJCWJyZWFrOwAJCQlkZXRhY2ggPSAwOwAJCQltb2RlID0gS0lMTDsACQljYXNlICdLJzoA AAkJCWJyZWFrOwAJCQlkc3QgID0gc3RyZHVwKG9wdGFyZyk7AAkJCWRldGFjaCA9IDA7AAkJCW1v ZGUgPSBLSUxMOwAJCWNhc2UgJ2snOgAACQkJYnJlYWs7AAkJCQlzZWFyY2hfZHVyYXRpb24gPSBh dG9pKG9wdGFyZyk7AAkJCWlmIChvcHRhcmcpAAkJCW1vZGUgPSBDT05ORUNUOwAJCWNhc2UgJ1En OgAACQkJYnJlYWs7AAkJCWRzdCAgPSBzdHJkdXAob3B0YXJnKTsAYWQAAAwAAAB4AgAAABAAAJYA AADKDwAAlw8AAGYPAABUDwAA/Q4AAO8OAADiDgAA3g4AANsOAADQDgAAzg4AAM0OAACyDgAAsA4A AJUOAAB8DgAAaw4AAF4OAABdDgAATw4AACkOAAAoDgAA9Q0AALoNAACrDQAAcw0AAFQNAABHDQAA RA0AAEMNAAAkDQAABQ0AAOIMAADDDAAAwgwAAIoMAABhDAAAQgwAADUMAAAyDAAAMQwAAP8LAADg CwAAywsAAIkLAABQCwAAMQsAACQLAAAhCwAAIAsAAP8NCisAALcNCisAAH4NCisAAF8NCisAAFIN CisAAE8NCisAAE4NCisAADkNCisAACgNCisAAOEJAACsCQAAjQkAAIAJAAB9CQAAfAkAAGsJAABq CQAAVAkAADQJAAAgCQAAFQkAABQJAADfCAAAzggAAKIIAACDCAAAdggAAHIIAABxCAAAXQgAAFMI AABJCAAAPggAABQIAAD1BwAA6gcAANsHAADOBwAAygcAAMkHAACpBwAAkwcAAJIHAABdBwAATAcA AC0HAAAsBwAADAcAAAsHAADaBgAAxAYAAMMGAACTBgAAkQYAAF0GAAAlBgAA9QUAAOAFAADJBQAA rgUAAKMFAABzBQAAVAUAAFAFAABPBQAAQQUAADYFAAAzBQAAMgUAACQFAAALBQAAAAUAAP4EAAD9 BAAA2AQAAMwEAACfBAAAggQAAHAEAABsBAAAMgQAADAEAAAVBAAA/AMAAOsDAADbAwAAvgMAAL0D AACRAwAAkAMAAFUDAABGAwAADgMAAO8CAADiAgAA3wIAAN4CAACsAgAAjQIAAHgCAAB3AgAAAAAA AAAAAAAJb2xlbiA9IHNpemVvZihsMm8pOwAJbWVtc2V0KCZsMm8sIDAsIHNpemVvZihsMm8pKTsA CS8qIFNldHVwIEwyQ0FQIG9wdGlvbnMgYWNjb3JkaW5nIHRvIEJORVAgc3BlYyAqLwAACX0ACQly ZXR1cm4gLTE7AAkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOwAJCXN5c2xvZyhMT0dfRVJS LCAiQ2Fubm90IGNyZWF0ZSBMMkNBUCBzb2NrZXQuICVzKCVkKSIsAAlpZiAoc2sgPCAwKSB7AAlz ayA9IHNvY2tldChBRl9CTFVFVE9PVEgsIFNPQ0tfU0VRUEFDS0VULCBCVFBST1RPX0wyQ0FQKTsA AAlzeXNsb2coTE9HX0lORk8sICJDb25uZWN0aW5nIHRvICVzIiwgZHN0KTsAAAlzdHJ1Y3Qgc2Ny aXB0X2FyZyBkb3duX2NtZDsACWludCBzaywgciA9IDA7AAlzb2NrbGVuX3Qgb2xlbjsACXN0cnVj dCBzb2NrYWRkcl9sMiBsMmE7AAlzdHJ1Y3QgbDJjYXBfb3B0aW9ucyBsMm87AHsAc3RhdGljIGlu dCBjcmVhdGVfY29ubmVjdGlvbihjaGFyICpkc3QsIGJkYWRkcl90ICpiZGFkZHIpACAqLwAgKiAg IDAgIC0gc3VjY2VzcwAgKiAgIDEgIC0gbm9uIGNyaXRpY2FsIGVycm9yACAqICAgLTEgLSBjcml0 aWNhbCBlcnJvciAoZXhpdCBwZXJzaXN0IG1vZGUpACAqIFJldHVybnM6AC8qIENvbm5lY3QgYW5k IGluaXRpYXRlIEJORVAgc2Vzc2lvbgAAfQAJcmV0dXJuIDA7AAkJYm5lcF9zZHBfdW5yZWdpc3Rl cigpOwAJaWYgKHVzZV9zZHApAAAJfQAJCWV4aXQoMCk7AAkJY2xvc2UobnNrKTsAAAkJfQAJCQkJ CQlzdHJlcnJvcihlcnJubyksIGVycm5vKTsACQkJc3lzbG9nKExPR19FUlIsICJDb25uZWN0aW9u IGZhaWxlZC4gJXMoJWQpIiwACQl9IGVsc2UgewAJCQl3NF9odXAobnNrLCAmZG93bl9jbWQpOwAJ CQlkb3duX2NtZC5uc2sgPSBuc2s7AAkJCWRvd25fY21kLnNrID0gc2s7AAkJCXN0cm5jcHkoZG93 bl9jbWQuZHN0LCBzdHIsIHN0cmxlbihzdHIpICsgMSk7AAkJCXN0cm5jcHkoZG93bl9jbWQuZGV2 LCBkZXZuYW1lLCBzdHJsZW4oZGV2bmFtZSkgKyAxKTsACQkJbWVtc2V0KCZkb3duX2NtZCwgMCwg c2l6ZW9mKHN0cnVjdCBzY3JpcHRfYXJnKSk7AAkACQkJcnVuX3NjcmlwdChkZXZ1cGNtZCwgZGV2 bmFtZSwgc3RyLCBzaywgbnNrKTsAAAkJCQkJCQkJc3RyLCBuZXRkZXYpOwAJCQlzeXNsb2coTE9H X0lORk8sICJOZXcgY29ubmVjdGlvbiBmcm9tICVzICVzIiwAAAkJCWJhMnN0cigmbDJhLmwyX2Jk YWRkciwgc3RyKTsAAAkJCXN0cnVjdCBzY3JpcHRfYXJnIGRvd25fY21kOwAJCQljaGFyIHN0cls0 MF07AAkJaWYgKCFibmVwX2FjY2VwdF9jb25uZWN0aW9uKG5zaywgcm9sZSwgZGV2bmFtZSkpIHsA AAkJZGV2bmFtZVsxNV0gPSAnXDAnOwAJCXN0cm5jcHkoZGV2bmFtZSwgbmV0ZGV2LCAxNik7AAAJ CX0ACQkJY29udGludWU7AAkJCWNsb3NlKG5zayk7AAkJZGVmYXVsdDoACQkJCQkJc3RyZXJyb3Io ZXJybm8pLCBlcnJubyk7AAkJCXN5c2xvZyhMT0dfRVJSLCAiRm9yayBmYWlsZWQuICVzKCVkKSIs AAkJY2FzZSAtMToACQkJYnJlYWs7AAkJY2FzZSAwOgAJCXN3aXRjaCAoZm9yaygpKSB7AAAJCX0A CQkJY29udGludWU7AAkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOwAJCQlzeXNsb2coTE9H X0VSUiwgIkFjY2VwdCBmYWlsZWQuICVzKCVkKSIsAAkJaWYgKG5zayA8IDApIHsACQluc2sgPSBh Y2NlcHQoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmwyYSwgJmFsZW4pOwAACQlpbnQgbnNrOwAJ CWNoYXIgZGV2bmFtZVsxNl07AAkJc29ja2xlbl90IGFsZW4gPSBzaXplb2YobDJhKTsACXdoaWxl ICghdGVybWluYXRlKSB7AAAJbGlzdGVuKHNrLCAxMCk7AAAJfQAJCXJldHVybiAtMTsACQkJCQkJ c3RyZXJyb3IoZXJybm8pLCBlcnJubyk7AAkJc3lzbG9nKExPR19FUlIsICJGYWlsZWQgdG8gc2V0 IGxpbmsgbW9kZS4gJXMoJWQpIiwACWlmIChsbSAmJiBzZXRzb2Nrb3B0KHNrLCBTT0xfTDJDQVAs IEwyQ0FQX0xNLCAmbG0sIHNpemVvZihsbSkpIDwgMCkgewAJbG0gPSBsaW5rX21vZGU7AAkvKiBT ZXQgbGluayBtb2RlICovAAAJfQAJCXJldHVybiAtMTsACQkJCQkJc3RyZXJyb3IoZXJybm8pLCBl cnJubyk7AAkJc3lzbG9nKExPR19FUlIsICJGYWlsZWQgdG8gc2V0IEwyQ0FQIG9wdGlvbnMuICVz KCVkKSIsAAlpZiAoc2V0c29ja29wdChzaywgU09MX0wyQ0FQLCBMMkNBUF9PUFRJT05TLCAmbDJv LCBzaXplb2YobDJvKSkgPCAwKSB7AAlsMm8uaW10dSA9IGwyby5vbXR1ID0gQk5FUF9NVFU7AAAJ fQAJCXJldHVybiAtMTsACQkJCQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7AAkJc3lzbG9nKExP R19FUlIsICJGYWlsZWQgdG8gZ2V0IEwyQ0FQIG9wdGlvbnMuICVzKCVkKSIsAAlpZiAoZ2V0c29j a29wdChzaywgU09MX0wyQ0FQLCBMMkNBUF9PUFRJT05TLCAmbDJvLCAmb2xlbikgPCAwKSB7AAlv bGVuID0gc2l6ZW9mKGwybyk7AAltZW1zZXQoJmwybywgMCwgc2l6ZW9mKGwybykpOwAJLyogU2V0 dXAgTDJDQVAgb3B0aW9ucyBhY2NvcmRpbmcgdG8gQk5FUCBzcGVjICovAAAJfQAJCXJldHVybiAt MTsACQkJCQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7AAkJc3lzbG9nKExPR19FUlIsICJCaW5k IGZhaWxlZC4gJXMoJWQpIiwACWlmIChiaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyICopICZsMmEs IHNpemVvZihsMmEpKSkgewAACWwyYS5sMl9wc20gPSBodG9icyhCTkVQX1BTTSk7AAliYWNweSgm bDJhLmwyX2JkYWRkciwgJnNyY19hZGRyKTsACWwyYS5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7 AAltZW1zZXQoJmwyYSwgMCwgc2l6ZW9mKGwyYSkpOwAACX0ACQlyZXR1cm4gLTE7AAkJCQkJCXN0 cmVycm9yKGVycm5vKSwgZXJybm8pOwAJCXN5c2xvZyhMT0dfRVJSLCAiQ2Fubm90IGNyZWF0ZSBM MkNBUCBzb2NrZXQuICVzKCVkKSIsAAlpZiAoc2sgPCAwKSB7AAlzayA9IHNvY2tldChBRl9CTFVF VE9PVEgsIFNPQ0tfU0VRUEFDS0VULCBCVFBST1RPX0wyQ0FQKTsACS8qIENyZWF0ZSBMMkNBUCBz b2NrZXQgYW5kIGJpbmQgaXQgdG8gUFNNIEJORVAgKi8AAAkJYm5lcF9zZHBfcmVnaXN0ZXIoJnNy Y19hZGRyLCByb2xlKTsACWlmICh1c2Vfc2RwKQAACWludCBzaywgbG07AAlzb2NrbGVuX3Qgb2xl bjsACXN0cnVjdCBzb2NrYWRkcl9sMiBsMmE7AAlzdHJ1Y3QgbDJjYXBfb3B0aW9ucyBsMm87AHsA c3RhdGljIGludCBkb19saXN0ZW4odm9pZCkAAH0ACXJldHVybiAwOwAJfQAJCX0ACQkJcmV0dXJu IDA7AAkJCWNsb3NlKHNrKTsACQkJCXJ1bl9zY3JpcHQoZGV2ZG93bmNtZCwgZG93bl9jbWQtPmRl diwgZG93bl9jbWQtPmRzdCwgZG93bl9jbWQtPnNrLCBkb3duX2NtZC0+bnNrKTsACQkJaWYgKGRv d25fY21kKSAACQkJCWVyciA/ICIgOiAiIDogIiIsIGVyciA/IHN0cmVycm9yKGVycikgOiAiIik7 AAkJCXN5c2xvZyhMT0dfSU5GTywgIiVzIGRpc2Nvbm5lY3RlZCVzJXMiLCBuZXRkZXYsAAkJCWdl dHNvY2tvcHQoc2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJyLCAmb2xlbik7AGFkAAAFAAAA sQIAAAAQAACmAAAAyA8AAKcPAABpDwAAaA8AAEkPAAAqDwAABw8AAAYPAADQDgAApw4AAIgOAACH DgAAaA4AAEkOAAApDgAADQorDgAACQ4AAMwNAACTDQAAkg0AAGYNAABlDQAAOA0AADcNAAAYDQAA 4wwAAKwMAAB7DAAAZQwAAE4MAAAzDAAAMgwAABMMAADeCwAAzAsAAMcLAADDCwAAwgsAALkLAACv CwAAfQsAAFkLAABQCwAATQsAAEwLAABACwAAPwsAAC0LAAAhCwAA8Q0KKwAA1g0KKwAAtQ0KKwAA mQ0KKwAAkA0KKwAAfg0KKwAAew0KKwAAeg0KKwAAbw0KKwAAbQ0KKwAAbA0KKwAAVg0KKwAASg0K KwAAHQ0KKwAAAA0KKwAA7gkAAOoJAADOCQAAzAkAALkJAAClCQAAkwkAAJIJAACMCQAAewkAAGgJ AABXCQAAVgkAAD0JAAAiCQAA7ggAAN4IAADLCAAAwAgAALsIAACuCAAAqggAAKkIAACICAAAhwgA AFMIAABSCAAARQgAAAYIAAD3BwAAygcAAKsHAACeBwAAmgcAAJkHAAB9BwAAbAcAAE0HAABMBwAA OgcAAA0KKwcAAOcGAADmBgAApQYAAJYGAACRBgAAkAYAAGIGAABSBgAAPwYAADQGAAAvBgAAKwYA ABwGAAD6BQAA+QUAAO4FAADsBQAA6wUAANEFAADPBQAAtQUAALMFAACyBQAAkwUAAJEFAACHBQAA WAUAAFIFAAAzBQAAMQUAADAFAAATBQAAEQUAAAgFAAAGBQAABQUAAOcEAADlBAAA1QQAANMEAADS BAAAswQAALEEAACoBAAAngQAAJIEAACRBAAAiwQAAE4EAAA8BAAAFAQAAPMDAADiAwAAqAMAAIgD AAB5AwAAdAMAAHADAAAvAwAA8QIAALECAACwAgAAAAkJCSAqIHJlc2NhbikgYW5kIHRoZW4gZXhp dCBjbGVhbmx5IGFuZCBsZXQgdGhpbmdzIGdvIG9uIGluIHRoZQAJCQkgKiBhcmUgY2FsbGluZyBp ZnVwIGZvciBhIHJlYXNvbiwgc28gdGhleSBwcm9iYWJseSB3YW50IHRvAAkJCS8qIFdlJ3JlIGFs cmVhZHkgcnVubmluZzsgc2VuZCBhIFNJR0hVUCAod2UgcHJlc3VtZSB0aGF0IHRoZXkACQkJAAkJ CX0ACQkJCXJldHVybiAtMTsACQkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOwAJCQkJc3lz bG9nKExPR19FUlIsICJDb3VsZCBub3QgcmVhZCBvbGQgcGlkZmlsZTogJXMoJWQpIiwACQkJaWYg KGZkIDwgMCkgewAJCQlmZCA9IG9wZW4ocGlkZmlsZSwgT19SRE9OTFkpOwAJCQkvKiBUcnkgdG8g b3BlbiB0aGUgZmlsZSBmb3IgcmVhZC4gKi8ACQlpZiAoZmQgPT0gLTEpIHsACQlmZCA9IG9wZW4o cGlkZmlsZSwgT19XUk9OTFl8T19UUlVOQ3xPX0NSRUFUfE9fRVhDTCwgMDY0NCk7AAlkbyB7AAAJ cGlkX3QgcGlkOwAJRklMRSAqZjsACWludCBmZDsAewBzdGF0aWMgaW50IHdyaXRlX3BpZGZpbGUo dm9pZCkAAH0ACXRlcm1pbmF0ZSA9IDE7AHsAc3RhdGljIHZvaWQgc2lnX3Rlcm0oaW50IHNpZykA AH0ACXJldHVybjsAewBzdGF0aWMgdm9pZCBzaWdfaHVwKGludCBzaWcpAAB9AAkJYm5lcF9raWxs X2FsbF9jb25uZWN0aW9ucygpOwAJZWxzZQAJCWJuZXBfa2lsbF9jb25uZWN0aW9uKCh2b2lkICop IHN0cnRvYmEoZHN0KSk7AAlpZiAoZHN0KQB7AHN0YXRpYyB2b2lkIGRvX2tpbGwoY2hhciAqZHN0 KQAAfQAJYm5lcF9zaG93X2Nvbm5lY3Rpb25zKCk7AHsAc3RhdGljIHZvaWQgZG9fc2hvdyh2b2lk KQAAfQAJcmV0dXJuIHI7AAAJfSB3aGlsZSAoIXRlcm1pbmF0ZSAmJiBwZXJzaXN0KTsACQlidF9m cmVlKGlpKTsACQl9AAkJCX0ACQkJCWJyZWFrOwAJCQkJdGVybWluYXRlID0gMTsACQkJaWYgKHIg PCAwKSB7AAkJCXIgPSBjcmVhdGVfY29ubmVjdGlvbihkc3QsICZpaVtpXS5iZGFkZHIpOwAACQkJ fQAJCQkJCWNvbnRpbnVlOwAJCQkJaWYgKGJuZXBfc2RwX3NlYXJjaCgmc3JjX2FkZHIsICZpaVtp XS5iZGFkZHIsIHNlcnZpY2UpIDw9IDApAAAJCQkJCQlibmVwX3N2YzJzdHIoc2VydmljZSksIGRz dCk7AAkJCQlzeXNsb2coTE9HX0lORk8sICJTZWFyY2hpbmcgZm9yICVzIG9uICVzIiwgAAkJCWlm ICh1c2Vfc2RwKSB7AAAJCQliYTJzdHIoJmlpW2ldLmJkYWRkciwgZHN0KTsACQkJY2hhciBkc3Rb NDBdOwAJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsAAAkJfQAJCQljb250aW51ZTsACQkJCQkJ c3RyZXJyb3IoZXJybm8pLCBlcnJubyk7AAkJCXN5c2xvZyhMT0dfRVJSLCAiSW5xdWlyeSBmYWls ZWQuICVzKCVkKSIsAAkJaWYgKG4gPCAwKSB7AAkJbiAgPSBoY2lfaW5xdWlyeShzcmNfZGV2LCBz ZWFyY2hfZHVyYXRpb24sIDAsIE5VTEwsICZpaSwgMCk7AAkJaWkgPSBOVUxMOwAACQkvKiBGSVhN RTogU2hvdWxkIHdlIHVzZSBub24gZ2VuZXJhbCBMQVAgaGVyZSA/ICovAAAJCXN5c2xvZyhMT0df SU5GTywgIklucXVpcmluZyIpOwAACQl9AAkJCWNvbnRpbnVlOwAJCQl9AAkJCQlicmVhazsACQkJ CXRlcm1pbmF0ZSA9IDE7AAkJCWlmIChyIDwgMCkgewAJCQlyID0gY3JlYXRlX2Nvbm5lY3Rpb24o Y2FjaGUuZHN0LCAmY2FjaGUuYmRhZGRyKTsACQkJLyogVXNlIGNhY2hlZCBiZGFkZHIgKi8ACQlp ZiAoY2FjaGUudmFsaWQgPiAwKSB7AAAJCXJlY29ubmVjdCA9IDE7AAkJCXNsZWVwKHBlcnNpc3Qp OwAJCWlmIChyZWNvbm5lY3QpAAlkbyB7AAAJaW50IGksIG4sIHIgPSAwOwAJaW50IHJlY29ubmVj dCA9IDA7AAlpbnF1aXJ5X2luZm8gKmlpOwB7AHN0YXRpYyBpbnQgZG9fY29ubmVjdCh2b2lkKQAg Ki8AICogICAwICAtIHN1Y2Nlc3MAICogICAxICAtIG5vbiBjcml0aWNhbCBlcnJvcgAgKiAgIC0x IC0gY3JpdGljYWwgZXJyb3IgKGV4aXQgcGVyc2lzdCBtb2RlKQAgKiBSZXR1cm5zOgAvKiBTZWFy Y2ggYW5kIGNvbm5lY3QAAH0ACXJldHVybiByOwAACX0ACQkJY2FjaGUudmFsaWQtLTsACQl9IGVs c2UACQkJY2FjaGUudmFsaWQgPSB1c2VfY2FjaGU7AAkJCWJhY3B5KCZjYWNoZS5iZGFkZHIsIGJk YWRkcik7AAkJCXN0cmNweShjYWNoZS5kc3QsIGRzdCk7AAkJCS8qIFN1Y2Nlc2VzZnVsIGNvbm5l Y3Rpb24sIHZhbGlkYXRlIGNhY2hlICovAAkJaWYgKCFyKSB7AAlpZiAodXNlX2NhY2hlKSB7AAAJ Y2xvc2Uoc2spOwAACX0ACQlyID0gMTsACQkJCQkJZHN0LCBzdHJlcnJvcihlcnJubyksIGVycm5v KTsACQlzeXNsb2coTE9HX0VSUiwgIkNvbm5lY3QgdG8gJXMgZmFpbGVkLiAlcyglZCkiLAAJfSBl bHNlIHsACQlyID0gMDsAAAkJfQAJCQl9AAkJCQlkb19raWxsKGRzdCk7AAkJCQlzeXNsb2coTE9H X0lORk8sICJEaXNjb25uZWN0aW5nIGZyb20gJXMuIiwgZHN0KTsACQkJaWYgKHRlcm1pbmF0ZSAm JiBjbGVhbnVwKSB7AAAJCQkJdzRfaHVwKHNrLCAmZG93bl9jbWQpOwAJCQkJZG93bl9jbWQubnNr ID0gLTE7AAkJCQlkb3duX2NtZC5zayA9IHNrOwAJCQkJc3RybmNweShkb3duX2NtZC5kc3QsIGRz dCwgc3RybGVuKGRzdCkgKyAxKTsACQkJCXN0cm5jcHkoZG93bl9jbWQuZGV2LCBuZXRkZXYsIHN0 cmxlbihuZXRkZXYpICsgMSk7AAkJCQltZW1zZXQoJmRvd25fY21kLCAwLCBzaXplb2Yoc3RydWN0 IHNjcmlwdF9hcmcpKTsACQlpZiAocGVyc2lzdCB8fCBkZXZkb3duY21kKSB7AAAJCXJ1bl9zY3Jp cHQoZGV2dXBjbWQsIG5ldGRldiwgZHN0LCBzaywgLTEpOwAACQlzeXNsb2coTE9HX0lORk8sICIl cyBjb25uZWN0ZWQiLCBuZXRkZXYpOwAACQkJIWJuZXBfY3JlYXRlX2Nvbm5lY3Rpb24oc2ssIHJv bGUsIHNlcnZpY2UsIG5ldGRldikpIHsACWlmICghY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRk ciAqKSAmbDJhLCBzaXplb2YobDJhKSkgJiYgAAAJbDJhLmwyX3BzbSA9IGh0b2JzKEJORVBfUFNN KTsACWJhY3B5KCZsMmEubDJfYmRhZGRyLCBiZGFkZHIpOwAJbDJhLmwyX2ZhbWlseSA9IEFGX0JM VUVUT09USDsACW1lbXNldCgmbDJhLCAwLCBzaXplb2YobDJhKSk7AAAJCQkJCQlzdHJlcnJvcihl cnJubyksIGVycm5vKTsACQlzeXNsb2coTE9HX0VSUiwgIkJpbmQgZmFpbGVkLiAlcyglZCkiLAAJ aWYgKGJpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmwyYSwgc2l6ZW9mKGwyYSkpKQAACWJh Y3B5KCZsMmEubDJfYmRhZGRyLCAmc3JjX2FkZHIpOwAJbDJhLmwyX2ZhbWlseSA9IEFGX0JMVUVU T09USDsACW1lbXNldCgmbDJhLCAwLCBzaXplb2YobDJhKSk7AAAJc2V0c29ja29wdChzaywgU09M X0wyQ0FQLCBMMkNBUF9PUFRJT05TLCAmbDJvLCBzaXplb2YobDJvKSk7AAlsMm8uaW10dSA9IGwy by5vbXR1ID0gQk5FUF9NVFU7AAlnZXRzb2Nrb3B0KHNrLCBTT0xfTDJDQVAsIEwyQ0FQX09QVElP TlMsICZsMm8sICZvbGVuKTsAYWQAAA4AAAAeAgAAABAAAH8AAADCDwAAhA8AAH0PAABlDwAAWA8A ABwPAAD8DgAA7Q4AAN4OAADZDgAA2A4AAMwOAACpDgAAnA4AAI4OAACNDgAAfw4AAGUOAABCDgAA Dw4AAN4NAADIDQAAug0AAK0NAAB8DQAAZA0AABgNAAADDQAA8wwAAO0MAADoDAAA5AwAANAMAADP DAAAuQwAAK4MAAB0DAAAVQwAAEgMAAA1DAAAKAwAACUMAAAkDAAABQwAAPkLAAD4CwAA7QsAAOsL AADqCwAAxAsAAKgLAACMCwAAcAsAAFQLAAA4CwAAHAsAAAALAADkDQorAADIDQorAACsDQorAACQ DQorAAB0DQorAABYDQorAAA8DQorAAAgDQorAAAEDQorAADoCQAAzAkAALAJAACUCQAAeAkAAFwJ AABACQAAJAkAABQJAAARCQAAEAkAAMsIAADKCAAArwgAAIAIAAB0CAAAXggAAFAIAAATCAAA1wcA AKAHAABeBwAAKgcAAPUGAAC7BgAAewYAADcGAAD/BQAA0AUAAKMFAABsBQAAOQUAAAYFAADGBAAA jgQAAGAEAAAvBAAA/gMAALcDAABwAwAAbwMAAE4DAABMAwAALAMAABYDAAAEAwAA+gIAAPkCAACs AgAAnAIAAJACAACAAgAAcQIAAGcCAABmAgAAWgIAAEgCAAA+AgAAPQIAADECAAAeAgAAHQIAAAAA AAAAAAAAAAAJCQltb2RlID0gQ09OTkVDVDsACQljYXNlICdjJzoAAAkJCWJyZWFrOwAJCQltb2Rl ID0gTElTVEVOOwAJCWNhc2UgJ3MnOgAACQkJYnJlYWs7AAkJCWRldGFjaCA9IDA7AAkJCW1vZGUg PSBTSE9XOwAJCWNhc2UgJ2wnOgAJCXN3aXRjaChvcHQpIHsACXdoaWxlICgob3B0PWdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsIG1haW5fc29wdHMsIG1haW5fbG9wdHMsIE5VTEwpKSAhPSAtMSkgewAA CWludCBvcHQ7AAlpbnQgbW9kZSA9IE5PTkU7AAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwAJY2hhciAq ZHN0ID0gTlVMTCwgKnNyYyA9IE5VTEw7AHsAaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkAAAkiXHQtLWRldmRvd24gLW8gPHNjcmlwdD4JIFNjcmlwdCB0byBydW4gd2hlbiBpbnRlcmZh Y2UgY29tZXMgZG93blxuIjsACSJcdC0tZGV2dXAgLXUgPHNjcmlwdD4gICAgICAgU2NyaXB0IHRv IHJ1biB3aGVuIGludGVyZmFjZSBjb21lcyB1cFxuIgAJIlx0LS1waWRmaWxlIC1QIDxwaWRmaWxl PiAgICBDcmVhdGUgUElEIGZpbGVcbiIACSJcdC0tY2FjaGUgLUNbdmFsaWRdICAgICAgICAgQ2Fj aGUgYWRkcmVzc2VzXG4iAAkiXHQtLXBlcnNpc3QgLXBbaW50ZXJ2YWxdICAgIFBlcnNpc3QgbW9k ZVxuIgAJIlx0LS1ub2RldGFjaCAtbiAgICAgICAgICAgICBEbyBub3QgYmVjb21lIGEgZGFlbW9u XG4iAAkiXHQtLW1hc3RlciAtTSAgICAgICAgICAgICAgIEJlY29tZSB0aGUgbWFzdGVyIG9mIGEg cGljb25ldFxuIgAJIlx0LS1zZWN1cmUgLVMgICAgICAgICAgICAgICBTZWN1cmUgY29ubmVjdGlv blxuIgAJIlx0LS1lbmNyeXB0IC1FICAgICAgICAgICAgICBFbmFibGUgZW5jcnlwdGlvblxuIgAJ Ilx0LS1hdXRoIC1BICAgICAgICAgICAgICAgICBFbmFibGUgYXV0aGVudGljYXRpb25cbiIACSJc dC0tbm9zZHAgLUQgICAgICAgICAgICAgICAgRGlzYWJsZSBTRFBcbiIACSJcdC0tZGV2aWNlIC1p IDxiZGFkZHI+ICAgICAgU291cmNlIGJkYWRkclxuIgAJIlx0LS1ldGhlcm5ldCAtZSA8bmFtZT4g ICAgICBOZXR3b3JrIGludGVyZmFjZSBuYW1lXG4iAAkiXHQtLXNlcnZpY2UgLWQgPHJvbGU+ICAg ICAgIFJlbW90ZSBQQU4gc2VydmljZSAoUEFOVSwgTkFQLCBHTilcbiIACSJcdC0tcm9sZSAtciA8 cm9sZT4gICAgICAgICAgTG9jYWwgUEFOIHJvbGUgKFBBTlUsIE5BUCwgR04pXG4iAAkiXHQtLWtp bGxhbGwgLUsgICAgICAgICAgICAgIEtpbGwgYWxsIFBBTiBjb25uZWN0aW9uc1xuIgAJIlx0LS1r aWxsIC1rIDxiZGFkZHI+ICAgICAgICBLaWxsIFBBTiBjb25uZWN0aW9uXG4iAAkiXHQtLXNlYXJj aCAtUVtkdXJhdGlvbl0gICAgIFNlYXJjaCBhbmQgY29ubmVjdFxuIgAJIlx0LS1hdXRvemFwIC16 ICAgICAgICAgICAgICBEaXNjb25uZWN0IGF1dG9tYXRpY2FsbHkgb24gZXhpdFxuIgAJIlx0LS1j b25uZWN0IC1jIDxiZGFkZHI+ICAgICBDcmVhdGUgUEFOIGNvbm5lY3Rpb25cbiIACSJcdC0tbGlz dGVuIC1zICAgICAgICAgICAgICAgTGlzdGVuIGZvciBQQU4gY29ubmVjdGlvbnNcbiIACSJcdC0t c2hvdyAtLWxpc3QgLWwgICAgICAgICAgU2hvdyBhY3RpdmUgUEFOIGNvbm5lY3Rpb25zXG4iAAki T3B0aW9uczpcbiIACSJcdHBhbmQgPG9wdGlvbnM+XG4iAAkiVXNhZ2U6XG4iAAkiQmx1ZXRvb3Ro IFBBTiBkYWVtb24gdmVyc2lvbiAiIFZFUlNJT04gIiBcbiIAc3RhdGljIGNoYXIgbWFpbl9oZWxw W10gPSAAAHN0YXRpYyBjaGFyIG1haW5fc29wdHNbXSA9ICJoc2M6azpLcjpkOmU6aTpsbnA6OkRR OjpBRVNNQzo6UDp1Om86eiI7AAB9OwAJeyAwLCAwLCAwLCAwIH0ACXsgImF1dG96YXAiLCAgMCwg MCwgJ3onIH0sAAl7ICJkZXZkb3duIiwgIDEsIDAsICdvJyB9LAAJeyAiZGV2dXAiLCAgICAxLCAw LCAndScgfSwACXsgInBpZGZpbGUiLCAgMSwgMCwgJ1AnIH0sAAl7ICJjYWNoZSIsICAgIDAsIDAs ICdDJyB9LAAJeyAibWFzdGVyIiwgICAwLCAwLCAnTScgfSwACXsgInNlY3VyZSIsICAgMCwgMCwg J1MnIH0sAAl7ICJlbmNyeXB0IiwgIDAsIDAsICdFJyB9LAAJeyAiYXV0aCIsICAgICAwLCAwLCAn QScgfSwACXsgInBlcnNpc3QiLCAgMiwgMCwgJ3AnIH0sAAl7ICJub2RldGFjaCIsIDAsIDAsICdu JyB9LAAJeyAic2hvdyIsICAgICAwLCAwLCAnbCcgfSwACXsgImxpc3QiLCAgICAgMCwgMCwgJ2wn IH0sAAl7ICJub3NkcCIsICAgIDAsIDAsICdEJyB9LAAJeyAiZGV2aWNlIiwgICAxLCAwLCAnaScg fSwACXsgImV0aGVybmV0IiwgMSwgMCwgJ2UnIH0sAAl7ICJzZXJ2aWNlIiwgIDEsIDAsICdkJyB9 LAAJeyAicm9sZSIsICAgICAxLCAwLCAncicgfSwACXsgImtpbGxhbGwiLCAgMCwgMCwgJ0snIH0s AAl7ICJraWxsIiwgICAgIDEsIDAsICdrJyB9LAAJeyAic2VhcmNoIiwgICAyLCAwLCAnUScgfSwA CXsgImNvbm5lY3QiLCAgMSwgMCwgJ2MnIH0sAAl7ICJsaXN0ZW4iLCAgIDAsIDAsICdzJyB9LAAJ eyAiaGVscCIsICAgICAwLCAwLCAnaCcgfSwAc3RhdGljIHN0cnVjdCBvcHRpb24gbWFpbl9sb3B0 c1tdID0gewAAfQAJcmV0dXJuIDA7AAAJZmNsb3NlKGYpOwAJZnByaW50ZihmLCAiJWRcbiIsIGdl dHBpZCgpKTsAAAl9AAkJcmV0dXJuIC0xOwAJCXVubGluayhwaWRmaWxlKTsACQljbG9zZShmZCk7 AAkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOwAJCXN5c2xvZyhMT0dfRVJSLCAiQ291bGQg bm90IGZkb3BlbiBuZXcgcGlkZmlsZTogJXMoJWQpIiwACWlmICghZikgewAJZiA9IGZkb3Blbihm ZCwgInciKTsAAAl9IHdoaWxlKGZkID09IC0xKTsACQl9AAkJCX0ACQkJCX0ACQkJCQlyZXR1cm4g LTE7AAkJCQkJcGlkZmlsZSA9IE5VTEw7AAkJCQkJc3lzbG9nKExPR19JTkZPLCAiU2lnbmFsbGlu ZyBleGlzdGluZyBwcm9jZXNzICVkIGFuZCBleGl0aW5nXG4iLCBwaWQpOwAJCQkJCSAqIG91ciB3 YXkgb3V0LiAqLwAJCQkJCS8qIEdvdCBpdC4gIERvbid0IG1lc3Mgd2l0aCB0aGUgcGlkIGZpbGUg b24ACQkJCX0gZWxzZSB7AAkJCQkJZmQgPSAtMTsACQkJCQl1bmxpbmsocGlkZmlsZSk7AAkJCQkJ c3lzbG9nKExPR19JTkZPLCAiUmVtb3Zpbmcgc3RhbGUgcGlkZmlsZSIpOwAJCQkJCS8qIE5vIHN1 Y2ggcGlkOyByZW1vdmUgdGhlIGJvZ3VzIHBpZCBmaWxlLiAqLwAJCQkJaWYgKGtpbGwocGlkLCBT SUdIVVApID09IC0xKSB7AAkJCQkvKiBUcnkgdG8ga2lsbCBpdC4gKi8ACQkJaWYgKHBpZCkgewAA CQkJZmNsb3NlKGYpOwAJCQkJcGlkID0gMDsACQkJaWYgKGZzY2FuZihmLCAiJWQiLCAmcGlkKSAh PSAxKQAJCQlwaWQgPSAwOwAACQkJfQAJCQkJcmV0dXJuIC0xOwAJCQkJY2xvc2UoZmQpOwAJCQkJ CQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7AAkJCQlzeXNsb2coTE9HX0VSUiwgIkNvdWxkIG5v dCBmZG9wZW4gb2xkIHBpZGZpbGU6ICVzKCVkKSIsAAkJCWlmICghZikgewAJCQlmID0gZmRvcGVu KGZkLCAiciIpOwAJCQkgKi8ACQkJICogZGVsZXRpbmcgdGhlIHBpZCBmaWxlIGZvciB0aGUgYWxy ZWFkeS1ydW5uaW5nIGluc3RhbmNlLgAJCQkgKiBiYWNrZ3JvdW5kLiAgTXVjayB3aXRoIHRoZSBm aWxlbmFtZSBzbyB0aGF0IHdlIGRvbid0IGdvAA0KXCBQYXMgZGUgZmluIGRlIGxpZ25lIMOgIGxh IGZpbiBkdSBmaWNoaWVyLg0KZGlmZiAtTmF1ciBwYW5kLm9yaWcvcGFuZC4xIHBhbmQubmV3L3Bh bmQuMQ0KLS0tIHBhbmQub3JpZy9wYW5kLjEJMjAwNi0wNi0wNCAxNTowNTozNi4wMDAwMDAwMDAg KzAyMDANCisrKyBwYW5kLm5ldy9wYW5kLjEJMjAwNi0xMS0wMiAxMDo1ODozMS4wMDAwMDAwMDAg KzAxMDANCkBAIC02Niw2ICs2Niw5IEBADQogXGZCXC1cLWRldnVwXGZSIFxmQlwtdSA8c2NyaXB0 PlxmUg0KIFNjcmlwdCB0byBydW4gd2hlbiBpbnRlcmZhY2UgY29tZXMgdXANCiAuVFANCitcZkJc LVwtZGV2ZG93blxmUiBcZkJcLW8gPHNjcmlwdD5cZlINCitTY3JpcHQgdG8gcnVuIHdoZW4gaW50 ZXJmYWNlIGNvbWVzIGRvd24uIFRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgd2l0aCBcZklkZXZpY2Vc ZlIgXGZJZGVzdGluYXRpb25cZlIgYXMgYXJndW1lbnRzLg0KKy5UUA0KIFxmQlwtXC1hdXRvemFw XGZSIFxmQlwtelxmUg0KIERpc2Nvbm5lY3QgYXV0b21hdGljYWxseSBvbiBleGl0DQogDQo= --=-d5Dn9630ri/GhcUsQAzh Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 --=-d5Dn9630ri/GhcUsQAzh Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel --=-d5Dn9630ri/GhcUsQAzh--