From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46191) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a19Nm-0001S5-Uu for qemu-devel@nongnu.org; Tue, 24 Nov 2015 03:55:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a19Nh-0008KI-TZ for qemu-devel@nongnu.org; Tue, 24 Nov 2015 03:55:26 -0500 Message-ID: <1448355312.4574.66.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Tue, 24 Nov 2015 19:55:12 +1100 In-Reply-To: <20151124032050.GG26118@voom.fritz.box> References: <1447201710-10229-1-git-send-email-benh@kernel.crashing.org> <1447201710-10229-28-git-send-email-benh@kernel.crashing.org> <20151124032050.GG26118@voom.fritz.box> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH 27/77] ppc/pnv: Add XSCOM infrastructure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org T24gVHVlLCAyMDE1LTExLTI0IGF0IDE0OjIwICsxMTAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+IA0KPiA+ICtzdGF0aWMgdWludDMyX3QgeHNjb21fdG9fcGNiX2FkZHIodWludDY0X3Qg YWRkcikNCj4gPiArew0KPiA+ICvCoMKgwqDCoMKgwqDCoCBhZGRyICY9IChYU0NPTV9TSVpF IC0gMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAoKGFkZHIgPj4gNCkgJiB+MHhm dWxsKSB8ICgoYWRkciA+PiAzKSAmIDB4Zik7DQo+IA0KPiBXb3csIHRoYXQncyBhIHByZXR0 eSB3ZWlyZCBhZGRyZXNzIHRyYW5zZm9ybS4NCg0KSW5kZWVkIDotKSBUaGF0J3MgaG93IGl0 IGlzIGluIEhXLiBJdCdzIGFsc28gYSBiaXQgZGlmZmVyZW50IGJldHdlZW4NCmNoaXAgZ2Vu ZXJhdGlvbnMuDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNjb21fY29t cGxldGUodWludDY0X3QgaG1lcl9iaXRzKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoCBDUFVTdGF0 ZSAqY3MgPSBjdXJyZW50X2NwdTsNCj4gPiArwqDCoMKgIFBvd2VyUENDUFUgKmNwdSA9IFBP V0VSUENfQ1BVKGNzKTsNCj4gPiArwqDCoMKgIENQVVBQQ1N0YXRlICplbnYgPSAmY3B1LT5l bnY7DQo+ID4gKw0KPiA+ICvCoMKgwqAgY3B1X3N5bmNocm9uaXplX3N0YXRlKGNzKTsNCj4g PiArwqDCoMKgIGVudi0+c3ByW1NQUl9ITUVSXSB8PSBobWVyX2JpdHM7DQo+ID4gKw0KPiA+ ICvCoMKgwqAgLyogWFhYIE5lZWQgYSBDUFUgaGVscGVyIHRvIHNldCBITUVSLCBhbHNvIGhh bmRsZSBnbmVlcmF0aW9uDQo+ID4gK8KgwqDCoMKgICogb2YgSE1Jcw0KPiANCj4gTm90IHN1 cmUgd2hhdCB5b3UncmUgcmVmZXJyaW5nIHRvIGhlcmUuwqAgTm90aGluZyBtb3JlIHNob3Vs ZCBiZQ0KPiBuZWVkZWQgdG8gc2V0IHRoZSBITUVSIC0gYmVjYXVzZSB5b3UndmUgY2FsbGVk DQo+IGNwdV9zeW5jaHJvbml6ZV9zdGF0ZSgpIGl0IHdpbGwgYmUgbWFya2VkIGRpcnR5IGFu ZCBmbHVzaGVkIGJhY2sgdG8NCj4gS1ZNIGJlZm9yZSByZS1lbnRyeS4NCg0KTm8gaXQncyBu b3QgdGhhdC4gU2V0dGluZyBITUVSIGNhbiBwb3RlbnRpYWxseSBnZW5lcmF0ZSBhbiBITUkN CmludGVycnVwdCAoaWYgZW5hYmxlZCBpbiBITUVFUikuIFdlIG5ldmVyIHVzZSB0aGUgaW50 ZXJydXB0DQpjb3JyZXNwb25kaW5nIHRvIFhTQ09NcyBpbiBGVyB0aG91Z2gsIHNvIHRoYXQn cyB3aHkgSSBoYXZlbid0IGJvdGhlcmVkDQp5ZXQuDQoNCj4gPiArwqDCoMKgwqAgKi8NCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIFhTY29tRGV2aWNlICp4c2NvbV9maW5kX3Rhcmdl dChYU2NvbVN0YXRlICpzLCB1aW50MzJfdCBwY2JfYWRkciwgdWludDMyX3QgKnJhbmdlKQ0K PiA+ICt7DQo+ID4gK8KgwqDCoCBCdXNDaGlsZCAqYmM7DQo+ID4gKw0KPiA+ICvCoMKgwqAg UVRBSUxRX0ZPUkVBQ0goYmMsICZzLT5idXMtPmJ1cy5jaGlsZHJlbiwgc2libGluZykgew0K PiA+ICvCoMKgwqDCoMKgwqDCoCBEZXZpY2VTdGF0ZSAqcWQgPSBiYy0+Y2hpbGQ7DQo+ID4g K8KgwqDCoMKgwqDCoMKgIFhTY29tRGV2aWNlICp4ZCA9IFhTQ09NX0RFVklDRShxZCk7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArwqDCoMKg wqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IE1BWF9YU0NPTV9SQU5HRVM7IGkrKykgew0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh4ZC0+cmFuZ2VzW2ldLmFkZHIgPD0gcGNi X2FkZHIgJiYNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh4ZC0+cmFu Z2VzW2ldLmFkZHIgKyB4ZC0+cmFuZ2VzW2ldLnNpemUpID4gcGNiX2FkZHIpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpyYW5nZSA9IGk7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4geGQ7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQ0KPiA+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4gK8KgwqDCoCB9DQo+ IA0KPiBJJ20gd29uZGVyaW5nIGlmIGl0IG1ha2VzIHNlbnNlIHRvIGNvbnN0cnVjdCBhIGN1 c3RvbSBBZGRyZXNzU3BhY2UNCj4gYW5kDQo+IHVzZSB0aGUgZXhpc3RpbmcgYWRkcmVzcyBz cGFjZSBsb29rdXAgbG9naWMgZnJvbSBleGVjLmMgYW5kIG1lbW9yeS5jDQo+IHJhdGhlciB0 aGFuIGltcGxlbWVudGluZyB5b3VyIG93bi4NCg0KTWF5YmUgYnV0IHdlJ2QgdGhlbiBoYXZl IHRvIHNoaWZ0IGV2ZXJ5dGhpbmcgYnkgMyBiaXRzLCB3aGljaCBtZWFucyB0aGUNCiJYU0NP TSBhZGRyZXNzZXMiIHdvdWxkIG5vIGxvbmdlciBtYXRjaCB0aGUgZG9jIHVubGVzcyB3ZSB1 c2Ugc29tZSBraW5kDQpvZiBtYWNybyB0byBkbyB0aGUgc2hpZnRpbmcuDQoNCj4gPiArwqDC oMKgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB4c2Nv bV9kaXNwYXRjaF9yZWFkKFhTY29tU3RhdGUgKnMsIHVpbnQzMl90IHBjYl9hZGRyLCB1aW50 NjRfdCAqb3V0X3ZhbCkNCj4gPiArew0KPiA+ICvCoMKgwqAgdWludDMyX3QgcmFuZ2UsIG9m ZnNldDsNCj4gPiArwqDCoMKgIHN0cnVjdCBYU2NvbURldmljZSAqeGQgPSB4c2NvbV9maW5k X3RhcmdldChzLCBwY2JfYWRkciwgJnJhbmdlKTsNCj4gPiArwqDCoMKgIFhTY29tRGV2aWNl Q2xhc3MgKnhjOw0KPiA+ICsNCj4gPiArwqDCoMKgIGlmICgheGQpIHsNCj4gPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGZhbHNlOw0KPiA+ICvCoMKgwqAgfQ0KPiA+ICvCoMKgwqAgeGMg PSBYU0NPTV9ERVZJQ0VfR0VUX0NMQVNTKHhkKTsNCj4gPiArwqDCoMKgIGlmICgheGMtPnJl YWQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOw0KPiA+ICvCoMKgwqAg fQ0KPiA+ICvCoMKgwqAgb2Zmc2V0ID0gcGNiX2FkZHIgLSB4ZC0+cmFuZ2VzW3JhbmdlXS5h ZGRyOw0KPiA+ICvCoMKgwqAgcmV0dXJuIHhjLT5yZWFkKHhkLCByYW5nZSwgb2Zmc2V0LCBv dXRfdmFsKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgeHNjb21fZGlzcGF0 Y2hfd3JpdGUoWFNjb21TdGF0ZSAqcywgdWludDMyX3QgcGNiX2FkZHIsIHVpbnQ2NF90IHZh bCkNCj4gPiArew0KPiA+ICvCoMKgwqAgdWludDMyX3QgcmFuZ2UsIG9mZnNldDsNCj4gPiAr wqDCoMKgIHN0cnVjdCBYU2NvbURldmljZSAqeGQgPSB4c2NvbV9maW5kX3RhcmdldChzLCBw Y2JfYWRkciwgJnJhbmdlKTsNCj4gPiArwqDCoMKgIFhTY29tRGV2aWNlQ2xhc3MgKnhjOw0K PiA+ICsNCj4gPiArwqDCoMKgIGlmICgheGQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIGZhbHNlOw0KPiA+ICvCoMKgwqAgfQ0KPiA+ICvCoMKgwqAgeGMgPSBYU0NPTV9ERVZJ Q0VfR0VUX0NMQVNTKHhkKTsNCj4gPiArwqDCoMKgIGlmICgheGMtPndyaXRlKSB7DQo+ID4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4gPiArwqDCoMKgIH0NCj4gPiArwqDC oMKgIG9mZnNldCA9IHBjYl9hZGRyIC0geGQtPnJhbmdlc1tyYW5nZV0uYWRkcjsNCj4gPiAr wqDCoMKgIHJldHVybiB4Yy0+d3JpdGUoeGQsIHJhbmdlLCBvZmZzZXQsIHZhbCk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB1aW50NjRfdCB4c2NvbV9yZWFkKHZvaWQgKm9wYXF1 ZSwgaHdhZGRyIGFkZHIsIHVuc2lnbmVkIHdpZHRoKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoCBY U2NvbVN0YXRlICpzID0gb3BhcXVlOw0KPiA+ICvCoMKgwqAgdWludDMyX3QgcGNiYSA9IHhz Y29tX3RvX3BjYl9hZGRyKGFkZHIpOw0KPiA+ICvCoMKgwqAgdWludDY0X3QgdmFsOw0KPiA+ ICsNCj4gPiArwqDCoMKgIGFzc2VydCh3aWR0aCA9PSA4KTsNCj4gPiArDQo+ID4gKyNpZmRl ZiBUUkFDRV9TQ09NUw0KPiA+ICvCoMKgwqAgcHJpbnRmKCJYU0NPTV9SRUFEKDB4JXg6MHgl eClcbiIsIHMtPmNoaXBfaWQsIHBjYmEpOw0KPiA+ICsjZW5kaWYNCj4gDQo+IFlvdSBzaG91 bGQgYmUgdXNpbmcgdGhlIGJ1aWx0IGluIHRyYWNlIGluZnJhc3RydWN0dXJlIGhlcmUgLSBp dCdzDQo+IHJlYWxseSBub3QgdGhhdCBtdWNoIG9mIGEgcGFpbi7CoCBQdXQNCj4gwqDCoMKg wqDCoMKgwqDCoHRyYWNlX3hzY29tX3JlYWQocy0+Y2hpcF9pZCwgcGNiYSkNCj4gaGVyZSwg cHV0IGEgc3VpdGFibGUgZm9ybWF0IGluIHRyYWNlLWV2ZW50cywgYW5kIC4vY29uZmlndXJl DQo+IC0tZW5hYmxlLXRyYWNlLWJhY2tlbmRzPXN0ZGVycg0KDQpJJ2xsIGludmVzdGlnYXRl IHRoaXMuDQoNCj4gPiArDQo+ID4gK8KgwqDCoCAvKiBIYW5kbGUgc29tZSBTQ09NcyBoZXJl IGJlZm9yZSBkaXNwYXRjaCAqLw0KPiA+ICvCoMKgwqAgc3dpdGNoKHBjYmEpIHsNCj4gPiAr wqDCoMKgIGNhc2UgMHhmMDAwZjoNCj4gPiArwqDCoMKgwqDCoMKgwqAgdmFsID0gMHgyMjFF RjA0OTgwMDAwMDAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gPiArwqDCoMKg IGNhc2UgMHgxMDEwYzAwOsKgwqDCoMKgIC8qIFBJQkFNIEZJUiAqLw0KPiA+ICvCoMKgwqAg Y2FzZSAweDEwMTBjMDM6wqDCoMKgwqAgLyogUElCQU0gRklSIE1BU0sgKi8NCj4gPiArwqDC oMKgIGNhc2UgMHgyMDIwMDA3OsKgwqDCoMKgIC8qIEFEVSBzdHVmZiAqLw0KPiA+ICvCoMKg wqAgY2FzZSAweDIwMjAwMDk6wqDCoMKgwqAgLyogQURVIHN0dWZmICovDQo+ID4gK8KgwqDC oCBjYXNlIDB4MjAyMDAwZjrCoMKgwqDCoCAvKiBBRFUgc3R1ZmYgKi8NCj4gPiArwqDCoMKg wqDCoMKgwqAgdmFsID0gMDsNCj4gPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ID4gK8Kg wqDCoCBjYXNlIDB4MjAxM2YwMDrCoMKgwqDCoCAvKiBQQkEgc3R1ZmYgKi8NCj4gPiArwqDC oMKgIGNhc2UgMHgyMDEzZjAxOsKgwqDCoMKgIC8qIFBCQSBzdHVmZiAqLw0KPiA+ICvCoMKg wqAgY2FzZSAweDIwMTNmMDI6wqDCoMKgwqAgLyogUEJBIHN0dWZmICovDQo+ID4gK8KgwqDC oCBjYXNlIDB4MjAxM2YwMzrCoMKgwqDCoCAvKiBQQkEgc3R1ZmYgKi8NCj4gPiArwqDCoMKg IGNhc2UgMHgyMDEzZjA0OsKgwqDCoMKgIC8qIFBCQSBzdHVmZiAqLw0KPiA+ICvCoMKgwqAg Y2FzZSAweDIwMTNmMDU6wqDCoMKgwqAgLyogUEJBIHN0dWZmICovDQo+ID4gK8KgwqDCoCBj YXNlIDB4MjAxM2YwNjrCoMKgwqDCoCAvKiBQQkEgc3R1ZmYgKi8NCj4gPiArwqDCoMKgIGNh c2UgMHgyMDEzZjA3OsKgwqDCoMKgIC8qIFBCQSBzdHVmZiAqLw0KPiA+ICvCoMKgwqDCoMKg wqDCoCB2YWwgPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gPiArwqDCoMKg IGRlZmF1bHQ6DQo+ID4gK8KgwqDCoMKgwqDCoMKgIGlmICgheHNjb21fZGlzcGF0Y2hfcmVh ZChzLCBwY2JhLCAmdmFsKSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhzY29t X2NvbXBsZXRlKEhNRVJfWFNDT01fRkFJTCB8IEhNRVJfWFNDT01fRE9ORSk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+ID4gK8KgwqDCoMKgwqDCoMKgIH0N Cj4gPiArwqDCoMKgIH0NCj4gPiArDQo+ID4gK8KgwqDCoCB4c2NvbV9jb21wbGV0ZShITUVS X1hTQ09NX0RPTkUpOw0KPiA+ICvCoMKgwqAgcmV0dXJuIHZhbDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgeHNjb21fd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRk ciwgdWludDY0X3QgdmFsLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIHdpZHRoKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoCBY U2NvbVN0YXRlICpzID0gb3BhcXVlOw0KPiA+ICvCoMKgwqAgdWludDMyX3QgcGNiYSA9IHhz Y29tX3RvX3BjYl9hZGRyKGFkZHIpOw0KPiA+ICsNCj4gPiArwqDCoMKgIGFzc2VydCh3aWR0 aCA9PSA4KTsNCj4gPiArDQo+ID4gKyNpZmRlZiBUUkFDRV9TQ09NUw0KPiA+ICvCoMKgwqAg cHJpbnRmKCJYU0NPTV9XUklURSgweCV4OjB4JXgsIDB4JTAxNmxseClcbiIsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIHMtPmNoaXBfaWQsIHBjYmEsICh1bnNpZ25lZCBsb25nIGxv bmcpdmFsKTsNCj4gPiArI2VuZGlmDQo+ID4gK8KgwqDCoCAvKiBIYW5kbGUgc29tZSBTQ09N cyBoZXJlIGJlZm9yZSBkaXNwYXRjaCAqLw0KPiA+ICvCoMKgwqAgc3dpdGNoKHBjYmEpIHsN Cj4gPiArwqDCoMKgwqDCoMKgwqAgLyogV2UgaWdub3JlIHdyaXRlcyB0byB0aGVzZSAqLw0K PiA+ICvCoMKgwqAgY2FzZSAweGYwMDBmOsKgwqDCoMKgwqDCoCAvKiBjaGlwIGlkIGlzIFJP ICovDQo+ID4gK8KgwqDCoCBjYXNlIDB4MTAxMGMwMDrCoMKgwqDCoCAvKiBQSUJBTSBGSVIg Ki8NCj4gPiArwqDCoMKgIGNhc2UgMHgxMDEwYzAxOsKgwqDCoMKgIC8qIFBJQkFNIEZJUiAq Lw0KPiA+ICvCoMKgwqAgY2FzZSAweDEwMTBjMDI6wqDCoMKgwqAgLyogUElCQU0gRklSICov DQo+ID4gK8KgwqDCoCBjYXNlIDB4MTAxMGMwMzrCoMKgwqDCoCAvKiBQSUJBTSBGSVIgTUFT SyAqLw0KPiA+ICvCoMKgwqAgY2FzZSAweDEwMTBjMDQ6wqDCoMKgwqAgLyogUElCQU0gRklS IE1BU0sgKi8NCj4gPiArwqDCoMKgIGNhc2UgMHgxMDEwYzA1OsKgwqDCoMKgIC8qIFBJQkFN IEZJUiBNQVNLICovDQo+ID4gK8KgwqDCoCBjYXNlIDB4MjAyMDAwNzrCoMKgwqDCoCAvKiBB RFUgc3R1ZmYgKi8NCj4gPiArwqDCoMKgIGNhc2UgMHgyMDIwMDA5OsKgwqDCoMKgIC8qIEFE VSBzdHVmZiAqLw0KPiA+ICvCoMKgwqAgY2FzZSAweDIwMjAwMGY6wqDCoMKgwqAgLyogQURV IHN0dWZmICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiA+ICvCoMKgwqAgZGVm YXVsdDoNCj4gPiArwqDCoMKgwqDCoMKgwqAgaWYgKCF4c2NvbV9kaXNwYXRjaF93cml0ZShz LCBwY2JhLCB2YWwpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeHNjb21fY29t cGxldGUoSE1FUl9YU0NPTV9GQUlMIHwgSE1FUl9YU0NPTV9ET05FKTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+ID4gK8KgwqDCoMKgwqDCoMKgIH0NCj4gPiAr wqDCoMKgIH0NCj4gPiArDQo+ID4gK8KgwqDCoCB4c2NvbV9jb21wbGV0ZShITUVSX1hTQ09N X0RPTkUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgTWVtb3J5UmVnaW9u T3BzIHhzY29tX29wcyA9IHsNCj4gPiArwqDCoMKgIC5yZWFkID0geHNjb21fcmVhZCwNCj4g PiArwqDCoMKgIC53cml0ZSA9IHhzY29tX3dyaXRlLA0KPiA+ICvCoMKgwqAgLnZhbGlkLm1p bl9hY2Nlc3Nfc2l6ZSA9IDgsDQo+ID4gK8KgwqDCoCAudmFsaWQubWF4X2FjY2Vzc19zaXpl ID0gOCwNCj4gPiArwqDCoMKgIC5pbXBsLm1pbl9hY2Nlc3Nfc2l6ZSA9IDgsDQo+ID4gK8Kg wqDCoCAuaW1wbC5tYXhfYWNjZXNzX3NpemUgPSA4LA0KPiA+ICvCoMKgwqAgLmVuZGlhbm5l c3MgPSBERVZJQ0VfQklHX0VORElBTiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgeHNjb21faW5pdChTeXNCdXNEZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICvCoMKgwqAg WFNjb21TdGF0ZSAqcyA9IFhTQ09NKGRldik7DQo+ID4gKw0KPiA+ICvCoMKgwqAgcy0+Y2hp cF9pZCA9IC0xOw0KPiA+ICvCoMKgwqAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHhzY29tX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKipl cnJwKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoCBTeXNCdXNEZXZpY2UgKnNiZCA9IFNZU19CVVNf REVWSUNFKGRldik7DQo+ID4gK8KgwqDCoCBYU2NvbVN0YXRlICpzID0gWFNDT00oZGV2KTsN Cj4gPiArwqDCoMKgIGNoYXIgKm5hbWU7DQo+ID4gKw0KPiA+ICvCoMKgwqAgYXNzZXJ0KHMt PmNoaXBfaWQgPj0gMCk7DQo+IA0KPiBTbywgdGhpcyBhc3NlcnQgY291bGQgYmUgdHJpcHBl ZCBpZiB0aGUgdXNlciBleHBsaWNpdGx5IGluc3RhbnRpYXRlZA0KPiBhbiB4c2NvbSBkZXZp Y2Ugd2hpY2ggdGhleSBwcm9iYWJseSBzaG91bGRuJ3QgZG8sIGJ1dCBjb3VsZC7CoCBTbywg aXQNCj4gcHJvYmFibHkgbWFrZXMgc2Vuc2UgdG8gdXNlIGVycm9yX3NldGcoKSBoZXJlIGlu c3RlYWQgb2YgYXNzZXJ0KCkuDQoNCk5vIGlkZWEgd2hhdCBlcnJvcl9zZXRnKCkgaXMsIEkn bGwgbG9vayBpbnRvIGl0IDopDQoNCj4gPiArwqDCoMKgIG5hbWUgPSBnX3N0cmR1cF9wcmlu dGYoInhzY29tLSV4Iiwgcy0+Y2hpcF9pZCk7DQo+ID4gK8KgwqDCoCBtZW1vcnlfcmVnaW9u X2luaXRfaW8oJnMtPm1lbSwgT0JKRUNUKHMpLCAmeHNjb21fb3BzLCBzLCBuYW1lLA0KPiBY U0NPTV9TSVpFKTsNCj4gPiArwqDCoMKgIHN5c2J1c19pbml0X21taW8oc2JkLCAmcy0+bWVt KTsNCj4gPiArwqDCoMKgIHN5c2J1c19tbWlvX21hcChzYmQsIDAsIFhTQ09NX0JBU0Uocy0+ Y2hpcF9pZCkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgUHJvcGVydHkgeHNjb21f cHJvcGVydGllc1tdID0gew0KPiA+ICvCoMKgwqDCoMKgwqDCoCBERUZJTkVfUFJPUF9JTlQz MigiY2hpcF9pZCIsIFhTY29tU3RhdGUsIGNoaXBfaWQsIDApLA0KPiA+ICvCoMKgwqDCoMKg wqDCoCBERUZJTkVfUFJPUF9FTkRfT0ZfTElTVCgpLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgeHNjb21fY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqa2xhc3MsIHZvaWQg KmRhdGEpDQo+ID4gK3sNCj4gPiArwqDCoMKgIFN5c0J1c0RldmljZUNsYXNzICprID0gU1lT X0JVU19ERVZJQ0VfQ0xBU1Moa2xhc3MpOw0KPiA+ICvCoMKgwqAgRGV2aWNlQ2xhc3MgKmRj ID0gREVWSUNFX0NMQVNTKGtsYXNzKTsNCj4gPiArDQo+ID4gK8KgwqDCoCBkYy0+cHJvcHMg PSB4c2NvbV9wcm9wZXJ0aWVzOw0KPiA+ICvCoMKgwqAgZGMtPnJlYWxpemUgPSB4c2NvbV9y ZWFsaXplOw0KPiA+ICvCoMKgwqAgay0+aW5pdCA9IHhzY29tX2luaXQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBUeXBlSW5mbyB4c2NvbV9pbmZvID0gew0KPiA+ICvC oMKgwqAgLm5hbWXCoMKgwqDCoMKgwqDCoMKgwqAgPSBUWVBFX1hTQ09NLA0KPiA+ICvCoMKg wqAgLnBhcmVudMKgwqDCoMKgwqDCoMKgID0gVFlQRV9TWVNfQlVTX0RFVklDRSwNCj4gPiAr wqDCoMKgIC5pbnN0YW5jZV9zaXplID0gc2l6ZW9mKFhTY29tU3RhdGUpLA0KPiA+ICvCoMKg wqAgLmNsYXNzX2luaXTCoMKgwqAgPSB4c2NvbV9jbGFzc19pbml0LA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgeHNjb21fYnVzX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3Mg KmtsYXNzLCB2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBUeXBlSW5mbyB4c2NvbV9idXNfaW5mbyA9IHsNCj4gPiArwqDCoMKgIC5uYW1l ID0gVFlQRV9YU0NPTV9CVVMsDQo+ID4gK8KgwqDCoCAucGFyZW50ID0gVFlQRV9CVVMsDQo+ ID4gK8KgwqDCoCAuY2xhc3NfaW5pdCA9IHhzY29tX2J1c19jbGFzc19pbml0LA0KPiA+ICvC oMKgwqAgLmluc3RhbmNlX3NpemUgPSBzaXplb2YoWFNjb21CdXMpLA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArdm9pZCB4c2NvbV9jcmVhdGUoUG52Q2hpcCAqY2hpcCkNCj4gPiArew0KPiA+ ICvCoMKgwqAgRGV2aWNlU3RhdGUgKmRldjsNCj4gPiArwqDCoMKgIFhTY29tU3RhdGUgKnhk ZXY7DQo+ID4gK8KgwqDCoCBCdXNTdGF0ZSAqcWJ1czsNCj4gPiArwqDCoMKgIFhTY29tQnVz ICp4YjsNCj4gPiArDQo+ID4gK8KgwqDCoCBkZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCBUWVBF X1hTQ09NKTsNCj4gPiArwqDCoMKgIHFkZXZfcHJvcF9zZXRfdWludDMyKGRldiwgImNoaXBf aWQiLCBjaGlwLT5jaGlwX2lkKTsNCj4gPiArwqDCoMKgIHFkZXZfaW5pdF9ub2ZhaWwoZGV2 KTsNCj4gPiArDQo+ID4gK8KgwqDCoCAvKiBDcmVhdGUgYnVzIG9uIGJyaWRnZSBkZXZpY2Ug Ki8NCj4gPiArwqDCoMKgIHFidXMgPSBxYnVzX2NyZWF0ZShUWVBFX1hTQ09NX0JVUywgZGV2 LCAieHNjb20iKTsNCj4gPiArwqDCoMKgIHhiID0gRE9fVVBDQVNUKFhTY29tQnVzLCBidXMs IHFidXMpOw0KPiA+ICvCoMKgwqAgeGItPmNoaXBfaWQgPSBjaGlwLT5jaGlwX2lkOw0KPiA+ ICvCoMKgwqAgeGRldiA9IFhTQ09NKGRldik7DQo+ID4gK8KgwqDCoCB4ZGV2LT5idXMgPSB4 YjsNCj4gPiArwqDCoMKgIGNoaXAtPnhzY29tID0geGI7DQo+IA0KPiBJIGJlbGlldmUgdGhl IHFidXNfY3JlYXRlKCkgaXMgdXN1YWxseSBpbnZva2VkIGJ5IHRoZSBicmlkZ2UncyBpbml0 DQo+IGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBleHRlcm5hbGx5Lg0KDQpJbml0IG9yIHJlYWxp emUgPw0KDQpDaGVlcnMsDQpCZW4uDQoNCg==