From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20190330102946.3021-1-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: <8e3f8420-6bfd-a6f4-d491-be302807dcd1@linux.intel.com> Date: Mon, 1 Apr 2019 09:12:08 +0100 MIME-Version: 1.0 In-Reply-To: <20190330102946.3021-1-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t] i915: Add gem_vm_create List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org, Tvrtko Ursulin List-ID: CgpPbiAzMC8wMy8yMDE5IDEwOjI5LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gRXhlcmNpc2UgYmFz aWMgY3JlYXRpb24gYW5kIHN3YXBwaW5nIGJldHdlZW4gbmV3IGFkZHJlc3Mgc3BhY2VzLgo+IAo+ IHYyOiBDaGVjayBpc29sYXRpb24gdGhhdCB0aGUgc2FtZSB2bV9pZCBvbiBkaWZmZXJlbnQgZmQg YXJlIGluZGVlZAo+IGRpZmZlcmVudCBWTS4KPiB2MzogQ3Jvc3Mtb3ZlciBjaGVjayB3aXRoIENS RUFURV9FWFRfU0VUUEFSQU0KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGlu QGludGVsLmNvbT4KPiAtLS0KPiAgIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAyICsK PiAgIGxpYi9pOTE1L2dlbV92bS5jICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKwo+ICAgbGli L2k5MTUvZ2VtX3ZtLmggICAgICAgICAgfCAgMzggKysrKwo+ICAgbGliL21lc29uLmJ1aWxkICAg ICAgICAgICAgfCAgIDEgKwo+ICAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgfCAgIDEgKwo+ ICAgdGVzdHMvaTkxNS9nZW1fdm1fY3JlYXRlLmMgfCA0MTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwo+ ICAgNyBmaWxlcyBjaGFuZ2VkLCA1ODcgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9pOTE1L2dlbV92bS5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2k5MTUvZ2Vt X3ZtLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV92bV9jcmVhdGUuYwo+ IAo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCj4gaW5kZXggZTAwMzQ3Zjk0Li5hNzA3NDIwOWEgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2Vm aWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0xMyw2ICsxMyw4 IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAgCWk5MTUvZ2VtX3JpbmcuYwlcCj4gICAJaTkx NS9nZW1fbW1hbi5jCVwKPiAgIAlpOTE1L2dlbV9tbWFuLmgJXAo+ICsJaTkxNS9nZW1fdm0uYwlc Cj4gKwlpOTE1L2dlbV92bS5oCVwKPiAgIAlpOTE1XzNkLmgJCVwKPiAgIAlpOTE1X3JlZy5oCQlc Cj4gICAJaTkxNV9wY2lpZHMuaAkJXAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fdm0uYyBi L2xpYi9pOTE1L2dlbV92bS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAuLmUwZDQ2ZDUwOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvaTkxNS9nZW1fdm0uYwo+ IEBAIC0wLDAgKzEsMTMwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArCj4gKyNpbmNsdWRlICJpb2N0 bF93cmFwcGVycy5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsKPiArI2luY2x1ZGUgImk5 MTUvZ2VtX3ZtLmgiCj4gKwo+ICsvKioKPiArICogU0VDVElPTjpnZW1fdm0KPiArICogQHNob3J0 X2Rlc2NyaXB0aW9uOiBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGggYWRkcmVzcyBzcGFjZXMgKHZt L0dUVCkKPiArICogQHRpdGxlOiBHRU0gVmlydHVhbCBNZW1vcnkKPiArICoKPiArICogVGhpcyBo ZWxwZXIgbGlicmFyeSBjb250YWlucyBmdW5jdGlvbnMgdXNlZCBmb3IgaGFuZGxpbmcgZ2VtIGFk ZHJlc3MKPiArICogc3BhY2VzLi4KPiArICovCj4gKwo+ICsvKioKPiArICogZ2VtX2hhc192bToK PiArICogQGk5MTU6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqCj4gKyAqIFJl dHVybnM6IHdoZXRoZXIgVk0gY3JlYXRpb24gaXMgc3VwcG9ydGVkIG9yIG5vdC4KPiArICovCj4g K2Jvb2wgZ2VtX2hhc192bShpbnQgaTkxNSkKPiArewo+ICsJdWludDMyX3Qgdm1faWQgPSAwOwo+ ICsKPiArCV9fZ2VtX3ZtX2NyZWF0ZShpOTE1LCAmdm1faWQpOwo+ICsJaWYgKHZtX2lkKQo+ICsJ CWdlbV92bV9kZXN0cm95KGk5MTUsIHZtX2lkKTsKPiArCj4gKwlyZXR1cm4gdm1faWQ7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBnZW1fcmVxdWlyZV92bToKPiArICogQGk5MTU6IG9wZW4gaTkxNSBk cm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqCj4gKyAqIFRoaXMgaGVscGVyIHdpbGwgYXV0b21hdGlj YWxseSBza2lwIHRoZSB0ZXN0IG9uIHBsYXRmb3JtcyB3aGVyZSBhZGRyZXNzCj4gKyAqIHNwYWNl IGNyZWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCj4gKyAqLwo+ICt2b2lkIGdlbV9yZXF1aXJlX3Zt KGludCBpOTE1KQo+ICt7Cj4gKwlpZ3RfcmVxdWlyZShnZW1faGFzX3ZtKGk5MTUpKTsKPiArfQo+ ICsKPiAraW50IF9fZ2VtX3ZtX2NyZWF0ZShpbnQgaTkxNSwgdWludDMyX3QgKnZtX2lkKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0ge307Cj4gKyAg ICAgICBpbnQgZXJyID0gMDsKPiArCj4gKyAgICAgICBpZiAoaWd0X2lvY3RsKGk5MTUsIERSTV9J T0NUTF9JOTE1X0dFTV9WTV9DUkVBVEUsICZjdGwpID09IDApIHsKPiArICAgICAgICAgICAgICAg KnZtX2lkID0gY3RsLnZtX2lkOwo+ICsgICAgICAgfSBlbHNlIHsKPiArCSAgICAgICBlcnIgPSAt ZXJybm87Cj4gKwkgICAgICAgaWd0X2Fzc3VtZShlcnIgIT0gMCk7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgZXJybm8gPSAwOwo+ICsgICAgICAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGdlbV92bV9jcmVhdGU6Cj4gKyAqIEBpOTE1OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVz Y3JpcHRvcgo+ICsgKgo+ICsgKiBUaGlzIHdyYXBzIHRoZSBWTV9DUkVBVEUgaW9jdGwsIHdoaWNo IGlzIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcKPiArICogdm1fc2V0X2NhY2hpbmcoKSB0aGlzIHdy YXBwZXIgc2tpcHMgb24KPiArICoga2VybmVscyBhbmQgcGxhdGZvcm1zIHdoZXJlIGFkZHJlc3Mg c3BhY2Ugc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLgoKQ29tbWVudCBuZWVkcyBzb21lIHdvcmsu Cgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBUaGUgaWQgb2YgdGhlIGFsbG9jYXRlZCBhZGRyZXNzIHNw YWNlLgo+ICsgKi8KPiArdWludDMyX3QgZ2VtX3ZtX2NyZWF0ZShpbnQgaTkxNSkKPiArewo+ICsJ dWludDMyX3Qgdm1faWQ7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV92bV9jcmVhdGUoaTkx NSwgJnZtX2lkKSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0KHZtX2lkICE9IDApOwo+ICsKPiArCXJldHVy biB2bV9pZDsKPiArfQo+ICsKPiAraW50IF9fZ2VtX3ZtX2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQz Ml90IHZtX2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0g eyAudm1faWQgPSB2bV9pZCB9Owo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJaWYgKGlndF9pb2N0 bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRU1fVk1fREVTVFJPWSwgJmN0bCkpIHsKPiArCQllcnIg PSAtZXJybm87Cj4gKwkJaWd0X2Fzc3VtZShlcnIpOwo+ICsJfQo+ICsKPiArCWVycm5vID0gMDsK PiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBnZW1fdm1fZGVzdHJveToKPiAr ICogQGk5MTU6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEB2bV9pZDogaTkx NSBWTSBpZAo+ICsgKgo+ICsgKiBUaGlzIHdyYXBzIHRoZSBWTV9ERVNUUk9ZIGlvY3RsLCB3aGlj aCBpcyB1c2VkIHRvIGZyZWUgYW4gYWRkcmVzcyBzcGFjZS4KPiArICovCj4gK3ZvaWQgZ2VtX3Zt X2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQzMl90IHZtX2lkKQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX3ZtX2Rlc3Ryb3koaTkxNSwgdm1faWQpLCAwKTsKPiArfQo+IGRpZmYgLS1naXQgYS9s aWIvaTkxNS9nZW1fdm0uaCBiL2xpYi9pOTE1L2dlbV92bS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAuLjI3YWY4OTlkNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9s aWIvaTkxNS9nZW1fdm0uaAo+IEBAIC0wLDAgKzEsMzggQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIEdFTV9WTV9ICj4gKyNkZWZpbmUgR0VNX1ZNX0gKPiArCj4gKyNp bmNsdWRlIDxzdGRpbnQuaD4KPiArCj4gK2Jvb2wgZ2VtX2hhc192bShpbnQgaTkxNSk7Cj4gK3Zv aWQgZ2VtX3JlcXVpcmVfdm0oaW50IGk5MTUpOwo+ICsKPiArdWludDMyX3QgZ2VtX3ZtX2NyZWF0 ZShpbnQgaTkxNSk7Cj4gK2ludCBfX2dlbV92bV9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90ICp2 bV9pZCk7Cj4gKwo+ICt2b2lkIGdlbV92bV9kZXN0cm95KGludCBpOTE1LCB1aW50MzJfdCB2bV9p ZCk7Cj4gK2ludCBfX2dlbV92bV9kZXN0cm95KGludCBpOTE1LCB1aW50MzJfdCB2bV9pZCk7Cj4g Kwo+ICsjZW5kaWYgLyogR0VNX1ZNX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxk IGIvbGliL21lc29uLmJ1aWxkCj4gaW5kZXggODlkZTA2ZTY5Li5mOTU5MjIzMzAgMTAwNjQ0Cj4g LS0tIGEvbGliL21lc29uLmJ1aWxkCj4gKysrIGIvbGliL21lc29uLmJ1aWxkCj4gQEAgLTUsNiAr NSw3IEBAIGxpYl9zb3VyY2VzID0gWwo+ICAgCSdpOTE1L2dlbV9zdWJtaXNzaW9uLmMnLAo+ICAg CSdpOTE1L2dlbV9yaW5nLmMnLAo+ICAgCSdpOTE1L2dlbV9tbWFuLmMnLAo+ICsJJ2k5MTUvZ2Vt X3ZtLmMnLAo+ICAgCSdpZ3RfY29sb3JfZW5jb2RpbmcuYycsCj4gICAJJ2lndF9kZWJ1Z2ZzLmMn LAo+ICAgCSdpZ3RfZGV2aWNlLmMnLAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDcxY2NmMDBhZi4uODA5YjI1NjEy IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4gQEAgLTIxLDYgKzIxLDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gICAJZHJt X2ltcG9ydF9leHBvcnQgXAo+ICAgCWRybV9tbSBcCj4gICAJZHJtX3JlYWQgXAo+ICsJaTkxNS9n ZW1fdm1fY3JlYXRlIFwKPiAgIAlrbXNfM2QgXAo+ICAgCWttc19hZGRmYl9iYXNpYyBcCj4gICAJ a21zX2F0b21pYyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3ZtX2NyZWF0ZS5jIGIv dGVzdHMvaTkxNS9nZW1fdm1fY3JlYXRlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMC4uOTI4ODY4OGI2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2k5MTUv Z2VtX3ZtX2NyZWF0ZS5jCj4gQEAgLTAsMCArMSw0MTQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgi Cj4gKyNpbmNsdWRlICJpOTE1L2dlbV92bS5oIgo+ICsKPiArc3RhdGljIGludCB2bV9jcmVhdGVf aW9jdGwoaW50IGk5MTUsIHN0cnVjdCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCAqY3RsKQo+ICt7 Cj4gKwlpbnQgZXJyID0gMDsKPiArCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVf R0VNX1ZNX0NSRUFURSwgY3RsKSkgewo+ICsJCWVyciA9IC1lcnJubzsKPiArCQlpZ3RfYXNzdW1l KGVycik7Cj4gKwl9Cj4gKwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHZtX2Rlc3Ryb3lfaW9jdGwoaW50IGk5MTUsIHN0cnVjdCBkcm1faTkxNV9nZW1f dm1fY29udHJvbCAqY3RsKQo+ICt7Cj4gKwlpbnQgZXJyID0gMDsKPiArCWlmIChpZ3RfaW9jdGwo aTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX1ZNX0RFU1RST1ksIGN0bCkpIHsKPiArCQllcnIgPSAt ZXJybm87Cj4gKwkJaWd0X2Fzc3VtZShlcnIpOwo+ICsJfQo+ICsJZXJybm8gPSAwOwo+ICsJcmV0 dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBjdHhfY3JlYXRlX2lvY3RsKGludCBpOTE1 LAo+ICsJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgKmFyZykK PiArewo+ICsJaW50IGVycjsKPiArCWVyciA9IDA7Cj4gKwlpZiAoaWd0X2lvY3RsKGk5MTUsIERS TV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0NSRUFURV9FWFQsIGFyZykpIHsKPiArCQllcnIgPSAt ZXJybm87Cj4gKwkJaWd0X2Fzc3VtZShlcnIpOwo+ICsJfQo+ICsJZXJybm8gPSAwOwo+ICsJcmV0 dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaGFzX3ZtKGludCBpOTE1KQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0ge307Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCWVyciA9IHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKTsKPiArCXN3aXRjaCAoZXJy KSB7Cj4gKwljYXNlIC1FSU5WQUw6IC8qIHVua25vd24gaW9jdGwgKi8KPiArCWNhc2UgLUVOT0RF VjogLyogIWZ1bGwtcHBndHQgKi8KPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJY2FzZSAwOgo+ ICsJCWdlbV92bV9kZXN0cm95KGk5MTUsIGN0bC52bV9pZCk7Cj4gKwkJcmV0dXJuIHRydWU7Cj4g Kwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfZmFpbF9vbl9mKGVyciwgIlVua25vd24gcmVzcG9uc2Ug ZnJvbSBWTV9DUkVBVEVcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaW52YWxpZF9jcmVhdGUoaW50IGk5MTUpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fdm1fY29udHJvbCBjdGwgPSB7fTsKPiArCXN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5z aW9uIGV4dCA9IHsgLm5hbWUgPSAtMSB9Owo+ICsKPiArCWlndF9hc3NlcnRfZXEodm1fY3JlYXRl X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKPiArCWdlbV92bV9kZXN0cm95KGk5MTUsIGN0bC52bV9p ZCk7Cj4gKwo+ICsJY3RsLnZtX2lkID0gMHhkZWFkYmVlZjsKPiArCWlndF9hc3NlcnRfZXEodm1f Y3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKPiArCWdlbV92bV9kZXN0cm95KGk5MTUsIGN0 bC52bV9pZCk7Cj4gKwljdGwudm1faWQgPSAwOwo+ICsKPiArCWN0bC5mbGFncyA9IC0xOwo+ICsJ aWd0X2Fzc2VydF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIC1FSU5WQUwpOwo+ICsJ Y3RsLmZsYWdzID0gMDsKPiArCj4gKwljdGwuZXh0ZW5zaW9ucyA9IC0xOwo+ICsJaWd0X2Fzc2Vy dF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIC1FRkFVTFQpOwo+ICsJY3RsLmV4dGVu c2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmV4dCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0 ZV9pb2N0bChpOTE1LCAmY3RsKSwgLUVJTlZBTCk7Cj4gKwljdGwuZXh0ZW5zaW9ucyA9IDA7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGludmFsaWRfZGVzdHJveShpbnQgaTkxNSkKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sIGN0bCA9IHt9Owo+ICsKPiArCWlndF9hc3Nl cnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVOT0VOVCk7Cj4gKwo+ICsJaWd0 X2Fzc2VydF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIDApOwo+ICsJaWd0X2Fzc2Vy dF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKPiArCWlndF9hc3NlcnRfZXEo dm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVOT0VOVCk7Cj4gKwo+ICsJaWd0X2Fzc2Vy dF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIDApOwo+ICsJY3RsLnZtX2lkID0gY3Rs LnZtX2lkICsgMTsgLyogYXNzdW1lcyBubyBvbmUgZWxzZSBhbGxvY2F0ZWQgKi8KPiArCWlndF9h c3NlcnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVOT0VOVCk7Cj4gKwljdGwu dm1faWQgPSBjdGwudm1faWQgLSAxOwo+ICsJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3Rs KGk5MTUsICZjdGwpLCAwKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChp OTE1LCAmY3RsKSwgMCk7Cj4gKwljdGwuZmxhZ3MgPSAtMTsKPiArCWlndF9hc3NlcnRfZXEodm1f ZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVJTlZBTCk7Cj4gKwljdGwuZmxhZ3MgPSAwOwo+ ICsJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKPiArCj4g KwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7Cj4gKwljdGwu ZXh0ZW5zaW9ucyA9IC0xOwo+ICsJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5MTUs ICZjdGwpLCAtRUlOVkFMKTsKPiArCWN0bC5leHRlbnNpb25zID0gMDsKPiArCWlndF9hc3NlcnRf ZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1 aW50MzJfdCBfX2JhdGNoX2NyZWF0ZShpbnQgaTkxNSwgdWludDMyX3Qgb2Zmc2V0KQo+ICt7Cj4g Kwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJdWludDMyX3Qg aGFuZGxlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgQUxJR04ob2Zmc2V0ICsg NCwgNDA5NikpOwo+ICsJZ2VtX3dyaXRlKGk5MTUsIGhhbmRsZSwgb2Zmc2V0LCAmYmJlLCBzaXpl b2YoYmJlKSk7Cj4gKwo+ICsJcmV0dXJuIGhhbmRsZTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQz Ml90IGJhdGNoX2NyZWF0ZShpbnQgaTkxNSkKPiArewo+ICsJcmV0dXJuIF9fYmF0Y2hfY3JlYXRl KGk5MTUsIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjaGVja19zYW1lX3ZtKGludCBpOTE1 LCB1aW50MzJfdCBjdHhfYSwgdWludDMyX3QgY3R4X2IpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUo aTkxNSksCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsK PiArCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwKPiArCQkuYnVmZmVy X2NvdW50ID0gMSwKPiArCX07Cj4gKwo+ICsJLyogRmlyc3QgdmVyaWZ5IHRoYXQgd2UgdHJ5IHRv IHVzZSAic29mdHBpbm5pbmciIGJ5IGRlZmF1bHQgKi8KPiArCWJhdGNoLm9mZnNldCA9IDQ4IDw8 IDIwOwo+ICsJZWIucnN2ZDEgPSBjdHhfYTsKPiArCWdlbV9leGVjYnVmKGk5MTUsICZlYik7Cj4g KwlpZ3RfYXNzZXJ0X2VxX3U2NChiYXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKPiArCj4gKwkvKiBB biBhbHJlYWR5IGFjdGl2ZSBWTUEgd2lsbCB0cnkgdG8ga2VlcCBpdHMgb2Zmc2V0ICovCj4gKwli YXRjaC5vZmZzZXQgPSAwOwo+ICsJZWIucnN2ZDEgPSBjdHhfYjsKPiArCWdlbV9leGVjYnVmKGk5 MTUsICZlYik7Cj4gKwlpZ3RfYXNzZXJ0X2VxX3U2NChiYXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsK PiArCj4gKwlnZW1fc3luYyhpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGk5MTUs IGJhdGNoLmhhbmRsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNyZWF0ZV9leHQoaW50IGk5 MTUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0X3NldHBh cmFtIGV4dCA9IHsKPiArCQl7IC5uYW1lID0gSTkxNV9DT05URVhUX0NSRUFURV9FWFRfU0VUUEFS QU0gfSwKPiArCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9WTSB9Cj4gKwl9Owo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgY3JlYXRlID0gewo+ICsJCS5m bGFncyA9IEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VYVEVOU0lPTlMKPiArCX07Cj4g Kwl1aW50MzJfdCBjdHhbMl07Cj4gKwo+ICsJaWd0X3JlcXVpcmUoY3R4X2NyZWF0ZV9pb2N0bChp OTE1LCAmY3JlYXRlKSA9PSAwKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3JlYXRl LmN0eF9pZCk7Cj4gKwo+ICsJY3JlYXRlLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmV4 dCk7Cj4gKwo+ICsJZXh0LnBhcmFtLnZhbHVlID0gZ2VtX3ZtX2NyZWF0ZShpOTE1KTsKPiArCj4g KwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVhdGVfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOwo+ICsJ Y3R4WzBdID0gY3JlYXRlLmN0eF9pZDsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVhdGVf aW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOwo+ICsJY3R4WzFdID0gY3JlYXRlLmN0eF9pZDsKPiAr Cj4gKwlnZW1fdm1fZGVzdHJveShpOTE1LCBleHQucGFyYW0udmFsdWUpOwo+ICsKPiArCWNoZWNr X3NhbWVfdm0oaTkxNSwgY3R4WzBdLCBjdHhbMV0pOwo+ICsKPiArCWdlbV9jb250ZXh0X2Rlc3Ry b3koaTkxNSwgY3R4WzFdKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4WzBdKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZXhlY2J1ZihpbnQgaTkxNSkKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgYmF0Y2ggPSB7Cj4gKwkJLmhhbmRsZSA9IGJhdGNo X2NyZWF0ZShpOTE1KSwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGViID0gewo+ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmYmF0Y2gpLAo+ICsJ CS5idWZmZXJfY291bnQgPSAxLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4 dF9wYXJhbSBhcmcgPSB7Cj4gKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAo+ICsJ fTsKPiArCj4gKwkvKiBGaXJzdCB2ZXJpZnkgdGhhdCB3ZSB0cnkgdG8gdXNlICJzb2Z0cGlubmlu ZyIgYnkgZGVmYXVsdCAqLwo+ICsJYmF0Y2gub2Zmc2V0ID0gNDggPDwgMjA7Cj4gKwlnZW1fZXhl Y2J1ZihpOTE1LCAmZWIpOwo+ICsJaWd0X2Fzc2VydF9lcV91NjQoYmF0Y2gub2Zmc2V0LCA0OCA8 PCAyMCk7Cj4gKwo+ICsJYXJnLnZhbHVlID0gZ2VtX3ZtX2NyZWF0ZShpOTE1KTsKPiArCWdlbV9j b250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKPiArCWdlbV9leGVjYnVmKGk5MTUsICZlYik7 Cj4gKwlpZ3RfYXNzZXJ0X2VxX3U2NChiYXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKPiArCWdlbV92 bV9kZXN0cm95KGk5MTUsIGFyZy52YWx1ZSk7Cj4gKwo+ICsJYXJnLnZhbHVlID0gZ2VtX3ZtX2Ny ZWF0ZShpOTE1KTsKPiArCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKPiArCWJh dGNoLm9mZnNldCA9IDA7Cj4gKwlnZW1fZXhlY2J1ZihpOTE1LCAmZWIpOwo+ICsJaWd0X2Fzc2Vy dF9lcV91NjQoYmF0Y2gub2Zmc2V0LCAwKTsKPiArCWdlbV92bV9kZXN0cm95KGk5MTUsIGFyZy52 YWx1ZSk7Cj4gKwo+ICsJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsKPiArCWdlbV9jbG9z ZShpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt3cml0ZV90 b19hZGRyZXNzKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCB2 YWx1ZSkKPiArewo+ICsJY29uc3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2Rl dmlkKGZkKSk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaCA9IHsK PiArCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5NikKPiArCX07Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewo+ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJf cG9pbnRlcigmYmF0Y2gpLAo+ICsJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCS5yc3ZkMSA9IGN0 eCwKPiArCX07Cj4gKwl1aW50MzJfdCBjc1sxNl07Cj4gKwlpbnQgaTsKPiArCj4gKwlpID0gMDsK PiArCWNzW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIyIDogMCk7 Cj4gKwlpZiAoZ2VuID49IDgpIHsKPiArCQljc1srK2ldID0gYWRkcjsKPiArCQljc1srK2ldID0g YWRkciA+PiAzMjsKPiArCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKPiArCQljc1srK2ldID0gMDsK PiArCQljc1srK2ldID0gYWRkcjsKPiArCX0gZWxzZSB7Cj4gKwkJY3NbaV0tLTsKPiArCQljc1sr K2ldID0gYWRkcjsKPiArCX0KPiArCWNzWysraV0gPSB2YWx1ZTsKPiArCWNzWysraV0gPSBNSV9C QVRDSF9CVUZGRVJfRU5EOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaC5oYW5kbGUsIDAsIGNzLCBz aXplb2YoY3MpKTsKPiArCj4gKwlnZW1fZXhlY2J1ZihmZCwgJmViKTsKPiArCWlndF9hc3NlcnQo YmF0Y2gub2Zmc2V0ICE9IGFkZHIpOwo+ICsKPiArCWdlbV9zeW5jKGZkLCBiYXRjaC5oYW5kbGUp Owo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaC5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBpc29sYXRpb24oaW50IGk5MTUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9ialsyXSA9IHsKPiArCQl7Cj4gKwkJCS5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUs IDQwOTYpLAo+ICsJCQkub2Zmc2V0ID0gMSA8PCAyMAo+ICsJCX0sCj4gKwkJeyAuaGFuZGxlID0g YmF0Y2hfY3JlYXRlKGk5MTUpLCB9Cj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBlYiA9IHsKPiArCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKSwK PiArCQkuYnVmZmVyX2NvdW50ID0gMiwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gYXJnID0gewo+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9WTSwK PiArCX07Cj4gKwlpbnQgb3RoZXIgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKPiArCXVpbnQz Ml90IGN0eFsyXSwgdm1bMl07Cj4gKwlpbnQgbG9vcHMgPSA0MDk2Owo+ICsJaW50IHJlc3VsdDsK CnUzMiByZXN1bHQgSUlVQy4KCj4gKwo+ICsJLyogQW4gdm1faWQgb24gb25lIGZkIGlzIG5vdCB0 aGUgc2FtZSBvbiBhbm90aGVyIGZkICovCj4gKwlpZ3RfYXNzZXJ0X25lcShpOTE1LCBvdGhlcik7 Cj4gKwo+ICsJY3R4WzBdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsJY3R4WzFdID0g Z2VtX2NvbnRleHRfY3JlYXRlKG90aGVyKTsKPiArCj4gKwl2bVswXSA9IGdlbV92bV9jcmVhdGUo aTkxNSk7Cj4gKwlkbyB7Cj4gKwkJdm1bMV0gPSBnZW1fdm1fY3JlYXRlKG90aGVyKTsKPiArCX0g d2hpbGUgKHZtWzFdICE9IHZtWzBdICYmIGxvb3BzLS0gPiAwKTsKPiArCWlndF9hc3NlcnQobG9v cHMpOwo+ICsKPiArCWFyZy5jdHhfaWQgPSBjdHhbMF07Cj4gKwlhcmcudmFsdWUgPSB2bVswXTsK PiArCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKPiArCj4gKwlhcmcuY3R4X2lk ID0gY3R4WzFdOwo+ICsJYXJnLnZhbHVlID0gdm1bMV07Cj4gKwlnZW1fY29udGV4dF9zZXRfcGFy YW0ob3RoZXIsICZhcmcpOwo+ICsKPiArCWViLnJzdmQxID0gY3R4WzBdOwo+ICsJZ2VtX2V4ZWNi dWYoaTkxNSwgJmViKTsKPiArCj4gKwkvKiBWZXJpZnkgdGhlIHRyaWNrIHdpdGggdGhlIGFzc3Vt ZWQgdGFyZ2V0IHdvcmtzICovCj4gKwl3cml0ZV90b19hZGRyZXNzKGk5MTUsIGN0eFswXSwgb2Jq WzBdLm9mZnNldCwgaTkxNSk7Cj4gKwlnZW1fcmVhZChpOTE1LCBvYmpbMF0uaGFuZGxlLCAwLCAm cmVzdWx0LCBzaXplb2YocmVzdWx0KSk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJlc3VsdCwgaTkxNSk7 Cj4gKwo+ICsJLyogTm93IGNoZWNrIHRoYXQgd2UgY2FuJ3Qgd3JpdGUgdG8gdm1bMF0gZnJvbSBz ZWNvbmQgZmQvdm0gKi8KPiArCXdyaXRlX3RvX2FkZHJlc3Mob3RoZXIsIGN0eFsxXSwgb2JqWzBd Lm9mZnNldCwgb3RoZXIpOwo+ICsJZ2VtX3JlYWQoaTkxNSwgb2JqWzBdLmhhbmRsZSwgMCwgJnJl c3VsdCwgc2l6ZW9mKHJlc3VsdCkpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXN1bHQsIGk5MTUpOwo+ ICsKClJlbGllcyBvbiBvYmplY3RzIGJlaW5nIHplcm9lcyAoY2hlY2spIGFuZCBuZWl0aGVyIGZk IGJlaW5nIHplcm8uIFRvIGJlIApzYWZlIGFkZCBhc3NlcnRzIGZvciB0aGUgbGF0dGVyPwoKPiAr CWNsb3NlKG90aGVyKTsKPiArCj4gKwlnZW1fY2xvc2UoaTkxNSwgb2JqWzFdLmhhbmRsZSk7Cj4g KwlnZW1fY2xvc2UoaTkxNSwgb2JqWzBdLmhhbmRsZSk7Cj4gKwo+ICsJZ2VtX2NvbnRleHRfZGVz dHJveShpOTE1LCBjdHhbMF0pOwo+ICsJZ2VtX3ZtX2Rlc3Ryb3koaTkxNSwgdm1bMF0pOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBhc3luY19kZXN0cm95KGludCBpOTE1KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0gewo+ICsJCS5jdHhfaWQgPSBnZW1f Y29udGV4dF9jcmVhdGUoaTkxNSksCj4gKwkJLnZhbHVlID0gZ2VtX3ZtX2NyZWF0ZShpOTE1KSwK PiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0sCj4gKwl9Owo+ICsJaWd0X3NwaW5f dCAqc3BpblsyXTsKPiArCj4gKwlzcGluWzBdID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGk5MTUsCj4g KwkJCQkgICAgIC5jdHggPSBhcmcuY3R4X2lkLAo+ICsJCQkJICAgICAuZmxhZ3MgPSBJR1RfU1BJ Tl9QT0xMX1JVTik7Cj4gKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9ydW5uaW5nKHNwaW5bMF0p Owo+ICsKPiArCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKPiArCXNwaW5bMV0g PSBfX2lndF9zcGluX2JhdGNoX25ldyhpOTE1LCAuY3R4ID0gYXJnLmN0eF9pZCk7Cj4gKwo+ICsJ aWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW5bMF0pOwo+ICsJZ2VtX3N5bmMoaTkxNSwgc3BpblswXS0+ aGFuZGxlKTsKPiArCj4gKwlnZW1fdm1fZGVzdHJveShpOTE1LCBhcmcudmFsdWUpOwo+ICsJZ2Vt X2NvbnRleHRfZGVzdHJveShpOTE1LCBhcmcuY3R4X2lkKTsKPiArCj4gKwlpZ3Rfc3Bpbl9iYXRj aF9lbmQoc3BpblsxXSk7Cj4gKwlnZW1fc3luYyhpOTE1LCBzcGluWzFdLT5oYW5kbGUpOwo+ICsK PiArCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGluKTsgaSsrKQo+ICsJCWlndF9z cGluX2JhdGNoX2ZyZWUoaTkxNSwgc3BpbltpXSk7Cj4gK30KPiArCj4gK2lndF9tYWluCj4gK3sK PiArCWludCBpOTE1ID0gLTE7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWk5MTUgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4g KwkJaWd0X3JlcXVpcmUoaGFzX3ZtKGk5MTUpKTsKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgi aW52YWxpZC1jcmVhdGUiKQo+ICsJCWludmFsaWRfY3JlYXRlKGk5MTUpOwo+ICsKPiArCWlndF9z dWJ0ZXN0KCJpbnZhbGlkLWRlc3Ryb3kiKQo+ICsJCWludmFsaWRfZGVzdHJveShpOTE1KTsKPiAr Cj4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gKwkJaWd0X2ZpeHR1cmUgewo+ICsJCQlnZW1fY29u dGV4dF9yZXF1aXJlX3BhcmFtKGk5MTUsIEk5MTVfQ09OVEVYVF9QQVJBTV9WTSk7Cj4gKwkJfQo+ ICsKPiArCQlpZ3Rfc3VidGVzdCgiZXhlY2J1ZiIpCj4gKwkJCWV4ZWNidWYoaTkxNSk7Cj4gKwo+ ICsJCWlndF9zdWJ0ZXN0KCJpc29sYXRpb24iKQo+ICsJCQlpc29sYXRpb24oaTkxNSk7Cj4gKwo+ ICsJCWlndF9zdWJ0ZXN0KCJjcmVhdGUtZXh0IikKPiArCQkJY3JlYXRlX2V4dChpOTE1KTsKPiAr Cj4gKwkJaWd0X3N1YnRlc3QoImFzeW5jLWRlc3Ryb3kiKQo+ICsJCQlhc3luY19kZXN0cm95KGk5 MTUpOwo+ICsJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQljbG9zZShpOTE1KTsKPiArCX0K PiArfQo+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxk Cj4gaW5kZXggOTAxNWY4MDllLi45NDllZWZkNmYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVzb24u YnVpbGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC0yMDksNiArMjA5LDcgQEAgaTkx NV9wcm9ncyA9IFsKPiAgIAknZ2VtX3VuZmVuY2VfYWN0aXZlX2J1ZmZlcnMnLAo+ICAgCSdnZW1f dW5yZWZfYWN0aXZlX2J1ZmZlcnMnLAo+ICAgCSdnZW1fdXNlcnB0cl9ibGl0cycsCj4gKwknZ2Vt X3ZtX2NyZWF0ZScsCj4gICAJJ2dlbV93YWl0JywKPiAgIAknZ2VtX3dvcmthcm91bmRzJywKPiAg IAknZ2VtX3dyaXRlX3JlYWRfcmluZ19zd2l0Y2gnLAo+IAoKV2l0aCB0aGUgYWJvdmUgc21hbGwg dHdlYWtzOgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldg==