From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Ser, Simon" Date: Fri, 12 Jul 2019 11:40:48 +0000 Message-ID: References: <296f249138cb4f55466294b07a7aba25801ff146.1560374714.git.rodrigosiqueiramelo@gmail.com> <7eca4f4def5f732d1f9269e2c75eca8da62a78b2.camel@intel.com> <20190712024435.bed52lodxms6rz7y@smtp.gmail.com> In-Reply-To: <20190712024435.bed52lodxms6rz7y@smtp.gmail.com> Content-Language: en-US Content-ID: <8AF2BA1BA5BE5F4F9FB59613B52845AB@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH V6 i-g-t 2/6] kms_writeback: Add initial writeback tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "rodrigosiqueiramelo@gmail.com" Cc: "Latvala, Petri" , "intel-gfx@lists.freedesktop.org" , "Liviu.Dudau@arm.com" , "igt-dev@lists.freedesktop.org" , "daniel@ffwll.ch" , "nd@arm.com" , "Brian.Starkey@arm.com" List-ID: T24gVGh1LCAyMDE5LTA3LTExIGF0IDIzOjQ0IC0wMzAwLCBSb2RyaWdvIFNpcXVlaXJhIHdyb3Rl Og0KPiBPbiAwNy8xMCwgU2VyLCBTaW1vbiB3cm90ZToNCj4gPiBIaSwNCj4gPiANCj4gPiBUaGFu a3MgZm9yIHRoZSBwYXRjaCEgSGVyZSBhcmUgYSBmZXcgY29tbWVudHMuDQo+ID4gDQo+ID4gRm9y IGJvbnVzIHBvaW50cywgaXQgd291bGQgYmUgbmljZSB0byBhZGQgaWd0X2Rlc2NyaWJlIGRlc2Ny aXB0aW9ucyBvZg0KPiA+IGVhY2ggc3ViLXRlc3QuDQo+IA0KPiBIaSBTaW1vbiwNCj4gDQo+IEZp cnN0IG9mIGFsbCwgdGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrOyBJIGFscmVhZHkgYXBwbGllZCBt b3N0IG9mIHlvdXINCj4gc3VnZ2VzdGlvbnMuIEkganVzdCBoYXZlIHNvbWUgaW5saW5lIGNvbW1l bnRzL3F1ZXN0aW9ucy4NCj4gIA0KPiA+IE9uIFdlZCwgMjAxOS0wNi0xMiBhdCAyMzoxNiAtMDMw MCwgQnJpYW4gU3RhcmtleSB3cm90ZToNCj4gPiA+IEFkZCB0ZXN0cyBmb3IgdGhlIFdSSVRFQkFD S19QSVhFTF9GT1JNQVRTLCBXUklURUJBQ0tfT1VUX0ZFTkNFX1BUUiBhbmQNCj4gPiA+IFdSSVRF QkFDS19GQl9JRCBwcm9wZXJ0aWVzIG9uIHdyaXRlYmFjayBjb25uZWN0b3JzLCBlbnN1cmluZyB0 aGVpcg0KPiA+ID4gYmVoYXZpb3VyIGlzIGNvcnJlY3QuDQo+ID4gPiANCj4gPiA+IFNpZ25lZC1v ZmYtYnk6IEJyaWFuIFN0YXJrZXkgPGJyaWFuLnN0YXJrZXlAYXJtLmNvbT4NCj4gPiA+IFtyZWJh c2VkIGFuZCB1cGRhdGVkIGRvX3dyaXRlYmFja190ZXN0KCkgZnVuY3Rpb24gdG8gYWRkcmVzcyBm ZWVkYmFja10NCj4gPiA+IFNpZ25lZC1vZmYtYnk6IExpdml1IER1ZGF1IDxsaXZpdS5kdWRhdUBh cm0uY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSAr DQo+ID4gPiAgdGVzdHMva21zX3dyaXRlYmFjay5jICB8IDMxNCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gIHRlc3RzL21lc29uLmJ1aWxkICAgICAgfCAg IDEgKw0KPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzE2IGluc2VydGlvbnMoKykNCj4gPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3dyaXRlYmFjay5jDQo+ID4gPiANCj4gPiA+IGRp ZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cw0KPiA+ID4gaW5kZXggMDI3ZWQ4MmYuLjAzY2M4ZWZhIDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVz dHMvTWFrZWZpbGUuc291cmNlcw0KPiA+ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcw0K PiA+ID4gQEAgLTc3LDYgKzc3LDcgQEAgVEVTVFNfcHJvZ3MgPSBcDQo+ID4gPiAgCWttc191bml2 ZXJzYWxfcGxhbmUgXA0KPiA+ID4gIAlrbXNfdmJsYW5rIFwNCj4gPiA+ICAJa21zX3ZyciBcDQo+ ID4gPiArCWttc193cml0ZWJhY2sgXA0KPiA+ID4gIAltZXRhX3Rlc3QgXA0KPiA+ID4gIAlwZXJm IFwNCj4gPiA+ICAJcGVyZl9wbXUgXA0KPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc193cml0 ZWJhY2suYyBiL3Rlc3RzL2ttc193cml0ZWJhY2suYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwLi42NmVmNDhhNg0KPiA+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ID4gKysrIGIvdGVzdHMva21zX3dyaXRlYmFjay5jDQo+ID4gPiBAQCAtMCwwICsxLDMxNCBA QA0KPiA+ID4gKy8qDQo+ID4gPiArICogKEMpIENPUFlSSUdIVCAyMDE3IEFSTSBMaW1pdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ID4gKyAqDQo+ID4gPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEN Cj4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiA+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24N Cj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCj4gPiA+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOg0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0K PiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gPiA+ICsgKiBTb2Z0d2FyZS4NCj4gPiA+ICsg Kg0KPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+ID4gPiArICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks DQo+ID4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+ID4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIN Cj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KPiA+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MN Cj4gPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuDQo+ID4gPiArICoNCj4gPiA+ICsgKi8NCj4gPiA+ ICsNCj4gPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5o Pg0KPiA+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4N Cj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSAiaWd0LmgiDQo+ID4gPiArI2luY2x1ZGUgImlndF9j b3JlLmgiDQo+ID4gPiArI2luY2x1ZGUgImlndF9mYi5oIg0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyBkcm1Nb2RlUHJvcGVydHlCbG9iUmVzICpnZXRfd3JpdGViYWNrX2Zvcm1hdHNfYmxvYihpZ3Rf b3V0cHV0X3QgKm91dHB1dCkNCj4gPiA+ICt7DQo+ID4gPiArCWRybU1vZGVQcm9wZXJ0eUJsb2JS ZXMgKmJsb2IgPSBOVUxMOw0KPiA+ID4gKwl1aW50NjRfdCBibG9iX2lkOw0KPiA+ID4gKwlpbnQg cmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBrbXN0ZXN0X2dldF9wcm9wZXJ0eShvdXRwdXQt PmRpc3BsYXktPmRybV9mZCwNCj4gPiA+ICsJCQkJICAgb3V0cHV0LT5jb25maWcuY29ubmVjdG9y LT5jb25uZWN0b3JfaWQsDQo+ID4gPiArCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1Is DQo+ID4gPiArCQkJCSAgIGlndF9jb25uZWN0b3JfcHJvcF9uYW1lc1tJR1RfQ09OTkVDVE9SX1dS SVRFQkFDS19QSVhFTF9GT1JNQVRTXSwNCj4gPiA+ICsJCQkJICAgTlVMTCwgJmJsb2JfaWQsIE5V TEwpOw0KPiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gKwkJYmxvYiA9IGRybU1vZGVHZXRQcm9wZXJ0 eUJsb2Iob3V0cHV0LT5kaXNwbGF5LT5kcm1fZmQsIGJsb2JfaWQpOw0KPiA+ID4gKw0KPiA+ID4g KwlpZ3RfYXNzZXJ0KGJsb2IpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gYmxvYjsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGJvb2wgY2hlY2tfd3JpdGViYWNrX2NvbmZpZyhp Z3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkNCj4gPiA+ICt7DQo+ ID4gPiArCWlndF9mYl90IGlucHV0X2ZiLCBvdXRwdXRfZmI7DQo+ID4gPiArCWlndF9wbGFuZV90 ICpwbGFuZTsNCj4gPiA+ICsJdWludDMyX3Qgd3JpdGViYWNrX2Zvcm1hdCA9IERSTV9GT1JNQVRf WFJHQjg4ODg7DQo+ID4gPiArCXVpbnQ2NF90IHRpbGluZyA9IGlndF9mYl9tb2RfdG9fdGlsaW5n KDApOw0KPiA+ID4gKwlpbnQgd2lkdGgsIGhlaWdodCwgcmV0Ow0KPiA+ID4gKwlkcm1Nb2RlTW9k ZUluZm8gb3ZlcnJpZGVfbW9kZSA9IHsNCj4gPiA+ICsJCS5jbG9jayA9IDI1MTc1LA0KPiA+ID4g KwkJLmhkaXNwbGF5ID0gNjQwLA0KPiA+ID4gKwkJLmhzeW5jX3N0YXJ0ID0gNjU2LA0KPiA+ID4g KwkJLmhzeW5jX2VuZCA9IDc1MiwNCj4gPiA+ICsJCS5odG90YWwgPSA4MDAsDQo+ID4gPiArCQku aHNrZXcgPSAwLA0KPiA+ID4gKwkJLnZkaXNwbGF5ID0gNDgwLA0KPiA+ID4gKwkJLnZzeW5jX3N0 YXJ0ID0gNDkwLA0KPiA+ID4gKwkJLnZzeW5jX2VuZCA9IDQ5MiwNCj4gPiA+ICsJCS52dG90YWwg PSA1MjUsDQo+ID4gPiArCQkudnNjYW4gPSAwLA0KPiA+ID4gKwkJLnZyZWZyZXNoID0gNjAsDQo+ ID4gPiArCQkuZmxhZ3MgPSBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZT WU5DLA0KPiA+ID4gKwkJLm5hbWUgPSB7IjY0MHg0ODAtNjAifSwNCj4gPiA+ICsJfTsNCj4gPiA+ ICsJaWd0X291dHB1dF9vdmVycmlkZV9tb2RlKG91dHB1dCwgJm92ZXJyaWRlX21vZGUpOw0KPiA+ ID4gKw0KPiA+ID4gKwl3aWR0aCA9IG92ZXJyaWRlX21vZGUuaGRpc3BsYXk7DQo+ID4gPiArCWhl aWdodCA9IG92ZXJyaWRlX21vZGUudmRpc3BsYXk7DQo+ID4gPiArDQo+ID4gPiArCXJldCA9IGln dF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCB3aWR0aCwgaGVpZ2h0LCBEUk1fRk9STUFUX1hS R0I4ODg4LCB0aWxpbmcsICZpbnB1dF9mYik7DQo+ID4gPiArCWlndF9hc3NlcnQocmV0ID49IDAp Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwg d2lkdGgsIGhlaWdodCwgd3JpdGViYWNrX2Zvcm1hdCwgdGlsaW5nLCAmb3V0cHV0X2ZiKTsNCj4g PiA+ICsJaWd0X2Fzc2VydChyZXQgPj0gMCk7DQo+ID4gPiArDQo+ID4gPiArCXBsYW5lID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOw0K PiA+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmaW5wdXRfZmIpOw0KPiA+ID4gKwlpZ3Rf b3V0cHV0X3NldF93cml0ZWJhY2tfZmIob3V0cHV0LCAmb3V0cHV0X2ZiKTsNCj4gPiA+ICsNCj4g PiA+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01P REVfQVRPTUlDX1RFU1RfT05MWSB8DQo+ID4gPiArCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX0FM TE9XX01PREVTRVQsIE5VTEwpOw0KPiA+IA0KPiA+IE9rYXksIHdlJ3JlIHVzaW5nIGF0b21pYyB0 ZXN0LW9ubHkgbW9kZSB0byBrbm93IGlmIHdlIGNhbiBwZXJmb3JtIHRlc3RzDQo+ID4gd2l0aCB0 aGUgd3JpdGViYWNrIG91dHB1dC4gSXQncyBwcm9iYWJseSBmaW5lLCBidXQgd2UgZG9uJ3QgdXNl DQo+ID4gV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMsIHdoaWNoIG1ha2VzIG1lIGEgbGl0dGxlIGJp dCBzYWQuDQo+IA0KPiBTb3JyeSwgSSBkaWQgbm90IGZ1bGx5IHVuZGVyc3RhbmQgcGFydC4gRGlk IHlvdSBleHBlY3QgdG8gc2VlIHNvbWV0aGluZw0KPiBsaWtlIHRoZSBiZWxvdyBjb2RlIGJlZm9y ZSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygpPw0KPiANCj4gIGlndF9vdXRwdXRfc2V0 X3Byb3BfdmFsdWUob3V0cHV0LCBXUklURUJBQ0tfUElYRUxfRk9STUFUUywNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCk7DQoNCkhtbSwgbm8sIHdlIGNh bm5vdCBjaGFuZ2UgdGhlIGxpc3Qgb2Ygd3JpdGViYWNrIGZvcm1hdHMgKGl0J3MNCmltbXV0YWJs ZSkuDQoNClRoaXMgY29tbWVudCBkb2Vzbid0IHJlcXVpcmUgYW55IGFjdGlvbiwgaXQncyBqdXN0 IG1lIHRoaW5raW5nIGFsb3VkIDpQDQoNCkknbSBqdXN0IHRoaW5raW5nIHRoYXQgaXQgd291bGQg YmUgbmljZSB0byBjaG9vc2Ugb3VyIGZvcm1hdCBkZXBlbmRpbmcNCm9uIHRoZSBXUklURUJBQ0tf UElYRUxfRk9STUFUUyBwcm9wZXJ0eS4gQW5kIHByb2JhYmx5IHJ1biB0ZXN0cyB3aXRoDQplYWNo IHN1cHBvcnRlZCBmb3JtYXQgKG9yLCBhbHRlcm5hdGl2ZWx5LCBjaG9vc2UgYSByYW5kb20gb25l KS4gVGhhdA0Kd2F5IHdlIGNhbiBtYWtlIHN1cmUgV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMgaXNu J3QgYnJva2VuLg0KDQpIb3dldmVyLCB0aGlzIGNhbiBiZSBsZWZ0IGZvciBhIGxhdGVyIHBhdGNo Lg0KDQo+ID4gPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOw0KPiA+ID4gKwlpZ3Rf cmVtb3ZlX2ZiKGRpc3BsYXktPmRybV9mZCwgJmlucHV0X2ZiKTsNCj4gPiA+ICsJaWd0X3JlbW92 ZV9mYihkaXNwbGF5LT5kcm1fZmQsICZvdXRwdXRfZmIpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1 cm4gIXJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGlndF9vdXRwdXRfdCAq a21zX3dyaXRlYmFja19nZXRfb3V0cHV0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpDQo+ID4gPiAr ew0KPiA+ID4gKwlpbnQgaTsNCj4gPiA+ICsNCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGRpc3Bs YXktPm5fb3V0cHV0czsgaSsrKSB7DQo+ID4gPiArCQlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9ICZk aXNwbGF5LT5vdXRwdXRzW2ldOw0KPiA+ID4gKwkJaW50IGo7DQo+ID4gPiArDQo+ID4gPiArCQlp ZiAob3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9D T05ORUNUT1JfV1JJVEVCQUNLKQ0KPiA+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ID4gKw0KPiA+ID4g KwkJa21zdGVzdF9mb3JjZV9jb25uZWN0b3IoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZp Zy5jb25uZWN0b3IsIEZPUkNFX0NPTk5FQ1RPUl9PTik7DQo+ID4gDQo+ID4gSG1tLiBJcyB0aGlz IHJlYWxseSBuZWNlc3Nhcnk/ICJSZWFsIiB1c2Vyc3BhY2Ugd29uJ3QgZG8gdGhpcywgc28gSQ0K PiA+IGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gZWl0aGVyLg0KPiANCj4gSG1tbSwgSSBoYXZlIGEg bGl0dGxlIGV4cGVyaWVuY2Ugd2l0aCB1c2Vyc3BhY2U7IGhvd2V2ZXIsIEkgdGVzdGVkDQo+IGtt c193cml0ZWJhY2sgb24gdG9wIG9mIHZrbXMgd2l0aG91dCB0aGlzIGxpbmUsIGFuZCBldmVyeXRo aW5nIHdvcmtlZA0KPiB3ZWxsLiBJZiBJIHJlbW92ZSB0aGlzIGxpbmUsIHNob3VsZCBJIGFsc28g ZHJvcCB0aGUgbGluZSB0aGF0IGZvcmNlDQo+IGNvbm5lY3RvciB0byBGT1JDRV9DT05ORUNUT1Jf VU5TUEVDSUZJRUQ/DQoNCkkgYmVsaWV2ZSBzby4NCg0KPiBBbm90aGVyIHF1ZXN0aW9uLCBpZiBG T1JDRV9DT05ORUNUT1JfT04gaXMgc29tZXRoaW5nIHRoYXQgdXNlcnNwYWNlDQo+IHdvbid0IHdh bnQgdG8gZG8sIHdoeSBkbyB3ZSBoYXZlIGl0Pw0KDQpXZSB1c2Uga21zdGVzdF9mb3JjZV9jb25u ZWN0b3IgaW4gaW5qZWN0aW9uIHRlc3RzOiB0aG9zZSBwaWNrIGENCmRpc2Nvbm5lY3RlZCBIRE1J IGNvbm5lY3RvciBhbmQgdHJpY2sgdGhlIGtlcm5lbCBpbnRvIHRoaW5raW5nIGl0J3MNCmNvbm5l Y3RlZC4gV2UgZ2VuZXJhbGx5IGFsc28gZm9yY2UgYW4gRURJRCBhbmQgdGhpcyBpcyB1c2VkIHRv IGVtdWxhdGUNCmEgc2NyZWVuIChlLmcuIGEgc2NyZWVuIHRoYXQgc3VwcG9ydHMgYXVkaW8sIDRL IG9yIDNEKS4NCg0KVGhpcyBpcyBvbmx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcgdGhv dWdoLCBoZW5jZSAicmVhbCB1c2Vyc3BhY2UNCnNob3VsZG4ndCB1c2UgaXQiLg0KDQo+ID4gPiAr CQlmb3IgKGogPSAwOyBqIDwgaWd0X2Rpc3BsYXlfZ2V0X25fcGlwZXMoZGlzcGxheSk7IGorKykg ew0KPiA+ID4gKwkJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBqKTsNCj4gPiA+ICsNCj4g PiA+ICsJCQlpZiAoY2hlY2tfd3JpdGViYWNrX2NvbmZpZyhkaXNwbGF5LCBvdXRwdXQpKSB7DQo+ ID4gPiArCQkJCWlndF9kZWJ1ZygiVXNpbmcgY29ubmVjdG9yICV1OiVzIG9uIHBpcGUgJWRcbiIs DQo+ID4gPiArCQkJCQkgIG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkLA0K PiA+ID4gKwkJCQkJICBvdXRwdXQtPm5hbWUsIGopOw0KPiA+ID4gKwkJCQlyZXR1cm4gb3V0cHV0 Ow0KPiA+ID4gKwkJCX0NCj4gPiANCj4gPiBXZSBjb3VsZCBwcm9iYWJseSBhZGQgYW4gaWd0X2Rl YnVnIHN0YXRlbWVudCBpbiBjYXNlIHdlIGRvbid0IHVzZSB0aGlzDQo+ID4gd3JpdGViYWNrIG91 dHB1dC4NCj4gPiANCj4gPiA+ICsJCX0NCj4gPiA+ICsNCj4gPiA+ICsJCS8qIFJlc3RvcmUgYW55 IGNvbm5lY3RvcnMgd2UgZG9uJ3QgdXNlLCBzbyB3ZSBkb24ndCB0cmlwIG9uIHRoZW0gbGF0ZXIg Ki8NCj4gPiA+ICsJCWttc3Rlc3RfZm9yY2VfY29ubmVjdG9yKGRpc3BsYXktPmRybV9mZCwgb3V0 cHV0LT5jb25maWcuY29ubmVjdG9yLCBGT1JDRV9DT05ORUNUT1JfVU5TUEVDSUZJRUQpOw0KPiA+ ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiBOVUxMOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgdm9pZCBjaGVja193cml0ZWJhY2tfZmJfaWQoaWd0X291dHB1dF90ICpv dXRwdXQpDQo+ID4gPiArew0KPiA+ID4gKwl1aW50NjRfdCBjaGVja19mYl9pZDsNCj4gPiA+ICsN Cj4gPiA+ICsJY2hlY2tfZmJfaWQgPSBpZ3Rfb3V0cHV0X2dldF9wcm9wKG91dHB1dCwgSUdUX0NP Tk5FQ1RPUl9XUklURUJBQ0tfRkJfSUQpOw0KPiA+ID4gKwlpZ3RfYXNzZXJ0KGNoZWNrX2ZiX2lk ID09IDApOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGRvX3dyaXRlYmFj a190ZXN0KGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1aW50MzJfdCBmbGFncywNCj4gPiA+ICsJCQkg ICAgICB1aW50MzJfdCBmYl9pZCwgaW50MzJfdCAqb3V0X2ZlbmNlX3B0ciwNCj4gPiA+ICsJCQkg ICAgICBib29sIHB0cl92YWxpZCkNCj4gPiANCj4gPiBmbGFncyBzZWVtcyB0byBhbHdheXMgYmUg c2V0IHRvIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULiBXZSBjYW4NCj4gPiBwcm9iYWJs eSByZW1vdmUgdGhlIHBhcmFtZXRlciBmcm9tIHRoaXMgZnVuY3Rpb24uDQo+ID4gDQo+ID4gPiAr ew0KPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gb3V0 cHV0LT5kaXNwbGF5Ow0KPiA+ID4gKwlzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpj b25maWcgPSAmb3V0cHV0LT5jb25maWc7DQo+ID4gPiArDQo+ID4gPiArCWlndF9vdXRwdXRfc2V0 X3Byb3BfdmFsdWUob3V0cHV0LCBJR1RfQ09OTkVDVE9SX0NSVENfSUQsIGNvbmZpZy0+Y3J0Yy0+ Y3J0Y19pZCk7DQo+ID4gPiArCWlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUob3V0cHV0LCBJR1Rf Q09OTkVDVE9SX1dSSVRFQkFDS19GQl9JRCwgZmJfaWQpOw0KPiA+ID4gKwlpZ3Rfb3V0cHV0X3Nl dF9wcm9wX3ZhbHVlKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9XUklURUJBQ0tfT1VUX0ZFTkNFX1BU UiwgKHVpbnQ2NF90KW91dF9mZW5jZV9wdHIpOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAocHRyX3Zh bGlkKQ0KPiA+ID4gKwkJKm91dF9mZW5jZV9wdHIgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXQg PSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBmbGFncywgTlVMTCk7DQo+ ID4gPiArDQo+ID4gPiArCWlmIChwdHJfdmFsaWQpDQo+ID4gPiArCQlpZ3RfYXNzZXJ0KCpvdXRf ZmVuY2VfcHRyID09IC0xKTsNCj4gPiANCj4gPiBJJ20gY29uZnVzZWQuIFdoeSBzaG91bGQgdGhp cyBiZSAtMSBldmVuIGlmIHdlDQo+ID4gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMgc3Vj Y2VlZHM/DQo+IA0KPiBJIGluc3BlY3RlZCB0aGUgZHJtX21vZGVfYXRvbWljX2lvY3RsKCkgZnVu Y3Rpb24gYW5kIEkgbm90aWNlZCB0aGF0IEl0DQo+IGNhbGxzIGNvbXBsZXRlX3NpZ25hbGluZygp IGluIGl0cyB0dXJuIHRoaXMgZnVuY3Rpb24gYXNzaWduIC0xIHRvDQo+IG91dF9mZW5jZV9wdHIu IFNpbmNlIGFsbCBvZiB0aGlzIGhhcHBlbnMgYXQgdGhlIGVuZCBvZiBhdG9taWNfY29tbWl0LCBJ DQo+IGJlbGlldmUgdGhhdCB3ZSBkb27igJl0IG5lZWQgaXQuIEkgYWxyZWFkeSByZW1vdmVkIGl0 Lg0KDQpJIHRoaW5rIEknbSBzdGlsbCBjb25mdXNlZCA6KQ0KDQpJJ20gcHJvYmFibHkgbWlzc2lu ZyBzb21ldGhpbmcuIEFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIHdlIGFyZSBkb2luZyBhbg0KYXRv bWljIGNvbW1pdCwgc29tZXRpbWVzIHdpdGggYSB2YWxpZCBXUklURUJBQ0tfRkJfSUQgYW5kDQpX UklURUJBQ0tfT1VUX0ZFTkNFX1BUUi4gSW4gdGhpcyBjYXNlIGl0IHNob3VsZCBzdGFydCB0aGUg d3JpdGViYWNrDQpwcm9jZXNzIGluIHRoZSBrZXJuZWwgYW5kIHdlIHNob3VsZCBnZXQgYSB2YWxp ZCBvdXRfZmVuY2VfcHRyPw0KDQpXaHkgZG8gd2UgYWx3YXlzIGdldCAtMT8NCg0KPiA+ID4gKwkv KiBXUklURUJBQ0tfRkJfSUQgbXVzdCBhbHdheXMgcmVhZCBhcyB6ZXJvICovDQo+ID4gPiArCWNo ZWNrX3dyaXRlYmFja19mYl9pZChvdXRwdXQpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gcmV0 Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBpbnZhbGlkX291dF9mZW5j ZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X2ZiX3QgKnZhbGlkX2ZiLCBpZ3RfZmJfdCAqaW52 YWxpZF9mYikNCj4gPiA+ICt7DQo+ID4gPiArCWludCBpLCByZXQ7DQo+ID4gPiArCWludDMyX3Qg b3V0X2ZlbmNlOw0KPiA+ID4gKwlzdHJ1Y3Qgew0KPiA+ID4gKwkJdWludDMyX3QgZmJfaWQ7DQo+ ID4gPiArCQlib29sIHB0cl92YWxpZDsNCj4gPiA+ICsJCWludDMyX3QgKm91dF9mZW5jZV9wdHI7 DQo+ID4gPiArCX0gaW52YWxpZF90ZXN0c1tdID0gew0KPiA+ID4gKwkJew0KPiA+ID4gKwkJCS8q IE5vIG91dHB1dCBidWZmZXIsIGJ1dCB0aGUgV1JJVEVCQUNLX09VVF9GRU5DRV9QVFIgc2V0LiAq Lw0KPiA+ID4gKwkJCS5mYl9pZCA9IDAsDQo+ID4gPiArCQkJLnB0cl92YWxpZCA9IHRydWUsDQo+ ID4gPiArCQkJLm91dF9mZW5jZV9wdHIgPSAmb3V0X2ZlbmNlLA0KPiA+ID4gKwkJfSwNCj4gPiA+ ICsJCXsNCj4gPiA+ICsJCQkvKiBJbnZhbGlkIG91dHB1dCBidWZmZXIuICovDQo+ID4gPiArCQkJ LmZiX2lkID0gaW52YWxpZF9mYi0+ZmJfaWQsDQo+ID4gPiArCQkJLnB0cl92YWxpZCA9IHRydWUs DQo+ID4gPiArCQkJLm91dF9mZW5jZV9wdHIgPSAmb3V0X2ZlbmNlLA0KPiA+ID4gKwkJfSwNCj4g PiANCj4gPiBUaGlzIGRvZXNuJ3QgYmVsb25nIGluIHRoaXMgZnVuY3Rpb24gKGludmFsaWRfb3V0 X2ZlbmNlKSwgc2luY2UgdGhpcw0KPiA+IGNoZWNrcyBhbiBpbnZhbGlkIGZyYW1lYnVmZmVyLCBu b3QgYW4gaW52YWxpZCBmZW5jZS4gV2Ugc2hvdWxkIHByb2JhYmx5DQo+ID4gbW92ZSBpdCB0byB3 cml0ZWJhY2tfZmJfaWQgKGFuZCByZW5hbWUgdGhhdCBmdW5jdGlvbiB0byB0ZXN0X2ZiPykuDQo+ ID4gDQo+ID4gPiArCQl7DQo+ID4gPiArCQkJLyogSW52YWxpZCBXUklURUJBQ0tfT1VUX0ZFTkNF X1BUUi4gKi8NCj4gPiA+ICsJCQkuZmJfaWQgPSB2YWxpZF9mYi0+ZmJfaWQsDQo+ID4gPiArCQkJ LnB0cl92YWxpZCA9IGZhbHNlLA0KPiA+ID4gKwkJCS5vdXRfZmVuY2VfcHRyID0gKGludDMyX3Qg KikweDgsDQo+ID4gPiArCQl9LA0KPiA+ID4gKwl9Ow0KPiA+ID4gKw0KPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShpbnZhbGlkX3Rlc3RzKTsgaSsrKSB7DQo+ID4gPiArCQlyZXQg PSBkb193cml0ZWJhY2tfdGVzdChvdXRwdXQsIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VU LA0KPiA+ID4gKwkJCQkJaW52YWxpZF90ZXN0c1tpXS5mYl9pZCwNCj4gPiA+ICsJCQkJCWludmFs aWRfdGVzdHNbaV0ub3V0X2ZlbmNlX3B0ciwNCj4gPiA+ICsJCQkJCWludmFsaWRfdGVzdHNbaV0u cHRyX3ZhbGlkKTsNCj4gPiA+ICsJCWlndF9hc3NlcnQocmV0ICE9IDApOw0KPiA+IA0KPiA+IE1h eWJlIHdlIGNhbiBjaGVjayBmb3IgLXJldCA9PSBFSU5WQUw/DQo+ID4gDQo+ID4gPiArCX0NCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQgd3JpdGViYWNrX2ZiX2lkKGlndF9v dXRwdXRfdCAqb3V0cHV0LCBpZ3RfZmJfdCAqdmFsaWRfZmIsIGlndF9mYl90ICppbnZhbGlkX2Zi KQ0KPiA+IA0KPiA+IGludmFsaWRfZmIgZG9lc24ndCBzZWVtIHRvIGJlIHVzZWQgaGVyZS4gdmFs aWRfZmIgc2VlbXMgdG8gYmUgc2V0IHRvDQo+ID4gdGhlIGlucHV0IGZyYW1lYnVmZmVyLiBJdCdz IHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byB1c2UgdGhlIHNhbWUgRkINCj4gPiBmb3IgaW5w dXQgYW5kIHdyaXRlYmFjayBvdXRwdXQuDQo+ID4gDQo+ID4gPiArew0KPiA+ID4gKw0KPiA+ID4g KwlpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwkvKiBWYWxpZCBvdXRwdXQgYnVmZmVyICovDQo+ ID4gPiArCXJldCA9IGRvX3dyaXRlYmFja190ZXN0KG91dHB1dCwgRFJNX01PREVfQVRPTUlDX0FM TE9XX01PREVTRVQsDQo+ID4gPiArCQkJCXZhbGlkX2ZiLT5mYl9pZCwgTlVMTCwgZmFsc2UpOw0K PiA+ID4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogSW52YWxp ZCBvYmplY3QgZm9yIFdSSVRFQkFDS19GQl9JRCAqLw0KPiA+ID4gKwlyZXQgPSBkb193cml0ZWJh Y2tfdGVzdChvdXRwdXQsIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULA0KPiA+ID4gKwkJ CQlvdXRwdXQtPmlkLCBOVUxMLCBmYWxzZSk7DQo+ID4gPiArCWlndF9hc3NlcnQocmV0ID09IC1F SU5WQUwpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBaZXJvIFdSSVRFQkFDS19GQl9JRCAqLw0KPiA+ ID4gKwlyZXQgPSBkb193cml0ZWJhY2tfdGVzdChvdXRwdXQsIERSTV9NT0RFX0FUT01JQ19BTExP V19NT0RFU0VULA0KPiA+ID4gKwkJCQkwLCBOVUxMLCBmYWxzZSk7DQo+ID4gPiArCWlndF9hc3Nl cnQocmV0ID09IDApOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtpZ3RfbWFpbg0KPiA+ID4g K3sNCj4gPiA+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Ow0KPiA+ID4gKwlpZ3Rfb3V0cHV0X3Qg Km91dHB1dDsNCj4gPiA+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOw0KPiA+ID4gKwlpZ3RfZmJfdCBp bnB1dF9mYjsNCj4gPiA+ICsJZHJtTW9kZU1vZGVJbmZvIG1vZGU7DQo+ID4gPiArCWludCByZXQ7 DQo+ID4gPiArDQo+ID4gPiArCW1lbXNldCgmZGlzcGxheSwgMCwgc2l6ZW9mKGRpc3BsYXkpKTsN Cj4gPiA+ICsNCj4gPiA+ICsJaWd0X2ZpeHR1cmUgew0KPiA+ID4gKwkJZGlzcGxheS5kcm1fZmQg PSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOw0KPiA+ID4gKwkJaWd0X2Rpc3Bs YXlfcmVxdWlyZSgmZGlzcGxheSwgZGlzcGxheS5kcm1fZmQpOw0KPiA+ID4gKw0KPiA+ID4gKwkJ a21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOw0KPiA+ID4gKw0KPiA+ID4gKwkJaWd0X2Rp c3BsYXlfcmVxdWlyZSgmZGlzcGxheSwgZGlzcGxheS5kcm1fZmQpOw0KPiA+ID4gKw0KPiA+ID4g KwkJaWd0X3JlcXVpcmUoZGlzcGxheS5pc19hdG9taWMpOw0KPiA+ID4gKw0KPiA+ID4gKwkJb3V0 cHV0ID0ga21zX3dyaXRlYmFja19nZXRfb3V0cHV0KCZkaXNwbGF5KTsNCj4gPiA+ICsJCWlndF9y ZXF1aXJlKG91dHB1dCk7DQo+ID4gPiArDQo+ID4gPiArCQlpZiAob3V0cHV0LT51c2Vfb3ZlcnJp ZGVfbW9kZSkNCj4gPiA+ICsJCQltZW1jcHkoJm1vZGUsICZvdXRwdXQtPm92ZXJyaWRlX21vZGUs IHNpemVvZihtb2RlKSk7DQo+ID4gPiArCQllbHNlDQo+ID4gPiArCQkJbWVtY3B5KCZtb2RlLCAm b3V0cHV0LT5jb25maWcuZGVmYXVsdF9tb2RlLCBzaXplb2YobW9kZSkpOw0KPiA+ID4gKw0KPiA+ ID4gKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSk7DQo+ID4gPiArCQlpZ3RfcmVxdWlyZShwbGFuZSk7DQo+ID4gDQo+ID4g TWF5YmUgd2UgY2FuIGFzc2VydCBvbiB0aGlzPw0KPiA+IA0KPiA+ID4gKwkJcmV0ID0gaWd0X2Ny ZWF0ZV9mYihkaXNwbGF5LmRybV9mZCwgbW9kZS5oZGlzcGxheSwNCj4gPiA+ICsJCQkJICAgIG1v ZGUudmRpc3BsYXksDQo+ID4gPiArCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiA+ID4g KwkJCQkgICAgaWd0X2ZiX21vZF90b190aWxpbmcoMCksDQo+ID4gDQo+ID4gVGhpcyBpcyBzdXBw b3NlZCB0byB0YWtlIGEgbW9kaWZpZXIuIERSTV9GT1JNQVRfTU9EX0xJTkVBUiB3b3VsZCBiZQ0K PiA+IGJldHRlciB0byBtYWtlIHRoaXMgY2xlYXIuDQo+ID4gDQo+ID4gKEFwcGxpZXMgdG8gb3Ro ZXIgbGluZXMgb2YgdGhpcyBwYXRjaCkNCj4gPiANCj4gPiA+ICsJCQkJICAgICZpbnB1dF9mYik7 DQo+ID4gPiArCQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsNCj4gPiA+ICsJCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsICZpbnB1dF9mYik7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWd0X3N1 YnRlc3QoIndyaXRlYmFjay1waXhlbC1mb3JtYXRzIikgew0KPiA+ID4gKwkJZHJtTW9kZVByb3Bl cnR5QmxvYlJlcyAqZm9ybWF0c19ibG9iID0gZ2V0X3dyaXRlYmFja19mb3JtYXRzX2Jsb2Iob3V0 cHV0KTsNCj4gPiANCj4gPiBOZWVkIHRvIGRybU1vZGVGcmVlUHJvcGVydHlCbG9iIHRoaXMuDQo+ ID4gDQo+ID4gPiArCQljb25zdCBjaGFyICp2YWxpZF9jaGFycyA9ICIwMTIzNDU2IEFCQ0dOUlVW WFkiOw0KPiA+ID4gKwkJdW5zaWduZWQgaW50IGk7DQo+ID4gPiArCQljaGFyICpjOw0KPiA+ID4g Kw0KPiA+ID4gKwkJLyoNCj4gPiA+ICsJCSAqIFdlIGRvbid0IGhhdmUgYSBjb21wcmVoZW5zaXZl IGxpc3Qgb2YgZm9ybWF0cywgc28ganVzdCBjaGVjaw0KPiA+ID4gKwkJICogdGhhdCB0aGUgYmxv YiBsZW5ndGggaXMgc2Vuc2libGUgYW5kIHRoYXQgaXQgZG9lc24ndCBjb250YWluDQo+ID4gPiAr CQkgKiBhbnkgb3V0bGFuZGlzaCBjaGFyYWN0ZXJzDQo+ID4gPiArCQkgKi8NCj4gPiA+ICsJCWln dF9hc3NlcnQoIShmb3JtYXRzX2Jsb2ItPmxlbmd0aCAlIDQpKTsNCj4gPiA+ICsJCWMgPSBmb3Jt YXRzX2Jsb2ItPmRhdGE7DQo+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0c19ibG9iLT5s ZW5ndGg7IGkrKykNCj4gPiA+ICsJCQlpZ3RfYXNzZXJ0X2Yoc3RyY2hyKHZhbGlkX2NoYXJzLCBj W2ldKSwNCj4gPiA+ICsJCQkJICAgICAiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJWNcbiIsIGNbaV0p Ow0KPiA+IA0KPiA+IEhvbmVzdGx5LCBJJ20gbm90IGEgZmFuIG9mIHRoaXMgY2hlY2suIFRoZXJl J3Mgbm8gZ3VhcmFudGVlIHRoYXQgZm91cmNjDQo+ID4gY29kZXMgd2lsbCBiZSBtYWRlIGZyb20g QVNDSUkgY2hhcmFjdGVycywgaW4gZmFjdCBzb21lIGZvcm1hdHMgYWxyZWFkeQ0KPiA+IGhhdmUg bm9uLXByaW50YWJsZSBjaGFycyBpbiB0aGVtLiBJIGRvbid0IHdhbnQgdG8gaGF2ZSB0byB1cGRh dGUgdGhpcw0KPiA+IHRlc3Qgd2hlbiBhIG5ldyBmb3VyY2MgZm9ybWF0IGlzIGFkZGVkLg0KPiA+ IA0KPiA+IFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGEgdGVzdCBmb3IgSU5fRk9STUFUUy4gSWYg d2UgcmVhbGx5IHdhbnQgdG8NCj4gPiBjaGVjayBmb3JtYXRzLCB3ZSBjb3VsZCBoYXZlIGEgYmln IGFycmF5IG9mIGtub3duIGZvcm1hdHMgYW5kIGFkZCBhDQo+ID4gYm9vbCBpc192YWxpZF9mb3Jt YXQodWludDMyX3QgZm10KSBmdW5jdGlvbi4NCj4gDQo+IEFncmVlIHdpdGggeW91LiBIb3cgYWJv dXQgcmVtb3ZlIHRoaXMgdGVzdD8NCg0KSSBndWVzcyB3ZSBjb3VsZCBhbHdheXMga2VlcCB0aGUg bGVuZ3RoICUgNCB0ZXN0LCBldmVuIGlmIGl0J3MganVzdCBhDQpzYW5pdHkgdGVzdC4gQXQgbGVh c3QgdGhpcyBvbmUgd29uJ3QgZXZlciBuZWVkIHRvIGJlIGNoYW5nZWQuDQoNCkkgZG9uJ3QgZmVl bCBzdHJvbmdseSBhYm91dCBpdC4NCg0KPiBUaGFua3MNCj4gQmVzdCBSZWdhcmRzDQo+IA0KPiA+ ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlndF9zdWJ0ZXN0KCJ3cml0ZWJhY2staW52YWxpZC1v dXQtZmVuY2UiKSB7DQo+ID4gPiArCQlpZ3RfZmJfdCBpbnZhbGlkX2ZiOw0KPiA+IA0KPiA+IGlu dmFsaWRfb3V0cHV0X2ZiIHdvdWxkIGJlIGEgYmV0dGVyIG5hbWUgSU1ITy4NCj4gPiANCj4gPiA+ ICsJCXJldCA9IGlndF9jcmVhdGVfZmIoZGlzcGxheS5kcm1fZmQsIG1vZGUuaGRpc3BsYXkgLyAy LA0KPiA+ID4gKwkJCQkgICAgbW9kZS52ZGlzcGxheSAvIDIsDQo+ID4gPiArCQkJCSAgICBEUk1f Rk9STUFUX1hSR0I4ODg4LA0KPiA+ID4gKwkJCQkgICAgaWd0X2ZiX21vZF90b190aWxpbmcoMCks DQo+ID4gPiArCQkJCSAgICAmaW52YWxpZF9mYik7DQo+ID4gPiArCQlpZ3RfcmVxdWlyZShyZXQg PiAwKTsNCj4gPiANCj4gPiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIGEgZGlmZmVyZW50IHZhcmlh YmxlOiByZXQgaXMgc2lnbmVkLA0KPiA+IGlndF9jcmVhdGVfZmIgaXNuJ3QuIEFsc28gcmV0IGRv ZXNuJ3QgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSByZXR1cm4NCj4gPiB2YWx1ZSBpcyB0aGUgS01T IGZyYW1lYnVmZmVyIElELg0KPiA+IA0KPiA+IChBcHBsaWVzIHRvIG90aGVyIHN1YnRlc3RzKQ0K PiA+IA0KPiA+ID4gKwkJaW52YWxpZF9vdXRfZmVuY2Uob3V0cHV0LCAmaW5wdXRfZmIsICZpbnZh bGlkX2ZiKTsNCj4gPiANCj4gPiAoU3RpbGwgbm90IHN1cmUgd2h5IHdlIHByb3ZpZGUgdGhlIGlu cHV0IEZCIHRvIHRoaXMgZnVuY3Rpb24uKQ0KPiA+IA0KPiA+ID4gKwkJaWd0X3JlbW92ZV9mYihk aXNwbGF5LmRybV9mZCwgJmludmFsaWRfZmIpOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiAr CWlndF9zdWJ0ZXN0KCJ3cml0ZWJhY2stZmItaWQiKSB7DQo+ID4gPiArCQlpZ3RfZmJfdCBvdXRw dXRfZmI7DQo+ID4gPiArCQlyZXQgPSBpZ3RfY3JlYXRlX2ZiKGRpc3BsYXkuZHJtX2ZkLCBtb2Rl LmhkaXNwbGF5LCBtb2RlLnZkaXNwbGF5LA0KPiA+ID4gKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdC ODg4OCwNCj4gPiA+ICsJCQkJICAgIGlndF9mYl9tb2RfdG9fdGlsaW5nKDApLA0KPiA+ID4gKwkJ CQkgICAgJm91dHB1dF9mYik7DQo+ID4gPiArCQlpZ3RfcmVxdWlyZShyZXQgPiAwKTsNCj4gPiA+ ICsNCj4gPiA+ICsJCXdyaXRlYmFja19mYl9pZChvdXRwdXQsICZpbnB1dF9mYiwgJm91dHB1dF9m Yik7DQo+ID4gPiArDQo+ID4gPiArCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXkuZHJtX2ZkLCAmb3V0 cHV0X2ZiKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZ3RfZml4dHVyZSB7DQo+ID4g PiArCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXkuZHJtX2ZkLCAmaW5wdXRfZmIpOw0KPiA+ID4gKwkJ aWd0X2Rpc3BsYXlfZmluaSgmZGlzcGxheSk7DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZA0KPiA+ID4g aW5kZXggZjE2OGZiYmEuLjljNzdjZmNkIDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24u YnVpbGQNCj4gPiA+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkDQo+ID4gPiBAQCAtNjMsNiArNjMs NyBAQCB0ZXN0X3Byb2dzID0gWw0KPiA+ID4gIAkna21zX3VuaXZlcnNhbF9wbGFuZScsDQo+ID4g PiAgCSdrbXNfdmJsYW5rJywNCj4gPiA+ICAJJ2ttc192cnInLA0KPiA+ID4gKwkna21zX3dyaXRl YmFjaycsDQo+ID4gPiAgCSdtZXRhX3Rlc3QnLA0KPiA+ID4gIAkncGFuZnJvc3RfZ2V0X3BhcmFt JywNCj4gPiA+ICAJJ3BhbmZyb3N0X2dlbV9uZXcnLA0KPiA+ID4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+IGlndC1kZXYgbWFpbGluZyBsaXN0 DQo+ID4gPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiA+ID4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2DQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=