From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v7 06/12] drm/i915/perf: implement active wait for noa configurations Date: Tue, 9 Jul 2019 13:44:53 +0300 Message-ID: <6889ed63-426f-eb5c-4f9f-0690cbaf974b@intel.com> References: <20190709093208.20470-1-lionel.g.landwerlin@intel.com> <20190709093208.20470-7-lionel.g.landwerlin@intel.com> <156266599270.9375.14818105004755055993@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id F3BBF89B8E for ; Tue, 9 Jul 2019 10:44:55 +0000 (UTC) In-Reply-To: <156266599270.9375.14818105004755055993@skylake-alporthouse-com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDkvMDcvMjAxOSAxMjo1MywgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IFF1b3RpbmcgTGlvbmVs IExhbmR3ZXJsaW4gKDIwMTktMDctMDkgMTA6MzI6MDIpCj4+ICtzdGF0aWMgdTMyICpzYXZlX3Jl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MzIgKmNzLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgIGk5MTVfcmVnX3QgcmVnLCB1MzIgb2Zmc2V0LCB1MzIgZHdvcmRf Y291bnQpCj4+ICt7Cj4+ICsgICAgICAgdWludDMyX3QgZDsKPj4gKwo+PiArICAgICAgIGZvciAo ZCA9IDA7IGQgPCBkd29yZF9jb3VudDsgZCsrKSB7Cj4+ICsgICAgICAgICAgICAgICAqY3MrKyA9 IElOVEVMX0dFTihpOTE1KSA+PSA4ID8KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgTUlfU1RP UkVfUkVHSVNURVJfTUVNX0dFTjggOiBNSV9TVE9SRV9SRUdJU1RFUl9NRU07Cj4+ICsgICAgICAg ICAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykgKyA0ICogZDsKPj4gKyAg ICAgICAgICAgICAgICpjcysrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQoJmk5MTUtPmd0LCBv ZmZzZXQpICsgNCAqIGQ7Cj4+ICsgICAgICAgICAgICAgICBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDgpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICpjcysrID0gMDsKPiByZXN0b3JlX3JlZ2lz dGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXh0cmEgTUlfTk9PUCA6KQo+Cj4+ICsgICAgICAg fQo+PiArCj4+ICsgICAgICAgcmV0dXJuIGNzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdTMyICpy ZXN0b3JlX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MzIgKmNzLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk5MTVfcmVnX3QgcmVnLCB1MzIgb2Zmc2V0 LCB1MzIgZHdvcmRfY291bnQpCj4+ICt7Cj4+ICsgICAgICAgdWludDMyX3QgZDsKPj4gKwo+PiAr ICAgICAgIGZvciAoZCA9IDA7IGQgPCBkd29yZF9jb3VudDsgZCsrKSB7Cj4+ICsgICAgICAgICAg ICAgICAqY3MrKyA9IElOVEVMX0dFTihpOTE1KSA+PSA4ID8KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCA6IE1JX0xPQURfUkVHSVNURVJfTUVNOwo+ PiArICAgICAgICAgICAgICAgKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChyZWcpOwo+PiAr ICAgICAgICAgICAgICAgKmNzKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldCgmaTkxNS0+Z3Qs IG9mZnNldCk7Cj4+ICsgICAgICAgICAgICAgICAqY3MrKyA9IDA7Cj4+ICsgICAgICAgfQo+PiAr Cj4+ICsgICAgICAgcmV0dXJuIGNzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFsbG9jX25v YV93YWl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+PiArewo+PiArICAgICAgIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpibzsKPj4gKyAgICAgICBzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKPj4gKyAgICAgICB1NjQgZGVsYXlfbnMgPSBhdG9taWM2NF9yZWFkKCZpOTE1LT5wZXJm Lm9hLm5vYV9wcm9ncmFtbWluZ19kZWxheSksIGRlbGF5X3RpY2tzOwo+IEkgd291bGQgY29uc3Qg dTY0IGRlbGF5X3RpY2tzID0gZm9vKGk5MTUpOwo+Cj4gVGhhdCB3b3VsZCBzYXZlIHRoZSBkaXN0 cmFjdGlvbiBsYXRlciBpbiB0aGUgbWlkZGxlIG9mIENTLgo+Cj4+ICsgICAgICAgdTMyICpiYXRj aCwgKnRzMCwgKmNzLCAqanVtcDsKPj4gKyAgICAgICBpbnQgcmV0LCBpOwo+PiArICAgICAgIGVu dW0geyBTVEFSVF9UUywgTk9XX1RTLCBERUxUQV9UUywgSlVNUF9QUkVESUNBVEUsIERFTFRBX1RB UkdFVCwgTl9DU19HUFIgfTsKPj4gKwo+PiArICAgICAgIGJvID0gaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9pbnRlcm5hbChpOTE1LCA0MDk2KTsKPj4gKyAgICAgICBpZiAoSVNfRVJSKGJvKSkgewo+ PiArICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgTk9BIHdhaXQg YmF0Y2hidWZmZXJcbiIpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoYm8pOwo+ PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIC8qCj4+ICsgICAgICAgICogV2UgcGluIGluIEdH VFQgYmVjYXVzZSB3ZSBqdW1wIGludG8gdGhpcyBidWZmZXIgbm93IGJlY2F1c2UKPj4gKyAgICAg ICAgKiBtdWx0aXBsZSBPQSBjb25maWcgQk9zIHdpbGwgaGF2ZSBhIGp1bXAgdG8gdGhpcyBhZGRy ZXNzIGFuZCBpdAo+PiArICAgICAgICAqIG5lZWRzIHRvIGJlIGZpeGVkIGR1cmluZyB0aGUgbGlm ZXRpbWUgb2YgdGhlIGk5MTUvcGVyZiBzdHJlYW0uCj4+ICsgICAgICAgICovCj4+ICsgICAgICAg dm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKGJvLCBOVUxMLCAwLCA0MDk2LCAwKTsKPj4g KyAgICAgICBpZiAoSVNfRVJSKHZtYSkpIHsKPj4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9F UlIodm1hKTsKPj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJyX3VucmVmOwo+PiArICAgICAgIH0K Pj4gKwo+PiArICAgICAgIGJhdGNoID0gY3MgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChibywg STkxNV9NQVBfV0IpOwo+PiArICAgICAgIGlmIChJU19FUlIoYmF0Y2gpKSB7Cj4+ICsgICAgICAg ICAgICAgICByZXQgPSBQVFJfRVJSKGJhdGNoKTsKPj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJy X3VucGluOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIC8qIFNhdmUgcmVnaXN0ZXJzLiAq Lwo+PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBOX0NTX0dQUjsgaSsrKSB7Cj4+ICsgICAgICAg ICAgICAgICBjcyA9IHNhdmVfcmVnaXN0ZXIoaTkxNSwgY3MsIEhTV19DU19HUFIoaSksCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9Q RVJGX0NTX0dQUiArIDggKiBpLCAyKTsKPj4gKyAgICAgICB9Cj4+ICsgICAgICAgY3MgPSBzYXZl X3JlZ2lzdGVyKGk5MTUsIGNzLCBNSV9QUkVESUNBVEVfUkVTVUxUXzEsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIElOVEVMX0dUX1NDUkFUQ0hfRklFTERfUEVSRl9QUkVESUNBVEVfUkVT VUxUXzEsIDEpOwo+PiArCj4+ICsgICAgICAgLyogRmlyc3QgdGltZXN0YW1wIHNuYXBzaG90IGxv Y2F0aW9uLiAqLwo+PiArICAgICAgIHRzMCA9IGNzOwo+PiArCj4+ICsgICAgICAgLyoKPj4gKyAg ICAgICAgKiBJbml0aWFsIHNuYXBzaG90IG9mIHRoZSB0aW1lc3RhbXAgcmVnaXN0ZXIgdG8gaW1w bGVtZW50IHRoZSB3YWl0Lgo+PiArICAgICAgICAqIFdlIHdvcmsgd2l0aCAzMmIgdmFsdWVzLCBz byBjbGVhciBvdXQgdGhlIHRvcCAzMmIgYml0cyBvZiB0aGUKPj4gKyAgICAgICAgKiByZWdpc3Rl ciBiZWNhdXNlIHRoZSBBTFUgd29ya3MgNjRiaXRzLgo+PiArICAgICAgICAqLwo+PiArICAgICAg ICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4+ICsgICAgICAgKmNzKysgPSBpOTE1 X21taW9fcmVnX29mZnNldChIU1dfQ1NfR1BSKFNUQVJUX1RTKSkgKyA0Owo+PiArICAgICAgICpj cysrID0gMDsKPj4gKyAgICAgICAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfUkVHIHwgKDMgLSAy KTsKPj4gKyAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfVElNRVNUQU1Q KFJFTkRFUl9SSU5HX0JBU0UpKTsKPj4gKyAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zm c2V0KEhTV19DU19HUFIoU1RBUlRfVFMpKTsKPj4gKwo+PiArICAgICAgIC8qCj4+ICsgICAgICAg ICogVGhpcyBpcyB0aGUgbG9jYXRpb24gd2UncmUgZ29pbmcgdG8ganVtcCBiYWNrIGludG8gdW50 aWwgdGhlCj4+ICsgICAgICAgICogcmVxdWlyZWQgYW1vdW50IG9mIHRpbWUgaGFzIHBhc3NlZC4K Pj4gKyAgICAgICAgKi8KPj4gKyAgICAgICBqdW1wID0gY3M7Cj4+ICsKPj4gKyAgICAgICAvKgo+ PiArICAgICAgICAqIFRha2UgYW5vdGhlciBzbmFwc2hvdCBvZiB0aGUgdGltZXN0YW1wIHJlZ2lz dGVyLiBUYWtlIGNhcmUgdG8gY2xlYXIKPj4gKyAgICAgICAgKiB1cCB0aGUgdG9wIDMyYml0cyBv ZiBDU19HUFIoMSkgYXMgd2UncmUgdXNpbmcgaXQgZm9yIG90aGVyCj4+ICsgICAgICAgICogb3Bl cmF0aW9ucyBiZWxvdy4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAgICAqY3MrKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NKDEpOwo+PiArICAgICAgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo SFNXX0NTX0dQUihOT1dfVFMpKSArIDQ7Cj4+ICsgICAgICAgKmNzKysgPSAwOwo+PiArICAgICAg ICpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9SRUcgfCAoMyAtIDIpOwo+PiArICAgICAgICpjcysr ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19USU1FU1RBTVAoUkVOREVSX1JJTkdfQkFTRSkp Owo+PiArICAgICAgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoSFNXX0NTX0dQUihOT1df VFMpKTsKPj4gKwo+PiArICAgICAgIC8qCj4+ICsgICAgICAgICogRG8gYSBkaWZmIGJldHdlZW4g dGhlIDIgdGltZXN0YW1wcyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBiYWNrIGludG8KPj4gKyAgICAg ICAgKiBDU19HUFIoMSkuCj4+ICsgICAgICAgICovCj4+ICsgICAgICAgKmNzKysgPSBNSV9NQVRI KDUpOwo+PiArICAgICAgICpjcysrID0gTUlfQUxVX09QKE1JX0FMVV9PUF9MT0FELCBNSV9BTFVf U1JDX1NSQ0EsIE1JX0FMVV9TUkNfUkVHKE5PV19UUykpOwo+PiArICAgICAgICpjcysrID0gTUlf QUxVX09QKE1JX0FMVV9PUF9MT0FELCBNSV9BTFVfU1JDX1NSQ0IsIE1JX0FMVV9TUkNfUkVHKFNU QVJUX1RTKSk7Cj4+ICsgICAgICAgKmNzKysgPSBNSV9BTFVfT1AoTUlfQUxVX09QX1NVQiwgMCwg MCk7Cj4+ICsgICAgICAgKmNzKysgPSBNSV9BTFVfT1AoTUlfQUxVX09QX1NUT1JFLCBNSV9BTFVf U1JDX1JFRyhERUxUQV9UUyksIE1JX0FMVV9TUkNfQUNDVSk7Cj4+ICsgICAgICAgKmNzKysgPSBN SV9BTFVfT1AoTUlfQUxVX09QX1NUT1JFLCBNSV9BTFVfU1JDX1JFRyhKVU1QX1BSRURJQ0FURSks IE1JX0FMVV9TUkNfQ0YpOwo+PiArCj4+ICsgICAgICAgLyoKPj4gKyAgICAgICAgKiBUcmFuc2Zl ciB0aGUgY2FycnkgZmxhZyAoc2V0IHRvIDEgaWYgdHMxIDwgdHMwLCBtZWFuaW5nIHRoZQo+PiAr ICAgICAgICAqIHRpbWVzdGFtcCBoYXZlIHJvbGxlZCBvdmVyIHRoZSAzMmJpdHMpIGludG8gdGhl IHByZWRpY2F0ZSByZWdpc3Rlcgo+PiArICAgICAgICAqIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmVk aWNhdGVkIGp1bXAuCj4+ICsgICAgICAgICovCj4+ICsgICAgICAgKmNzKysgPSBNSV9MT0FEX1JF R0lTVEVSX1JFRyB8ICgzIC0gMik7Cj4+ICsgICAgICAgKmNzKysgPSBpOTE1X21taW9fcmVnX29m ZnNldChIU1dfQ1NfR1BSKEpVTVBfUFJFRElDQVRFKSk7Cj4+ICsgICAgICAgKmNzKysgPSBpOTE1 X21taW9fcmVnX29mZnNldChNSV9QUkVESUNBVEVfUkVTVUxUXzEpOwo+PiArCj4+ICsgICAgICAg LyogUmVzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgd2UgaGFkIHRpbWVzdGFtcHMgcm9sbCBv dmVyLiAqLwo+PiArICAgICAgICpjcysrID0gKElOVEVMX0dFTihpOTE1KSA8IDggPwo+PiArICAg ICAgICAgICAgICAgIE1JX0JBVENIX0JVRkZFUl9TVEFSVCA6IE1JX0JBVENIX0JVRkZFUl9TVEFS VF9HRU44KSB8Cj4+ICsgICAgICAgICAgICAgICBNSV9CQVRDSF9QUkVESUNBVEU7Cj4+ICsgICAg ICAgKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSkgKyAodHMwIC0gYmF0Y2gpICogNDsKPj4g KyAgICAgICAqY3MrKyA9IDA7Cj4+ICsKPj4gKyAgICAgICAvKgo+PiArICAgICAgICAqIE5vdyBh ZGQgdGhlIGRpZmYgYmV0d2VlbiB0byBwcmV2aW91cyB0aW1lc3RhbXBzIGFuZCBhZGQgaXQgdG8g Ogo+PiArICAgICAgICAqICAgICAgKCgoMSAqIDw8IDY0KSAtIDEpIC0gZGVsYXlfbnMpCj4+ICsg ICAgICAgICoKPj4gKyAgICAgICAgKiBXaGVuIHRoZSBDYXJyeSBGbGFnIGNvbnRhaW5zIDEgdGhp cyBtZWFucyB0aGUgZWxhcHNlZCB0aW1lIGlzCj4+ICsgICAgICAgICogbG9uZ2VyIHRoYW4gdGhl IGV4cGVjdGVkIGRlbGF5LCBhbmQgd2UgY2FuIGV4aXQgdGhlIHdhaXQgbG9vcC4KPj4gKyAgICAg ICAgKi8KPj4gKyAgICAgICBkZWxheV90aWNrcyA9IDB4ZmZmZmZmZmZmZmZmZmZmZiAtCj4+ICsg ICAgICAgICAgICAgICBESVY2NF9VNjRfUk9VTkRfVVAoZGVsYXlfbnMgKgo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJVTlRJTUVfSU5GTyhpOTE1KS0+Y3NfdGltZXN0YW1w X2ZyZXF1ZW5jeV9raHosCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAw MDAwMHVsbCk7Cj4+ICsgICAgICAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgyKTsKPj4g KyAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEhTV19DU19HUFIoREVMVEFfVEFS R0VUKSk7Cj4+ICsgICAgICAgKmNzKysgPSBsb3dlcl8zMl9iaXRzKGRlbGF5X3RpY2tzKTsKPj4g KyAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEhTV19DU19HUFIoREVMVEFfVEFS R0VUKSkgKyA0Owo+PiArICAgICAgICpjcysrID0gdXBwZXJfMzJfYml0cyhkZWxheV90aWNrcyk7 Cj4+ICsKPj4gKyAgICAgICAqY3MrKyA9IE1JX01BVEgoNCk7Cj4+ICsgICAgICAgKmNzKysgPSBN SV9BTFVfT1AoTUlfQUxVX09QX0xPQUQsIE1JX0FMVV9TUkNfU1JDQSwgTUlfQUxVX1NSQ19SRUco REVMVEFfVFMpKTsKPj4gKyAgICAgICAqY3MrKyA9IE1JX0FMVV9PUChNSV9BTFVfT1BfTE9BRCwg TUlfQUxVX1NSQ19TUkNCLCBNSV9BTFVfU1JDX1JFRyhERUxUQV9UQVJHRVQpKTsKPj4gKyAgICAg ICAqY3MrKyA9IE1JX0FMVV9PUChNSV9BTFVfT1BfQURELCAwLCAwKTsKPj4gKyAgICAgICAqY3Mr KyA9IE1JX0FMVV9PUChNSV9BTFVfT1BfU1RPUkVJTlYsIE1JX0FMVV9TUkNfUkVHKEpVTVBfUFJF RElDQVRFKSwgTUlfQUxVX1NSQ19DRik7Cj4+ICsKPj4gKyAgICAgICAvKgo+PiArICAgICAgICAq IFRyYW5zZmVyIHRoZSByZXN1bHQgaW50byB0aGUgcHJlZGljYXRlIHJlZ2lzdGVyIHRvIGJlIHVz ZWQgZm9yIHRoZQo+PiArICAgICAgICAqIHByZWRpY2F0ZWQganVtcC4KPj4gKyAgICAgICAgKi8K Pj4gKyAgICAgICAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfUkVHIHwgKDMgLSAyKTsKPj4gKyAg ICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEhTV19DU19HUFIoSlVNUF9QUkVESUNB VEUpKTsKPj4gKyAgICAgICAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KE1JX1BSRURJQ0FU RV9SRVNVTFRfMSk7Cj4+ICsKPj4gKyAgICAgICAvKiBQcmVkaWNhdGUgdGhlIGp1bXAuICAqLwo+ PiArICAgICAgICpjcysrID0gKElOVEVMX0dFTihpOTE1KSA8IDggPwo+PiArICAgICAgICAgICAg ICAgIE1JX0JBVENIX0JVRkZFUl9TVEFSVCA6IE1JX0JBVENIX0JVRkZFUl9TVEFSVF9HRU44KSB8 Cj4+ICsgICAgICAgICAgICAgICBNSV9CQVRDSF9QUkVESUNBVEU7Cj4+ICsgICAgICAgKmNzKysg PSBpOTE1X2dndHRfb2Zmc2V0KHZtYSkgKyAoanVtcCAtIGJhdGNoKSAqIDQ7Cj4+ICsgICAgICAg KmNzKysgPSAwOwo+PiArCj4+ICsgICAgICAgLyogUmVzdG9yZSByZWdpc3RlcnMuICovCj4+ICsg ICAgICAgZm9yIChpID0gMDsgaSA8IE5fQ1NfR1BSOyBpKyspIHsKPj4gKyAgICAgICAgICAgICAg IGNzID0gcmVzdG9yZV9yZWdpc3RlcihpOTE1LCBjcywgSFNXX0NTX0dQUihpKSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX1BF UkZfQ1NfR1BSICsgOCAqIGksIDIpOwo+PiArICAgICAgIH0KPj4gKyAgICAgICBjcyA9IHJlc3Rv cmVfcmVnaXN0ZXIoaTkxNSwgY3MsIE1JX1BSRURJQ0FURV9SRVNVTFRfMSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9QRVJGX1BSRURJQ0FU RV9SRVNVTFRfMSwgMSk7Cj4+ICsKPj4gKyAgICAgICAvKiBBbmQgcmV0dXJuIHRvIHRoZSByaW5n LiAqLwo+PiArICAgICAgICpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPj4gKwo+PiArICAg ICAgIEdFTV9CVUdfT04oKGNzIC0gYmF0Y2gpID4gKFBBR0VfU0laRSAvIHNpemVvZigqYmF0Y2gp KSk7Cj4+ICsKPj4gKyAgICAgICBpOTE1X2dlbV9vYmplY3RfZmx1c2hfbWFwKGJvKTsKPj4gKyAg ICAgICBpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGJvKTsKPj4gKwo+PiArICAgICAgIGk5MTUt PnBlcmYub2Eubm9hX3dhaXQgPSB2bWE7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gMDsKPj4gKwo+ PiArZXJyX3VucGluOgo+PiArICAgICAgIF9faTkxNV92bWFfdW5waW4odm1hKTsKPj4gKwo+PiAr ZXJyX3VucmVmOgo+PiArICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXQoYm8pOwo+PiArCj4+ICsg ICAgICAgcmV0dXJuIHJldDsKPj4gK30KPiBQcmVmZXJhYmx5IHdpdGggdGhlIG5pdCBhYm92ZSwK PiBSZXZpZXdlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4g LUNocmlzCj4KVGhhbmtzLCBhZGRlZCB0aGUgMiBuaXMgbG9jYWxseS4KCgotTGlvbmVsCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=