From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/5] igt/gem_mmap_wc: Exercise mmap(wc) interface Date: Mon, 17 Nov 2014 19:36:34 +0100 Message-ID: <20141117183634.GG25711@phenom.ffwll.local> References: <1416224243-6573-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-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTP id DCA016E161 for ; Mon, 17 Nov 2014 10:36:12 -0800 (PST) Received: by mail-wi0-f171.google.com with SMTP id bs8so4230186wib.10 for ; Mon, 17 Nov 2014 10:36:11 -0800 (PST) Content-Disposition: inline In-Reply-To: <1416224243-6573-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, Akash Goel List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMTcsIDIwMTQgYXQgMTE6Mzc6MTlBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+ICsvKioKPiArICogZ2VtX21tYXBfX3djOgo+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0g ZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQo+ ICsgKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdGhlIGdlbSBidWZmZXIgb2YgdGUgbW1hcCBhcmVuYQo+ ICsgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQo+ICsgKiBAcHJvdDogbWVtb3J5IHBy b3RlY3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9u cyB3cmFwcyB1cCBwcm9jZWR1cmUgdG8gZXN0YWJsaXNoIGEgbWVtb3J5IG1hcHBpbmcgdGhyb3Vn aAo+ICsgKiBkaXJlY3QgY3B1IGFjY2VzcywgYnlwYXNzaW5nIHRoZSBncHUgYW5kIGNwdSBjYWNo ZXMgY29tcGxldGVseS4KCk5pdDogU2luY2UgdGhpcyBpcyB0aGUgc2FtZSBmb3IgZ3R0IHdjIG1h cHBpbmdzIHNob3VsZG4ndCB3ZSBtZW50aW9uIHRoYXQKdGhpcyBieXBhc3NlcyAiYWxsIGNwdSBj YWNoZXMgYW5kIGFsc28gdGhlIGdwdSBzeXN0ZW0gYWdlbnQgKHVzZWQgYnkgZ3R0Cm1tYXBzKSI/ IE90aGVyd2lzZSBhd2Vzb21lIGFuZCBpdCBsb29rcyBsaWtlIEFrYXNoIGhhcyBub3QgdGltZSB0 byBzdXBwbHkKdGhlIGlvY3RsKGludmFsaWQpID09IC1FSU5WQUwgdGVzdHMgYW5kIHRha2UgYSBs b29rIGF0IHRoaXMgdG9vIGFuZCB0aGVuCkknbGwgcHVsbCBpdCBhbGwgaW4uCi1EYW5pZWwKCj4g KyAqCj4gKyAqIFJldHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGlu Zy4KPiArICovCj4gK3ZvaWQgKmdlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwg aW50IG9mZnNldCwgaW50IHNpemUsIGludCBwcm90KQo+ICt7Cj4gKwlzdHJ1Y3QgbG9jYWxfaTkx NV9nZW1fbW1hcF92MiBhcmc7Cj4gKwo+ICsJaWYgKCFnZW1fbW1hcF9faGFzX3djKGZkKSkgewo+ ICsJCWVycm5vID0gRU5PU1lTOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsKPiArCW1lbXNl dCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7Cj4gKwlhcmcuaGFuZGxlID0gaGFuZGxlOwo+ICsJYXJn Lm9mZnNldCA9IG9mZnNldDsKPiArCWFyZy5zaXplID0gc2l6ZTsKPiArCWFyZy5mbGFncyA9IEk5 MTVfTU1BUF9XQzsKPiArCWlmIChkcm1Jb2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1B UF92MiwgJmFyZykpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0 dXJuICh2b2lkICopKHVpbnRwdHJfdClhcmcuYWRkcl9wdHI7Cj4gK30KPiArCj4gIC8qKgo+ICAg KiBnZW1fbW1hcF9fY3B1Ogo+ICAgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9y Cj4gZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5oIGIvbGliL2lvY3RsX3dyYXBwZXJz LmgKPiBpbmRleCBkMTM0MDhjLi45ZTdlZGFkIDEwMDY0NAo+IC0tLSBhL2xpYi9pb2N0bF93cmFw cGVycy5oCj4gKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKPiBAQCAtNjIsNiArNjIsMTEgQEAg dm9pZCBnZW1fZXhlY2J1ZihpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg KmV4ZWNidWYpOwo+ICAKPiAgdm9pZCAqZ2VtX21tYXBfX2d0dChpbnQgZmQsIHVpbnQzMl90IGhh bmRsZSwgaW50IHNpemUsIGludCBwcm90KTsKPiAgdm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQs IHVpbnQzMl90IGhhbmRsZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBwcm90KTsKPiArCj4g K2Jvb2wgZ2VtX21tYXBfX2hhc193YyhpbnQgZmQpOwo+ICt2b2lkICpnZW1fbW1hcF9fd2MoaW50 IGZkLCB1aW50MzJfdCBoYW5kbGUsIGludCBvZmZzZXQsIGludCBzaXplLCBpbnQgcHJvdCk7Cj4g KyNkZWZpbmUgaWd0X3JlcXVpcmVfbW1hcF93Yyh4KSBpZ3RfcmVxdWlyZShnZW1fbW1hcF9faGFz X3djKHgpKQo+ICsKPiAgLyoqCj4gICAqIGdlbV9tbWFwOgo+ICAgKgo+IGRpZmYgLS1naXQgYS90 ZXN0cy8uZ2l0aWdub3JlIGIvdGVzdHMvLmdpdGlnbm9yZQo+IGluZGV4IDZlNmFiNTguLjA3ZDNi NWEgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvLmdpdGlnbm9yZQo+ICsrKyBiL3Rlc3RzLy5naXRpZ25v cmUKPiBAQCAtNTgsNiArNTgsNyBAQCBnZW1fbWFkdmlzZQo+ICBnZW1fbWVkaWFfZmlsbAo+ICBn ZW1fbW1hcAo+ICBnZW1fbW1hcF9ndHQKPiArZ2VtX21tYXBfd2MKPiAgZ2VtX21tYXBfb2Zmc2V0 X2V4aGF1c3Rpb24KPiAgZ2VtX211bHRpX2JzZF9zeW5jX2xvb3AKPiAgZ2VtX25vbl9zZWN1cmVf YmF0Y2gKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5h bQo+IGluZGV4IDM3NjI3MzcuLjc4Y2JlMDQgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUu YW0KPiArKysgYi90ZXN0cy9NYWtlZmlsZS5hbQo+IEBAIC01OCw2ICs1OCw4IEBAIGdlbV9mbGlu a19yYWNlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCj4gIGdlbV9mbGlu a19yYWNlX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCj4gIGdlbV9tbWFwX2d0dF9DRkxBR1Mg PSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQo+ICBnZW1fbW1hcF9ndHRfTERBREQgPSAk KExEQUREKSAtbHB0aHJlYWQKPiArZ2VtX21tYXBfd2NfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQo VEhSRUFEX0NGTEFHUykKPiArZ2VtX21tYXBfd2NfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQK PiAgZ2VtX3RocmVhZGVkX2FjY2Vzc190aWxlZF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJF QURfQ0ZMQUdTKQo+ICBnZW1fdGhyZWFkZWRfYWNjZXNzX3RpbGVkX0xEQUREID0gJChMREFERCkg LWxwdGhyZWFkCj4gIGdlbV90aWxlZF9zd2FwcGluZ19DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChU SFJFQURfQ0ZMQUdTKQo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDI2NzdiZjcuLjk3YWFiMDIgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK PiBAQCAtNDIsNiArNDIsNyBAQCBURVNUU19wcm9nc19NID0gXAo+ICAJZ2VtX21hZHZpc2UgXAo+ ICAJZ2VtX21tYXAgXAo+ICAJZ2VtX21tYXBfZ3R0IFwKPiArCWdlbV9tbWFwX3djIFwKPiAgCWdl bV9wYXJ0aWFsX3B3cml0ZV9wcmVhZCBcCj4gIAlnZW1fcGVyc2lzdGVudF9yZWxvY3MgXAo+ICAJ Z2VtX3BpcGVfY29udHJvbF9zdG9yZV9sb29wIFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX21t YXBfd2MuYyBiL3Rlc3RzL2dlbV9tbWFwX3djLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjg3MTQwZmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvZ2VtX21t YXBfd2MuYwo+IEBAIC0wLDAgKzEsMzcwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDEx IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAq IEF1dGhvcnM6Cj4gKyAqICAgIENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+ICsgKgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgX0dOVV9TT1VSQ0UKPiArI2luY2x1ZGUgPHVu aXN0ZC5oPgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsj aW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8aW50 dHlwZXMuaD4KPiArI2luY2x1ZGUgPHB0aHJlYWQuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4g KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNs dWRlICJkcm0uaCIKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJk cm10ZXN0LmgiCj4gKyNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgo+ICsKPiArc3RhdGljIGludCBP QkpFQ1RfU0laRSA9IDE2KjEwMjQqMTAyNDsKPiArCj4gK3N0YXRpYyB2b2lkIHNldF9kb21haW4o aW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gK3sKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBoYW5k bGUsIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCAqCj4gK21tYXBfYm8oaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gK3sK PiArCXZvaWQgKnB0cjsKPiArCj4gKwlwdHIgPSBnZW1fbW1hcF9fd2MoZmQsIGhhbmRsZSwgMCwg T0JKRUNUX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ICsJaWd0X2Fzc2VydChwdHIg JiYgcHRyICE9IE1BUF9GQUlMRUQpOwo+ICsKPiArCXJldHVybiBwdHI7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkICoKPiArY3JlYXRlX3BvaW50ZXIoaW50IGZkKQo+ICt7Cj4gKwl1aW50MzJfdCBo YW5kbGU7Cj4gKwl2b2lkICpwdHI7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgT0JK RUNUX1NJWkUpOwo+ICsKPiArCXB0ciA9IG1tYXBfYm8oZmQsIGhhbmRsZSk7Cj4gKwlzZXRfZG9t YWluKGZkLCBoYW5kbGUpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArCj4gKwly ZXR1cm4gcHRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X2NvcHkoaW50IGZkKQo+ ICt7Cj4gKwl2b2lkICpzcmMsICpkc3Q7Cj4gKwo+ICsJaWd0X3JlcXVpcmVfbW1hcF93YyhmZCk7 Cj4gKwo+ICsJLyogY29weSBmcm9tIGEgZnJlc2ggc3JjIHRvIGZyZXNoIGRzdCB0byBmb3JjZSBw YWdlZmF1bHQgb24gYm90aCAqLwo+ICsJc3JjID0gY3JlYXRlX3BvaW50ZXIoZmQpOwo+ICsJZHN0 ID0gY3JlYXRlX3BvaW50ZXIoZmQpOwo+ICsKPiArCW1lbWNweShkc3QsIHNyYywgT0JKRUNUX1NJ WkUpOwo+ICsJbWVtY3B5KHNyYywgZHN0LCBPQkpFQ1RfU0laRSk7Cj4gKwo+ICsJbXVubWFwKGRz dCwgT0JKRUNUX1NJWkUpOwo+ICsJbXVubWFwKHNyYywgT0JKRUNUX1NJWkUpOwo+ICt9Cj4gKwo+ ICtlbnVtIHRlc3RfcmVhZF93cml0ZSB7Cj4gKwlSRUFEX0JFRk9SRV9XUklURSwKPiArCVJFQURf QUZURVJfV1JJVEUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3JlYWRfd3JpdGUo aW50IGZkLCBlbnVtIHRlc3RfcmVhZF93cml0ZSBvcmRlcikKPiArewo+ICsJdWludDMyX3QgaGFu ZGxlOwo+ICsJdm9pZCAqcHRyOwo+ICsJdm9sYXRpbGUgdWludDMyX3QgdmFsID0gMDsKPiArCj4g KwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBPQkpFQ1RfU0laRSk7Cj4gKwlzZXRfZG9tYWluKGZk LCBoYW5kbGUpOwo+ICsKPiArCXB0ciA9IG1tYXBfYm8oZmQsIGhhbmRsZSk7Cj4gKwlpZ3RfYXNz ZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKPiArCj4gKwlpZiAob3JkZXIgPT0gUkVBRF9CRUZPUkVf V1JJVEUpIHsKPiArCQl2YWwgPSAqKHVpbnQzMl90ICopcHRyOwo+ICsJCSoodWludDMyX3QgKilw dHIgPSB2YWw7Cj4gKwl9IGVsc2Ugewo+ICsJCSoodWludDMyX3QgKilwdHIgPSB2YWw7Cj4gKwkJ dmFsID0gKih1aW50MzJfdCAqKXB0cjsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRs ZSk7Cj4gKwltdW5tYXAocHRyLCBPQkpFQ1RfU0laRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk Cj4gK3Rlc3RfcmVhZF93cml0ZTIoaW50IGZkLCBlbnVtIHRlc3RfcmVhZF93cml0ZSBvcmRlcikK PiArewo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJdm9pZCAqciwgKnc7Cj4gKwl2b2xhdGlsZSB1 aW50MzJfdCB2YWwgPSAwOwo+ICsKPiArCWlndF9yZXF1aXJlX21tYXBfd2MoZmQpOwo+ICsKPiAr CWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIE9CSkVDVF9TSVpFKTsKPiArCXNldF9kb21haW4oZmQs IGhhbmRsZSk7Cj4gKwo+ICsJciA9IGdlbV9tbWFwX193YyhmZCwgaGFuZGxlLCAwLCBPQkpFQ1Rf U0laRSwgUFJPVF9SRUFEKTsKPiArCWlndF9hc3NlcnQociAhPSBNQVBfRkFJTEVEKTsKPiArCj4g Kwl3ID0gZ2VtX21tYXBfX3djKGZkLCBoYW5kbGUsIDAsIE9CSkVDVF9TSVpFLCBQUk9UX1JFQUQg fCBQUk9UX1dSSVRFKTsKPiArCWlndF9hc3NlcnQodyAhPSBNQVBfRkFJTEVEKTsKPiArCj4gKwlp ZiAob3JkZXIgPT0gUkVBRF9CRUZPUkVfV1JJVEUpIHsKPiArCQl2YWwgPSAqKHVpbnQzMl90ICop cjsKPiArCQkqKHVpbnQzMl90ICopdyA9IHZhbDsKPiArCX0gZWxzZSB7Cj4gKwkJKih1aW50MzJf dCAqKXcgPSB2YWw7Cj4gKwkJdmFsID0gKih1aW50MzJfdCAqKXI7Cj4gKwl9Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICsJbXVubWFwKHIsIE9CSkVDVF9TSVpFKTsKPiArCW11bm1h cCh3LCBPQkpFQ1RfU0laRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3Rfd3JpdGUo aW50IGZkKQo+ICt7Cj4gKwl2b2lkICpzcmM7Cj4gKwl1aW50MzJfdCBkc3Q7Cj4gKwo+ICsJaWd0 X3JlcXVpcmVfbW1hcF93YyhmZCk7Cj4gKwo+ICsJLyogY29weSBmcm9tIGEgZnJlc2ggc3JjIHRv IGZyZXNoIGRzdCB0byBmb3JjZSBwYWdlZmF1bHQgb24gYm90aCAqLwo+ICsJc3JjID0gY3JlYXRl X3BvaW50ZXIoZmQpOwo+ICsJZHN0ID0gZ2VtX2NyZWF0ZShmZCwgT0JKRUNUX1NJWkUpOwo+ICsK PiArCWdlbV93cml0ZShmZCwgZHN0LCAwLCBzcmMsIE9CSkVDVF9TSVpFKTsKPiArCj4gKwlnZW1f Y2xvc2UoZmQsIGRzdCk7Cj4gKwltdW5tYXAoc3JjLCBPQkpFQ1RfU0laRSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkCj4gK3Rlc3Rfd3JpdGVfZ3R0KGludCBmZCkKPiArewo+ICsJdWludDMyX3Qg ZHN0Owo+ICsJY2hhciAqZHN0X2d0dDsKPiArCXZvaWQgKnNyYzsKPiArCj4gKwlpZ3RfcmVxdWly ZV9tbWFwX3djKGZkKTsKPiArCj4gKwlkc3QgPSBnZW1fY3JlYXRlKGZkLCBPQkpFQ1RfU0laRSk7 Cj4gKwlzZXRfZG9tYWluKGZkLCBkc3QpOwo+ICsKPiArCS8qIHByZWZhdWx0IG9iamVjdCBpbnRv IGd0dCAqLwo+ICsJZHN0X2d0dCA9IG1tYXBfYm8oZmQsIGRzdCk7Cj4gKwltZW1zZXQoZHN0X2d0 dCwgMCwgT0JKRUNUX1NJWkUpOwo+ICsJbXVubWFwKGRzdF9ndHQsIE9CSkVDVF9TSVpFKTsKPiAr Cj4gKwlzcmMgPSBjcmVhdGVfcG9pbnRlcihmZCk7Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBkc3Qs IDAsIHNyYywgT0JKRUNUX1NJWkUpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgZHN0KTsKPiArCW11 bm1hcChzcmMsIE9CSkVDVF9TSVpFKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9y ZWFkKGludCBmZCkKPiArewo+ICsJdm9pZCAqZHN0Owo+ICsJdWludDMyX3Qgc3JjOwo+ICsKPiAr CWlndF9yZXF1aXJlX21tYXBfd2MoZmQpOwo+ICsKPiArCS8qIGNvcHkgZnJvbSBhIGZyZXNoIHNy YyB0byBmcmVzaCBkc3QgdG8gZm9yY2UgcGFnZWZhdWx0IG9uIGJvdGggKi8KPiArCWRzdCA9IGNy ZWF0ZV9wb2ludGVyKGZkKTsKPiArCXNyYyA9IGdlbV9jcmVhdGUoZmQsIE9CSkVDVF9TSVpFKTsK PiArCj4gKwlnZW1fcmVhZChmZCwgc3JjLCAwLCBkc3QsIE9CSkVDVF9TSVpFKTsKPiArCj4gKwln ZW1fY2xvc2UoZmQsIHNyYyk7Cj4gKwltdW5tYXAoZHN0LCBPQkpFQ1RfU0laRSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3Rfd3JpdGVfY3B1X3JlYWRfd2MoaW50IGZkKQo+ICt7Cj4g Kwl1aW50MzJfdCBoYW5kbGU7Cj4gKwl1aW50MzJfdCAqc3JjLCAqZHN0Owo+ICsKPiArCWlndF9y ZXF1aXJlX21tYXBfd2MoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIE9CSkVD VF9TSVpFKTsKPiArCj4gKwlkc3QgPSBnZW1fbW1hcF9fd2MoZmQsIGhhbmRsZSwgMCwgT0JKRUNU X1NJWkUsIFBST1RfUkVBRCk7Cj4gKwlpZ3RfYXNzZXJ0KGRzdCAhPSAodWludDMyX3QgKilNQVBf RkFJTEVEKTsKPiArCj4gKwlzcmMgPSBnZW1fbW1hcF9fY3B1KGZkLCBoYW5kbGUsIDAsIE9CSkVD VF9TSVpFLCBQUk9UX1dSSVRFKTsKPiArCWlndF9hc3NlcnQoc3JjICE9ICh1aW50MzJfdCAqKU1B UF9GQUlMRUQpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArCj4gKwltZW1zZXQo c3JjLCAweGFhLCBPQkpFQ1RfU0laRSk7Cj4gKwlzZXRfZG9tYWluKGZkLCBoYW5kbGUpOwo+ICsJ aWd0X2Fzc2VydChtZW1jbXAoZHN0LCBzcmMsIE9CSkVDVF9TSVpFKSA9PSAwKTsKPiArCj4gKwlt dW5tYXAoc3JjLCBPQkpFQ1RfU0laRSk7Cj4gKwltdW5tYXAoZHN0LCBPQkpFQ1RfU0laRSk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3Rfd3JpdGVfZ3R0X3JlYWRfd2MoaW50IGZkKQo+ ICt7Cj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4gKwl1aW50MzJfdCAqc3JjLCAqZHN0Owo+ICsKPiAr CWlndF9yZXF1aXJlX21tYXBfd2MoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoZmQs IE9CSkVDVF9TSVpFKTsKPiArCXNldF9kb21haW4oZmQsIGhhbmRsZSk7Cj4gKwo+ICsJZHN0ID0g Z2VtX21tYXBfX3djKGZkLCBoYW5kbGUsIDAsIE9CSkVDVF9TSVpFLCBQUk9UX1JFQUQpOwo+ICsJ aWd0X2Fzc2VydChkc3QgIT0gKHVpbnQzMl90ICopTUFQX0ZBSUxFRCk7Cj4gKwo+ICsJc3JjID0g Z2VtX21tYXBfX2d0dChmZCwgaGFuZGxlLCBPQkpFQ1RfU0laRSwgUFJPVF9XUklURSk7Cj4gKwlp Z3RfYXNzZXJ0KHNyYyAhPSAodWludDMyX3QgKilNQVBfRkFJTEVEKTsKPiArCj4gKwlnZW1fY2xv c2UoZmQsIGhhbmRsZSk7Cj4gKwo+ICsJbWVtc2V0KHNyYywgMHhhYSwgT0JKRUNUX1NJWkUpOwo+ ICsJaWd0X2Fzc2VydChtZW1jbXAoZHN0LCBzcmMsIE9CSkVDVF9TSVpFKSA9PSAwKTsKPiArCj4g KwltdW5tYXAoc3JjLCBPQkpFQ1RfU0laRSk7Cj4gKwltdW5tYXAoZHN0LCBPQkpFQ1RfU0laRSk7 Cj4gK30KPiArCj4gK3N0cnVjdCB0aHJlYWRfZmF1bHRfY29uY3VycmVudCB7Cj4gKwlwdGhyZWFk X3QgdGhyZWFkOwo+ICsJaW50IGlkOwo+ICsJdWludDMyX3QgKipwdHI7Cj4gK307Cj4gKwo+ICtz dGF0aWMgdm9pZCAqCj4gK3RocmVhZF9mYXVsdF9jb25jdXJyZW50KHZvaWQgKmNsb3N1cmUpCj4g K3sKPiArCXN0cnVjdCB0aHJlYWRfZmF1bHRfY29uY3VycmVudCAqdCA9IGNsb3N1cmU7Cj4gKwl1 aW50MzJfdCB2YWwgPSAwOwo+ICsJaW50IG47Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IDMyOyBu KyspIHsKPiArCQlpZiAobiAmIDEpCj4gKwkJCSp0LT5wdHJbKG4gKyB0LT5pZCkgJSAzMl0gPSB2 YWw7Cj4gKwkJZWxzZQo+ICsJCQl2YWwgPSAqdC0+cHRyWyhuICsgdC0+aWQpICUgMzJdOwo+ICsJ fQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X2Zh dWx0X2NvbmN1cnJlbnQoaW50IGZkKQo+ICt7Cj4gKwl1aW50MzJfdCAqcHRyWzMyXTsKPiArCXN0 cnVjdCB0aHJlYWRfZmF1bHRfY29uY3VycmVudCB0aHJlYWRbNjRdOwo+ICsJaW50IG47Cj4gKwo+ ICsJaWd0X3JlcXVpcmVfbW1hcF93YyhmZCk7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IDMyOyBu KyspIHsKPiArCQlwdHJbbl0gPSBjcmVhdGVfcG9pbnRlcihmZCk7Cj4gKwl9Cj4gKwo+ICsJZm9y IChuID0gMDsgbiA8IDY0OyBuKyspIHsKPiArCQl0aHJlYWRbbl0ucHRyID0gcHRyOwo+ICsJCXRo cmVhZFtuXS5pZCA9IG47Cj4gKwkJcHRocmVhZF9jcmVhdGUoJnRocmVhZFtuXS50aHJlYWQsIE5V TEwsIHRocmVhZF9mYXVsdF9jb25jdXJyZW50LCAmdGhyZWFkW25dKTsKPiArCX0KPiArCj4gKwlm b3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKPiArCQlwdGhyZWFkX2pvaW4odGhyZWFkW25dLnRocmVh ZCwgTlVMTCk7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IDMyOyBuKyspIHsKPiArCQltdW5tYXAo cHRyW25dLCBPQkpFQ1RfU0laRSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3J1 bl93aXRob3V0X3ByZWZhdWx0KGludCBmZCwKPiArCQkJdm9pZCAoKmZ1bmMpKGludCBmZCkpCj4g K3sKPiArCWlndF9kaXNhYmxlX3ByZWZhdWx0KCk7Cj4gKwlmdW5jKGZkKTsKPiArCWlndF9lbmFi bGVfcHJlZmF1bHQoKTsKPiArfQo+ICsKPiAraW50IGZkOwo+ICsKPiAraWd0X21haW4KPiArewo+ ICsJaWYgKGlndF9ydW5faW5fc2ltdWxhdGlvbigpKQo+ICsJCU9CSkVDVF9TSVpFID0gMSAqIDEw MjQgKiAxMDI0Owo+ICsKPiArCWlndF9maXh0dXJlCj4gKwkJZmQgPSBkcm1fb3Blbl9hbnkoKTsK PiArCj4gKwlpZ3Rfc3VidGVzdCgiY29weSIpCj4gKwkJdGVzdF9jb3B5KGZkKTsKPiArCWlndF9z dWJ0ZXN0KCJyZWFkIikKPiArCQl0ZXN0X3JlYWQoZmQpOwo+ICsJaWd0X3N1YnRlc3QoIndyaXRl IikKPiArCQl0ZXN0X3dyaXRlKGZkKTsKPiArCWlndF9zdWJ0ZXN0KCJ3cml0ZS1ndHQiKQo+ICsJ CXRlc3Rfd3JpdGVfZ3R0KGZkKTsKPiArCWlndF9zdWJ0ZXN0KCJyZWFkLXdyaXRlIikKPiArCQl0 ZXN0X3JlYWRfd3JpdGUoZmQsIFJFQURfQkVGT1JFX1dSSVRFKTsKPiArCWlndF9zdWJ0ZXN0KCJ3 cml0ZS1yZWFkIikKPiArCQl0ZXN0X3JlYWRfd3JpdGUoZmQsIFJFQURfQUZURVJfV1JJVEUpOwo+ ICsJaWd0X3N1YnRlc3QoInJlYWQtd3JpdGUtZGlzdGluY3QiKQo+ICsJCXRlc3RfcmVhZF93cml0 ZTIoZmQsIFJFQURfQkVGT1JFX1dSSVRFKTsKPiArCWlndF9zdWJ0ZXN0KCJ3cml0ZS1yZWFkLWRp c3RpbmN0IikKPiArCQl0ZXN0X3JlYWRfd3JpdGUyKGZkLCBSRUFEX0FGVEVSX1dSSVRFKTsKPiAr CWlndF9zdWJ0ZXN0KCJmYXVsdC1jb25jdXJyZW50IikKPiArCQl0ZXN0X2ZhdWx0X2NvbmN1cnJl bnQoZmQpOwo+ICsJaWd0X3N1YnRlc3QoInJlYWQtbm8tcHJlZmF1bHQiKQo+ICsJCXJ1bl93aXRo b3V0X3ByZWZhdWx0KGZkLCB0ZXN0X3JlYWQpOwo+ICsJaWd0X3N1YnRlc3QoIndyaXRlLW5vLXBy ZWZhdWx0IikKPiArCQlydW5fd2l0aG91dF9wcmVmYXVsdChmZCwgdGVzdF93cml0ZSk7Cj4gKwlp Z3Rfc3VidGVzdCgid3JpdGUtZ3R0LW5vLXByZWZhdWx0IikKPiArCQlydW5fd2l0aG91dF9wcmVm YXVsdChmZCwgdGVzdF93cml0ZV9ndHQpOwo+ICsJaWd0X3N1YnRlc3QoIndyaXRlLWNwdS1yZWFk LXdjIikKPiArCQl0ZXN0X3dyaXRlX2NwdV9yZWFkX3djKGZkKTsKPiArCWlndF9zdWJ0ZXN0KCJ3 cml0ZS1ndHQtcmVhZC13YyIpCj4gKwkJdGVzdF93cml0ZV9ndHRfcmVhZF93YyhmZCk7Cj4gKwo+ ICsJaWd0X2ZpeHR1cmUKPiArCQljbG9zZShmZCk7Cj4gK30KPiAtLSAKPiAxLjkuMQo+IAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KKzQxICgwKSA3 OSAzNjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=