From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JZiZC-0007KN-Rx for qemu-devel@nongnu.org; Thu, 13 Mar 2008 04:13:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JZiZ7-0007Gw-U2 for qemu-devel@nongnu.org; Thu, 13 Mar 2008 04:13:34 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JZiZ7-0007GZ-OO for qemu-devel@nongnu.org; Thu, 13 Mar 2008 04:13:29 -0400 Received: from smtp7-g19.free.fr ([212.27.42.64]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JZiZ7-0007tt-Hy for qemu-devel@nongnu.org; Thu, 13 Mar 2008 04:13:29 -0400 Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id 16FBF32285C for ; Thu, 13 Mar 2008 09:13:27 +0100 (CET) Received: from [127.0.0.1] (rob92-4-82-225-201-66.fbx.proxad.net [82.225.201.66]) by smtp7-g19.free.fr (Postfix) with ESMTP id 8D54832283A for ; Thu, 13 Mar 2008 09:13:26 +0100 (CET) Message-ID: <47D8E224.5080206@reactos.org> Date: Thu, 13 Mar 2008 09:13:24 +0100 From: =?ISO-8859-1?Q?Herv=E9_Poussineau?= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050903040308020609050502" Subject: [Qemu-devel] [PATCH] ds1225y nvram: Fix some bugs [v2] Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------050903040308020609050502 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Attached files fixes some problems with nvram emulation: - whole nvram was erased in some conditions - fix out of range accesses - improve reading speed by keeping contents in memory Changelog v1 to v2 - rename capacity to chip_size - write nvram contents during initialization only the first time Thanks Aurelien for your comments. Herv=E9 --------------050903040308020609050502 Content-Type: text/plain; name="ds1225y_v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="ds1225y_v2.patch" SW5kZXg6IGh3L2RzMTIyNXkuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9zb3VyY2Vz L3FlbXUvcWVtdS9ody9kczEyMjV5LmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRp ZmYgLXUgLXIxLjQgaHcvZHMxMjI1eS5jDQotLS0gaHcvZHMxMjI1eS5jCTEzIE1hciAyMDA4 IDAxOjE5OjE1IC0wMDAwCTEuNA0KKysrIGh3L2RzMTIyNXkuYwkxMyBNYXIgMjAwOCAwNzo0 MToxNSAtMDAwMA0KQEAgLTEsOCArMSw4IEBADQogLyoNCiAgKiBRRU1VIE5WUkFNIGVtdWxh dGlvbiBmb3IgRFMxMjI1WSBjaGlwDQotICogDQotICogQ29weXJpZ2h0IChjKSAyMDA3IEhl cnbpIFBvdXNzaW5lYXUNCi0gKiANCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4 IEhlcnbpIFBvdXNzaW5lYXUNCisgKg0KICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCiAg KiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KICAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMN CkBAIC0yNiw5OCArMjYsMTY5IEBADQogI2luY2x1ZGUgIm1pcHMuaCINCiAjaW5jbHVkZSAi bnZyYW0uaCINCiANCi10eXBlZGVmIGVudW0NCi17DQotICAgIG5vbmUgPSAwLA0KLSAgICBy ZWFkbW9kZSwNCi0gICAgd3JpdGVtb2RlLA0KLX0gbnZyYW1fb3Blbl9tb2RlOw0KKy8vI2Rl ZmluZSBERUJVR19OVlJBTQ0KIA0KLXN0cnVjdCBkczEyMjV5X3QNCit0eXBlZGVmIHN0cnVj dCBkczEyMjV5X3QNCiB7DQogICAgIHRhcmdldF9waHlzX2FkZHJfdCBtZW1fYmFzZTsNCi0g ICAgdWludDMyX3QgY2FwYWNpdHk7DQotICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOw0KKyAg ICB1aW50MzJfdCBjaGlwX3NpemU7DQogICAgIFFFTVVGaWxlICpmaWxlOw0KLSAgICBudnJh bV9vcGVuX21vZGUgb3Blbl9tb2RlOw0KLX07DQorICAgIHVpbnQ4X3QgKmNvbnRlbnRzOw0K KyAgICB1aW50OF90IHByb3RlY3Rpb247DQorfSBkczEyMjV5X3Q7DQogDQotc3RhdGljIGlu dCBkczEyMjV5X3NldF90b19tb2RlKGRzMTIyNXlfdCAqTlZSQU0sIG52cmFtX29wZW5fbW9k ZSBtb2RlLCBjb25zdCBjaGFyICpmaWxlbW9kZSkNCi17DQotICAgIGlmIChOVlJBTS0+b3Bl bl9tb2RlICE9IG1vZGUpDQotICAgIHsNCi0gICAgICAgIGlmIChOVlJBTS0+ZmlsZSkNCi0g ICAgICAgICAgICBxZW11X2ZjbG9zZShOVlJBTS0+ZmlsZSk7DQotICAgICAgICBOVlJBTS0+ ZmlsZSA9IHFlbXVfZm9wZW4oTlZSQU0tPmZpbGVuYW1lLCBmaWxlbW9kZSk7DQotICAgICAg ICBOVlJBTS0+b3Blbl9tb2RlID0gbW9kZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKE5WUkFN LT5maWxlICE9IE5VTEwpOw0KLX0NCiANCiBzdGF0aWMgdWludDMyX3QgbnZyYW1fcmVhZGIg KHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpDQogew0KLSAgICBkczEy MjV5X3QgKk5WUkFNID0gb3BhcXVlOw0KKyAgICBkczEyMjV5X3QgKnMgPSBvcGFxdWU7DQog ICAgIGludDY0X3QgcG9zOw0KKyAgICB1aW50MzJfdCB2YWw7DQorDQorICAgIHBvcyA9IGFk ZHIgLSBzLT5tZW1fYmFzZTsNCisgICAgaWYgKHBvcyA+PSBzLT5jaGlwX3NpemUpDQorICAg ICAgICBwb3MgLT0gcy0+Y2hpcF9zaXplOw0KKw0KKyAgICB2YWwgPSBzLT5jb250ZW50c1tw b3NdOw0KKw0KKyNpZmRlZiBERUJVR19OVlJBTQ0KKyAgICBwcmludGYoIm52cmFtOiByZWFk IDB4JXggYXQgIiBUQVJHRVRfRk1UX2x4ICJcbiIsIHZhbCwgYWRkcik7DQorI2VuZGlmDQor ICAgIHJldHVybiB2YWw7DQorfQ0KIA0KLSAgICBwb3MgPSBhZGRyIC0gTlZSQU0tPm1lbV9i YXNlOw0KLSAgICBpZiAoYWRkciA+PSBOVlJBTS0+Y2FwYWNpdHkpDQotICAgICAgICBhZGRy IC09IE5WUkFNLT5jYXBhY2l0eTsNCitzdGF0aWMgdWludDMyX3QgbnZyYW1fcmVhZHcgKHZv aWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpDQorew0KKyAgICB1aW50MzJf dCB2Ow0KKyAgICB2ID0gbnZyYW1fcmVhZGIob3BhcXVlLCBhZGRyKTsNCisgICAgdiB8PSBu dnJhbV9yZWFkYihvcGFxdWUsIGFkZHIgKyAxKSA8PCA4Ow0KKyAgICByZXR1cm4gdjsNCit9 DQogDQotICAgIGlmICghZHMxMjI1eV9zZXRfdG9fbW9kZShOVlJBTSwgcmVhZG1vZGUsICJy YiIpKQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIHFlbXVfZnNlZWsoTlZSQU0tPmZpbGUs IHBvcywgU0VFS19TRVQpOw0KLSAgICByZXR1cm4gKHVpbnQzMl90KXFlbXVfZ2V0X2J5dGUo TlZSQU0tPmZpbGUpOw0KK3N0YXRpYyB1aW50MzJfdCBudnJhbV9yZWFkbCAodm9pZCAqb3Bh cXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikNCit7DQorICAgIHVpbnQzMl90IHY7DQor ICAgIHYgPSBudnJhbV9yZWFkYihvcGFxdWUsIGFkZHIpOw0KKyAgICB2IHw9IG52cmFtX3Jl YWRiKG9wYXF1ZSwgYWRkciArIDEpIDw8IDg7DQorICAgIHYgfD0gbnZyYW1fcmVhZGIob3Bh cXVlLCBhZGRyICsgMikgPDwgMTY7DQorICAgIHYgfD0gbnZyYW1fcmVhZGIob3BhcXVlLCBh ZGRyICsgMykgPDwgMjQ7DQorICAgIHJldHVybiB2Ow0KIH0NCiANCi1zdGF0aWMgdm9pZCBu dnJhbV93cml0ZWIgKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVp bnQzMl90IHZhbHVlKQ0KK3N0YXRpYyB2b2lkIG52cmFtX3dyaXRlYiAodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KIHsNCi0gICAgZHMx MjI1eV90ICpOVlJBTSA9IG9wYXF1ZTsNCisgICAgZHMxMjI1eV90ICpzID0gb3BhcXVlOw0K ICAgICBpbnQ2NF90IHBvczsNCiANCi0gICAgcG9zID0gYWRkciAtIE5WUkFNLT5tZW1fYmFz ZTsNCi0gICAgaWYgKGRzMTIyNXlfc2V0X3RvX21vZGUoTlZSQU0sIHdyaXRlbW9kZSwgIndi IikpDQotICAgIHsNCi0gICAgICAgIHFlbXVfZnNlZWsoTlZSQU0tPmZpbGUsIHBvcywgU0VF S19TRVQpOw0KLSAgICAgICAgcWVtdV9wdXRfYnl0ZShOVlJBTS0+ZmlsZSwgKGludCl2YWx1 ZSk7DQorI2lmZGVmIERFQlVHX05WUkFNDQorICAgIHByaW50ZigibnZyYW06IHdyaXRlIDB4 JXggYXQgIiBUQVJHRVRfRk1UX2x4ICJcbiIsIHZhbCwgYWRkcik7DQorI2VuZGlmDQorDQor ICAgIHBvcyA9IGFkZHIgLSBzLT5tZW1fYmFzZTsNCisgICAgcy0+Y29udGVudHNbcG9zXSA9 IHZhbCAmIDB4ZmY7DQorICAgIGlmIChzLT5maWxlKSB7DQorICAgICAgICBxZW11X2ZzZWVr KHMtPmZpbGUsIHBvcywgU0VFS19TRVQpOw0KKyAgICAgICAgcWVtdV9wdXRfYnl0ZShzLT5m aWxlLCAoaW50KXZhbCk7DQorICAgICAgICBxZW11X2ZmbHVzaChzLT5maWxlKTsNCisgICAg fQ0KK30NCisNCitzdGF0aWMgdm9pZCBudnJhbV93cml0ZXcgKHZvaWQgKm9wYXF1ZSwgdGFy Z2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQzMl90IHZhbCkNCit7DQorICAgIG52cmFtX3dy aXRlYihvcGFxdWUsIGFkZHIsIHZhbCAmIDB4ZmYpOw0KKyAgICBudnJhbV93cml0ZWIob3Bh cXVlLCBhZGRyICsgMSwgKHZhbCA+PiA4KSAmIDB4ZmYpOw0KK30NCisNCitzdGF0aWMgdm9p ZCBudnJhbV93cml0ZWwgKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIs IHVpbnQzMl90IHZhbCkNCit7DQorICAgIG52cmFtX3dyaXRlYihvcGFxdWUsIGFkZHIsIHZh bCAmIDB4ZmYpOw0KKyAgICBudnJhbV93cml0ZWIob3BhcXVlLCBhZGRyICsgMSwgKHZhbCA+ PiA4KSAmIDB4ZmYpOw0KKyAgICBudnJhbV93cml0ZWIob3BhcXVlLCBhZGRyICsgMiwgKHZh bCA+PiAxNikgJiAweGZmKTsNCisgICAgbnZyYW1fd3JpdGViKG9wYXF1ZSwgYWRkciArIDMs ICh2YWwgPj4gMjQpICYgMHhmZik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG52cmFtX3dyaXRl Yl9wcm90ZWN0ZWQgKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVp bnQzMl90IHZhbCkNCit7DQorICAgIGRzMTIyNXlfdCAqcyA9IG9wYXF1ZTsNCisNCisgICAg aWYgKHMtPnByb3RlY3Rpb24gIT0gNykgew0KKyNpZmRlZiBERUJVR19OVlJBTQ0KKyAgICBw cmludGYoIm52cmFtOiBwcmV2ZW50IHdyaXRlIG9mIDB4JXggYXQgIiBUQVJHRVRfRk1UX2x4 ICJcbiIsIHZhbCwgYWRkcik7DQorI2VuZGlmDQorICAgICAgICByZXR1cm47DQogICAgIH0N CisNCisgICAgbnZyYW1fd3JpdGViKG9wYXF1ZSwgYWRkciAtIHMtPmNoaXBfc2l6ZSwgdmFs KTsNCit9DQorDQorc3RhdGljIHZvaWQgbnZyYW1fd3JpdGV3X3Byb3RlY3RlZCAodm9pZCAq b3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KK3sNCisg ICAgbnZyYW1fd3JpdGViX3Byb3RlY3RlZChvcGFxdWUsIGFkZHIsIHZhbCAmIDB4ZmYpOw0K KyAgICBudnJhbV93cml0ZWJfcHJvdGVjdGVkKG9wYXF1ZSwgYWRkciArIDEsICh2YWwgPj4g OCkgJiAweGZmKTsNCit9DQorDQorc3RhdGljIHZvaWQgbnZyYW1fd3JpdGVsX3Byb3RlY3Rl ZCAodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFs KQ0KK3sNCisgICAgbnZyYW1fd3JpdGViX3Byb3RlY3RlZChvcGFxdWUsIGFkZHIsIHZhbCAm IDB4ZmYpOw0KKyAgICBudnJhbV93cml0ZWJfcHJvdGVjdGVkKG9wYXF1ZSwgYWRkciArIDEs ICh2YWwgPj4gOCkgJiAweGZmKTsNCisgICAgbnZyYW1fd3JpdGViX3Byb3RlY3RlZChvcGFx dWUsIGFkZHIgKyAyLCAodmFsID4+IDE2KSAmIDB4ZmYpOw0KKyAgICBudnJhbV93cml0ZWJf cHJvdGVjdGVkKG9wYXF1ZSwgYWRkciArIDMsICh2YWwgPj4gMjQpICYgMHhmZik7DQogfQ0K IA0KIHN0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqbnZyYW1fcmVhZFtdID0gew0KICAgICAm bnZyYW1fcmVhZGIsDQotICAgIE5VTEwsDQotICAgIE5VTEwsDQorICAgICZudnJhbV9yZWFk dywNCisgICAgJm52cmFtX3JlYWRsLA0KIH07DQogDQogc3RhdGljIENQVVdyaXRlTWVtb3J5 RnVuYyAqbnZyYW1fd3JpdGVbXSA9IHsNCiAgICAgJm52cmFtX3dyaXRlYiwNCi0gICAgTlVM TCwNCi0gICAgTlVMTCwNCisgICAgJm52cmFtX3dyaXRldywNCisgICAgJm52cmFtX3dyaXRl bCwNCiB9Ow0KIA0KLXN0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKm52cmFtX25vbmVbXSA9 IHsNCi0gICAgTlVMTCwNCi0gICAgTlVMTCwNCi0gICAgTlVMTCwNCitzdGF0aWMgQ1BVV3Jp dGVNZW1vcnlGdW5jICpudnJhbV93cml0ZV9wcm90ZWN0ZWRbXSA9IHsNCisgICAgJm52cmFt X3dyaXRlYl9wcm90ZWN0ZWQsDQorICAgICZudnJhbV93cml0ZXdfcHJvdGVjdGVkLA0KKyAg ICAmbnZyYW1fd3JpdGVsX3Byb3RlY3RlZCwNCiB9Ow0KIA0KIC8qIEluaXRpYWxpc2F0aW9u IHJvdXRpbmUgKi8NCi1kczEyMjV5X3QgKmRzMTIyNXlfaW5pdCh0YXJnZXRfcGh5c19hZGRy X3QgbWVtX2Jhc2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQ0KK3ZvaWQgKmRzMTIyNXlfaW5p dCh0YXJnZXRfcGh5c19hZGRyX3QgbWVtX2Jhc2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQ0K IHsNCiAgICAgZHMxMjI1eV90ICpzOw0KLSAgICBpbnQgbWVtX2luZGV4MSwgbWVtX2luZGV4 MjsNCisgICAgaW50IG1lbV9pbmRleFJXLCBtZW1faW5kZXhSUDsNCisgICAgUUVNVUZpbGUg KmZpbGU7DQogDQogICAgIHMgPSBxZW11X21hbGxvY3ooc2l6ZW9mKGRzMTIyNXlfdCkpOw0K ICAgICBpZiAoIXMpDQogICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgcy0+Y2hpcF9zaXpl ID0gMHgyMDAwOyAvKiBGaXhlZCBmb3IgZHMxMjI1eSBjaGlwOiA4IEtpQiAqLw0KKyAgICBz LT5jb250ZW50cyA9IHFlbXVfbWFsbG9jeihzLT5jaGlwX3NpemUpOw0KKyAgICBpZiAoIXMt PmNvbnRlbnRzKSB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KICAgICBzLT5t ZW1fYmFzZSA9IG1lbV9iYXNlOw0KLSAgICBzLT5jYXBhY2l0eSA9IDB4MjAwMDsgLyogRml4 ZWQgZm9yIGRzMTIyNXkgY2hpcDogOEsgKi8NCi0gICAgcy0+ZmlsZW5hbWUgPSBmaWxlbmFt ZTsNCisgICAgcy0+cHJvdGVjdGlvbiA9IDc7DQorDQorICAgIC8qIFJlYWQgY3VycmVudCBm aWxlICovDQorICAgIGZpbGUgPSBxZW11X2ZvcGVuKGZpbGVuYW1lLCAicmIiKTsNCisgICAg aWYgKGZpbGUpIHsNCisgICAgICAgIC8qIFJlYWQgbnZyYW0gY29udGVudHMgKi8NCisgICAg ICAgIHFlbXVfZ2V0X2J1ZmZlcihmaWxlLCBzLT5jb250ZW50cywgcy0+Y2hpcF9zaXplKTsN CisgICAgICAgIHFlbXVfZmNsb3NlKGZpbGUpOw0KKyAgICB9DQorICAgIHMtPmZpbGUgPSBx ZW11X2ZvcGVuKGZpbGVuYW1lLCAid2IiKTsNCisgICAgaWYgKCFmaWxlICYmIHMtPmZpbGUp IHsNCisgICAgICAgIC8qIEZpcnN0IHRpbWUgd2UgdXNlIHRoZSBudnJhbTsgc3RvcmUgZW1w dHkgY29udGVudCB0byBkaXNrICovDQorICAgICAgICBxZW11X3B1dF9idWZmZXIocy0+Zmls ZSwgcy0+Y29udGVudHMsIHMtPmNoaXBfc2l6ZSk7DQorICAgICAgICBxZW11X2ZmbHVzaChz LT5maWxlKTsNCisgICAgfQ0KIA0KICAgICAvKiBSZWFkL3dyaXRlIG1lbW9yeSAqLw0KLSAg ICBtZW1faW5kZXgxID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBudnJhbV9yZWFkLCBu dnJhbV93cml0ZSwgcyk7DQotICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkobWVt X2Jhc2UsIHMtPmNhcGFjaXR5LCBtZW1faW5kZXgxKTsNCi0gICAgLyogUmVhZC1vbmx5IG1l bW9yeSAqLw0KLSAgICBtZW1faW5kZXgyID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBu dnJhbV9yZWFkLCBudnJhbV9ub25lLCBzKTsNCi0gICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2Fs X21lbW9yeShtZW1fYmFzZSArIHMtPmNhcGFjaXR5LCBzLT5jYXBhY2l0eSwgbWVtX2luZGV4 Mik7DQorICAgIG1lbV9pbmRleFJXID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBudnJh bV9yZWFkLCBudnJhbV93cml0ZSwgcyk7DQorICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9t ZW1vcnkobWVtX2Jhc2UsIHMtPmNoaXBfc2l6ZSwgbWVtX2luZGV4UlcpOw0KKyAgICAvKiBS ZWFkL3dyaXRlIHByb3RlY3RlZCBtZW1vcnkgKi8NCisgICAgbWVtX2luZGV4UlAgPSBjcHVf cmVnaXN0ZXJfaW9fbWVtb3J5KDAsIG52cmFtX3JlYWQsIG52cmFtX3dyaXRlX3Byb3RlY3Rl ZCwgcyk7DQorICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkobWVtX2Jhc2UgKyBz LT5jaGlwX3NpemUsIHMtPmNoaXBfc2l6ZSwgbWVtX2luZGV4UlApOw0KICAgICByZXR1cm4g czsNCiB9DQpJbmRleDogaHcvbWlwcy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Nv dXJjZXMvcWVtdS9xZW11L2h3L21pcHMuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0K ZGlmZiAtdSAtcjEuMSBody9taXBzLmgNCi0tLSBody9taXBzLmgJMTcgTm92IDIwMDcgMTc6 MTQ6NDMgLTAwMDAJMS4xDQorKysgaHcvbWlwcy5oCTEgTWFyIDIwMDggMjI6MDc6MzcgLTAw MDANCkBAIC02LDggKzYsOCBAQA0KIFBDSUJ1cyAqcGNpX2d0NjQxMjBfaW5pdChxZW11X2ly cSAqcGljKTsNCiANCiAvKiBkczEyMjV5LmMgKi8NCi10eXBlZGVmIHN0cnVjdCBkczEyMjV5 X3QgZHMxMjI1eV90Ow0KLWRzMTIyNXlfdCAqZHMxMjI1eV9pbml0KHRhcmdldF9waHlzX2Fk ZHJfdCBtZW1fYmFzZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOw0KK3ZvaWQgKmRzMTIyNXlf aW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgbWVtX2Jhc2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KTsNCit2b2lkIGRzMTIyNXlfc2V0X3Byb3RlY3Rpb24odm9pZCAqb3BhcXVlLCBpbnQgcHJv dGVjdGlvbik7DQogDQogLyogZzM2NGZiLmMgKi8NCiBpbnQgZzM2NGZiX21tX2luaXQoRGlz cGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3ZyYW1fYmFzZSw= --------------050903040308020609050502--