From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 1/2] drm/i915/selftests: Verify the LRC register layout between init and HW Date: Tue, 24 Sep 2019 11:43:57 +0100 Message-ID: <156932183753.3684.11723522936667671637@skylake-alporthouse-com> References: <20190923230209.16480-1-chris@chris-wilson.co.uk> <87mueuyoy5.fsf@gaia.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 62F3789F3C for ; Tue, 24 Sep 2019 10:44:15 +0000 (UTC) In-Reply-To: <87mueuyoy5.fsf@gaia.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kuoppala , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UXVvdGluZyBNaWthIEt1b3BwYWxhICgyMDE5LTA5LTI0IDExOjIxOjM4KQo+IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPiB3cml0ZXM6Cj4gCj4gPiBCZWZvcmUgd2Ugc3Vi bWl0IHRoZSBmaXJzdCBjb250ZXh0IHRvIEhXLCB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHZhbGlk Cj4gPiBpbWFnZSBvZiB0aGUgcmVnaXN0ZXIgc3RhdGUuIFRoaXMgbGF5b3V0IGlzIGRlZmluZWQg YnkgdGhlIEhXIGFuZCBzaG91bGQKPiA+IG1hdGNoIHRoZSBsYXlvdXQgZ2VuZXJhdGVkIGJ5IEhX IHdoZW4gaXQgc2F2ZXMgdGhlIGNvbnRleHQgaW1hZ2UuCj4gPiBBc3NlcnRpbmcgdGhhdCB0aGlz IHNob3VsZCBiZSBlcXVpdmFsZW50IHNob3VsZCBoZWxwIGF2b2lkIGFueSB1bmRlZmluZWQKPiA+ IGJlaGF2aW91ciBhbmQgdmVyaWZ5IHRoYXQgd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgaW1w b3J0YW50IQo+ID4KPiA+IE9mIGNvdXJzZSwgaGF2aW5nIGluc2lzdGVkIHRoYXQgdGhlIGluaXRp YWwgcmVnaXN0ZXIgc3RhdGUgd2l0aGluIHRoZQo+ID4gTFJDIHNob3VsZCBtYXRjaCB0aGF0IHJl dHVybmVkIGJ5IEhXLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMuCj4gPgo+ID4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gPiBD YzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiBDYzog RGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4K Cj4gPiArc3RhdGljIHUzMiAqc2V0X29mZnNldHModTMyICpyZWdzLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHU4ICpkYXRhLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ICsjZGVmaW5lIE5PUCh4KSAoQklU KDcpIHwgKHgpKQo+ID4gKyNkZWZpbmUgTFJJKGNvdW50LCBmbGFncykgKChmbGFncykgPDwgNiB8 IChjb3VudCkpCj4gPiArI2RlZmluZSBQT1NURUQgQklUKDApCj4gPiArI2RlZmluZSBSRUcoeCkg KCgoeCkgPj4gMikgfCBCVUlMRF9CVUdfT05fWkVSTyh4ID49IDB4MjAwKSkKPiA+ICsjZGVmaW5l IFJFRzE2KHgpIFwKPiA+ICsgICAgICgoKHgpID4+IDkpIHwgQklUKDcpIHwgQlVJTERfQlVHX09O X1pFUk8oeCA+PSAweDEwMDAwKSksIFwKPiA+ICsgICAgICgoKHgpID4+IDIpICYgMHg3ZikKPiAK PiBJIGFtIHN0aWxsIG5vdCBzdXJlIGlmIHRoZSBhY3R1YWwgc2F2aW5nIGFyZSB3b3J0aCB0aGUg Y29tcGxleGl0eS4KPiAKPiA+ICsjZGVmaW5lIEVORCgpIDAKPiA+ICt7Cj4gPiArICAgICBjb25z dCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+ID4gKwo+ID4gKyAgICAgd2hpbGUgKCpk YXRhKSB7Cj4gPiArICAgICAgICAgICAgIHU4IGNvdW50LCBmbGFnczsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgaWYgKCpkYXRhICYgQklUKDcpKSB7IC8qIHNraXAgKi8KPiA+ICsgICAgICAgICAg ICAgICAgICAgICByZWdzICs9ICpkYXRhKysgJiB+QklUKDcpOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAg ICAgIGNvdW50ID0gKmRhdGEgJiAweDNmOwo+ID4gKyAgICAgICAgICAgICBmbGFncyA9ICpkYXRh ID4+IDY7Cj4gPiArICAgICAgICAgICAgIGRhdGErKzsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg KnJlZ3MgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3VudCk7Cj4gPiArICAgICAgICAgICAgIGlm IChmbGFncyAmIFBPU1RFRCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAqcmVncyB8PSBNSV9M UklfRk9SQ0VfUE9TVEVEOwo+ID4gKyAgICAgICAgICAgICBpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gMTEpCj4gPiArICAgICAgICAgICAgICAgICAgICAgKnJlZ3MgfD0gTUlfTFJJX0NT X01NSU87Cj4gPiArICAgICAgICAgICAgIHJlZ3MrKzsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg R0VNX0JVR19PTighY291bnQpOwo+ID4gKyAgICAgICAgICAgICBkbyB7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgdTMyIG9mZnNldCA9IDA7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgdTgg djsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBkbyB7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2ID0gKmRhdGErKzsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9mZnNldCA8PD0gNzsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldCB8PSB2ICYgfkJJVCg3KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICh2 ICYgQklUKDcpKTsKPiAKPiAuLi5idXQgcGVyaGFwcyB0aGlzIGFtb3VudCBvZiBleHRyYSBjYW4g YmUgdG9sZXJhdGVkLgo+IAo+IERpZCB5b3UgY2hlY2sgaG93IHRoaXMgd291bGQgcGxheSBvdXQg d2l0aCBqdXN0IFJFRyBiZWluZyB3aWRlIGVub3VnaD8KCldoZW4gSSBzdGFydGVkLCBJIHRob3Vn aHQgd2UgY291bGQgZ2V0IGF3YXkgd2l0aCBvbmx5IG9uZSBSRUcxNi4gTG9va2luZwphdCB0aGUg Y29udGV4dCBpbWFnZSBJIHRoaW5rIHdlIG1pZ2h0IHdhbnQgYSBmZXcgbm9uIGVuZ2luZS0+bW1p b19iYXNlCnJlZ3MgaW4gdGhlcmUgKGlmIEkgcmVhZCBpdCByaWdodCwgc29tZSBvZiB0aGUgMHg0 MDAwIHJhbmdlIGFyZSBwZXIKZW5naW5lKS4gVGhhdCB3aWxsIG5lZWQgYSBzbGlnaHRseSBkaWZm ZXJlbnQgZW5jb2RpbmcgYXMgd2VsbCA6fAoKTm8sIEkgaGF2ZW4ndCBidXQgc2luY2UgeW91IGFz aywgSSBzaGFsbC4KCj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgKnJlZ3MgPSBiYXNl ICsgKG9mZnNldCA8PCAyKTsKPiAKPiBJbiBoZXJlIHJlYWRlciBpcyB5ZWFybmluZyBmb3IgYW4g YXNzZXJ0cyBvZiBub3QgdHJhbXBsaW5nCj4gb24gd3JvbmcgdGVycml0b3J5LgoKSWYgeW91IGhh dmUgYW4gaWRlYSBmb3IgYSBnb29kIGFzc2VydCwgZ28gZm9yIGl0IDopCgpXaGF0IHJhbmdlIHNo b3VsZCBiZSBjaGVja2VkLiBvZmZzZXQgPCAweDEwMDAgPwoKPiBCdXQgSSB3b3VsZCBndWVzcyB0 aGF0IHlvdSB3YW50IHRoaXMgcGFydCB0byBiZSBsaWtlCj4gb2lsZWQgbGlnaHRuaW5nIGFuZCB0 ZXN0IHRoZSBtYWNoaW5lcnkgd2l0aCBzZWxmdGVzdC4uYXMgdGhlCj4gc3ViamVjdCBzZWVtcyB0 byBwcm9taXNlLgoKVGhlIGltcG9ydGFuY2UgaXMgY2VydGFpbmx5IHBsYWNlZCBvbiBoYXZpbmcg YSBzZWxmdGVzdCBhbmQgdGhlCmNvbmZpZGVuY2UgaW4ga2VlcGluZyBvdXIgb2Zmc2V0cyBpbiBs aW5lIHdpdGggdGhlIEhXLiBUaGUgZ29hbCB3YXMgdG8KaGF2ZSBhIGNvbXBhY3QgZGVzY3JpcHRp b24gZm9yIHRoZSByZWdpc3RlciBvZmZzZXRzLCBpbiB0ZXJtcyBvZgpyZWFkYWJpbGl0eSBJIHRo aW5rIHRoZSBlbXBoYXNpcyBzaG91bGQgYmUgb24gdGhlIHRhYmxlcwooZ2VuOF94Y3Nfb2Zmc2V0 c1tdKS4KCj4gPiBAQCAtMzA5Miw3ICszNDUxLDcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0 X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5mbGFncyB8PSBJOTE1X0VOR0lORV9IQVNfUFJF RU1QVElPTjsKPiA+ICAgICAgIH0KPiA+ICAKPiA+IC0gICAgIGlmIChlbmdpbmUtPmNsYXNzICE9 IENPUFlfRU5HSU5FX0NMQVNTICYmIElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQo+ID4g KyAgICAgaWYgKGVuZ2luZS0+Y2xhc3MgIT0gQ09QWV9FTkdJTkVfQ0xBU1MgJiYgSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gPiAgICAgICAgICAgICAgIGVuZ2luZS0+ZmxhZ3MgfD0g STkxNV9FTkdJTkVfSEFTX1JFTEFUSVZFX01NSU87Cj4gCj4gT2ssIGZpcnN0IEkgdGhvdWdodCB0 aGlzIHdhcyB1bmludGVudGlvbmFsLiBCdXQgcHJvbGx5IG5vdC4KPiBEbyB5b3UgbmVlZCBpdCBm b3IgdGhlIHZlcmlmaWVyIHRvIHdvcms/CgpObywgSSBlbmRlZCB1cCBjb21wbGV0ZWx5IGlnbm9y aW5nIHRoaXMgZmxhZyBhcyB0aGUgSFcgZG9lcyBub3QKZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGVu Z2luZXMuIE9uIGdlbjExKywgaXQgc2V0cyB0aGUgTFJJIGZsYWcgZXZlcnl3aGVyZQppbiB0aGUg Y29udGV4dCBpbWFnZS4KCj4gQ291bGQgd2Ugc3RpbGwgcmlwIGl0IG91dCB0byBiZSBhIGZpcnN0 IGluIHRoZSBzZXJpZXMuCj4gSnVzdCB3b3VsZCB3YW50IHRvIGRpZmZlcmlhbnRlIHBvc3NpYmxl IGljbCBoaWNrdXBzIGFwYXJ0Cj4gZnJvbSB0aGlzIHBhdGNoLgoKU3VyZS4KCj4gPiArc3RhdGlj IGludCBsaXZlX2xyY19sYXlvdXQodm9pZCAqYXJnKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBp bnRlbF9ndCAqZ3QgPSBhcmc7Cj4gPiArICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gPiArICAgICBlbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiA+ICsgICAgIHUzMiAqbWVt Owo+ID4gKyAgICAgaW50IGVycjsKPiA+ICsKPiA+ICsgICAgIC8qCj4gPiArICAgICAgKiBDaGVj ayB0aGUgcmVnaXN0ZXJzIG9mZnNldHMgd2UgdXNlIHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCByZWcg c3RhdGUKPiA+ICsgICAgICAqIG1hdGNoIHRoZSBsYXlvdXQgc2F2ZWQgYnkgSFcuCj4gPiArICAg ICAgKi8KPiA+ICsKPiA+ICsgICAgIG1lbSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVM KTsKPiA+ICsgICAgIGlmICghbWVtKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsK PiA+ICsKPiA+ICsgICAgIGVyciA9IDA7Cj4gPiArICAgICBmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBndC0+aTkxNSwgaWQpIHsKPiA+ICsgICAgICAgICAgICAgdTMyICpodywgKmxyYzsKPiA+ICsg ICAgICAgICAgICAgaW50IGR3Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAoIWVuZ2luZS0+ ZGVmYXVsdF9zdGF0ZSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgaHcgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChlbmdpbmUtPmRl ZmF1bHRfc3RhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSTkxNV9NQVBfV0IpOwo+IAo+IFRoaXMgZGVmYXVsdCBzdGF0ZSBpcyBub3QgcHJpc3RpbmUg YXMgd2UgaGF2ZSB0cmFtcGxlZAo+IGl0IHdpdGggb3VyIGZpcnN0IHN1Ym1pc3Npb24sIHJpZ2h0 PwoKSXQgaXMgdGhlIGNvbnRleHQgaW1hZ2Ugc2F2ZWQgYWZ0ZXIgdGhlIGZpcnN0IHJlcXVlc3Qu CiAKPiBCdXQgYmVpbmcgc3VjY2VlZGVkIGF0IGRvaW5nIHNvLCB0aGUgbmV4dCBjb250ZXh0Cj4g c2F2ZSBzaG91bGQgb3ZlcndyaXRlIG91ciB0cmFtcGxpbmcgYW5kIGl0IHdvdWxkCj4gdGhlbiBy ZXByZXNlbnQgdGhlIGh3IGFjY3VyYXRlIGNvbnRleHQgc2F2ZQo+IHN0YXRlLgo+IAo+IEFnYWlu c3Qgd2hpY2ggd2Ugd2lsbCBjb21wYXJlIG9mIG91ciByZWcgc3RhdGUKPiB3cml0ZXIuCgpSaWdo dCwgZGVmYXVsdF9zdGF0ZSBpcyB0aGUgSFcgdmVyc2lvbiBvZiBvdXIgaW5pdF9yZWdfc3RhdGUu Cgo+ID4gKyAgICAgICAgICAgICBpZiAoSVNfRVJSKGh3KSkgewo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGVyciA9IFBUUl9FUlIoaHcpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgIGh3ICs9IExSQ19TVEFURV9Q TiAqIFBBR0VfU0laRSAvIHNpemVvZigqaHcpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBscmMg PSBtZW1zZXQobWVtLCAwLCBQQUdFX1NJWkUpOwo+ID4gKyAgICAgICAgICAgICBleGVjbGlzdHNf aW5pdF9yZWdfc3RhdGUobHJjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW5naW5lLT5rZXJuZWxfY29udGV4dCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuZ2luZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuZ2luZS0+a2VybmVsX2NvbnRleHQtPnJpbmcsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg ZHcgPSAwOwo+ID4gKyAgICAgICAgICAgICBkbyB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg dTMyIGxyaSA9IGh3W2R3XTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAobHJp ID09IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3Kys7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKChscmkgJiBHRU5NQVNL KDMxLCAyMykpICE9IE1JX0lOU1RSKDB4MjIsIDApKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcl9lcnIoIiVzOiBFeHBlY3RlZCBMUkkgY29tbWFuZCBhdCBkd29yZCAlZCwg Zm91bmQgJTA4eFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bmdpbmUtPm5hbWUsIGR3LCBscmkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXJyID0gLUVJTlZBTDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAg ICBpZiAobHJjW2R3XSAhPSBscmkpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByX2VycigiJXM6IExSSSBjb21tYW5kIG1pc21hdGNoIGF0IGR3b3JkICVkLCBleHBlY3RlZCAl MDh4IGZvdW5kICUwOHhcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW5naW5lLT5uYW1lLCBkdywgbHJpLCBscmNbZHddKTsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgbHJpICY9IDB4N2Y7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbHJp Kys7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZHcrKzsKPiA+ICsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICB3aGlsZSAobHJpKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaHdbZHddICE9IGxyY1tkd10pIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJfZXJyKCIlczogRGlmZmVyZW50IHJlZ2lzdGVycyBmb3VuZCBhdCBkd29y ZCAlZCwgZXhwZWN0ZWQgJXgsIGZvdW5kICV4XG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5uYW1lLCBkdywgaHdbZHddLCBscmNbZHdd KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVJTlZB TDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogU2tp cCBvdmVyIHRoZSBhY3R1YWwgcmVnaXN0ZXIgdmFsdWUgYXMgd2UKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IHRvIGRpZmZlci4KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHcgKz0gMjsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxyaSAtPSAyOwo+IAo+ IFRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIHdlIGNvdWxkIHVzZSB0aGlzIG1hY2hpbmVyeSBwb3N0 IGhhbmcuIEp1c3QgdG8KPiBnZXQgYSBsaXR0bGUgbW9yZSB0cmlhZ2UgZGF0YSBvdXQsIGllICd5 b3VyIGNvbnRleHQgbG9va3MgY29ycnVwdGVkIGF0Cj4gb2Zmc2V0ICV4Jy4uLgoKQ2VydGFpbmx5 IHBvc3NpYmxlLCBidXQgd2hhdCB3ZSBjaGVjayBoZXJlIGlzIF9tb3N0bHlfIHRoZSBwcml2aWxl Z2VkCnJlZ2lzdGVycyB0aGF0IGFyZSBub3QgcmVhbGx5IG1lYW50IHRvIGJlIGNoYW5nZWQgYnkg dGhlIHVzZXIgLS0gYW5kIHdlCmFyZSBvbmx5IGNoZWNraW5nIHRoZSBvZmZzZXRzLCBzbyB1bmxp a2VseSB0aGVyZSB0byBiZSBqdXN0IG9uZSB3cm9uZy4KClRoZSBnZW5lcmFsIHByaW5jaXBsZSB3 YXMgdGhhdCB3ZSBzaG91bGQgcHJvdmlkZSByYXcgaW5mb3JtYXRpb24gYW5kCmhhdmUgdGhlIHNt YXJ0cyBpbiB1c2Vyc3BhY2UgKHNvIHRoYXQgd2UgY291bGQgYWx3YXlzIGVuaGFuY2Ugb3VyCnBy b2Nlc3NpbmcgYW5kIHJlYW5hbHlzZSBleGlzdGluZyBkdW1wcykuIEJ1dCBhdCB0aGUgZW5kIG9m IHRoZSBkYXksCndoYXRldmVyIGFsbG93cyB1cyB0byBwcmV2ZW50IGJ1Z3Mgb3IgZml4IGJ1Z3Mg aXMgcGFyYW1vdW50LgoKQnV0IEknbSBub3QgeWV0IHNvbGQgdGhpcyBoZWxwcy4gTWF5YmUgaWYg d2UgZmluZCBhbiBleGFtcGxlIHdoZXJlIGl0CnByb3ZlcyB1c2VmdWwuLi4KCj4gPiArICAgICAg ICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICB9IHdoaWxlICgobHJjW2R3XSAmIH5C SVQoMCkpICE9IE1JX0JBVENIX0JVRkZFUl9FTkQpOwo+IAo+IE9rLCB5b3UgdGllIHVwIGFsd2F5 cyB0aGUgZ2VuZXJhdGUgaW1hZ2UuIEZvciBmdXR1cmUgd29yayBhZGQgdGhlIGh3IGJhdGNoCj4g ZW5kcG9pbnQgYmUgYSBwYXJ0IG9mIGNoZWNrZXI/CgpJdCdzIG5vdCBhbHdheXMgaW4gdGhlIGZp cnN0IHBhZ2UsIEknbSBub3QgZXZlbiBzdXJlIGlmIGEgQkJfRU5EIGlzCmFsd2F5cyBpbmNsdWRl ZCBpbiB0aGUgb2xkZXIgZ2VuLiAoSSBoYXZlIGEgZmVlbGluZyB0aGUgSFcgZGVmaW5pdGVseQpz dGFydGVkIGluY2x1ZGluZyBpdCB+Z2VuMTAuKQotQ2hyaXMKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4