From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH] drm/amdgpu: throttle buffer migrations at CS using a fixed MBps limit Date: Wed, 24 Aug 2016 10:49:56 +0800 Message-ID: <57BD0B54.3050004@amd.com> References: <1471990776-22816-1-git-send-email-maraeo@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471990776-22816-1-git-send-email-maraeo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?B?TWFyZWsgT2zFocOhaw==?= , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org TG9va3MgdmVyeSBnb29kIHRvIG1lLCBiaW5kaW5nIHRpbWUgYW5kIGJ5dGUgaXMgZ29vZCBpZGVh IGFjY29yZGluZyBmcmVlIAp2cmFtLgpEaWQgeW91IHRlc3QgbW9yZSBnYW1lcyBmb3IgeW91ciBh bGdvcml0aG0/CgpSZWdhcmRzLApEYXZpZCBaaG91CgpPbiAyMDE25bm0MDjmnIgyNOaXpSAwNjox OSwgTWFyZWsgT2zFocOhayB3cm90ZToKPiBGcm9tOiBNYXJlayBPbMWhw6FrIDxtYXJlay5vbHNh a0BhbWQuY29tPgo+Cj4gVGhlIG9sZCBtZWNoYW5pc20gdXNlZCBhIHBlci1zdWJtaXNzaW9uIGxp bWl0IHRoYXQgZGlkbid0IHRha2UgcHJldmlvdXMKPiBzdWJtaXNzaW9ucyB3aXRoaW4gdGhlIHNh bWUgdGltZSBmcmFtZSBpbnRvIGFjY291bnQuIEl0IGFsc28gZmlsbGVkIFZSQU0KPiBzbG93bHkg d2hlbiBWUkFNIHVzYWdlIGRyb3BwZWQgZHVlIHRvIGEgYmlnIGV2aWN0aW9uIG9yIGJ1ZmZlciBk ZWFsbG9jYXRpb24uCj4KPiBUaGlzIG5ldyBtZXRob2QgZXN0YWJsaXNoZXMgYSBjb25maWd1cmFi bGUgTUJwcyBsaW1pdCB0aGF0IGlzIG9iZXllZCB3aGVuCj4gVlJBTSB1c2FnZSBpcyB2ZXJ5IGhp Z2guIFdoZW4gVlJBTSB1c2FnZSBpcyBub3QgdmVyeSBoaWdoLCBpdCBnaXZlcwo+IHRoZSBkcml2 ZXIgdGhlIGZyZWVkb20gdG8gZmlsbCBpdCBxdWlja2x5LiBUaGUgcmVzdWx0IGlzIG1vcmUgY29u c2lzdGVudAo+IHBlcmZvcm1hbmNlLgo+Cj4gSXQgY2FuJ3Qga2VlcCB0aGUgQk8gbW92ZSByYXRl IGxvdyBpZiBsb3RzIG9mIGV2aWN0aW9ucyBhcmUgaGFwcGVuaW5nIGR1ZQo+IHRvIFZSQU0gZnJh Z21lbnRhdGlvbiwgb3IgaWYgYSBiaWcgYnVmZmVyIGlzIGJlaW5nIG1pZ3JhdGVkLgo+Cj4gVGhl IGFtZGdwdS5tb3ZlcmF0ZSBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc2V0IGEgbm9uLWRlZmF1 bHQgbGltaXQuCj4gTWVhc3VyZW1lbnRzIGNhbiBiZSBkb25lIHRvIGZpbmQgb3V0IHdoaWNoIGFt ZGdwdS5tb3ZlcmF0ZSBzZXR0aW5nIGdpdmVzCj4gdGhlIGJlc3QgcmVzdWx0cy4KPgo+IE1haW5s eSBBUFVzIGFuZCBjYXJkcyB3aXRoIHNtYWxsIFZSQU0gd2lsbCBiZW5lZml0IGZyb20gdGhpcy4g Rm9yIEYxIDIwMTUsCj4gYW55dGhpbmcgd2l0aCAyIEdCIFZSQU0gb3IgbGVzcyB3aWxsIGJlbmVm aXQuCj4KPiBTb21lIGJlbmNobWFyayByZXN1bHRzIC0gRjEgMjAxNSAoVG9uZ2EgMkdCKToKPgo+ IExpbWl0ICAgICAgTWluRlBTIEF2Z0ZQUwo+IE9sZCBjb2RlOiAgMTQgICAgIDMyLjYKPiAxMjgg TUIvczogIDI4ICAgICA0MQo+IDY0IE1CL3M6ICAgMTUuNSAgIDQzCj4gMzIgTUIvczogICAyOC43 ICAgNDMuNAo+IDggTUIvczogICAgMjcuOCAgIDQ0LjQKPiA4IE1CL3M6ICAgIDIxLjkgICA0Mi44 IChkaWZmZXJlbnQgcnVuKQo+Cj4gUmFuZG9tIGRyb3BzIGluIE1pbiBGUFMgY2FuIHN0aWxsIG9j Y3VyIChkdWUgdG8gZnJhZ21lbnRlZCBWUkFNPyksIGJ1dAo+IHRoZSBhdmVyYWdlIEZQUyBpcyBt dWNoIGJldHRlci4gOCBNQi9zIGlzIHByb2JhYmx5IGEgZ29vZCBsaW1pdCBmb3IgdGhpcwo+IGdh bWUgJiB0aGUgY3VycmVudCBWUkFNIG1hbmFnZW1lbnQuIFRoZSByYW5kb20gRlBTIGRyb3BzIGFy ZSBzdGlsbCB0byBiZQo+IHRhY2tsZWQuCj4KPiBTaWduZWQtb2ZmLWJ5OiBNYXJlayBPbMWhw6Fr IDxtYXJlay5vbHNha0BhbWQuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1LmggICAgICAgIHwgICA5ICsrCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfY3MuYyAgICAgfCAxNTIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiAg IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8ICAxMCArKwo+ICAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jICAgIHwgICA0ICsKPiAgIDQg ZmlsZXMgY2hhbmdlZCwgMTI3IGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQo+Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPiBpbmRleCA5MTZkYTgwLi44YmRlOTVjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPiBAQCAtNTgsMjAgKzU4LDIxIEBACj4g ICAjaW5jbHVkZSAiYW1kX3Bvd2VycGxheS5oIgo+ICAgCj4gICAjaW5jbHVkZSAiZ3B1X3NjaGVk dWxlci5oIgo+ICAgCj4gICAvKgo+ICAgICogTW9kdWxlcyBwYXJhbWV0ZXJzLgo+ICAgICovCj4g ICBleHRlcm4gaW50IGFtZGdwdV9tb2Rlc2V0Owo+ICAgZXh0ZXJuIGludCBhbWRncHVfdnJhbV9s aW1pdDsKPiAgIGV4dGVybiBpbnQgYW1kZ3B1X2dhcnRfc2l6ZTsKPiArZXh0ZXJuIGludCBhbWRn cHVfbW92ZXJhdGU7Cj4gICBleHRlcm4gaW50IGFtZGdwdV9iZW5jaG1hcmtpbmc7Cj4gICBleHRl cm4gaW50IGFtZGdwdV90ZXN0aW5nOwo+ICAgZXh0ZXJuIGludCBhbWRncHVfYXVkaW87Cj4gICBl eHRlcm4gaW50IGFtZGdwdV9kaXNwX3ByaW9yaXR5Owo+ICAgZXh0ZXJuIGludCBhbWRncHVfaHdf aTJjOwo+ICAgZXh0ZXJuIGludCBhbWRncHVfcGNpZV9nZW4yOwo+ICAgZXh0ZXJuIGludCBhbWRn cHVfbXNpOwo+ICAgZXh0ZXJuIGludCBhbWRncHVfbG9ja3VwX3RpbWVvdXQ7Cj4gICBleHRlcm4g aW50IGFtZGdwdV9kcG07Cj4gICBleHRlcm4gaW50IGFtZGdwdV9zbWNfbG9hZF9mdzsKPiBAQCAt MjAyOSwyMCArMjAzMCwyOCBAQCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSB7Cj4gICAJc3RydWN0IGFt ZGdwdV9tbWFuCQltbWFuOwo+ICAgCXN0cnVjdCBhbWRncHVfdnJhbV9zY3JhdGNoCXZyYW1fc2Ny YXRjaDsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X3diCQl3YjsKPiAgIAlhdG9taWM2NF90CQkJdnJhbV91 c2FnZTsKPiAgIAlhdG9taWM2NF90CQkJdnJhbV92aXNfdXNhZ2U7Cj4gICAJYXRvbWljNjRfdAkJ CWd0dF91c2FnZTsKPiAgIAlhdG9taWM2NF90CQkJbnVtX2J5dGVzX21vdmVkOwo+ICAgCWF0b21p YzY0X3QJCQludW1fZXZpY3Rpb25zOwo+ICAgCWF0b21pY190CQkJZ3B1X3Jlc2V0X2NvdW50ZXI7 Cj4gICAKPiArCS8qIGRhdGEgZm9yIGJ1ZmZlciBtaWdyYXRpb24gdGhyb3R0bGluZyAqLwo+ICsJ c3RydWN0IHsKPiArCQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7Cj4gKwkJczY0CQkJbGFzdF91cGRhdGVf dXM7Cj4gKwkJczY0CQkJYWNjdW1fdXM7IC8qIGFjY3VtdWxhdGVkIG1pY3Jvc2Vjb25kcyAqLwo+ ICsJCXUzMgkJCWxvZzJfbWF4X01CcHM7Cj4gKwl9IG1tX3N0YXRzOwo+ICsKPiAgIAkvKiBkaXNw bGF5ICovCj4gICAJYm9vbAkJCQllbmFibGVfdmlydHVhbF9kaXNwbGF5Owo+ICAgCXN0cnVjdCBh bWRncHVfbW9kZV9pbmZvCQltb2RlX2luZm87Cj4gICAJLyogRm9yIHByZS1EQ0UxMS4gRENFMTEg YW5kIGxhdGVyIGFyZSBpbiAic3RydWN0IGFtZGdwdV9kZXZpY2UtPmRtIiAqLwo+ICAgCXN0cnVj dCB3b3JrX3N0cnVjdAkJaG90cGx1Z193b3JrOwo+ICAgCXN0cnVjdCBhbWRncHVfaXJxX3NyYwkJ Y3J0Y19pcnE7Cj4gICAJc3RydWN0IGFtZGdwdV9pcnFfc3JjCQlwYWdlZmxpcF9pcnE7Cj4gICAJ c3RydWN0IGFtZGdwdV9pcnFfc3JjCQlocGRfaXJxOwo+ICAgCj4gICAJLyogcmluZ3MgKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+IGluZGV4IGQ1ZDYxYTcuLmM2YjQ5 NDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+IEBAIC0yMjks OTEgKzIyOSwxNDUgQEAgZnJlZV9wYXJ0aWFsX2tkYXRhOgo+ICAgCQlkcm1fZnJlZV9sYXJnZShw LT5jaHVua3NbaV0ua2RhdGEpOwo+ICAgCWtmcmVlKHAtPmNodW5rcyk7Cj4gICBwdXRfY3R4Ogo+ ICAgCWFtZGdwdV9jdHhfcHV0KHAtPmN0eCk7Cj4gICBmcmVlX2NodW5rOgo+ICAgCWtmcmVlKGNo dW5rX2FycmF5KTsKPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAtLyogUmV0dXJu cyBob3cgbWFueSBieXRlcyBUVE0gY2FuIG1vdmUgcGVyIElCLgo+ICsvKiBDb252ZXJ0IG1pY3Jv c2Vjb25kcyB0byBieXRlcy4gKi8KPiArc3RhdGljIHU2NCB1c190b19ieXRlcyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgczY0IHVzKQo+ICt7Cj4gKwlpZiAodXMgPD0gMCB8fCAhYWRldi0+ bW1fc3RhdHMubG9nMl9tYXhfTUJwcykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwkvKiBTaW5jZSBh Y2N1bV91cyBpcyBpbmNyZW1lbnRlZCBieSBhIG1pbGxpb24gcGVyIHNlY29uZCwganVzdAo+ICsJ ICogbXVsdGlwbHkgaXQgYnkgdGhlIG51bWJlciBvZiBNQi9zIHRvIGdldCB0aGUgbnVtYmVyIG9m IGJ5dGVzLgo+ICsJICovCj4gKwlyZXR1cm4gdXMgPDwgYWRldi0+bW1fc3RhdHMubG9nMl9tYXhf TUJwczsKPiArfQo+ICsKPiArc3RhdGljIHM2NCBieXRlc190b191cyhzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgdTY0IGJ5dGVzKQo+ICt7Cj4gKwlpZiAoIWFkZXYtPm1tX3N0YXRzLmxvZzJf bWF4X01CcHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGJ5dGVzID4+IGFkZXYtPm1t X3N0YXRzLmxvZzJfbWF4X01CcHM7Cj4gK30KPiArCj4gKy8qIFJldHVybnMgaG93IG1hbnkgYnl0 ZXMgVFRNIGNhbiBtb3ZlIHJpZ2h0IG5vdy4gSWYgbm8gYnl0ZXMgY2FuIGJlIG1vdmVkLAo+ICsg KiBpdCByZXR1cm5zIDAuIElmIGl0IHJldHVybnMgbm9uLXplcm8sIGl0J3MgT0sgdG8gbW92ZSBh dCBsZWFzdCBvbmUgYnVmZmVyLAo+ICsgKiB3aGljaCBtZWFucyBpdCBjYW4gZ28gb3ZlciB0aGUg dGhyZXNob2xkIG9uY2UuIElmIHRoYXQgaGFwcGVucywgdGhlIGRyaXZlcgo+ICsgKiB3aWxsIGJl IGluIGRlYnQgYW5kIG5vIG90aGVyIGJ1ZmZlciBtaWdyYXRpb25zIGNhbiBiZSBkb25lIHVudGls IHRoYXQgZGVidAo+ICsgKiBpcyByZXBhaWQuCj4gKyAqCj4gKyAqIFRoaXMgYXBwcm9hY2ggYWxs b3dzIG1vdmluZyBhIGJ1ZmZlciBvZiBhbnkgc2l6ZSAoaXQncyBpbXBvcnRhbnQgdG8gYWxsb3cK PiArICogdGhhdCkuCj4gKyAqCj4gKyAqIFRoZSBjdXJyZW5jeSBpcyBzaW1wbHkgdGltZSBpbiBt aWNyb3NlY29uZHMgYW5kIGl0IGluY3JlYXNlcyBhcyB0aGUgY2xvY2sKPiArICogdGlja3MuIFRo ZSBhY2N1bXVsYXRlZCBtaWNyb3NlY29uZHMgKHVzKSBhcmUgY29udmVydGVkIHRvIGJ5dGVzIGFu ZAo+ICsgKiByZXR1cm5lZC4KPiAgICAqLwo+ICAgc3RhdGljIHU2NCBhbWRncHVfY3NfZ2V0X3Ro cmVzaG9sZF9mb3JfbW92ZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICB7Cj4gLQl1 NjQgcmVhbF92cmFtX3NpemUgPSBhZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKPiAtCXU2NCB2cmFt X3VzYWdlID0gYXRvbWljNjRfcmVhZCgmYWRldi0+dnJhbV91c2FnZSk7Cj4gKwlzNjQgdGltZV91 cywgaW5jcmVtZW50X3VzOwo+ICsJdTY0IG1heF9ieXRlczsKPiArCXU2NCBmcmVlX3ZyYW0sIHRv dGFsX3ZyYW0sIHVzZWRfdnJhbTsKPiAgIAo+IC0JLyogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBv biB0aGUgY3VycmVudCBWUkFNIHVzYWdlLgo+ICsJLyogQWxsb3cgYSBtYXhpbXVtIG9mIDIwMCBh Y2N1bXVsYXRlZCBtcy4gVGhpcyBpcyBiYXNpY2FsbHkgcGVyLUlCCj4gKwkgKiB0aHJvdHRsaW5n Lgo+ICAgCSAqCj4gLQkgKiAtIElmIGFsbCBvZiBWUkFNIGlzIGZyZWUsIGFsbG93IHJlbG9jYXRp bmcgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0Cj4gLQkgKiAgIGlzIGVxdWFsIHRvIDEvNCBvZiB0 aGUgc2l6ZSBvZiBWUkFNIGZvciB0aGlzIElCLgo+ICsJICogSXQgbWVhbnMgdGhhdCBpbiBvcmRl ciB0byBnZXQgZnVsbCBtYXggTUJwcywgYXQgbGVhc3QgNSBJQnMgcGVyCj4gKwkgKiBzZWNvbmQg bXVzdCBiZSBzdWJtaXR0ZWQgYW5kIG5vdCBtb3JlIHRoYW4gMjAwbXMgYXBhcnQgZnJvbSBlYWNo Cj4gKwkgKiBvdGhlci4KPiArCSAqLwo+ICsJY29uc3QgczY0IHVzX3VwcGVyX2JvdW5kID0gMjAw MDAwOwo+ICAgCj4gLQkgKiAtIElmIG1vcmUgdGhhbiBvbmUgaGFsZiBvZiBWUkFNIGlzIG9jY3Vw aWVkLCBvbmx5IGFsbG93IHJlbG9jYXRpbmcKPiAtCSAqICAgMSBNQiBvZiBkYXRhIGZvciB0aGlz IElCLgo+IC0JICoKPiAtCSAqIC0gRnJvbSAwIHRvIG9uZSBoYWxmIG9mIHVzZWQgVlJBTSwgdGhl IHRocmVzaG9sZCBkZWNyZWFzZXMKPiAtCSAqICAgbGluZWFybHkuCj4gLQkgKiAgICAgICAgIF9f X19fX19fX19fX19fX19fXwo+IC0JICogMS80IG9mIC18XCAgICAgICAgICAgICAgIHwKPiAtCSAq IFZSQU0gICAgfCBcICAgICAgICAgICAgICB8Cj4gLQkgKiAgICAgICAgIHwgIFwgICAgICAgICAg ICAgfAo+IC0JICogICAgICAgICB8ICAgXCAgICAgICAgICAgIHwKPiAtCSAqICAgICAgICAgfCAg ICBcICAgICAgICAgICB8Cj4gLQkgKiAgICAgICAgIHwgICAgIFwgICAgICAgICAgfAo+IC0JICog ICAgICAgICB8ICAgICAgXCAgICAgICAgIHwKPiAtCSAqICAgICAgICAgfCAgICAgICBcX19fX19f X198MSBNQgo+IC0JICogICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLXwKPiAtCSAqICAgIFZSQU0g MCAlICAgICAgICAgICAgIDEwMCAlCj4gLQkgKiAgICAgICAgIHVzZWQgICAgICAgICAgICB1c2Vk Cj4gLQkgKgo+IC0JICogTm90ZTogSXQncyBhIHRocmVzaG9sZCwgbm90IGEgbGltaXQuIFRoZSB0 aHJlc2hvbGQgbXVzdCBiZSBjcm9zc2VkCj4gLQkgKiBmb3IgYnVmZmVyIHJlbG9jYXRpb25zIHRv IHN0b3AsIHNvIGFueSBidWZmZXIgb2YgYW4gYXJiaXRyYXJ5IHNpemUKPiAtCSAqIGNhbiBiZSBt b3ZlZCBhcyBsb25nIGFzIHRoZSB0aHJlc2hvbGQgaXNuJ3QgY3Jvc3NlZCBiZWZvcmUKPiAtCSAq IHRoZSByZWxvY2F0aW9uIHRha2VzIHBsYWNlLiBXZSBkb24ndCB3YW50IHRvIGRpc2FibGUgYnVm ZmVyCj4gLQkgKiByZWxvY2F0aW9ucyBjb21wbGV0ZWx5Lgo+ICsJaWYgKCFhZGV2LT5tbV9zdGF0 cy5sb2cyX21heF9NQnBzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXRvdGFsX3ZyYW0gPSBhZGV2 LT5tYy5yZWFsX3ZyYW1fc2l6ZSAtIGFkZXYtPnZyYW1fcGluX3NpemU7Cj4gKwl1c2VkX3ZyYW0g PSBhdG9taWM2NF9yZWFkKCZhZGV2LT52cmFtX3VzYWdlKTsKPiArCWZyZWVfdnJhbSA9IHVzZWRf dnJhbSA+PSB0b3RhbF92cmFtID8gMCA6IHRvdGFsX3ZyYW0gLSB1c2VkX3ZyYW07Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmYWRldi0+bW1fc3RhdHMubG9jayk7Cj4gKwo+ICsJLyogSW5jcmVhc2UgdGhl IGFtb3VudCBvZiBhY2N1bXVsYXRlZCB1cy4gKi8KPiArCXRpbWVfdXMgPSBrdGltZV90b191cyhr dGltZV9nZXQoKSk7Cj4gKwlpbmNyZW1lbnRfdXMgPSB0aW1lX3VzIC0gYWRldi0+bW1fc3RhdHMu bGFzdF91cGRhdGVfdXM7Cj4gKwlhZGV2LT5tbV9zdGF0cy5sYXN0X3VwZGF0ZV91cyA9IHRpbWVf dXM7Cj4gKwlhZGV2LT5tbV9zdGF0cy5hY2N1bV91cyA9IG1pbihhZGV2LT5tbV9zdGF0cy5hY2N1 bV91cyArIGluY3JlbWVudF91cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1c191cHBlcl9ib3VuZCk7Cj4gKwo+ICsJLyogVGhpcyBwcmV2ZW50cyB0aGUgc2hvcnQg cGVyaW9kIG9mIGxvdyBwZXJmb3JtYW5jZSB3aGVuIHRoZSBWUkFNCj4gKwkgKiB1c2FnZSBpcyBs b3cgYW5kIHRoZSBkcml2ZXIgaXMgaW4gZGVidCBvciBkb2Vzbid0IGhhdmUgZW5vdWdoCj4gKwkg KiBhY2N1bXVsYXRlZCB1cyB0byBmaWxsIFZSQU0gcXVpY2tseS4KPiAgIAkgKgo+IC0JICogVGhl IGlkZWEgaXMgdGhhdCBidWZmZXJzIHNob3VsZCBiZSBwbGFjZWQgaW4gVlJBTSBhdCBjcmVhdGlv biB0aW1lCj4gLQkgKiBhbmQgVFRNIHNob3VsZCBvbmx5IGRvIGEgbWluaW11bSBudW1iZXIgb2Yg cmVsb2NhdGlvbnMgZHVyaW5nCj4gLQkgKiBjb21tYW5kIHN1Ym1pc3Npb24uIEluIHByYWN0aWNl LCB5b3UgbmVlZCB0byBzdWJtaXQgYXQgbGVhc3QKPiAtCSAqIGEgZG96ZW4gSUJzIHRvIG1vdmUg YWxsIGJ1ZmZlcnMgdG8gVlJBTSBpZiB0aGV5IGFyZSBpbiBHVFQuCj4gKwkgKiBUaGUgc2l0dWF0 aW9uIGNhbiBvY2N1ciBpbiB0aGVzZSBjYXNlczoKPiArCSAqIC0gYSBsb3Qgb2YgVlJBTSBpcyBm cmVlZCBieSB1c2Vyc3BhY2UKPiArCSAqIC0gdGhlIHByZXNlbmNlIG9mIGEgYmlnIGJ1ZmZlciBj YXVzZXMgYSBsb3Qgb2YgZXZpY3Rpb25zCj4gKwkgKiAgIChzb2x1dGlvbjogc3BsaXQgYnVmZmVy cyBpbnRvIHNtYWxsZXIgb25lcykKPiAgIAkgKgo+IC0JICogQWxzbywgdGhpbmdzIGNhbiBnZXQg cHJldHR5IGNyYXp5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhbmQgYWN0dWFsCj4gLQkgKiBWUkFN IHVzYWdlIGNhbiBjaGFuZ2UgYSBsb3QsIHNvIHBsYXlpbmcgc2FmZSBldmVuIGF0IDUwJSBkb2Vz Cj4gLQkgKiBjb25zaXN0ZW50bHkgaW5jcmVhc2UgcGVyZm9ybWFuY2UuCj4gKwkgKiBJZiAxMjgg TUIgb3IgMS84dGggb2YgVlJBTSBpcyBmcmVlLCBzdGFydCBmaWxsaW5nIGl0IG5vdyBieSBzZXR0 aW5nCj4gKwkgKiBhY2N1bV91cyB0byBhIHBvc2l0aXZlIG51bWJlci4KPiAgIAkgKi8KPiArCWlm IChmcmVlX3ZyYW0gPj0gMTI4ICogMTAyNCAqIDEwMjQgfHwgZnJlZV92cmFtID49IHRvdGFsX3Zy YW0gLyA4KSB7Cj4gKwkJczY0IG1pbl91czsKPiArCj4gKwkJLyogQmUgbW9yZSBhZ2dyZXNpdmUg b24gZEdQVXMuIFRyeSB0byBmaWxsIGEgcG9ydGlvbiBvZiBmcmVlCj4gKwkJICogVlJBTSBub3cu Cj4gKwkJICovCj4gKwkJaWYgKCEoYWRldi0+ZmxhZ3MgJiBBTURfSVNfQVBVKSkKPiArCQkJbWlu X3VzID0gYnl0ZXNfdG9fdXMoYWRldiwgZnJlZV92cmFtIC8gNCk7Cj4gKwkJZWxzZQo+ICsJCQlt aW5fdXMgPSAwOyAvKiBSZXNldCBhY2N1bV91cyBvbiBBUFVzLiAqLwo+ICsKPiArCQlhZGV2LT5t bV9zdGF0cy5hY2N1bV91cyA9IG1heChtaW5fdXMsIGFkZXYtPm1tX3N0YXRzLmFjY3VtX3VzKTsK PiArCX0KPiAgIAo+IC0JdTY0IGhhbGZfdnJhbSA9IHJlYWxfdnJhbV9zaXplID4+IDE7Cj4gLQl1 NjQgaGFsZl9mcmVlX3ZyYW0gPSB2cmFtX3VzYWdlID49IGhhbGZfdnJhbSA/IDAgOiBoYWxmX3Zy YW0gLSB2cmFtX3VzYWdlOwo+IC0JdTY0IGJ5dGVzX21vdmVkX3RocmVzaG9sZCA9IGhhbGZfZnJl ZV92cmFtID4+IDE7Cj4gLQlyZXR1cm4gbWF4KGJ5dGVzX21vdmVkX3RocmVzaG9sZCwgMTAyNCox MDI0dWxsKTsKPiArCS8qIFRoaXMgcmV0dXJucyAwIGlmIHRoZSBkcml2ZXIgaXMgaW4gZGVidCB0 byBkaXNhbGxvdyAob3B0aW9uYWwpCj4gKwkgKiBidWZmZXIgbW92ZXMuCj4gKwkgKi8KPiArCW1h eF9ieXRlcyA9IHVzX3RvX2J5dGVzKGFkZXYsIGFkZXYtPm1tX3N0YXRzLmFjY3VtX3VzKTsKPiAr Cj4gKwltdXRleF91bmxvY2soJmFkZXYtPm1tX3N0YXRzLmxvY2spOwo+ICsJcmV0dXJuIG1heF9i eXRlczsKPiArfQo+ICsKPiArLyogUmVwb3J0IGhvdyBtYW55IGJ5dGVzIGhhdmUgcmVhbGx5IGJl ZW4gbW92ZWQgZm9yIHRoZSBsYXN0IGNvbW1hbmQKPiArICogc3VibWlzc2lvbi4gVGhpcyBjYW4g cmVzdWx0IGluIGEgZGVidCB0aGF0IGNhbiBzdG9wIGJ1ZmZlciBtaWdyYXRpb25zCj4gKyAqIHRl bXBvcmFyaWx5Lgo+ICsgKi8KPiArc3RhdGljIHZvaWQgYW1kZ3B1X2NzX3JlcG9ydF9tb3ZlZF9i eXRlcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiArCQkJCQkgdTY0IG51bV9ieXRlcykK PiArewo+ICsJbXV0ZXhfbG9jaygmYWRldi0+bW1fc3RhdHMubG9jayk7Cj4gKwlhZGV2LT5tbV9z dGF0cy5hY2N1bV91cyAtPSBieXRlc190b191cyhhZGV2LCBudW1fYnl0ZXMpOwo+ICsJbXV0ZXhf dW5sb2NrKCZhZGV2LT5tbV9zdGF0cy5sb2NrKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBh bWRncHVfY3NfYm9fdmFsaWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gICAJCQkJ IHN0cnVjdCBhbWRncHVfYm8gKmJvKQo+ICAgewo+ICAgCXU2NCBpbml0aWFsX2J5dGVzX21vdmVk Owo+ICAgCXVpbnQzMl90IGRvbWFpbjsKPiAgIAlpbnQgcjsKPiAgIAo+ICAgCWlmIChiby0+cGlu X2NvdW50KQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JLyogQXZvaWQgbW92aW5nIHRoaXMgb25l IGlmIHdlIGhhdmUgbW92ZWQgdG9vIG1hbnkgYnVmZmVycwo+IC0JICogZm9yIHRoaXMgSUIgYWxy ZWFkeS4KPiAtCSAqCj4gLQkgKiBOb3RlIHRoYXQgdGhpcyBhbGxvd3MgbW92aW5nIGF0IGxlYXN0 IG9uZSBidWZmZXIgb2YKPiAtCSAqIGFueSBzaXplLCBiZWNhdXNlIGl0IGRvZXNuJ3QgdGFrZSB0 aGUgY3VycmVudCAiYm8iCj4gLQkgKiBpbnRvIGFjY291bnQuIFdlIGRvbid0IHdhbnQgdG8gZGlz YWxsb3cgYnVmZmVyIG1vdmVzCj4gLQkgKiBjb21wbGV0ZWx5Lgo+ICsJLyogRG9uJ3QgbW92ZSB0 aGlzIGJ1ZmZlciBpZiB3ZSBoYXZlIGRlcGxldGVkIG91ciBhbGxvd2FuY2UKPiArCSAqIHRvIG1v dmUgaXQuIERvbid0IG1vdmUgYW55dGhpbmcgaWYgdGhlIHRocmVzaG9sZCBpcyB6ZXJvLgo+ICAg CSAqLwo+IC0JaWYgKHAtPmJ5dGVzX21vdmVkIDw9IHAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCkK PiArCWlmIChwLT5ieXRlc19tb3ZlZCA8IHAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCkKPiAgIAkJ ZG9tYWluID0gYm8tPnByZWZlcmVkX2RvbWFpbnM7Cj4gICAJZWxzZQo+ICAgCQlkb21haW4gPSBi by0+YWxsb3dlZF9kb21haW5zOwo+ICAgCj4gICByZXRyeToKPiAgIAlhbWRncHVfdHRtX3BsYWNl bWVudF9mcm9tX2RvbWFpbihibywgZG9tYWluKTsKPiAgIAlpbml0aWFsX2J5dGVzX21vdmVkID0g YXRvbWljNjRfcmVhZCgmYm8tPmFkZXYtPm51bV9ieXRlc19tb3ZlZCk7Cj4gICAJciA9IHR0bV9i b192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsIHRydWUsIGZhbHNlKTsKPiAgIAlw LT5ieXRlc19tb3ZlZCArPSBhdG9taWM2NF9yZWFkKCZiby0+YWRldi0+bnVtX2J5dGVzX21vdmVk KSAtCj4gICAJCWluaXRpYWxfYnl0ZXNfbW92ZWQ7Cj4gQEAgLTQ4OCwyMCArNTQyLDIyIEBAIHN0 YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAs Cj4gICAJCURSTV9FUlJPUigiYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoZHVwbGljYXRlcykgZmFp bGVkLlxuIik7Cj4gICAJCWdvdG8gZXJyb3JfdmFsaWRhdGU7Cj4gICAJfQo+ICAgCj4gICAJciA9 IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHAsICZwLT52YWxpZGF0ZWQpOwo+ICAgCWlmIChyKSB7 Cj4gICAJCURSTV9FUlJPUigiYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUodmFsaWRhdGVkKSBmYWls ZWQuXG4iKTsKPiAgIAkJZ290byBlcnJvcl92YWxpZGF0ZTsKPiAgIAl9Cj4gICAKPiArCWFtZGdw dV9jc19yZXBvcnRfbW92ZWRfYnl0ZXMocC0+YWRldiwgcC0+Ynl0ZXNfbW92ZWQpOwo+ICsKPiAg IAlmcHJpdi0+dm0ubGFzdF9ldmljdGlvbl9jb3VudGVyID0KPiAgIAkJYXRvbWljNjRfcmVhZCgm cC0+YWRldi0+bnVtX2V2aWN0aW9ucyk7Cj4gICAKPiAgIAlpZiAocC0+Ym9fbGlzdCkgewo+ICAg CQlzdHJ1Y3QgYW1kZ3B1X2JvICpnZHMgPSBwLT5ib19saXN0LT5nZHNfb2JqOwo+ICAgCQlzdHJ1 Y3QgYW1kZ3B1X2JvICpnd3MgPSBwLT5ib19saXN0LT5nd3Nfb2JqOwo+ICAgCQlzdHJ1Y3QgYW1k Z3B1X2JvICpvYSA9IHAtPmJvX2xpc3QtPm9hX29iajsKPiAgIAkJc3RydWN0IGFtZGdwdV92bSAq dm0gPSAmZnByaXYtPnZtOwo+ICAgCQl1bnNpZ25lZCBpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+IGluZGV4IDI2MDgxMzguLjllYWUxOTggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4gQEAgLTE1 MjEsMjAgKzE1MjEsMjEgQEAgc3RhdGljIGJvb2wgYW1kZ3B1X2RldmljZV9pc192aXJ0dWFsKHZv aWQpCj4gICAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgYW4gZXJyb3Igb24gZmFpbHVyZS4K PiAgICAqIENhbGxlZCBhdCBkcml2ZXIgc3RhcnR1cC4KPiAgICAqLwo+ICAgaW50IGFtZGdwdV9k ZXZpY2VfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAkJICAgICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZGV2LAo+ICAgCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4g ICAJCSAgICAgICB1aW50MzJfdCBmbGFncykKPiAgIHsKPiAgIAlpbnQgciwgaTsKPiAgIAlib29s IHJ1bnRpbWUgPSBmYWxzZTsKPiArCXUzMiBtYXhfTUJwczsKPiAgIAo+ICAgCWFkZXYtPnNodXRk b3duID0gZmFsc2U7Cj4gICAJYWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKPiAgIAlhZGV2LT5kZGV2 ID0gZGRldjsKPiAgIAlhZGV2LT5wZGV2ID0gcGRldjsKPiAgIAlhZGV2LT5mbGFncyA9IGZsYWdz Owo+ICAgCWFkZXYtPmFzaWNfdHlwZSA9IGZsYWdzICYgQU1EX0FTSUNfTUFTSzsKPiAgIAlhZGV2 LT5pc19hdG9tX2Jpb3MgPSBmYWxzZTsKPiAgIAlhZGV2LT51c2VjX3RpbWVvdXQgPSBBTURHUFVf TUFYX1VTRUNfVElNRU9VVDsKPiAgIAlhZGV2LT5tYy5ndHRfc2l6ZSA9IDUxMiAqIDEwMjQgKiAx MDI0Owo+IEBAIC0xNTY2LDIwICsxNTY3LDIxIEBAIGludCBhbWRncHVfZGV2aWNlX2luaXQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBw ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlLCBwZGV2LT5yZXZpc2lvbik7Cj4gICAKPiAgIAkvKiBtdXRl eCBpbml0aWFsaXphdGlvbiBhcmUgYWxsIGRvbmUgaGVyZSBzbyB3ZQo+ICAgCSAqIGNhbiByZWNh bGwgZnVuY3Rpb24gd2l0aG91dCBoYXZpbmcgbG9ja2luZyBpc3N1ZXMgKi8KPiAgIAltdXRleF9p bml0KCZhZGV2LT52bV9tYW5hZ2VyLmxvY2spOwo+ICAgCWF0b21pY19zZXQoJmFkZXYtPmlycS5p aC5sb2NrLCAwKTsKPiAgIAltdXRleF9pbml0KCZhZGV2LT5wbS5tdXRleCk7Cj4gICAJbXV0ZXhf aW5pdCgmYWRldi0+Z2Z4LmdwdV9jbG9ja19tdXRleCk7Cj4gICAJbXV0ZXhfaW5pdCgmYWRldi0+ c3JibV9tdXRleCk7Cj4gICAJbXV0ZXhfaW5pdCgmYWRldi0+Z3JibV9pZHhfbXV0ZXgpOwo+ICsJ bXV0ZXhfaW5pdCgmYWRldi0+bW1fc3RhdHMubG9jayk7Cj4gICAJbXV0ZXhfaW5pdCgmYWRldi0+ bW5fbG9jayk7Cj4gICAJaGFzaF9pbml0KGFkZXYtPm1uX2hhc2gpOwo+ICAgCj4gICAJYW1kZ3B1 X2NoZWNrX2FyZ3VtZW50cyhhZGV2KTsKPiAgIAo+ICAgCS8qIFJlZ2lzdGVycyBtYXBwaW5nICov Cj4gICAJLyogVE9ETzogYmxvY2sgdXNlcnNwYWNlIG1hcHBpbmcgb2YgaW8gcmVnaXN0ZXIgKi8K PiAgIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+bW1pb19pZHhfbG9jayk7Cj4gICAJc3Bpbl9sb2Nr X2luaXQoJmFkZXYtPnNtY19pZHhfbG9jayk7Cj4gICAJc3Bpbl9sb2NrX2luaXQoJmFkZXYtPnBj aWVfaWR4X2xvY2spOwo+IEBAIC0xNjkzLDIwICsxNjk1LDI4IEBAIGludCBhbWRncHVfZGV2aWNl X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAKPiAgIAlyID0gYW1kZ3B1X2lu aXQoYWRldik7Cj4gICAJaWYgKHIpIHsKPiAgIAkJZGV2X2VycihhZGV2LT5kZXYsICJhbWRncHVf aW5pdCBmYWlsZWRcbiIpOwo+ICAgCQlhbWRncHVfZmluaShhZGV2KTsKPiAgIAkJZ290byBmYWls ZWQ7Cj4gICAJfQo+ICAgCj4gICAJYWRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7Cj4gICAKPiAr CS8qIEluaXRpYWxpemUgdGhlIGJ1ZmZlciBtaWdyYXRpb24gbGltaXQuICovCj4gKwlpZiAoYW1k Z3B1X21vdmVyYXRlID49IDApCj4gKwkJbWF4X01CcHMgPSBhbWRncHVfbW92ZXJhdGU7Cj4gKwll bHNlCj4gKwkJbWF4X01CcHMgPSA4OyAvKiBBbGxvdyA4IE1CL3MuICovCj4gKwkvKiBHZXQgYSBs b2cyIGZvciBlYXN5IGRpdmlzaW9ucy4gKi8KPiArCWFkZXYtPm1tX3N0YXRzLmxvZzJfbWF4X01C cHMgPSBpbG9nMihtYXgoMXUsIG1heF9NQnBzKSk7Cj4gKwo+ICAgCWFtZGdwdV9mYmRldl9pbml0 KGFkZXYpOwo+ICAgCj4gICAJciA9IGFtZGdwdV9pYl9wb29sX2luaXQoYWRldik7Cj4gICAJaWYg KHIpIHsKPiAgIAkJZGV2X2VycihhZGV2LT5kZXYsICJJQiBpbml0aWFsaXphdGlvbiBmYWlsZWQg KCVkKS5cbiIsIHIpOwo+ICAgCQlnb3RvIGZhaWxlZDsKPiAgIAl9Cj4gICAKPiAgIAlyID0gYW1k Z3B1X2liX3JpbmdfdGVzdHMoYWRldik7Cj4gICAJaWYgKHIpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kcnYuYwo+IGluZGV4IDViY2ZlZWQuLmZlMmQyNmIgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCj4gQEAgLTU0LDIwICs1NCwyMSBAQAo+ ICAgICogICAgICAgICAgIGF0IHRoZSBlbmQgb2YgSUJzLgo+ICAgICogLSAzLjMuMCAtIEFkZCBW TSBzdXBwb3J0IGZvciBVVkQgb24gc3VwcG9ydGVkIGhhcmR3YXJlLgo+ICAgICogLSAzLjQuMCAt IEFkZCBBTURHUFVfSU5GT19OVU1fRVZJQ1RJT05TLgo+ICAgICovCj4gICAjZGVmaW5lIEtNU19E UklWRVJfTUFKT1IJMwo+ICAgI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTQKPiAgICNkZWZpbmUg S01TX0RSSVZFUl9QQVRDSExFVkVMCTAKPiAgIAo+ICAgaW50IGFtZGdwdV92cmFtX2xpbWl0ID0g MDsKPiAgIGludCBhbWRncHVfZ2FydF9zaXplID0gLTE7IC8qIGF1dG8gKi8KPiAraW50IGFtZGdw dV9tb3ZlcmF0ZSA9IC0xOyAvKiBhdXRvICovCj4gICBpbnQgYW1kZ3B1X2JlbmNobWFya2luZyA9 IDA7Cj4gICBpbnQgYW1kZ3B1X3Rlc3RpbmcgPSAwOwo+ICAgaW50IGFtZGdwdV9hdWRpbyA9IC0x Owo+ICAgaW50IGFtZGdwdV9kaXNwX3ByaW9yaXR5ID0gMDsKPiAgIGludCBhbWRncHVfaHdfaTJj ID0gMDsKPiAgIGludCBhbWRncHVfcGNpZV9nZW4yID0gLTE7Cj4gICBpbnQgYW1kZ3B1X21zaSA9 IC0xOwo+ICAgaW50IGFtZGdwdV9sb2NrdXBfdGltZW91dCA9IDA7Cj4gICBpbnQgYW1kZ3B1X2Rw bSA9IC0xOwo+ICAgaW50IGFtZGdwdV9zbWNfbG9hZF9mdyA9IDE7Cj4gQEAgLTkyLDIwICs5Mywy MyBAQCB1bnNpZ25lZCBhbWRncHVfcGNpZV9sYW5lX2NhcCA9IDA7Cj4gICB1bnNpZ25lZCBhbWRn cHVfY2dfbWFzayA9IDB4ZmZmZmZmZmY7Cj4gICB1bnNpZ25lZCBhbWRncHVfcGdfbWFzayA9IDB4 ZmZmZmZmZmY7Cj4gICBjaGFyICphbWRncHVfdmlydHVhbF9kaXNwbGF5ID0gTlVMTDsKPiAgIAo+ ICAgTU9EVUxFX1BBUk1fREVTQyh2cmFtbGltaXQsICJSZXN0cmljdCBWUkFNIGZvciB0ZXN0aW5n LCBpbiBtZWdhYnl0ZXMiKTsKPiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtbGltaXQsIGFtZGdw dV92cmFtX2xpbWl0LCBpbnQsIDA2MDApOwo+ICAgCj4gICBNT0RVTEVfUEFSTV9ERVNDKGdhcnRz aXplLCAiU2l6ZSBvZiBQQ0lFL0lHUCBnYXJ0IHRvIHNldHVwIGluIG1lZ2FieXRlcyAoMzIsIDY0 LCBldGMuLCAtMSA9IGF1dG8pIik7Cj4gICBtb2R1bGVfcGFyYW1fbmFtZWQoZ2FydHNpemUsIGFt ZGdwdV9nYXJ0X3NpemUsIGludCwgMDYwMCk7Cj4gICAKPiArTU9EVUxFX1BBUk1fREVTQyhtb3Zl cmF0ZSwgIk1heGltdW0gYnVmZmVyIG1pZ3JhdGlvbiByYXRlIGluIE1CL3MuICgzMiwgNjQsIGV0 Yy4sIC0xPWF1dG8sIDA9MT1kaXNhYmxlZCkiKTsKPiArbW9kdWxlX3BhcmFtX25hbWVkKG1vdmVy YXRlLCBhbWRncHVfbW92ZXJhdGUsIGludCwgMDYwMCk7Cj4gKwo+ICAgTU9EVUxFX1BBUk1fREVT QyhiZW5jaG1hcmssICJSdW4gYmVuY2htYXJrIik7Cj4gICBtb2R1bGVfcGFyYW1fbmFtZWQoYmVu Y2htYXJrLCBhbWRncHVfYmVuY2htYXJraW5nLCBpbnQsIDA0NDQpOwo+ICAgCj4gICBNT0RVTEVf UEFSTV9ERVNDKHRlc3QsICJSdW4gdGVzdHMiKTsKPiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZXN0 LCBhbWRncHVfdGVzdGluZywgaW50LCAwNDQ0KTsKPiAgIAo+ICAgTU9EVUxFX1BBUk1fREVTQyhh dWRpbywgIkF1ZGlvIGVuYWJsZSAoLTEgPSBhdXRvLCAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSki KTsKPiAgIG1vZHVsZV9wYXJhbV9uYW1lZChhdWRpbywgYW1kZ3B1X2F1ZGlvLCBpbnQsIDA0NDQp Owo+ICAgCj4gICBNT0RVTEVfUEFSTV9ERVNDKGRpc3BfcHJpb3JpdHksICJEaXNwbGF5IFByaW9y aXR5ICgwID0gYXV0bywgMSA9IG5vcm1hbCwgMiA9IGhpZ2gpIik7CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK