From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] igt/gem_tiled_wc: Exercise wc mmaps with swizzling Date: Tue, 4 Nov 2014 10:43:23 +0100 Message-ID: <20141104094323.GD26941@phenom.ffwll.local> References: <20141103114137.GO26941@phenom.ffwll.local> <1415086524-18421-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by gabe.freedesktop.org (Postfix) with ESMTP id 08E1F6E51C for ; Tue, 4 Nov 2014 01:43:09 -0800 (PST) Received: by mail-wi0-f181.google.com with SMTP id n3so8727164wiv.14 for ; Tue, 04 Nov 2014 01:43:09 -0800 (PST) Content-Disposition: inline In-Reply-To: <1415086524-18421-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMDQsIDIwMTQgYXQgMDc6MzU6MjRBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFRoaXMgZXhlcmNpc2VzIGJvdGggdGhlIHdjIG1tYXBwaW5ncyBhbmQgdGhlIGV4dGVu ZGVkIGdldF90aWxpbmcgaW9jdGwuCj4gVXNlcnNwYWNlIGNhbm5vdCBoYW5kbGUgYml0MTcgc3dp enpsaW5nIHRocm91Z2ggd2MgbW1hcHMgKGJlY2F1c2UgYml0MTcKPiByZXF1aXJlcyBzd2l6emxp bmcgYmFzZWQgb24gdGhlIGFjdHVhbCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwYWdlIC0KPiB3 aGljaCBpcyB1bmtub3duIHRvIHVzZXJzcGFjZSkgYW5kIHNvIHdlIG5lZWQgYW4gZXh0ZW5kZWQg Z2V0X3RpbGluZwo+IGlvY3RsIHRvIHJlcG9ydCB0aGUgYWN0dWFsIGFzIHdlbGwgYXMgdGhlIGxv Z2ljYWwgc3dpenpsaW5nIG9uIGFuCj4gb2JqZWN0LiBXZSB0aGVuIGNoZWNrIHRoYXQgdGhlIGNv bnRlbnRzIG9mIHRoZSBvYmplY3QgYXJlIHRpbGVkIGFuZAo+IHN3aXp6bGVkIGNvcnJlY3RseSB3 aGVuIHZpZXdlZCB0aHJvdWdoIGEgd2MgbW1hcC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgdGVzdHMvLmdpdGlnbm9y ZSAgICAgICB8ICAgMSArCj4gIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICB0ZXN0 cy9nZW1fdGlsZWRfd2MuYyAgIHwgMjQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAyNDMgaW5zZXJ0aW9ucygrKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3RpbGVkX3djLmMKPiAKPiBkaWZmIC0tZ2l0 IGEvdGVzdHMvLmdpdGlnbm9yZSBiL3Rlc3RzLy5naXRpZ25vcmUKPiBpbmRleCA2YzQ4NWYwLi43 MDIzZWRlIDEwMDY0NAo+IC0tLSBhL3Rlc3RzLy5naXRpZ25vcmUKPiArKysgYi90ZXN0cy8uZ2l0 aWdub3JlCj4gQEAgLTEwMCw2ICsxMDAsNyBAQCBnZW1fdGlsZWRfcGFydGlhbF9wd3JpdGVfcHJl YWQKPiAgZ2VtX3RpbGVkX3ByZWFkCj4gIGdlbV90aWxlZF9wcmVhZF9wd3JpdGUKPiAgZ2VtX3Rp bGVkX3N3YXBwaW5nCj4gK2dlbV90aWxlZF93Ywo+ICBnZW1fdGlsaW5nX21heF9zdHJpZGUKPiAg Z2VtX3VuZmVuY2VfYWN0aXZlX2J1ZmZlcnMKPiAgZ2VtX3VucmVmX2FjdGl2ZV9idWZmZXJzCj4g ZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCj4gaW5kZXggNmU1NDU4YS4uZDRhMjAzYyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0xMzMsNiArMTMz LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gIAlnZW1fdGlsZWRfcHJlYWQgXAo+ICAJZ2VtX3RpbGVk X3ByZWFkX3B3cml0ZSBcCj4gIAlnZW1fdGlsZWRfc3dhcHBpbmcgXAo+ICsJZ2VtX3RpbGVkX3dj IFwKPiAgCWdlbV90aWxpbmdfbWF4X3N0cmlkZSBcCj4gIAlnZW1fdW5mZW5jZV9hY3RpdmVfYnVm ZmVycyBcCj4gIAlnZW1fdW5yZWZfYWN0aXZlX2J1ZmZlcnMgXAo+IGRpZmYgLS1naXQgYS90ZXN0 cy9nZW1fdGlsZWRfd2MuYyBiL3Rlc3RzL2dlbV90aWxlZF93Yy5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hZDA5YmM5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rl c3RzL2dlbV90aWxlZF93Yy5jCj4gQEAgLTAsMCArMSwyNDEgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICogQXV0aG9yczoKPiArICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5l dD4KPiArICoKPiArICovCj4gKwo+ICsvKiogQGZpbGUgZ2VtX3RpbGVkX3ByZWFkLmMKPiArICoK PiArICogVGhpcyBpcyBhIHRlc3Qgb2YgcHJlYWQncyBiZWhhdmlvciBvbiB0aWxlZCBvYmplY3Rz IHdpdGggcmVzcGVjdCB0byB0aGUKPiArICogcmVwb3J0ZWQgc3dpenpsaW5nIHZhbHVlLgo+ICsg Kgo+ICsgKiBUaGUgZ29hbCBpcyB0byBleGVyY2lzZSB0aGUgc2xvd19iaXQxN19jb3B5IHBhdGgg Zm9yIHJlYWRpbmcgb24gYml0MTcKPiArICogbWFjaGluZXMsIGJ1dCB3aWxsIGFsc28gYmUgdXNl ZnVsIGZvciBjYXRjaGluZyBzd2l6emxpbmcgdmFsdWUgYnVncyBvbgo+ICsgKiBvdGhlciBzeXN0 ZW1zLgo+ICsgKi8KCkkgZ3Vlc3MgdGhpcyBzaG91bGQgYmUgdXBkYXRlLCBvdGhlciBUaG9tYXMg V29vZCB3aWxsIHB1dCBhIGJvZ3VzCmRlc2NyaXB0aW9uIGluIDstKQoKPiArCj4gKyNpbmNsdWRl IDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4K PiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVk ZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvdGlt ZS5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2lu Y2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNs dWRlICJpbnRlbF9pby5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsKPiArI2Rl ZmluZSBXSURUSCA1MTIKPiArI2RlZmluZSBIRUlHSFQgNTEyCj4gKyNkZWZpbmUgU0laRSAoV0lE VEgqSEVJR0hUKnNpemVvZih1aW50MzJfdCkpCj4gKwo+ICsjZGVmaW5lIFBBR0VfU0laRSA0MDk2 Cj4gKwo+ICtzdGF0aWMgaW50IHRpbGVfd2lkdGg7Cj4gK3N0YXRpYyBpbnQgdGlsZV9oZWlnaHQ7 Cj4gK3N0YXRpYyBpbnQgdGlsZV9zaXplOwo+ICsKPiArc3RhdGljIHVpbnQzMl90Cj4gK2NyZWF0 ZV9ibyhpbnQgZmQpCj4gK3sKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90ICpkYXRh Owo+ICsJaW50IGk7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgU2l6RSk7Cj4gKwln ZW1fc2V0X3RpbGluZyhmZCwgaGFuZGxlLCBJOTE1X1RJTElOR19YLCBXSURUSCAqIHNpemVvZih1 aW50MzJfdCkpOwo+ICsKPiArCS8qIEZpbGwgdGhlIEJPIHdpdGggZHdvcmRzIHN0YXJ0aW5nIGF0 IHN0YXJ0X3ZhbCAqLwo+ICsJZGF0YSA9IGdlbV9tbWFwX193YyhmZCwgaGFuZGxlLCBTSVpFLCBQ Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWZvciAoaSA9IDA7IGkgPCBXSURUSCpIRUlHSFQ7 IGkrKykKPiArCQlkYXRhW2ldID0gaTsKPiArCW11bm1hcChkYXRhLCBTSVpFKTsKPiArCj4gKwly ZXR1cm4gaGFuZGxlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK3N3aXp6bGVfYml0KGludCBi aXQsIGludCBvZmZzZXQpCj4gK3sKPiArCXJldHVybiAob2Zmc2V0ICYgKDEgPDwgYml0KSkgPj4g KGJpdCAtIDYpOwo+ICt9Cj4gKwo+ICsvKiBUcmFuc2xhdGUgZnJvbSBhIHN3aXp6bGVkIG9mZnNl dCBpbiB0aGUgdGlsZWQgYnVmZmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nCj4gKyAqIHZhbHVlIGZy b20gdGhlIG9yaWdpbmFsIGxpbmVhciBidWZmZXIuCj4gKyAqLwo+ICtzdGF0aWMgdWludDMyX3QK PiArY2FsY3VsYXRlX2V4cGVjdGVkKGludCBvZmZzZXQpCj4gK3sKPiArCWludCB0aWxlX29mZiA9 IG9mZnNldCAmICh0aWxlX3NpemUgLSAxKTsKPiArCWludCB0aWxlX2Jhc2UgPSBvZmZzZXQgJiAt dGlsZV9zaXplOwo+ICsJaW50IHRpbGVfaW5kZXggPSB0aWxlX2Jhc2UgLyB0aWxlX3NpemU7Cj4g KwlpbnQgdGlsZXNfcGVyX3JvdyA9IDQqV0lEVEggLyB0aWxlX3dpZHRoOwo+ICsKPiArCS8qIGJh c2UgeCx5IHZhbHVlcyBmcm9tIHRoZSB0aWxlIChwYWdlKSBpbmRleC4gKi8KPiArCWludCBiYXNl X3kgPSB0aWxlX2luZGV4IC8gdGlsZXNfcGVyX3JvdyAqIHRpbGVfaGVpZ2h0Owo+ICsJaW50IGJh c2VfeCA9IHRpbGVfaW5kZXggJSB0aWxlc19wZXJfcm93ICogKHRpbGVfd2lkdGgvNCk7Cj4gKwo+ ICsJLyogeCwgeSBvZmZzZXRzIHdpdGhpbiB0aGUgdGlsZSAqLwo+ICsJaW50IHRpbGVfeSA9IHRp bGVfb2ZmIC8gdGlsZV93aWR0aDsKPiArCWludCB0aWxlX3ggPSAodGlsZV9vZmYgJSB0aWxlX3dp ZHRoKSAvIDQ7Cj4gKwo+ICsJaWd0X2RlYnVnKCIlM2QsICUzZCwgJTNkLCUzZFxuIiwgYmFzZV94 LCBiYXNlX3ksIHRpbGVfeCwgdGlsZV95KTsKPiArCXJldHVybiAoYmFzZV95ICsgdGlsZV95KSAq IFdJRFRIICsgYmFzZV94ICsgdGlsZV94Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtnZXRf dGlsaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCAqdGlsaW5nLCB1aW50MzJf dCAqc3dpenpsZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nMiB7Cj4g KwkJdWludDMyX3QgaGFuZGxlOwo+ICsJCXVpbnQzMl90IHRpbGluZ19tb2RlOwo+ICsJCXVpbnQz Ml90IHN3aXp6bGVfbW9kZTsKPiArCQl1aW50MzJfdCBwaHlzX3N3aXp6bGVfbW9kZTsKPiArCX0g YXJnOwo+ICsjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfVElMSU5HMglEUk1fSU9XUiAo RFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2dldF90aWxpbmcyKQo+ICsKPiArCW1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7 Cj4gKwlhcmcuaGFuZGxlID0gaGFuZGxlOwo+ICsKPiArCWRvX29yX2RpZShkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcyLCAmYXJnKSk7Cj4gKwlpZ3RfcmVxdWllZShh cmcucGh5c19zd2l6emxlX21vZGUgPT0gYXJnLnN3aXp6bGVfbW9kZSk7Cj4gKwo+ICsJKnRpbGlu ZyA9IGFyZy50aWxpbmdfbW9kZTsKPiArCSpzd2l6emxlID0gYXJnLnN3aXp6bGVfbW9kZTsKPiAr fQo+ICsKPiAraWd0X3NpbXBsZV9tYWluCj4gK3sKPiArCWludCBmZDsKPiArCWludCBpLCBpdGVy ID0gMTAwOwo+ICsJdWludDMyX3QgdGlsaW5nLCBzd2l6emxlOwo+ICsJdWludDMyX3QgaGFuZGxl Owo+ICsKPiArCWZkID0gZHJtX29wZW5fYW55KCk7Cj4gKwo+ICsJaWd0X3JlcXVpcmVfbW1hcF93 YyhmZCk7Cj4gKwlnZXRfdGlsaW5nKGZkLCBoYW5kbGUsICZ0aWxpbmcsICZzd2l6emxlKTsKPiAr Cj4gKwlpZiAoSVNfR0VOMihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpIHsKPiArCQl0aWxlX2hl aWdodCA9IDE2Owo+ICsJCXRpbGVfd2lkdGggPSAxMjg7Cj4gKwkJdGlsZV9zaXplID0gMjA0ODsK PiArCX0gZWxzZSB7Cj4gKwkJdGlsZV9oZWlnaHQgPSA4Owo+ICsJCXRpbGVfd2lkdGggPSA1MTI7 Cj4gKwkJdGlsZV9zaXplID0gUEFHRV9TSVpFOwo+ICsJfQo+ICsKPiArCWhhbmRsZSA9IGNyZWF0 ZV9ibyhmZCk7Cj4gKwo+ICsJLyogUmVhZCBhIGJ1bmNoIG9mIHJhbmRvbSBzdWJzZXRzIG9mIHRo ZSBkYXRhIGFuZCBjaGVjayB0aGF0IHRoZXkgY29tZQo+ICsJICogb3V0IHJpZ2h0Lgo+ICsJICov Cj4gKwlmb3IgKGkgPSAwOyBpIDwgaXRlcjsgaSsrKSB7Cj4gKwkJaW50IHNpemUgPSBXSURUSCAq IEhFSUdIVCAqIDQ7Cj4gKwkJaW50IG9mZnNldCA9IChyYW5kb20oKSAlIHNpemUpICYgfjM7Cj4g KwkJaW50IGxlbiA9IChyYW5kb20oKSAlIHNpemUpICYgfjM7Cj4gKwkJaW50IGZpcnN0X3BhZ2Us IGxhc3RfcGFnZTsKPiArCQl1aW50MzJfdCAqbGluZWFyOwo+ICsJCWludCBqOwo+ICsKPiArCQlp ZiAobGVuID09IDApCj4gKwkJCWxlbiA9IDQ7Cj4gKwo+ICsJCWlmIChvZmZzZXQgKyBsZW4gPiBz aXplKQo+ICsJCQlsZW4gPSBzaXplIC0gb2Zmc2V0Owo+ICsKPiArCQlpZiAoaSA9PSAwKSB7Cj4g KwkJCW9mZnNldCA9IDA7Cj4gKwkJCWxlbiA9IHNpemU7Cj4gKwkJfQo+ICsKPiArCQlmaXJzdF9w YWdlID0gb2Zmc2V0ICYgfjQwOTU7Cj4gKwkJbGFzdF9wYWdlID0gKG9mZnNldCArIGxlbiArIDQw OTUpICYgfjQwOTU7Cj4gKwkJb2Zmc2V0IC09IGZpcnN0X3BhZ2U7Cj4gKwo+ICsJCWxpbmVhciA9 IGdlbV9tbWFwX193YyhmZCwgaGFuZGxlLCBmaXJzdF9wYWdlLCBsYXN0X3BhZ2UgLSBmaXJzdF9w YWdlLCBQUk9UX1JFQUQpOwo+ICsJCWlndF9hc3NlcnQobGluZWFyKTsKPiArCj4gKwkJLyogVHJh bnNsYXRlIGZyb20gb2Zmc2V0cyBpbiB0aGUgcmVhZCBidWZmZXIgdG8gdGhlIHN3aXp6bGVkCj4g KwkJICogYWRkcmVzcyB0aGF0IGl0IGNvcnJlc3BvbmRzIHRvLiAgVGhpcyBpcyB0aGUgb3Bwb3Np dGUgb2YKPiArCQkgKiB3aGF0IE1lc2EgZG9lcyAoY2FsY3VsYXRlIG9mZnNldCB0byBiZSByZWFk IGdpdmVuIHRoZSBsaW5lYXIKPiArCQkgKiBvZmZzZXQgaXQncyBsb29raW5nIGZvcikuCj4gKwkJ ICovCj4gKwkJZm9yIChqID0gb2Zmc2V0OyBqIDwgb2Zmc2V0ICsgbGVuOyBqICs9IDQpIHsKPiAr CQkJdWludDMyX3QgZXhwZWN0ZWRfdmFsLCBmb3VuZF92YWw7Cj4gKwkJCWludCBzd2l6emxlZF9v ZmZzZXQ7Cj4gKwkJCWNvbnN0IGNoYXIgKnN3aXp6bGVfc3RyOwo+ICsKPiArCQkJc3dpdGNoIChz d2l6emxlKSB7Cj4gKwkJCWNhc2UgSTkxNV9CSVRfNl9TV0laWkxFX05PTkU6Cj4gKwkJCQlzd2l6 emxlZF9vZmZzZXQgPSBqOwo+ICsJCQkJc3dpenpsZV9zdHIgPSAibm9uZSI7Cj4gKwkJCQlicmVh azsKPiArCQkJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOToKPiArCQkJCXN3aXp6bGVkX29mZnNl dCA9IGogXgo+ICsJCQkJCXN3aXp6bGVfYml0KDksIGopOwo+ICsJCQkJc3dpenpsZV9zdHIgPSAi Yml0OSI7Cj4gKwkJCQlicmVhazsKPiArCQkJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDoK PiArCQkJCXN3aXp6bGVkX29mZnNldCA9IGogXgo+ICsJCQkJCXN3aXp6bGVfYml0KDksIGopIF4K PiArCQkJCQlzd2l6emxlX2JpdCgxMCwgaik7Cj4gKwkJCQlzd2l6emxlX3N0ciA9ICJiaXQ5XjEw IjsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85XzExOgo+ICsJ CQkJc3dpenpsZWRfb2Zmc2V0ID0gaiBeCj4gKwkJCQkJc3dpenpsZV9iaXQoOSwgaikgXgo+ICsJ CQkJCXN3aXp6bGVfYml0KDExLCBqKTsKPiArCQkJCXN3aXp6bGVfc3RyID0gImJpdDleMTEiOwo+ ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTBfMTE6Cj4gKwkJ CQlzd2l6emxlZF9vZmZzZXQgPSBqIF4KPiArCQkJCQlzd2l6emxlX2JpdCg5LCBqKSBeCj4gKwkJ CQkJc3dpenpsZV9iaXQoMTAsIGopIF4KPiArCQkJCQlzd2l6emxlX2JpdCgxMSwgaik7Cj4gKwkJ CQlzd2l6emxlX3N0ciA9ICJiaXQ5XjEwXjExIjsKPiArCQkJCWJyZWFrOwoKSSB0aGluayBhbiBl eHBsaWNpdCBsaXN0IG9mIGFsbCB0aGUgYml0MTcgc3dpenpsZSBtb2RlcyB3ZSBrbm93IGFib3V0 IHdpdGgKYW4gaWd0X3NraXAoImJpdDE3IHN3aXp6bGluZyIpIHNob3VsZCBiZSBoZXJlLiBPdGhl cndpc2UgdGhlIHRlc3Qgd2lsbApmYWlsLiBPdGhlcndpc2UgbGd0bS4KLURhbmllbAoKPiArCQkJ ZGVmYXVsdDoKPiArCQkJCWlndF9hc3NlcnRfZigwLCAiQmFkIHN3aXp6bGUgYml0czsgJWRcbiIs Cj4gKwkJCQkJICAgICBzd2l6emxlKTsKPiArCQkJfQo+ICsJCQlleHBlY3RlZF92YWwgPSBjYWxj dWxhdGVfZXhwZWN0ZWQoc3dpenpsZWRfb2Zmc2V0KTsKPiArCQkJZm91bmRfdmFsID0gbGluZWFy WyhqIC0gb2Zmc2V0KSAvIDRdOwo+ICsJCQlpZ3RfYXNzZXJ0X2YoZXhwZWN0ZWRfdmFsID09IGZv dW5kX3ZhbCwKPiArCQkJCSAgICAgIkJhZCByZWFkIFslZF06ICVkIGluc3RlYWQgb2YgJWQgYXQg MHglMDh4ICIKPiArCQkJCSAgICAgImZvciByZWFkIGZyb20gMHglMDh4IHRvIDB4JTA4eCwgc3dp enpsZT0lc1xuIiwKPiArCQkJCSAgICAgaSwgZm91bmRfdmFsLCBleHBlY3RlZF92YWwsIGosCj4g KwkJCQkgICAgIG9mZnNldCwgb2Zmc2V0ICsgbGVuLAo+ICsJCQkJICAgICBzd2l6emxlX3N0cik7 Cj4gKwkJCW11bm1hcChsaW5lYXIsIGxhc3RfcGFnZSAtIGZpcnN0X3BhZ2UpOwo+ICsJCX0KPiAr CX0KPiArCj4gKwljbG9zZShmZCk7Cj4gK30KPiAtLSAKPiAyLjEuMQo+IAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRl cgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KKzQxICgwKSA3OSAzNjUgNTcg NDggLSBodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=