From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] igt/gem_create_stolen: Verifying extended gem_create ioctl Date: Thu, 7 May 2015 08:52:54 +0200 Message-ID: <20150507065254.GR30184@phenom.ffwll.local> References: <1430907712-5132-1-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f41.google.com (mail-wg0-f41.google.com [74.125.82.41]) by gabe.freedesktop.org (Postfix) with ESMTP id DD5826E72E for ; Wed, 6 May 2015 23:50:34 -0700 (PDT) Received: by wgin8 with SMTP id n8so33503747wgi.0 for ; Wed, 06 May 2015 23:50:34 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1430907712-5132-1-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ankitprasad.r.sharma@intel.com Cc: intel-gfx@lists.freedesktop.org, akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXkgMDYsIDIwMTUgYXQgMDM6NTE6NTJQTSArMDUzMCwgYW5raXRwcmFzYWQuci5z aGFybWFAaW50ZWwuY29tIHdyb3RlOgo+IEZyb206IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRw cmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUgdGVzdGNh c2VzIGZvciB2ZXJpZnlpbmcgdGhlIG5ldyBleHRlbmRlZAo+IGdlbV9jcmVhdGUgaW9jdGwuIEJ5 IG1lYW5zIG9mIHRoaXMgZXh0ZW5kZWQgaW9jdGwsIG1lbW9yeQo+IHBsYWNlbWVudCBvZiB0aGUg R0VNIG9iamVjdCBjYW4gYmUgc3BlY2lmaWVkLCBpLmUuIGVpdGhlcgo+IHNobWVtIG9yIHN0b2xl biBtZW1vcnkuCj4gVGhlc2UgdGVzdGNhc2VzIGluY2x1ZGUgZnVuY3Rpb25hbCB0ZXN0cyBhbmQg aW50ZXJmYWNlIHRlc3RzIGZvcgo+IHRlc3RpbmcgdGhlIGdlbV9jcmVhdGUgaW9jdGwgY2FsbCBm b3Igc3RvbGVuIG1lbW9yeSBwbGFjZW1lbnQKPiAKPiB2MjogVGVzdGluZyBwcmVhZC9wd3JpdGUg ZnVuY3Rpb25hbGl0eSBmb3Igc3RvbGVuIGJhY2tlZCBvYmplY3RzLAo+IGFkZGVkIGxvY2FsIHN0 cnVjdCBmb3IgZXh0ZW5kZWQgZ2VtX2NyZWF0ZSBhbmQgZ2VtX2dldF9hcGVydHVyZSwKPiB1bnRp bCBoZWFkZXJzIGNhdGNoIHVwIChDaHJpcykKPiAKPiB2MzogUmVtb3ZlZCBnZXRfYXBlcnR1cmUg cmVsYXRlZCBmdW5jdGlvbnMsIGV4dGVuZGVkIGdlbV9wcmVhZAo+IHRvIGNvbXBhcmUgc3BlZWRz IGZvciB1c2VyIHBhZ2VzIHdpdGggYW5kIHdpdGhvdXQgcGFnZSBmYXVsdHMsCj4gdW5leHBvc2Vk IGxvY2FsX2dlbV9jcmVhdGUgc3RydWN0LCBjaGFuZ2VkIGdlbV9jcmVhdGVfc3RvbGVuCj4gdXNh Z2UgKENocmlzKQo+IAo+IFNpZ25lZC1vZmYtYnk6IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRw cmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgoKQW4gaWd0IHRvIGNoZWNrIGZvciBpbnZhbGlkIGFy Z3VtZW50cyBvZiB0aGUgZ2VtIGNyZWF0ZSBpb2N0bCAoZXNwZWNpYWxseQp0aGUgbmV3bHkgYWRk ZWQgZmxhZ3MgcGFyYW1ldGVycykgc2VlbXMgdG8gYmUgbWlzc2luZy4KLURhbmllbAoKPiAtLS0K PiAgbGliL2lvY3RsX3dyYXBwZXJzLmMgICAgICB8ICA2MCArKysrKysrCj4gIGxpYi9pb2N0bF93 cmFwcGVycy5oICAgICAgfCAgMTIgKysKPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICB8ICAg MSArCj4gIHRlc3RzL2dlbV9jcmVhdGVfc3RvbGVuLmMgfCAzODcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB0ZXN0cy9nZW1fcHJlYWQuYyAgICAgICAg IHwgMTAwICsrKysrKysrKysrKwo+ICB0ZXN0cy9nZW1fcHdyaXRlLmMgICAgICAgIHwgIDQ1ICsr KysrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDYwNSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9nZW1fY3JlYXRlX3N0b2xlbi5jCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9p b2N0bF93cmFwcGVycy5jIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKPiBpbmRleCBmZjc4ZWYxLi4y YmQzNDFhIDEwMDY0NAo+IC0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCj4gKysrIGIvbGliL2lv Y3RsX3dyYXBwZXJzLmMKPiBAQCAtMzc5LDYgKzM3OSw2NiBAQCB2b2lkIGdlbV9zeW5jKGludCBm ZCwgdWludDMyX3QgaGFuZGxlKQo+ICAJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZSwgSTkxNV9H RU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gIH0KPiAgCj4gK2Jvb2wgZ2Vt X2NyZWF0ZV9faGFzX3N0b2xlbl9zdXBwb3J0KGludCBmZCkKPiArewo+ICsJc3RhdGljIGludCBo YXNfc3RvbGVuX3N1cHBvcnQgPSAtMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsK PiArCWludCB2YWwgPSAtMTsKPiArCj4gKwlyZXR1cm4gMTsKPiArCWlmIChoYXNfc3RvbGVuX3N1 cHBvcnQgPCAwKSB7Cj4gKwkJbWVtc2V0KCZncCwgMCwgc2l6ZW9mKGdwKSk7Cj4gKwkJZ3AucGFy YW0gPSAzNTsgLyogQ1JFQVRFX1ZFUlNJT04gKi8KPiArCQlncC52YWx1ZSA9ICZ2YWw7Cj4gKwo+ ICsJCS8qIERvIHdlIGhhdmUgdGhlIGV4dGVuZGVkIGdlbV9jcmVhdGVfaW9jdGw/ICovCj4gKwkJ aW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOwo+ICsJCWhhc19zdG9sZW5f c3VwcG9ydCA9IHZhbCA+PSAxOwo+ICsJfQo+ICsKPiArCXJldHVybiBoYXNfc3RvbGVuX3N1cHBv cnQ7Cj4gK30KPiArCj4gK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV9jcmVhdGVfdjIgewo+ICsJdWlu dDY0X3Qgc2l6ZTsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90IHBhZDsKPiArI2Rl ZmluZSBJOTE1X0NSRUFURV9QTEFDRU1FTlRfU1RPTEVOICgxPDwwKQo+ICsJdWludDMyX3QgZmxh Z3M7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0NSRUFURSAgICAg ICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0 IGxvY2FsX2k5MTVfZ2VtX2NyZWF0ZV92MikKPiArLyoqCj4gKyAqIGdlbV9jcmVhdGVfc3RvbGVu Ogo+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBzaXplOiBk ZXNpcmVkIHNpemUgb2YgdGhlIGJ1ZmZlcgo+ICsgKiBAZmxhZ3M6IGRlc2lyZWQgcGxhY2VtZW50 IGkuZS4gc3RvbGVuIG9yIHNobWVtCj4gKyAqCj4gKyAqIFRoaXMgd3JhcHMgdGhlIG5ldyBHRU1f Q1JFQVRFIGlvY3RsLCB3aGljaCBhbGxvY2F0ZXMgYQo+ICsgKiBuZXcgZ2VtIGJ1ZmZlciBvYmpl Y3Qgb2YgQHNpemUgYW5kIHBsYWNlbWVudCBiYXNlZCBvbiBAZmxhZ3MuCj4gKyAqCj4gKyAqIFJl dHVybnM6IFRoZSBmaWxlLXByaXZhdGUgaGFuZGxlIG9mIHRoZSBjcmVhdGVkIGJ1ZmZlciBvYmpl Y3QKPiArICovCj4gKwo+ICt1aW50MzJfdCBnZW1fY3JlYXRlX3N0b2xlbihpbnQgZmQsIGludCBz aXplKQo+ICt7Cj4gKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY3JlYXRlX3YyIGNyZWF0ZTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJbWVtc2V0KCZjcmVhdGUsIDAsIHNpemVvZihjcmVhdGUpKTsKPiAr CWNyZWF0ZS5oYW5kbGUgPSAwOwo+ICsJY3JlYXRlLnNpemUgPSBzaXplOwo+ICsJY3JlYXRlLmZs YWdzID0gSTkxNV9DUkVBVEVfUExBQ0VNRU5UX1NUT0xFTjsKPiArCXJldCA9IGRybUlvY3RsKGZk LCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9DUkVBVEUsICZjcmVhdGUpOwo+ICsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVycm5vID0gMDsKPiArCXJldHVybiBjcmVhdGUu aGFuZGxlOwo+ICt9Cj4gKwo+ICsKPiAgdWludDMyX3QgX19nZW1fY3JlYXRlKGludCBmZCwgaW50 IHNpemUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlIGNyZWF0ZTsKPiBkaWZm IC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJzLmggYi9saWIvaW9jdGxfd3JhcHBlcnMuaAo+IGlu ZGV4IGNlZDdlZjMuLmNhYzFjMTEgMTAwNjQ0Cj4gLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmgK PiArKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuaAo+IEBAIC01Niw2ICs1Niw5IEBAIHZvaWQgZ2Vt X3JlYWQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVm LCB1aW50MzJfdCBsZW5nCj4gIHZvaWQgZ2VtX3NldF9kb21haW4oaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsCj4gIAkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywgdWludDMyX3Qgd3JpdGVfZG9t YWluKTsKPiAgdm9pZCBnZW1fc3luYyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7Cj4gKwo+ICti b29sIGdlbV9jcmVhdGVfX2hhc19zdG9sZW5fc3VwcG9ydChpbnQgZmQpOwo+ICt1aW50MzJfdCBn ZW1fY3JlYXRlX3N0b2xlbihpbnQgZmQsIGludCBzaXplKTsKPiAgdWludDMyX3QgX19nZW1fY3Jl YXRlKGludCBmZCwgaW50IHNpemUpOwo+ICB1aW50MzJfdCBnZW1fY3JlYXRlKGludCBmZCwgaW50 IHNpemUpOwo+ICB2b2lkIGdlbV9leGVjYnVmKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiAqZXhlY2J1Zik7Cj4gQEAgLTY3LDYgKzcwLDE1IEBAIGJvb2wgZ2VtX21tYXBf X2hhc193YyhpbnQgZmQpOwo+ICB2b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsIGludCBvZmZzZXQsIGludCBzaXplLCBpbnQgcHJvdCk7Cj4gIAo+ICAvKioKPiArICog Z2VtX3JlcXVpcmVfc3RvbGVuX3N1cHBvcnQ6Cj4gKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxl IGRlc2NyaXB0b3IKPiArICoKPiArICogVGVzdCBtYWNybyB0byBxdWVyeSB3aGV0aGVyIHN1cHBv cnQgZm9yIGFsbG9jYXRpbmcgb2JqZWN0cyBmcm9tIHN0b2xlbgo+ICsgKiBtZW1vcnkgaXMgYXZh aWxhYmxlLiBBdXRvbWF0aWNhbGx5IHNraXBzIHRocm91Z2ggaWd0X3JlcXVpcmUoKSBpZiBub3Qu Cj4gKyAqLwo+ICsjZGVmaW5lIGdlbV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0KGZkKSBcCj4gKwkJ CWlndF9yZXF1aXJlKGdlbV9jcmVhdGVfX2hhc19zdG9sZW5fc3VwcG9ydChmZCkpCj4gKy8qKgo+ ICAgKiBnZW1fcmVxdWlyZV9tbWFwX3djOgo+ICAgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBk ZXNjcmlwdG9yCj4gICAqCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggYTE2NTk3OC4uOWIyZWU5MCAxMDA2NDQKPiAt LS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwo+IEBAIC0yMyw2ICsyMyw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gIAlnZW1fY2FjaGluZyBc Cj4gIAlnZW1fY2xvc2VfcmFjZSBcCj4gIAlnZW1fY29uY3VycmVudF9ibGl0IFwKPiArCWdlbV9j cmVhdGVfc3RvbGVuIFwKPiAgCWdlbV9jc190bGIgXAo+ICAJZ2VtX2N0eF9wYXJhbV9iYXNpYyBc Cj4gIAlnZW1fY3R4X2JhZF9leGVjIFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2NyZWF0ZV9z dG9sZW4uYyBiL3Rlc3RzL2dlbV9jcmVhdGVfc3RvbGVuLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLjQwMmQ0MmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMv Z2VtX2NyZWF0ZV9zdG9sZW4uYwo+IEBAIC0wLDAgKzEsMzg3IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCDCqSAyMDExIEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRw cmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKy8qKiBAZmlsZSBn ZW1fY3JlYXRlX3N0b2xlbi5jCj4gKyAqCj4gKyAqIFRoaXMgaXMgYSB0ZXN0IGZvciB0aGUgZXh0 ZW5kZWQgZ2VtX2NyZWF0ZSBpb2N0bCwgdGhhdCBpbmNsdWRlcyBhbGxvY2F0aW9uCj4gKyAqIG9m IG9iamVjdCBmcm9tIHN0b2xlbiBtZW1vcnkKPiArICoKPiArICogVGhlIGdvYWwgaXMgdG8gc2lt cGx5IGVuc3VyZSB0aGUgYmFzaWNzIHdvcmssIGFuZCBpbnZhbGlkIGlucHV0IGNvbWJpbmF0aW9u cwo+ICsgKiBhcmUgcmVqZWN0ZWQuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMu aD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5j bHVkZSA8c3lzL3RpbWUuaD4KPiArI2luY2x1ZGUgPGdldG9wdC5oPgo+ICsKPiArI2luY2x1ZGUg PGRybS5oPgo+ICsKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJp bnRlbF9idWZtZ3IuaCIKPiArI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCj4gKyNpbmNs dWRlICJpbnRlbF9pby5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVk ZSAiaWd0X2F1eC5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVkZSAiZHJtLmgi Cj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsKPiArI2RlZmluZSBDTEVBUihzKSBtZW1zZXQo JnMsIDAsIHNpemVvZihzKSkKPiArI2RlZmluZSBTSVpFIDEwMjQqMTAyNAo+ICsKPiArc3RhdGlj IHN0cnVjdCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Cj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoOwo+ICsKPiArc3RhdGljIHZvaWQgdmVyaWZ5X2NvcHlfb3AoZHJt X2ludGVsX2JvICpzcmMsIGRybV9pbnRlbF9ibyAqZGVzdCkKPiArewo+ICsJdWludDMyX3QgKnZp cnQsIGksIHJldDsKPiArCS8qIEZpbGwgdGhlIHNyYyBCTyB3aXRoIGR3b3JkcyAqLwo+ICsJcmV0 ID0gZHJtX2ludGVsX2dlbV9ib19tYXBfZ3R0KHNyYyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ ICsKPiArCXZpcnQgPSBzcmMtPnZpcnR1YWw7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS80OyBp KyspCj4gKwkJdmlydFtpXSA9IGk7Cj4gKwo+ICsJaW50ZWxfY29weV9ibyhiYXRjaCwgZGVzdCwg c3JjLCBTSVpFKTsKPiArCj4gKwlyZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoZGVzdCk7 Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXZpcnQgPSBkZXN0LT52aXJ0dWFsOwo+ICsJ LyogdmVyaWZ5ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS80OyBpKyspIHsKPiArCQlpZiAo dmlydFtpXSAhPSBpKSB7Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiRXhwZWN0ZWQgMHglMDh4LCBm b3VuZCAweCUwOHggIgo+ICsJCQkJCSJhdCBvZmZzZXQgMHglMDh4XG4iLAo+ICsJCQkJCWksIHZp cnRbaV0sIGkgKiA0KTsKPiArCQkJaWd0X2Fzc2VydCh2aXJ0W2ldID09IGkpOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoc3JjKTsKPiArCWRybV9pbnRlbF9ib191bm1h cChkZXN0KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3RvbGVuX3B3cml0ZShpbnQgZmQpCj4g K3sKPiArCWRybV9pbnRlbF9ibyAqYm87Cj4gKwl1aW50MzJfdCBidWZbU0laRS80XTsKPiArCXVp bnQzMl90IGhhbmRsZSA9IDA7Cj4gKwl1aW50MzJfdCAqdmlydDsKPiArCWludCBpLCByZXQgPSAw Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBTSVpFLzQ7IGkgKyspCj4gKwkJYnVmW2ldID0gMHhk ZWFkOwo+ICsKPiArCWdlbV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0KGZkKTsKPiArCj4gKwloYW5k bGUgPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwlpZ3RfYXNzZXJ0KGhhbmRsZSAh PSAwKTsKPiArCj4gKwlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgMCwgYnVmLCBTSVpFKTsKPiArCWJv ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwgImJvIiwgaGFuZGxlKTsKPiAr Cj4gKwlyZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoYm8pOwo+ICsJaWd0X2Fzc2VydCgh cmV0KTsKPiArCj4gKwl2aXJ0ID0gYm8tPnZpcnR1YWw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IFNJWkUvNDsgaSArKykKPiArCQlpZ3RfYXNzZXJ0KHZpcnRbaV0gPT0gMHhkZWFkKTsKPiArCj4g Kwlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwo+ICsJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJv KTsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3Rv bGVuX3ByZWFkKGludCBmZCkKPiArewo+ICsJZHJtX2ludGVsX2JvICpibzsKPiArCXVpbnQzMl90 IGJ1ZltTSVpFLzRdOwo+ICsJdWludDMyX3QgaGFuZGxlID0gMDsKPiArCXVpbnQzMl90ICp2aXJ0 Owo+ICsJaW50IGksIHJldCA9IDA7Cj4gKwo+ICsJQ0xFQVIoYnVmKTsKPiArCj4gKwlnZW1fcmVx dWlyZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZV9zdG9s ZW4oZmQsIFNJWkUpOwo+ICsJaWd0X2Fzc2VydChoYW5kbGUgIT0gMCk7Cj4gKwo+ICsJYm8gPSBn ZW1faGFuZGxlX3RvX2xpYmRybV9ibyhidWZtZ3IsIGZkLCAiYm8iLCBoYW5kbGUpOwo+ICsKPiAr CXJldCA9IGRybV9pbnRlbF9nZW1fYm9fbWFwX2d0dChibyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQp Owo+ICsKPiArCXZpcnQgPSBiby0+dmlydHVhbDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0la RS80OyBpICsrKQo+ICsJCXZpcnRbaV0gPSAweGRlYWQ7Cj4gKwo+ICsJZHJtX2ludGVsX2JvX3Vu bWFwKGJvKTsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Cj4gKwo+ICsJZ2VtX3Jl YWQoZmQsIGhhbmRsZSwgMCwgYnVmLCBTSVpFKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0la RS80OyBpICsrKQo+ICsJCWlndF9hc3NlcnQoYnVmW2ldID09IDB4ZGVhZCk7Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5X3Rlc3QoaW50 IGZkKQo+ICt7Cj4gKwlkcm1faW50ZWxfYm8gKnNyYywgKmRlc3Q7Cj4gKwl1aW50MzJfdCBzcmNf aGFuZGxlID0gMCwgZGVzdF9oYW5kbGUgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZ2Vt X3JlcXVpcmVfc3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsKPiArCXNyY19oYW5kbGUgPSBnZW1fY3Jl YXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwlpZ3RfYXNzZXJ0KHNyY19oYW5kbGUgIT0gMCk7Cj4g Kwo+ICsJZGVzdF9oYW5kbGUgPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwlpZ3Rf YXNzZXJ0KGRlc3RfaGFuZGxlICE9IDApOwo+ICsKPiArCXNyYyA9IGdlbV9oYW5kbGVfdG9fbGli ZHJtX2JvKGJ1Zm1nciwgZmQsICJzcmNfYm8iLCBzcmNfaGFuZGxlKTsKPiArCWRlc3QgPSBnZW1f aGFuZGxlX3RvX2xpYmRybV9ibyhidWZtZ3IsIGZkLCAiZHN0X2JvIiwgZGVzdF9oYW5kbGUpOwo+ ICsKPiArCWlndF9hc3NlcnQoc3JjICE9IE5VTEwpOwo+ICsJaWd0X2Fzc2VydChkZXN0ICE9IE5V TEwpOwo+ICsKPiArCXZlcmlmeV9jb3B5X29wKHNyYywgZGVzdCk7Cj4gKwo+ICsJZHJtX2ludGVs X2JvX3VucmVmZXJlbmNlKHNyYyk7Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoZGVzdCk7 Cj4gKwlnZW1fY2xvc2UoZmQsIHNyY19oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBkZXN0X2hh bmRsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZlcmlmeV9vYmplY3RfY2xlYXIoaW50IGZk KQo+ICt7Cj4gKwlkcm1faW50ZWxfYm8gKmJvOwo+ICsJdWludDMyX3QgaGFuZGxlID0gMDsKPiAr CXVpbnQzMl90ICp2aXJ0Owo+ICsJaW50IGksIHJldCA9IDA7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVf c3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZk LCBTSVpFKTsKPiArCWlndF9hc3NlcnQoaGFuZGxlICE9IDApOwo+ICsKPiArCWJvID0gZ2VtX2hh bmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwgInZlcmlmeV9ibyIsIGhhbmRsZSk7Cj4gKwlp Z3RfYXNzZXJ0KGJvICE9IE5VTEwpOwo+ICsKPiArCXJldCA9IGRybV9pbnRlbF9nZW1fYm9fbWFw X2d0dChibyk7Cj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKPiArCj4gKwkvKiBWZXJpZnkgaWYg dGhlIEJPIGlzIHplcm9lZCAqLwo+ICsJdmlydCA9IGJvLT52aXJ0dWFsOwo+ICsJZm9yIChpID0g MDsgaSA8IFNJWkUgLyA0OyBpKyspCj4gKwkJaWd0X2Fzc2VydCh2aXJ0W2ldID09IDApOwo+ICsK PiArCWRybV9pbnRlbF9ib191bm1hcChibyk7Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uo Ym8pOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBz dG9sZW5fZmlsbF9wdXJnZV90ZXN0KGludCBmZCkKPiArewo+ICsJZHJtX2ludGVsX2JvICpibzsK PiArCWludCBtcmV0ID0gMCwgcmV0ID0gMCwgb2JqX2NvdW50ID0gMCwgaSA9IDA7Cj4gKwlpbnQg X3JldCA9IDAsIGogPSAwOwo+ICsJdWludDMyX3QgaGFuZGxlWzEwMF0gPSB7MH07Cj4gKwl1aW50 MzJfdCBuZXdfaGFuZGxlID0gMDsKPiArCXVpbnQzMl90ICp2aXJ0Owo+ICsJaW50IHJldGFpbmVk ID0gMDsKPiArCj4gKwlnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ICsJLyog RXhoYXVzdCBTdG9sZW4gc3BhY2UgKi8KPiArCXdoaWxlKHJldCA9PSAwKSB7Cj4gKwkJcmV0ID0g LTE7Cj4gKwkJaGFuZGxlW2ldID0gZ2VtX2NyZWF0ZV9zdG9sZW4oZmQsIFNJWkUpOwo+ICsJCWlm IChoYW5kbGVbaV0gIT0gMCkgewo+ICsJCQlyZXQgPSAwOwo+ICsJCQlibyA9IGdlbV9oYW5kbGVf dG9fbGliZHJtX2JvKGJ1Zm1nciwgZmQsCj4gKwkJCQkJCSAgICAgInZlcmlmeV9ibyIsIGhhbmRs ZVtpXSk7Cj4gKwkJCWlndF9hc3NlcnQoYm8gIT0gTlVMTCk7Cj4gKwo+ICsJCQlfcmV0ID0gZHJt X2ludGVsX2dlbV9ib19tYXBfZ3R0KGJvKTsKPiArCQkJaWd0X2Fzc2VydChfcmV0ID09IDApOwo+ ICsKPiArCQkJdmlydCA9IGJvLT52aXJ0dWFsOwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgU0laRSAv IDQ7IGorKykKPiArCQkJCXZpcnRbal0gPSAweGFiOwo+ICsKPiArCQkJZHJtX2ludGVsX2JvX3Vu bWFwKGJvKTsKPiArCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKPiArCj4gKwkJCW9i al9jb3VudCsrOwo+ICsJCX0KPiArCj4gKwkJaSsrOwo+ICsJfQo+ICsKPiArCWlndF9hc3NlcnQo b2JqX2NvdW50ID4gMCk7Cj4gKwo+ICsJLyogTWFyayBhbGwgc3RvbGVuIG9iamVjdHMgcHVyZ2Vh YmxlICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgb2JqX2NvdW50OyBpKyspCj4gKwkJcmV0YWluZWQg PSBnZW1fbWFkdmlzZShmZCwgaGFuZGxlW2ldLCBJOTE1X01BRFZfRE9OVE5FRUQpOwo+ICsKPiAr CS8qIFRyeSB0byBhbGxvY2F0ZSBvbmUgbW9yZSBvYmplY3QgKi8KPiArCW5ld19oYW5kbGUgPSBn ZW1fY3JlYXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwlpZ3RfYXNzZXJ0KG5ld19oYW5kbGUgIT0g MCk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgdGhlIHJldGFpbmVkIG9iamVjdCdzIG1lbW9yeSBjb250 ZW50cyBhcmUgaW50YWN0ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgb2JqX2NvdW50OyBpKyspIHsK PiArCQlyZXRhaW5lZCA9IGdlbV9tYWR2aXNlKGZkLCBoYW5kbGVbaV0sIEk5MTVfTUFEVl9XSUxM TkVFRCk7Cj4gKwkJaWYgKHJldGFpbmVkKSB7Cj4gKwkJCWJvID0gZ2VtX2hhbmRsZV90b19saWJk cm1fYm8oYnVmbWdyLCBmZCwKPiArCQkJCQkJICAgICAidmVyaWZ5X2JvIiwgaGFuZGxlW2ldKTsK PiArCQkJaWd0X2Fzc2VydChibyAhPSBOVUxMKTsKPiArCj4gKwkJCV9yZXQgPSBkcm1faW50ZWxf Z2VtX2JvX21hcF9ndHQoYm8pOwo+ICsJCQlpZ3RfYXNzZXJ0KF9yZXQgPT0gMCk7Cj4gKwo+ICsJ CQl2aXJ0ID0gYm8tPnZpcnR1YWw7Cj4gKwkJCWZvciAoaiA9IDA7IGogPCBTSVpFIC8gNDsgaisr KQo+ICsJCQkJaWd0X2Fzc2VydCh2aXJ0W2pdID09IDB4YWIpOwo+ICsKPiArCQkJZHJtX2ludGVs X2JvX3VubWFwKGJvKTsKPiArCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBuZXdfaGFuZGxlKTsKPiArCWZvciAoaSA9IDA7 IGkgPCBvYmpfY291bnQ7IGkrKykKPiArCQlnZW1fY2xvc2UoZmQsIGhhbmRsZVtpXSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK3N0b2xlbl9ub19tbWFwKGludCBmZCkKPiArewo+ICsJdm9p ZCAqYWRkcjsKPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVfc3Rv bGVuX3N1cHBvcnQoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZkLCBT SVpFKTsKPiArCWlndF9hc3NlcnQoaGFuZGxlICE9IDApOwo+ICsKPiArCWFkZHIgPSBnZW1fbW1h cF9fY3B1KGZkLCBoYW5kbGUsIDAsIFNJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ICsJ aWd0X2Fzc2VydChhZGRyID09IE5VTEwpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW52YWxpZF9mbGFnX3Rlc3QoaW50IGZkKQo+ICt7Cj4g KwlpbnQgaGFuZGxlID0gMDsKPiArCj4gK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV9jcmVhdGVfdjIg ewo+ICsJdWludDY0X3Qgc2l6ZTsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90IHBh ZDsKPiArI2RlZmluZSBJOTE1X0NSRUFURV9QTEFDRU1FTlRfU1RPTEVOICgxPDwwKQo+ICsJdWlu dDMyX3QgZmxhZ3M7Cj4gK30gY3JlYXRlOwo+ICsKPiArI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1 X0dFTV9DUkVBVEUgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dF TV9DUkVBVEUsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jcmVhdGVfdjIpCj4gKwlnZW1fcmVxdWly ZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ICsJY3JlYXRlLmhhbmRsZSA9IDA7Cj4gKwljcmVh dGUuc2l6ZSA9IFNJWkU7Cj4gKwljcmVhdGUuZmxhZ3MgPSB+STkxNV9DUkVBVEVfUExBQ0VNRU5U X1NUT0xFTjsKPiArCWhhbmRsZSA9IGRybUlvY3RsKGZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9D UkVBVEUsICZjcmVhdGUpOwo+ICsKPiArCWlndF9hc3NlcnQoaGFuZGxlIDw9IDApOwo+ICt9Cj4g Kwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlpbnQgaSwgZmQsIGd0dF9zaXplX3RvdGFsLCBndHRfc2l6 ZV9tYXBwYWJsZTsKPiArCXVpbnQzMl90IGRldmlkOwo+ICsKPiArCWlndF9za2lwX29uX3NpbXVs YXRpb24oKTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Blbl9hbnkoKTsK PiArCQlkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ICsKPiArCQlkcm1faW50ZWxf Z2V0X2FwZXJ0dXJlX3NpemVzKGZkLCAoc2l6ZV90KikmZ3R0X3NpemVfdG90YWwsCj4gKwkJCQko c2l6ZV90KikmZ3R0X3NpemVfbWFwcGFibGUpOwo+ICsJCWJ1Zm1nciA9IGRybV9pbnRlbF9idWZt Z3JfZ2VtX2luaXQoZmQsIDQwOTYpOwo+ICsJCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxs b2MoYnVmbWdyLCBkZXZpZCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1pbnZh bGlkLWZsYWciKQo+ICsJCWludmFsaWRfZmxhZ190ZXN0KGZkKTsKPiArCj4gKwlpZ3Rfc3VidGVz dCgic3RvbGVuLWNsZWFyIikKPiArCQl2ZXJpZnlfb2JqZWN0X2NsZWFyKGZkKTsKPiArCj4gKwkv Kgo+ICsJICogc3RvbGVuIG1lbSBzcGVjaWFsIGNhc2VzIC0gY2hlY2tpbmcgZm9yIG5vbiBjcHUg bWFwcGFibGUKPiArCSAqLwo+ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1uby1tbWFwIikKPiArCQlz dG9sZW5fbm9fbW1hcChmZCk7Cj4gKwo+ICsJLyogY2hlY2tpbmcgZm9yIHByZWFkL3B3cml0ZSBp bnRlcmZhY2VzICovCj4gKwlpZ3Rfc3VidGVzdCgic3RvbGVuLXB3cml0ZSIpCj4gKwkJc3RvbGVu X3B3cml0ZShmZCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1wcmVhZCIpCj4gKwkJc3Rv bGVuX3ByZWFkKGZkKTsKPiArCj4gKwkvKiBGdW5jdGlvbmFsIFRlc3QgLSBibHQgY29weSAqLwo+ ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1jb3B5IikKPiArCQljb3B5X3Rlc3QoZmQpOwo+ICsKPiAr CS8qIEZpbGxpbmcgc3RvbGVuIGNvbXBsZXRlbHkgYW5kIG1hcmtpbmcgYWxsIHRoZSBvYmplY3Rz Cj4gKwkgKiBwdXJnZWFibGUuIFRoZW4gdHJ5aW5nIHRvIGFkZCBvbmUgbW9yZSBvYmplY3QsIHRv IHZlcmlmeQo+ICsJICogdGhlIHB1cmdpbmcgbG9naWMuCj4gKwkgKiBBZ2FpbiBtYXJraW5nIGFs bCBvYmplY3RzIFdJTExORUVEIGFuZCB2ZXJpZnlpbmcgdGhlCj4gKwkgKiBjb250ZW50cyBvZiB0 aGUgcmV0YWluZWQgb2JqZWN0cy4KPiArCSAqLwo+ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1maWxs LXB1cmdlIikKPiArCQlzdG9sZW5fZmlsbF9wdXJnZV90ZXN0KGZkKTsKPiArCj4gKwlpZ3RfZml4 dHVyZSB7Cj4gKwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cj4gKwkJZHJtX2ludGVs X2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMv Z2VtX3ByZWFkLmMgYi90ZXN0cy9nZW1fcHJlYWQuYwo+IGluZGV4IGNjODM5NDguLjk1MTYyZDUg MTAwNjQ0Cj4gLS0tIGEvdGVzdHMvZ2VtX3ByZWFkLmMKPiArKysgYi90ZXN0cy9nZW1fcHJlYWQu Ywo+IEBAIC00MSw2ICs0MSwxMCBAQAo+ICAjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICAKPiAgI2Rl ZmluZSBPQkpFQ1RfU0laRSAxNjM4NAo+ICsjZGVmaW5lIExBUkdFX09CSkVDVF9TSVpFIDEwMjQg KiAxMDI0Cj4gKyNkZWZpbmUgS0dSTiAiXHgxQlszMm0iCj4gKyNkZWZpbmUgS1JFRCAiXHgxQlsz MW0iCj4gKyNkZWZpbmUgS05STSAiXHgxQlswbSIKPiAgCj4gIHN0YXRpYyB2b2lkIGRvX2dlbV9y ZWFkKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB2b2lkICpidWYsIGludCBsZW4sIGludCBsb29w cykKPiAgewo+IEBAIC03NiwxMSArODAsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJ5dGVzX3Bl cl9zZWMoY2hhciAqYnVmLCBkb3VibGUgdikKPiAgCj4gIAo+ICB1aW50MzJfdCAqc3JjLCBkc3Q7 Cj4gK3VpbnQzMl90ICpkc3RfdXNlciwgc3JjX3N0b2xlbiwgbGFyZ2Vfc3RvbGVuOwo+ICt1aW50 MzJfdCAqc3RvbGVuX3BmX3VzZXIsICpzdG9sZW5fbm9wZl91c2VyOwo+ICBpbnQgZmQsIGNvdW50 Owo+ICAKPiAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICB7Cj4gIAlpbnQgb2Jq ZWN0X3NpemUgPSAwOwo+ICsJaW50IGxhcmdlX29ial9zaXplID0gTEFSR0VfT0JKRUNUX1NJWkU7 Cj4gIAl1aW50MzJfdCBidWZbMjBdOwo+ICAJY29uc3Qgc3RydWN0IHsKPiAgCQlpbnQgbGV2ZWw7 Cj4gQEAgLTkwLDYgKzk3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICAJ CXsgMSwgInNub29wIiB9LAo+ICAJCXsgMiwgImRpc3BsYXkiIH0sCj4gIAkJeyAtMSB9LAo+ICsJ CXsgLTEsICJzdG9sZW4tdW5jYWNoZWQifSwKPiArCQl7IC0xLCAic3RvbGVuLXNub29wIn0sCj4g KwkJeyAtMSwgInN0b2xlbi1kaXNwbGF5In0sCj4gIAl9LCAqYzsKPiAgCj4gIAlpZ3Rfc3VidGVz dF9pbml0KGFyZ2MsIGFyZ3YpOwo+IEBAIC0xMDYsNiArMTE2LDggQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQo+ICAKPiAgCQlkc3QgPSBnZW1fY3JlYXRlKGZkLCBvYmplY3Rfc2l6 ZSk7Cj4gIAkJc3JjID0gbWFsbG9jKG9iamVjdF9zaXplKTsKPiArCQlzcmNfc3RvbGVuID0gZ2Vt X2NyZWF0ZV9zdG9sZW4oZmQsIG9iamVjdF9zaXplKTsKPiArCQlkc3RfdXNlciA9IG1hbGxvYyhv YmplY3Rfc2l6ZSk7Cj4gIAl9Cj4gIAo+ICAJaWd0X3N1YnRlc3QoIm5vcm1hbCIpIHsKPiBAQCAt MTQyLDkgKzE1NCw5NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gIAkJfQo+ ICAJfQo+ICAKPiArCWlndF9zdWJ0ZXN0KCJzdG9sZW4tbm9ybWFsIikgewo+ICsJCWZvciAoY291 bnQgPSAxOyBjb3VudCA8PSAxPDwxNzsgY291bnQgPDw9IDEpIHsKPiArCQkJc3RydWN0IHRpbWV2 YWwgc3RhcnQsIGVuZDsKPiArCj4gKwkJCWdldHRpbWVvZmRheSgmc3RhcnQsIE5VTEwpOwo+ICsJ CQlkb19nZW1fcmVhZChmZCwgc3JjX3N0b2xlbiwgZHN0X3VzZXIsIG9iamVjdF9zaXplLCBjb3Vu dCk7Cj4gKwkJCWdldHRpbWVvZmRheSgmZW5kLCBOVUxMKTsKPiArCQkJaWd0X2luZm8oIlRpbWUg dG8gcHJlYWQgJWQgYnl0ZXMgeCAlNmQ6CSU3LjNmwrVzLCAlc1xuIiwKPiArCQkJCSBvYmplY3Rf c2l6ZSwgY291bnQsCj4gKwkJCQkgZWxhcHNlZCgmc3RhcnQsICZlbmQsIGNvdW50KSwKPiArCQkJ CSBieXRlc19wZXJfc2VjKChjaGFyICopYnVmLAo+ICsJCQkJIG9iamVjdF9zaXplL2VsYXBzZWQo JnN0YXJ0LCAmZW5kLCBjb3VudCkqMWU2KSk7Cj4gKwkJCWZmbHVzaChzdGRvdXQpOwo+ICsJCX0K PiArCX0KPiArCWZvciAoYyA9IGNhY2hlOyBjLT5sZXZlbCAhPSAtMTsgYysrKSB7Cj4gKwkJaWd0 X3N1YnRlc3QoKGMgKyA0KS0+bmFtZSkgewo+ICsJCQlnZW1fc2V0X2NhY2hpbmcoZmQsIHNyY19z dG9sZW4sIGMtPmxldmVsKTsKPiArCj4gKwkJCWZvciAoY291bnQgPSAxOyBjb3VudCA8PSAxPDwx NzsgY291bnQgPDw9IDEpIHsKPiArCQkJCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQ7Cj4gKwo+ ICsJCQkJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7Cj4gKwkJCQlkb19nZW1fcmVhZChmZCwg c3JjX3N0b2xlbiwgZHN0X3VzZXIsCj4gKwkJCQkJICAgIG9iamVjdF9zaXplLCBjb3VudCk7Cj4g KwkJCQlnZXR0aW1lb2ZkYXkoJmVuZCwgTlVMTCk7Cj4gKwkJCQlpZ3RfaW5mbygiVGltZSB0byAl cyBwcmVhZCAlZCBieXRlcyB4ICU2ZDogICAgICAlNy4zZsK1cywgJXNcbiIsCj4gKwkJCQkJIChj ICsgNCktPm5hbWUsIG9iamVjdF9zaXplLCBjb3VudCwKPiArCQkJCQkgZWxhcHNlZCgmc3RhcnQs ICZlbmQsIGNvdW50KSwKPiArCQkJCQkgYnl0ZXNfcGVyX3NlYygoY2hhciAqKWJ1ZiwKPiArCQkJ CQkgb2JqZWN0X3NpemUvZWxhcHNlZCgmc3RhcnQsICZlbmQsIGNvdW50KSoxZTYpKTsKPiArCQkJ CWZmbHVzaChzdGRvdXQpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIExpc3QgcHJl YWQgdGltZXMgZm9yIHN0b2xlbiBhcmVhIHdpdGggMSBwYWdlIGZhdWx0IChwYWdlIGZhdWx0IG9u bHkKPiArCSAqIGZpcnN0IHRpbWUpIGFuZCBtdWx0aXBsZSBwYWdlIGZhdWx0cyAodW5tYXBwaW5n IHRoZSBwYWdlcyBhdCB0aGUKPiArCSAqIGVuZCBvZiBlYWNoIGl0ZXJhdGlvbikKPiArCSAqLwo+ ICsJaWd0X3N1YnRlc3QoInBhZ2VmYXVsdC1wcmVhZCIpIHsKPiArCQlsYXJnZV9zdG9sZW4gPSBn ZW1fY3JlYXRlX3N0b2xlbihmZCwgbGFyZ2Vfb2JqX3NpemUpOwo+ICsJCXN0b2xlbl9ub3BmX3Vz ZXIgPSAodWludDMyX3QgKikgbW1hcChOVUxMLCBsYXJnZV9vYmpfc2l6ZSwKPiArCQkJCQkJUFJP VF9XUklURSwKPiArCQkJCQkJTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwKPiArCQkJCQkJLTEs IDApOwo+ICsKPiArCQlmb3IgKGNvdW50ID0gMTsgY291bnQgPD0gMTA7IGNvdW50ICsrKSB7Cj4g KwkJCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQ7Cj4gKwkJCXVpbnQzMl90IHRfZWxhcHNlZCA9 IDA7Cj4gKwo+ICsJCQlnZXR0aW1lb2ZkYXkoJnN0YXJ0LCBOVUxMKTsKPiArCQkJZG9fZ2VtX3Jl YWQoZmQsIGxhcmdlX3N0b2xlbiwgc3RvbGVuX25vcGZfdXNlciwKPiArCQkJCSAgICBsYXJnZV9v Ympfc2l6ZSwgMSk7Cj4gKwkJCWdldHRpbWVvZmRheSgmZW5kLCBOVUxMKTsKPiArCQkJdF9lbGFw c2VkID0gZWxhcHNlZCgmc3RhcnQsICZlbmQsIDEpOwo+ICsJCQlpZ3RfaW5mbygiUGFnZWZhdWx0 LU4gLSBUaW1lIHRvIHByZWFkICVkIGJ5dGVzOiAlNy4zZsK1cywgJXNcbiIsCj4gKwkJCQkgbGFy Z2Vfb2JqX3NpemUsCj4gKwkJCQkgZWxhcHNlZCgmc3RhcnQsICZlbmQsIDEpLAo+ICsJCQkJIGJ5 dGVzX3Blcl9zZWMoKGNoYXIgKilidWYsCj4gKwkJCQkgbGFyZ2Vfb2JqX3NpemUvZWxhcHNlZCgm c3RhcnQsICZlbmQsIDEpKjFlNikpOwo+ICsKPiArCQkJc3RvbGVuX3BmX3VzZXIgPSAodWludDMy X3QgKikgbW1hcChOVUxMLCBsYXJnZV9vYmpfc2l6ZSwKPiArCQkJCQkJICAgICAgUFJPVF9XUklU RSwKPiArCQkJCQkJICAgICAgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwKPiArCQkJCQkJICAg ICAgLTEsIDApOwo+ICsKPiArCQkJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7Cj4gKwkJCWRv X2dlbV9yZWFkKGZkLCBsYXJnZV9zdG9sZW4sIHN0b2xlbl9wZl91c2VyLAo+ICsJCQkJICAgIGxh cmdlX29ial9zaXplLCAxKTsKPiArCQkJZ2V0dGltZW9mZGF5KCZlbmQsIE5VTEwpOwo+ICsJCQlp Z3RfaW5mbygiUGFnZWZhdWx0LVkgLSBUaW1lIHRvIHByZWFkICVkIGJ5dGVzOiAlNy4zZsK1cywg JXMlcyVzXG4iLAo+ICsJCQkJIGxhcmdlX29ial9zaXplLAo+ICsJCQkJIGVsYXBzZWQoJnN0YXJ0 LCAmZW5kLCAxKSwKPiArCQkJCSB0X2VsYXBzZWQgPCBlbGFwc2VkKCZzdGFydCwgJmVuZCwgMSkg PyBLR1JOIDogS1JFRCwKPiArCQkJCSBieXRlc19wZXJfc2VjKChjaGFyICopYnVmLAo+ICsJCQkJ IGxhcmdlX29ial9zaXplL2VsYXBzZWQoJnN0YXJ0LCAmZW5kLCAxKSoxZTYpLAo+ICsJCQkJIEtO Uk0pOwo+ICsJCQlmZmx1c2goc3Rkb3V0KTsKPiArCQkJbXVubWFwKHN0b2xlbl9wZl91c2VyLCBs YXJnZV9vYmpfc2l6ZSk7Cj4gKwkJfQo+ICsJCQltdW5tYXAoc3RvbGVuX25vcGZfdXNlciwgbGFy Z2Vfb2JqX3NpemUpOwo+ICsJCQlnZW1fY2xvc2UoZmQsIGxhcmdlX3N0b2xlbik7Cj4gKwl9Cj4g Kwo+ICsKPiAgCWlndF9maXh0dXJlIHsKPiAgCQlmcmVlKHNyYyk7Cj4gIAkJZ2VtX2Nsb3NlKGZk LCBkc3QpOwo+ICsJCWZyZWUoZHN0X3VzZXIpOwo+ICsJCWdlbV9jbG9zZShmZCwgc3JjX3N0b2xl bik7Cj4gIAo+ICAJCWNsb3NlKGZkKTsKPiAgCX0KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3B3 cml0ZS5jIGIvdGVzdHMvZ2VtX3B3cml0ZS5jCj4gaW5kZXggNjM3OGIwYS4uZGQxY2E5NSAxMDA2 NDQKPiAtLS0gYS90ZXN0cy9nZW1fcHdyaXRlLmMKPiArKysgYi90ZXN0cy9nZW1fcHdyaXRlLmMK PiBAQCAtODIsNiArODIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnl0ZXNfcGVyX3NlYyhjaGFy ICpidWYsIGRvdWJsZSB2KQo+ICAKPiAgCj4gIHVpbnQzMl90ICpzcmMsIGRzdDsKPiArdWludDMy X3QgKnNyY191c2VyLCBkc3Rfc3RvbGVuOwo+ICBpbnQgZmQ7Cj4gIAo+ICBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCj4gQEAgLTk3LDYgKzk4LDkgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQo+ICAJCXsgMSwgInNub29wIiB9LAo+ICAJCXsgMiwgImRpc3BsYXkiIH0s Cj4gIAkJeyAtMSB9LAo+ICsJCXsgLTEsICJzdG9sZW4tdW5jYWNoZWQifSwKPiArCQl7IC0xLCAi c3RvbGVuLXNub29wIn0sCj4gKwkJeyAtMSwgInN0b2xlbi1kaXNwbGF5In0sCj4gIAl9LCAqYzsK PiAgCj4gIAlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gQEAgLTExNCw2ICsxMTgsOCBAQCBp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gIAo+ICAJCWRzdCA9IGdlbV9jcmVhdGUo ZmQsIG9iamVjdF9zaXplKTsKPiAgCQlzcmMgPSBtYWxsb2Mob2JqZWN0X3NpemUpOwo+ICsJCWRz dF9zdG9sZW4gPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgb2JqZWN0X3NpemUpOwo+ICsJCXNyY191 c2VyID0gbWFsbG9jKG9iamVjdF9zaXplKTsKPiAgCX0KPiAgCj4gIAlpZ3Rfc3VidGVzdCgibm9y bWFsIikgewo+IEBAIC0xNTAsOSArMTU2LDQ4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKPiAgCQl9Cj4gIAl9Cj4gIAo+ICsJaWd0X3N1YnRlc3QoInN0b2xlbi1ub3JtYWwiKSB7 Cj4gKwkJZm9yIChjb3VudCA9IDE7IGNvdW50IDw9IDE8PDE3OyBjb3VudCA8PD0gMSkgewo+ICsJ CQlzdHJ1Y3QgdGltZXZhbCBzdGFydCwgZW5kOwo+ICsKPiArCQkJZ2V0dGltZW9mZGF5KCZzdGFy dCwgTlVMTCk7Cj4gKwkJCWRvX2dlbV93cml0ZShmZCwgZHN0X3N0b2xlbiwgc3JjX3VzZXIsCj4g KwkJCQkgICAgIG9iamVjdF9zaXplLCBjb3VudCk7Cj4gKwkJCWdldHRpbWVvZmRheSgmZW5kLCBO VUxMKTsKPiArCQkJaWd0X2luZm8oIlRpbWUgdG8gcHdyaXRlICVkIGJ5dGVzIHggJTZkOiAgICAg ICAgJTcuM2bCtXMsICVzXG4iLAo+ICsJCQkJIG9iamVjdF9zaXplLCBjb3VudCwKPiArCQkJCSBl bGFwc2VkKCZzdGFydCwgJmVuZCwgY291bnQpLAo+ICsJCQkJIGJ5dGVzX3Blcl9zZWMoKGNoYXIg KilidWYsCj4gKwkJCQkgb2JqZWN0X3NpemUvZWxhcHNlZCgmc3RhcnQsICZlbmQsIGNvdW50KSox ZTYpKTsKPiArCQkJZmZsdXNoKHN0ZG91dCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWZvciAoYyA9 IGNhY2hlOyBjLT5sZXZlbCAhPSAtMTsgYysrKSB7Cj4gKwkJaWd0X3N1YnRlc3QoKGMgKyA0KS0+ bmFtZSkgewo+ICsJCQlnZW1fc2V0X2NhY2hpbmcoZmQsIGRzdCwgYy0+bGV2ZWwpOwo+ICsJCQlm b3IgKGNvdW50ID0gMTsgY291bnQgPD0gMTw8MTc7IGNvdW50IDw8PSAxKSB7Cj4gKwkJCQlzdHJ1 Y3QgdGltZXZhbCBzdGFydCwgZW5kOwo+ICsKPiArCQkJCWdldHRpbWVvZmRheSgmc3RhcnQsIE5V TEwpOwo+ICsJCQkJZG9fZ2VtX3dyaXRlKGZkLCBkc3Rfc3RvbGVuLCBzcmNfdXNlciwKPiArCQkJ CQkgICAgIG9iamVjdF9zaXplLCBjb3VudCk7Cj4gKwkJCQlnZXR0aW1lb2ZkYXkoJmVuZCwgTlVM TCk7Cj4gKwkJCQlpZ3RfaW5mbygiVGltZSB0byAlcyBwd3JpdGUgJWQgYnl0ZXMgeCAlNmQ6ICAg ICAlNy4zZsK1cywgJXNcbiIsCj4gKwkJCQkJIChjICsgNCktPm5hbWUsIG9iamVjdF9zaXplLCBj b3VudCwKPiArCQkJCQkgZWxhcHNlZCgmc3RhcnQsICZlbmQsIGNvdW50KSwKPiArCQkJCQkgYnl0 ZXNfcGVyX3NlYygoY2hhciAqKWJ1ZiwKPiArCQkJCQkgb2JqZWN0X3NpemUvZWxhcHNlZCgmc3Rh cnQsICZlbmQsIGNvdW50KSoxZTYpKTsKPiArCQkJCWZmbHVzaChzdGRvdXQpOwo+ICsJCQl9Cj4g KwkJfQo+ICsJfQo+ICsKPiAgCWlndF9maXh0dXJlIHsKPiAgCQlmcmVlKHNyYyk7Cj4gIAkJZ2Vt X2Nsb3NlKGZkLCBkc3QpOwo+ICsJCWZyZWUoc3JjX3VzZXIpOwo+ICsJCWdlbV9jbG9zZShmZCwg ZHN0X3N0b2xlbik7Cj4gIAo+ICAJCWNsb3NlKGZkKTsKPiAgCX0KPiAtLSAKPiAxLjkuMQo+IAo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK