From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 3/4] drm: Add library for shmem backed GEM objects Date: Mon, 1 Oct 2018 09:46:47 +0200 Message-ID: <20181001074647.GO11082@phenom.ffwll.local> References: <20180926145933.22034-1-noralf@tronnes.org> <20180926145933.22034-4-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id A34B889E47 for ; Mon, 1 Oct 2018 07:46:51 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id n2-v6so3185414edo.9 for ; Mon, 01 Oct 2018 00:46:51 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180926145933.22034-4-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: sam@ravnborg.org, david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBTZXAgMjYsIDIwMTggYXQgMDQ6NTk6MzJQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBhIGxpYnJhcnkgZm9yIHNobWVtIGJhY2tlZCBHRU0gb2JqZWN0 cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9y Zz4KPiAtLS0KPiAKPiBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMzoKPiAtIERyb3AgY2FjaGUgbW9k ZXMgKFRob21hcyBIZWxsc3Ryb20pCj4gLSBBZGQgYSBHRU0gYXR0YWNoZWQgdnRhYmxlCj4gCj4g IERvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QgIHwgIDEyICsKPiAgZHJpdmVy cy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jIHwgNTg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICB8IDE1MyArKysrKysr KysKPiAgNSBmaWxlcyBjaGFuZ2VkLCA3NTggaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiAKPiBkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiBpbmRleCBmOWNmY2RjZGYwMjQuLmJjMjRiMWI1 MjE2YSAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0 Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+IEBAIC0zMjYs MyArMzI2LDE1IEBAIExlZ2FjeSBDUlRDL01vZGVzZXQgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVu Y2UKPiAgCj4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVy LmMKPiAgICAgOmV4cG9ydDoKPiArCj4gK1NITUVNIEdFTSBIZWxwZXIgUmVmZXJlbmNlCj4gKz09 PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9n cHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKPiArICAgOmRvYzogb3ZlcnZpZXcKPiArCj4g Ky4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gKyAg IDppbnRlcm5hbDoKPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dl bV9zaG1lbV9oZWxwZXIuYwo+ICsgICA6ZXhwb3J0Ogo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggY2I4ODUyOGU3 YjEwLi5kYjU4OGFlNDRiY2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0xNTcsNiArMTU3LDEyIEBAIGNv bmZpZyBEUk1fS01TX0NNQV9IRUxQRVIKPiAgCWhlbHAKPiAgCSAgQ2hvb3NlIHRoaXMgaWYgeW91 IG5lZWQgdGhlIEtNUyBDTUEgaGVscGVyIGZ1bmN0aW9ucwo+ICAKPiArY29uZmlnIERSTV9HRU1f U0hNRU1fSEVMUEVSCj4gKwlib29sCj4gKwlkZXBlbmRzIG9uIERSTQo+ICsJaGVscAo+ICsJICBD aG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VNIHNobWVtIGhlbHBlciBmdW5jdGlvbnMKPiAr Cj4gIGNvbmZpZyBEUk1fVk0KPiAgCWJvb2wKPiAgCWRlcGVuZHMgb24gRFJNICYmIE1NVQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKPiBpbmRleCBiYzZhMTZhM2MzNmUuLjEzNzc3ZjIyZGMyNSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUK PiBAQCAtMjUsNiArMjUsNyBAQCBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9k cm1fcmFuZG9tLm8KPiAgZHJtLSQoQ09ORklHX0RSTV9WTSkgKz0gZHJtX3ZtLm8KPiAgZHJtLSQo Q09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KPiAgZHJtLSQoQ09ORklHX0RSTV9HRU1fQ01B X0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KPiArZHJtLSQoQ09ORklHX0RSTV9HRU1f U0hNRU1fSEVMUEVSKSArPSBkcm1fZ2VtX3NobWVtX2hlbHBlci5vCj4gIGRybS0kKENPTkZJR19Q Q0kpICs9IGF0aV9wY2lnYXJ0Lm8KPiAgZHJtLSQoQ09ORklHX0RSTV9QQU5FTCkgKz0gZHJtX3Bh bmVsLm8KPiAgZHJtLSQoQ09ORklHX09GKSArPSBkcm1fb2Yubwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjc0NzE4NTZkMzRhYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBAIC0wLDAgKzEsNTg2IEBACj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE4IE5v cmFsZiBUcsO4bm5lcwo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fZGV2 aWNlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9n ZW1fc2htZW1faGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gKwo+ICsvKioKPiArICogRE9DOiBvdmVydmlldwo+ICsg Kgo+ICsgKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgaGVscGVycyBmb3IgR0VNIG9iamVjdHMgYmFj a2VkIGJ5IHNobWVtIGJ1ZmZlcnMKPiArICogYWxsb2NhdGVkIHVzaW5nIGFub255bW91cyBwYWdl YWJsZSBtZW1vcnkuCj4gKyAqLwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29i amVjdF9mdW5jcyBkcm1fZ2VtX3NobWVtX2Z1bmNzID0gewo+ICsJLmZyZWUgPSBkcm1fZ2VtX3No bWVtX2ZyZWVfb2JqZWN0LAo+ICsJLnByaW50X2luZm8gPSBkcm1fZ2VtX3NobWVtX3ByaW50X2lu Zm8sCj4gKwkucGluID0gZHJtX2dlbV9zaG1lbV9waW4sCj4gKwkudW5waW4gPSBkcm1fZ2VtX3No bWVtX3VucGluLAo+ICsJLmdldF9zZ190YWJsZSA9IGRybV9nZW1fc2htZW1fZ2V0X3NnX3RhYmxl LAo+ICsJLnZtYXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAsCj4gKwkudnVubWFwID0gZHJtX2dlbV9z aG1lbV92dW5tYXAsCj4gKwkucHJpbWVfbW1hcCA9IGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcCwK PiArCS52bV9vcHMgPSAmZHJtX2dlbV9zaG1lbV92bV9vcHMsCj4gK307Cj4gKwo+ICsvKioKPiAr ICogZHJtX2dlbV9zaG1lbV9jcmVhdGUgLSBBbGxvY2F0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgZ2l2 ZW4gc2l6ZQo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gKyAqIEBzaXplOiBTaXplIG9mIHRoZSBv YmplY3QgdG8gYWxsb2NhdGUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc2ht ZW0gR0VNIG9iamVjdC4KPiArICoKPiArICogUmV0dXJuczoKPiArICogQSBzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKiBvbiBzdWNjZXNzIG9yIGFuIEVSUl9QVFIoKS1lbmNvZGVkIG5lZ2F0 aXZlCj4gKyAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK3N0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc2l6ZV90IHNpemUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW07Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKPiArCWludCByZXQ7Cj4gKwo+ICsJ c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Cj4gKwo+ICsJaWYgKGRldi0+ZHJpdmVyLT5nZW1fY3Jl YXRlX29iamVjdCkKPiArCQlvYmogPSBkZXYtPmRyaXZlci0+Z2VtX2NyZWF0ZV9vYmplY3QoZGV2 LCBzaXplKTsKPiArCWVsc2UKPiArCQlvYmogPSBremFsbG9jKHNpemVvZigqc2htZW0pLCBHRlBf S0VSTkVMKTsKPiArCWlmICghb2JqKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsK PiArCWlmICghb2JqLT5mdW5jcykKPiArCQlvYmotPmZ1bmNzID0gJmRybV9nZW1fc2htZW1fZnVu Y3M7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsIG9iaiwgc2l6ZSk7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9jcmVh dGVfbW1hcF9vZmZzZXQob2JqKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfcmVsZWFzZTsK PiArCj4gKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gKwltdXRleF9pbml0 KCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwltdXRleF9pbml0KCZzaG1lbS0+dm1hcF9sb2NrKTsK PiArCj4gKwlyZXR1cm4gc2htZW07Cj4gKwo+ICtlcnJfcmVsZWFzZToKPiArCWRybV9nZW1fb2Jq ZWN0X3JlbGVhc2Uob2JqKTsKPiArZXJyX2ZyZWU6Cj4gKwlrZnJlZShzaG1lbSk7Cj4gKwo+ICsJ cmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3No bWVtX2NyZWF0ZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdCAt IEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QKPiArICog QG9iajogR0VNIG9iamVjdCB0byBmcmVlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5z IHVwIHRoZSBHRU0gb2JqZWN0IHN0YXRlIGFuZCBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgdG8KPiAr ICogc3RvcmUgdGhlIG9iamVjdCBpdHNlbGYuCj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fc2htZW1f ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBk cm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOwo+ ICsKPiArCVdBUk5fT04oc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKPiArCj4gKwlpZiAob2JqLT5p bXBvcnRfYXR0YWNoKSB7Cj4gKwkJc2htZW0tPnBhZ2VzX3VzZV9jb3VudC0tOwo+ICsJCWRybV9w cmltZV9nZW1fZGVzdHJveShvYmosIHNobWVtLT5zZ3QpOwo+ICsJCWt2ZnJlZShzaG1lbS0+cGFn ZXMpOwo+ICsJfQo+ICsKPiArCVdBUk5fT04oc2htZW0tPnBhZ2VzX3VzZV9jb3VudCk7Cj4gKwo+ ICsJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOwo+ICsJbXV0ZXhfZGVzdHJveSgmc2htZW0t PnBhZ2VzX2xvY2spOwo+ICsJbXV0ZXhfZGVzdHJveSgmc2htZW0tPnZtYXBfbG9jayk7Cj4gKwlr ZnJlZShzaG1lbSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9mcmVl X29iamVjdCk7Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzX2xvY2tl ZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7 Cj4gKwo+ICsJaWYgKHNobWVtLT5wYWdlc191c2VfY291bnQrKyA+IDApCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJcGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcyhvYmopOwo+ICsJaWYgKElTX0VSUihw YWdlcykpIHsKPiArCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gZ2V0IHBhZ2VzICglbGQpXG4i LCBQVFJfRVJSKHBhZ2VzKSk7Cj4gKwkJc2htZW0tPnBhZ2VzX3VzZV9jb3VudCA9IDA7Cj4gKwkJ cmV0dXJuIFBUUl9FUlIocGFnZXMpOwo+ICsJfQo+ICsKPiArCXNobWVtLT5wYWdlcyA9IHBhZ2Vz Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBkcm1fZ2VtX3NobWVtX2dl dF9wYWdlcyAtIEFsbG9jYXRlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2htZW0gR0VNIG9iamVjdAo+ ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBt YWtlcyBzdXJlIHRoYXQgYmFja2luZyBwYWdlcyBleGlzdHMgZm9yIHRoZSBzaG1lbSBHRU0gb2Jq ZWN0Cj4gKyAqIGFuZCBpbmNyZWFzZXMgdGhlIHVzZSBjb3VudC4KPiArICoKPiArICogUmV0dXJu czoKPiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl Lgo+ICsgKi8KPiAraW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gbXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdlc19sb2NrZWQoc2ht ZW0pOwo+ICsJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKTsKPiAr Cj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzX2xvY2tlZChzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9ICZzaG1lbS0+YmFzZTsKPiArCj4gKwlpZiAoV0FSTl9PTl9PTkNFKCFzaG1lbS0+cGFn ZXNfdXNlX2NvdW50KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKC0tc2htZW0tPnBhZ2VzX3Vz ZV9jb3VudCA+IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRybV9nZW1fcHV0X3BhZ2VzKG9iaiwg c2htZW0tPnBhZ2VzLAo+ICsJCQkgIHNobWVtLT5wYWdlc19tYXJrX2RpcnR5X29uX3B1dCwKPiAr CQkJICBzaG1lbS0+cGFnZXNfbWFya19hY2Nlc3NlZF9vbl9wdXQpOwo+ICsJc2htZW0tPnBhZ2Vz ID0gTlVMTDsKPiArfQo+ICsKPiArLyoKPiArICogZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMgLSBE ZWNyZWFzZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2htZW0gR0VNIG9i amVjdAo+ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5j dGlvbiBkZWNyZWFzZXMgdGhlIHVzZSBjb3VudCBhbmQgcHV0cyB0aGUgYmFja2luZyBwYWdlcyB3 aGVuIHVzZSBkcm9wcyB0byB6ZXJvLgo+ICsgKi8KPiArdm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9w YWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ICt7Cj4gKwltdXRleF9s b2NrKCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlc19sb2Nr ZWQoc2htZW0pOwo+ICsJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyk7Cj4gKwo+ICsvKioKPiArICog ZHJtX2dlbV9zaG1lbV9waW4gLSBQaW4gYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2Jq ZWN0Cj4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBtYWtl cyBzdXJlIHRoZSBiYWNraW5nIHBhZ2VzIGFyZSBwaW5uZWQgaW4gbWVtb3J5IHdoaWxlIHRoZQo+ ICsgKiBidWZmZXIgaXMgZXhwb3J0ZWQuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24g c3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2lu dCBkcm1fZ2VtX3NobWVtX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJ c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2Jq KG9iaik7Cj4gKwo+ICsJcmV0dXJuIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcGluKTsKPiArCj4gKy8qKgo+ICsgKiBk cm1fZ2VtX3NobWVtX3VucGluIC0gVW5waW4gYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0g b2JqZWN0Cj4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBy ZW1vdmVzIHRoZSByZXF1aXJlbWVudCB0aGF0IHRoZSBiYWNraW5nIHBhZ2VzIGFyZSBwaW5uZWQg aW4KPiArICogbWVtb3J5Lgo+ICsgKi8KPiArdm9pZCBkcm1fZ2VtX3NobWVtX3VucGluKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmpl Y3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCj4gKwlkcm1fZ2VtX3No bWVtX3B1dF9wYWdlcyhzaG1lbSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVt X3VucGluKTsKPiArCj4gK3N0YXRpYyB2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoc2ht ZW0tPnZtYXBfdXNlX2NvdW50KysgPiAwKQo+ICsJCXJldHVybiBzaG1lbS0+dmFkZHI7Cj4gKwo+ ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIGVycl96ZXJvX3VzZTsKPiArCj4gKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQo+ICsJ CXNobWVtLT52YWRkciA9IGRtYV9idWZfdm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1Zik7 Cj4gKwllbHNlCj4gKwkJc2htZW0tPnZhZGRyID0gdm1hcChzaG1lbS0+cGFnZXMsIG9iai0+c2l6 ZSA+PiBQQUdFX1NISUZULCBWTV9NQVAsIFBBR0VfS0VSTkVMKTsKPiArCj4gKwlpZiAoIXNobWVt LT52YWRkcikgewo+ICsJCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byB2bWFwIHBhZ2VzXG4iKTsK PiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX3B1dF9wYWdlczsKPiArCX0KPiArCj4g KwlyZXR1cm4gc2htZW0tPnZhZGRyOwo+ICsKPiArZXJyX3B1dF9wYWdlczoKPiArCWRybV9nZW1f c2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKPiArZXJyX3plcm9fdXNlOgo+ICsJc2htZW0tPnZtYXBf dXNlX2NvdW50ID0gMDsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICsv Kgo+ICsgKiBkcm1fZ2VtX3NobWVtX3ZtYXAgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgZm9y IGEgc2htZW0gR0VNIG9iamVjdAo+ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSB2aXJ0dWFsIGFkZHJlc3MgZXhp c3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcKPiArICogdGhlIHNobWVtIEdFTSBvYmplY3QuCj4g KyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9y IGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK3ZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gKwl2b2lkICp2YWRkcjsK PiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1l bS0+dm1hcF9sb2NrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAr CXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzaG1lbSk7Cj4gKwltdXRleF91bmxv Y2soJnNobWVtLT52bWFwX2xvY2spOwo+ICsKPiArCXJldHVybiB2YWRkcjsKPiArfQo+ICtFWFBP UlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdm1hcCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1fZ2Vt X3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkK PiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7Cj4gKwo+ ICsJaWYgKFdBUk5fT05fT05DRSghc2htZW0tPnZtYXBfdXNlX2NvdW50KSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJaWYgKC0tc2htZW0tPnZtYXBfdXNlX2NvdW50ID4gMCkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkKPiArCQlkbWFfYnVmX3Z1bm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1Ziwgc2htZW0tPnZhZGRyKTsKPiArCWVsc2UKPiArCQl2dW5tYXAo c2htZW0tPnZhZGRyKTsKPiArCj4gKwlzaG1lbS0+dmFkZHIgPSBOVUxMOwo+ICsJZHJtX2dlbV9z aG1lbV9wdXRfcGFnZXMoc2htZW0pOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBkcm1fZ2VtX3NobWVt X3Z1bm1hcCAtIFVubWFwIGEgdmlydHVhbCBtYXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAo+ ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBy ZW1vdmVzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2hlbiB1c2UgY291bnQgZHJvcHMgdG8gemVyby4K PiArICovCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmosIHZvaWQgKnZhZGRyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3Qg KnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCj4gKwltdXRleF9sb2NrKCZz aG1lbS0+dm1hcF9sb2NrKTsKPiArCWRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7 Cj4gKwltdXRleF91bmxvY2soJnNobWVtLT52bWFwX2xvY2spOwo+ICt9Cj4gK0VYUE9SVF9TWU1C T0woZHJtX2dlbV9zaG1lbV92dW5tYXApOwo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqCj4gK2RybV9nZW1fc2htZW1fY3JlYXRlX3dpdGhfaGFuZGxlKHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVf dCBzaXplLAo+ICsJCQkJIHVpbnQzMl90ICpoYW5kbGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW07Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNobWVtID0gZHJtX2dl bV9zaG1lbV9jcmVhdGUoZGV2LCBzaXplKTsKPiArCWlmIChJU19FUlIoc2htZW0pKQo+ICsJCXJl dHVybiBzaG1lbTsKPiArCj4gKwkvKgo+ICsJICogQWxsb2NhdGUgYW4gaWQgb2YgaWRyIHRhYmxl IHdoZXJlIHRoZSBvYmogaXMgcmVnaXN0ZXJlZAo+ICsJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlk IHdoYXQgdXNlciBjYW4gc2VlLgo+ICsJICovCj4gKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUoZmlsZV9wcml2LCAmc2htZW0tPmJhc2UsIGhhbmRsZSk7Cj4gKwkvKiBkcm9wIHJlZmVyZW5j ZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdy4gKi8KPiArCWRybV9nZW1fb2Jq ZWN0X3B1dF91bmxvY2tlZCgmc2htZW0tPmJhc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g RVJSX1BUUihyZXQpOwo+ICsKPiArCXJldHVybiBzaG1lbTsKPiArfQo+ICsKPiArLyoqCj4gKyAq IGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUgLSBDcmVhdGUgYSBkdW1iIHNobWVtIGJ1ZmZlciBv YmplY3QKPiArICogQGZpbGU6IERSTSBmaWxlIHN0cnVjdHVyZSB0byBjcmVhdGUgdGhlIGR1bWIg YnVmZmVyIGZvcgo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gKyAqIEBhcmdzOiBJT0NUTCBkYXRh Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIHBpdGNoIG9mIHRoZSBkdW1i IGJ1ZmZlciBhbmQgcm91bmRzIGl0IHVwIHRvIGFuCj4gKyAqIGludGVnZXIgbnVtYmVyIG9mIGJ5 dGVzIHBlciBwaXhlbC4gRHJpdmVycyBmb3IgaGFyZHdhcmUgdGhhdCBkb2Vzbid0IGhhdmUKPiAr ICogYW55IGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG9uIHRoZSBwaXRjaCBjYW4gZGlyZWN0bHkg dXNlIHRoaXMgZnVuY3Rpb24gYXMKPiArICogdGhlaXIgJmRybV9kcml2ZXIuZHVtYl9jcmVhdGUg Y2FsbGJhY2suCj4gKyAqCj4gKyAqIEZvciBoYXJkd2FyZSB3aXRoIGFkZGl0aW9uYWwgcmVzdHJp Y3Rpb25zLCBkcml2ZXJzIGNhbiBhZGp1c3QgdGhlIGZpZWxkcwo+ICsgKiBzZXQgdXAgYnkgdXNl cnNwYWNlIGJlZm9yZSBjYWxsaW5nIGludG8gdGhpcyBmdW5jdGlvbi4KPiArICoKPiArICogUmV0 dXJuczoKPiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWls dXJlLgo+ICsgKi8KPiAraW50IGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9m aWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJt X21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gK3sKPiArCXUzMiBtaW5fcGl0Y2ggPSBESVZfUk9V TkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOwo+ICsJc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpzaG1lbTsKPiArCj4gKwlpZiAoIWFyZ3MtPnBpdGNoIHx8ICFhcmdzLT5zaXpl KSB7Cj4gKwkJYXJncy0+cGl0Y2ggPSBtaW5fcGl0Y2g7Cj4gKwkJYXJncy0+c2l6ZSA9IGFyZ3Mt PnBpdGNoICogYXJncy0+aGVpZ2h0Owo+ICsJfSBlbHNlIHsKPiArCQkvKiBlbnN1cmUgc2FuZSBt aW5pbXVtIHZhbHVlcyAqLwo+ICsJCWlmIChhcmdzLT5waXRjaCA8IG1pbl9waXRjaCkKPiArCQkJ YXJncy0+cGl0Y2ggPSBtaW5fcGl0Y2g7Cj4gKwkJaWYgKGFyZ3MtPnNpemUgPCBhcmdzLT5waXRj aCAqIGFyZ3MtPmhlaWdodCkKPiArCQkJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+ aGVpZ2h0Owo+ICsJfQo+ICsKPiArCXNobWVtID0gZHJtX2dlbV9zaG1lbV9jcmVhdGVfd2l0aF9o YW5kbGUoZmlsZSwgZGV2LCBhcmdzLT5zaXplLCAmYXJncy0+aGFuZGxlKTsKPiArCj4gKwlyZXR1 cm4gUFRSX0VSUl9PUl9aRVJPKHNobWVtKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1f Z2VtX3NobWVtX2R1bWJfY3JlYXRlKTsKPiArCj4gK3N0YXRpYyB2bV9mYXVsdF90IGRybV9nZW1f c2htZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gK3sKPiArCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hID0gdm1mLT52bWE7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9 IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gKwkvKiBXZSBkb24ndCB1c2Ugdm1m LT5wZ29mZiBzaW5jZSB0aGF0IGhhcyB0aGUgZmFrZSBvZmZzZXQ6ICovCj4gKwlwZ29mZl90IHBn b2ZmID0gKHZtZi0+YWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Cj4gKwls b2ZmX3QgbnVtX3BhZ2VzID0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7Cj4gKwlzdHJ1Y3QgcGFn ZSAqcGFnZTsKPiArCj4gKwlpZiAocGdvZmYgPiBudW1fcGFnZXMgfHwgV0FSTl9PTl9PTkNFKCFz aG1lbS0+cGFnZXMpKQo+ICsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Cj4gKwo+ICsJcGFnZSA9 IHNobWVtLT5wYWdlc1twZ29mZl07Cj4gKwo+ICsJcmV0dXJuIHZtZl9pbnNlcnRfcGFnZSh2bWEs IHZtZi0+YWRkcmVzcywgcGFnZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2ht ZW1fdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiAr Cj4gKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7Cj4gKwlkcm1fZ2VtX3ZtX2Nsb3Nl KHZtYSk7Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1f Z2VtX3NobWVtX3ZtX29wcyA9IHsKPiArCS5mYXVsdCA9IGRybV9nZW1fc2htZW1fZmF1bHQsCj4g Kwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKPiArCS5jbG9zZSA9IGRybV9nZW1fc2htZW1fdm1f Y2xvc2UsCj4gK307Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fdm1fb3BzKTsK PiArCj4gK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9tbWFwX29iaihzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKnNobWVtLAo+ICsJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhz aG1lbSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogVk1fUEZOTUFQIHdhcyBzZXQgYnkgZHJtX2dlbV9t bWFwKCkgKi8KPiArCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKPiArCXZtYS0+dm1fZmxh Z3MgfD0gVk1fTUlYRURNQVA7Cj4gKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3By b3Qodm1hLT52bV9mbGFncyk7Cj4gKwo+ICsJZnB1dCh2bWEtPnZtX2ZpbGUpOwo+ICsJZ2V0X2Zp bGUoc2htZW0tPmJhc2UuZmlscCk7Cj4gKwl2bWEtPnZtX3Bnb2ZmID0gMDsKPiArCXZtYS0+dm1f ZmlsZSAgPSBzaG1lbS0+YmFzZS5maWxwOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogZHJtX2dlbV9zaG1lbV9tbWFwIC0gTWVtb3J5LW1hcCBhIHNobWVtIEdFTSBvYmpl Y3QKPiArICogQGZpbHA6IEZpbGUgb2JqZWN0Cj4gKyAqIEB2bWE6IFZNQSBmb3IgdGhlIGFyZWEg dG8gYmUgbWFwcGVkCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBhbiBhdWdt ZW50ZWQgdmVyc2lvbiBvZiB0aGUgR0VNIERSTSBmaWxlIG1tYXAKPiArICogb3BlcmF0aW9uIGZv ciBzaG1lbSBvYmplY3RzLiBEcml2ZXJzIHdoaWNoIGVtcGxveSB0aGUgc2htZW0gaGVscGVycyBz aG91bGQKPiArICogdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlaXIgJmZpbGVfb3BlcmF0aW9ucy5t bWFwIGhhbmRsZXIgaW4gdGhlIERSTSBkZXZpY2UgZmlsZSdzCj4gKyAqIGZpbGVfb3BlcmF0aW9u cyBzdHJ1Y3R1cmUuCj4gKyAqCj4gKyAqIEluc3RlYWQgb2YgZGlyZWN0bHkgcmVmZXJlbmNpbmcg dGhpcyBmdW5jdGlvbiwgZHJpdmVycyBzaG91bGQgdXNlIHRoZQo+ICsgKiBERUZJTkVfRFJNX0dF TV9TSE1FTV9GT1BTKCkgbWFjcm8uCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3Vj Y2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBk cm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOwo+ICsJ aW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2Jq KHZtYS0+dm1fcHJpdmF0ZV9kYXRhKTsKPiArCj4gKwlyZXR1cm4gZHJtX2dlbV9zaG1lbV9tbWFw X29iaihzaG1lbSwgdm1hKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVt X21tYXApOwo+ICsKPiArLyoqCj4gKyAqIGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbygpIC0gUHJp bnQgJmRybV9nZW1fc2htZW1fb2JqZWN0IGluZm8gZm9yIGRlYnVnZnMKPiArICogQHA6IERSTSBw cmludGVyCj4gKyAqIEBpbmRlbnQ6IFRhYiBpbmRlbnRhdGlvbiBsZXZlbAo+ICsgKiBAb2JqOiBH RU0gb2JqZWN0Cj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbyhzdHJ1Y3Qg ZHJtX3ByaW50ZXIgKnAsIHVuc2lnbmVkIGludCBpbmRlbnQsCj4gKwkJCSAgICAgIGNvbnN0IHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCj4gKwlk cm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJwYWdlc191c2VfY291bnQ9JXVcbiIsIHNobWVt LT5wYWdlc191c2VfY291bnQpOwo+ICsJZHJtX3ByaW50Zl9pbmRlbnQocCwgaW5kZW50LCAidmFk ZHI9JXBcbiIsIHNobWVtLT52YWRkcik7Cj4gKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQs ICJ2bWFwX3VzZV9jb3VudD0ldVxuIiwgc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbyk7Cj4gKwo+ICsvKioKPiArICog ZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUgLSBQcm92aWRlIGEgc2NhdHRlci9nYXRoZXIgdGFi bGUgb2YgcGlubmVkCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXMgZm9y IGEgc2htZW0gR0VNIG9iamVjdAo+ICsgKiBAb2JqOiBHRU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFRo aXMgZnVuY3Rpb24gZXhwb3J0cyBhIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIHN1aXRhYmxlIGZvciBQ UklNRSB1c2FnZSBieQo+ICsgKiBjYWxsaW5nIHRoZSBzdGFuZGFyZCBETUEgbWFwcGluZyBBUEku Cj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIEEgcG9pbnRlciB0byB0aGUgc2NhdHRlci9nYXRo ZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzIG9yIE5VTEwgb24gZmFpbHVyZS4KPiArICovCj4gK3N0 cnVjdCBzZ190YWJsZSAqZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0g PSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOwo+ICsKPiArCXJldHVybiBkcm1fcHJpbWVfcGFn ZXNfdG9fc2coc2htZW0tPnBhZ2VzLCBvYmotPnNpemUgPj4gUEFHRV9TSElGVCk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUpOwo+ICsKPiArLyoq Cj4gKyAqIGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlIC0gUHJvZHVjZSBhIHNo bWVtIEdFTSBvYmplY3QgZnJvbQo+ICsgKiAgICAgICAgICAgICAgICAgYW5vdGhlciBkcml2ZXIn cyBzY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQgcGFnZXMKPiArICogQGRldjogRGV2aWNl IHRvIGltcG9ydCBpbnRvCj4gKyAqIEBhdHRhY2g6IERNQS1CVUYgYXR0YWNobWVudAo+ICsgKiBA c2d0OiBTY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQgcGFnZXMKPiArICoKPiArICogVGhp cyBmdW5jdGlvbiBpbXBvcnRzIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgZXhwb3J0ZWQgdmlhIERN QS1CVUYgYnkKPiArICogYW5vdGhlciBkcml2ZXIuIERyaXZlcnMgdGhhdCB1c2UgdGhlIHNobWVt IGhlbHBlcnMgc2hvdWxkIHNldCB0aGlzIGFzIHRoZWlyCj4gKyAqICZkcm1fZHJpdmVyLmdlbV9w cmltZV9pbXBvcnRfc2dfdGFibGUgY2FsbGJhY2suCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAq IEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgR0VNIG9iamVjdCBvciBhbiBFUlJfUFRSLWVu Y29kZWQgbmVnYXRpdmUKPiArICogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiArc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICoKPiArZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gsCj4gKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpCj4gK3sKPiAr CXNpemVfdCBzaXplID0gUEFHRV9BTElHTihhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7Cj4gKwlzaXpl X3QgbnBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJc2htZW0gPSBkcm1fZ2VtX3NobWVt X2NyZWF0ZShkZXYsIHNpemUpOwo+ICsJaWYgKElTX0VSUihzaG1lbSkpCj4gKwkJcmV0dXJuIEVS Ul9DQVNUKHNobWVtKTsKPiArCj4gKwlzaG1lbS0+cGFnZXMgPSBrdm1hbGxvY19hcnJheShucGFn ZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXNobWVtLT5w YWdlcykgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfZnJlZV9nZW07Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoc2d0LCBzaG1l bS0+cGFnZXMsIE5VTEwsIG5wYWdlcyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9m cmVlX2FycmF5Owo+ICsKPiArCXNobWVtLT5zZ3QgPSBzZ3Q7Cj4gKwlzaG1lbS0+cGFnZXNfdXNl X2NvdW50ID0gMTsgLyogUGVybWFuZW50bHkgcGlubmVkIGZyb20gb3VyIHBvaW50IG9mIHZpZXcg Ki8KPiArCj4gKwlEUk1fREVCVUdfUFJJTUUoInNpemUgPSAlenVcbiIsIHNpemUpOwo+ICsKPiAr CXJldHVybiAmc2htZW0tPmJhc2U7Cj4gKwo+ICtlcnJfZnJlZV9hcnJheToKPiArCWt2ZnJlZShz aG1lbS0+cGFnZXMpOwo+ICtlcnJfZnJlZV9nZW06Cj4gKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5s b2NrZWQoJnNobWVtLT5iYXNlKTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKTsK PiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3NobWVtX3ByaW1lX21tYXAgLSBNZW1vcnktbWFwIGFu IGV4cG9ydGVkIHNobWVtIEdFTSBvYmplY3QKPiArICogQG9iajogR0VNIG9iamVjdAo+ICsgKiBA dm1hOiBWTUEgZm9yIHRoZSBhcmVhIHRvIGJlIG1hcHBlZAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIG1hcHMgYSBidWZmZXIgaW1wb3J0ZWQgdmlhIERSTSBQUklNRSBpbnRvIGEgdXNlcnNwYWNl Cj4gKyAqIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsg KiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAq Lwo+ICtpbnQgZHJtX2dlbV9zaG1lbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1f c2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIGRybV9nZW1fc2ht ZW1fbW1hcF9vYmooc2htZW0sIHZtYSk7Cj4gK30KCklmIHdlJ2QgdXNlIHRoZSBnZW0gdm1hIG9m ZnNldCBtYW5hZ2VyIGFuZCBhZGp1c3Qgb2Zmc2V0cyBhbmQgdGhlbiBjYWxsCmludG8gdGhlIGdl bSBtbWFwIHN0dWZmIEkgdGhpbmsgd2UgY291bGQgbWFrZSB0aGlzIDEwMCUgZ2VuZXJpYy4gVGhh dAp3b3VsZCBhbHNvIGF2b2lkIHRoZSBuZWVkIHRvIGFkZCB0aGUgZ2VtX29wcy0+cHJpbWVfbW1h cCBjYWxsYmFjaywgc2luY2UKd2UnbGwgaGF2ZSBhIGRlZmF1bHQgdGhhdCBzaG91bGQgd29yayBm b3IgZXZlcnlvbmUuCi1EYW5pZWwKCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1f cHJpbWVfbW1hcCk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVs cGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjk0ZWM5OWZkY2ZmYwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCj4gQEAgLTAsMCAr MSwxNTMgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArCj4g KyNpZm5kZWYgX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18KPiArI2RlZmluZSBfX0RSTV9HRU1f U0hNRU1fSEVMUEVSX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9tbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiArCj4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+Cj4gKwo+ICtz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ICtzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7 Cj4gK3N0cnVjdCBkcm1fcHJpbnRlcjsKPiArc3RydWN0IHNnX3RhYmxlOwo+ICsKPiArLyoqCj4g KyAqIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAtIEdFTSBvYmplY3QgYmFja2VkIGJ5IHNo bWVtCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3Qgewo+ICsJLyoqCj4gKwkg KiBAYmFzZTogQmFzZSBHRU0gb2JqZWN0Cj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fZ2VtX29iamVj dCBiYXNlOwo+ICsKPiArCS8qKgo+ICsJICogQHBhZ2VzX2xvY2s6IFByb3RlY3RzIHRoZSBwYWdl IHRhYmxlIGFuZCB1c2UgY291bnQKPiArCSAqLwo+ICsJc3RydWN0IG11dGV4IHBhZ2VzX2xvY2s7 Cj4gKwo+ICsJLyoqCj4gKwkgKiBAcGFnZXM6IFBhZ2UgdGFibGUKPiArCSAqLwo+ICsJc3RydWN0 IHBhZ2UgKipwYWdlczsKPiArCj4gKwkvKioKPiArCSAqIEBwYWdlc191c2VfY291bnQ6Cj4gKwkg Kgo+ICsJICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSBwYWdlcyB0YWJsZS4KPiArCSAqIFRoZSBw YWdlcyBhcmUgcHV0IHdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4KPiArCSAqLwo+ICsJdW5z aWduZWQgaW50IHBhZ2VzX3VzZV9jb3VudDsKPiArCj4gKwkvKioKPiArCSAqIEBwYWdlc19tYXJr X2RpcnR5X29uX3B1dDoKPiArCSAqCj4gKwkgKiBNYXJrIHBhZ2VzIGFzIGRpcnR5IHdoZW4gdGhl eSBhcmUgcHV0Lgo+ICsJICovCj4gKwl1bnNpZ25lZCBpbnQgcGFnZXNfbWFya19kaXJ0eV9vbl9w dXQgICAgOiAxOwo+ICsKPiArCS8qKgo+ICsJICogQHBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0 Ogo+ICsJICoKPiArCSAqIE1hcmsgcGFnZXMgYXMgYWNjZXNzZWQgd2hlbiB0aGV5IGFyZSBwdXQu Cj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCBwYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dCA6IDE7 Cj4gKwo+ICsJLyoqCj4gKwkgKiBAc2d0OiBTY2F0dGVyL2dhdGhlciB0YWJsZSBmb3IgaW1wb3J0 ZWQgUFJJTUUgYnVmZmVycwo+ICsJICovCj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiArCj4g KwkvKioKPiArCSAqIEB2bWFwX2xvY2s6IFByb3RlY3RzIHRoZSB2bWFwIGFkZHJlc3MgYW5kIHVz ZSBjb3VudAo+ICsJICovCj4gKwlzdHJ1Y3QgbXV0ZXggdm1hcF9sb2NrOwo+ICsKPiArCS8qKgo+ ICsJICogQHZhZGRyOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBiYWNraW5nIG1lbW9y eQo+ICsJICovCj4gKwl2b2lkICp2YWRkcjsKPiArCj4gKwkvKioKPiArCSAqIEB2bWFwX3VzZV9j b3VudDoKPiArCSAqCj4gKwkgKiBSZWZlcmVuY2UgY291bnQgb24gdGhlIHZpcnR1YWwgYWRkcmVz cy4KPiArCSAqIFRoZSBhZGRyZXNzIGFyZSB1bi1tYXBwZWQgd2hlbiB0aGUgY291bnQgcmVhY2hl cyB6ZXJvLgo+ICsJICovCj4gKwl1bnNpZ25lZCBpbnQgdm1hcF91c2VfY291bnQ7Cj4gK307Cj4g Kwo+ICsjZGVmaW5lIHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaikgXAo+ICsJY29udGFpbmVyX29m KG9iaiwgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0LCBiYXNlKQo+ICsKPiArLyoqCj4gKyAq IERFRklORV9EUk1fR0VNX1NITUVNX0ZPUFMoKSAtIE1hY3JvIHRvIGdlbmVyYXRlIGZpbGUgb3Bl cmF0aW9ucyBmb3Igc2htZW0gZHJpdmVycwo+ICsgKiBAbmFtZTogbmFtZSBmb3IgdGhlIGdlbmVy YXRlZCBzdHJ1Y3R1cmUKPiArICoKPiArICogVGhpcyBtYWNybyBhdXRvZ2VuZXJhdGVzIGEgc3Vp dGFibGUgJnN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9yIHNobWVtIGJhc2VkCj4gKyAqIGRyaXZl cnMsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCB0byAmZHJtX2RyaXZlci5mb3BzLiBOb3RlIHRoYXQg dGhpcyBzdHJ1Y3R1cmUKPiArICogY2Fubm90IGJlIHNoYXJlZCBiZXR3ZWVuIGRyaXZlcnMsIGJl Y2F1c2UgaXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlCj4gKyAqIGN1cnJlbnQgbW9kdWxl IHVzaW5nIFRISVNfTU9EVUxFLgo+ICsgKgo+ICsgKiBOb3RlIHRoYXQgdGhlIGRlY2xhcmF0aW9u IGlzIGFscmVhZHkgbWFya2VkIGFzIHN0YXRpYyAtIGlmIHlvdSBuZWVkIGEKPiArICogbm9uLXN0 YXRpYyB2ZXJzaW9uIG9mIHRoaXMgeW91J3JlIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nIGFuZCB3 aWxsIGJyZWFrIHRoZQo+ICsgKiBUSElTX01PRFVMRSByZWZlcmVuY2UgYnkgYWNjaWRlbnQuCj4g KyAqLwo+ICsjZGVmaW5lIERFRklORV9EUk1fR0VNX1NITUVNX0ZPUFMobmFtZSkgXAo+ICsJc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSA9IHtcCj4gKwkJLm93bmVyCQk9 IFRISVNfTU9EVUxFLFwKPiArCQkub3BlbgkJPSBkcm1fb3BlbixcCj4gKwkJLnJlbGVhc2UJPSBk cm1fcmVsZWFzZSxcCj4gKwkJLnVubG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLFwKPiArCQkuY29t cGF0X2lvY3RsCT0gZHJtX2NvbXBhdF9pb2N0bCxcCj4gKwkJLnBvbGwJCT0gZHJtX3BvbGwsXAo+ ICsJCS5yZWFkCQk9IGRybV9yZWFkLFwKPiArCQkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLFwKPiAr CQkubW1hcAkJPSBkcm1fZ2VtX3NobWVtX21tYXAsIFwKPiArCX0KPiArCj4gK3N0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc2l6ZV90IHNpemUpOwo+ICt2b2lkIGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsKPiAraW50IGRybV9nZW1fc2htZW1fZ2V0X3Bh Z2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOwo+ICt2b2lkIGRybV9nZW1f c2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOwo+ICtp bnQgZHJtX2dlbV9zaG1lbV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICt2b2lk IGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICt2b2lk ICpkcm1fZ2VtX3NobWVtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICt2b2lk IGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2 YWRkcik7Cj4gKwo+ICtpbnQgZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1f bW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7Cj4gKwo+ICtpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0 cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gKwo+ICtleHRl cm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV9nZW1fc2htZW1fdm1fb3Bz Owo+ICsKPiArdm9pZCBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8oc3RydWN0IGRybV9wcmludGVy ICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50LAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaik7Cj4gKwo+ICtzdHJ1Y3Qgc2dfdGFibGUgKmRybV9nZW1fc2htZW1fZ2V0 X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArc3RydWN0IGRybV9nZW1f b2JqZWN0ICoKPiArZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiArCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gsCj4gKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+ICtpbnQgZHJtX2dlbV9zaG1l bV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSk7Cj4gKwo+ICsvKioKPiArICogRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTIC0g RGVmYXVsdCBzaG1lbSBHRU0gb3BlcmF0aW9ucwo+ICsgKgo+ICsgKiBUaGlzIG1hY3JvIHByb3Zp ZGVzIGEgc2hvcnRjdXQgZm9yIHNldHRpbmcgdGhlIHNobWVtIEdFTSBvcGVyYXRpb25zIGluCj4g KyAqIHRoZSAmZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCj4gKyAqLwo+ICsjZGVmaW5lIERSTV9HRU1f U0hNRU1fRFJJVkVSX09QUyBcCj4gKwkucHJpbWVfaGFuZGxlX3RvX2ZkCT0gZHJtX2dlbV9wcmlt ZV9oYW5kbGVfdG9fZmQsIFwKPiArCS5wcmltZV9mZF90b19oYW5kbGUJPSBkcm1fZ2VtX3ByaW1l X2ZkX3RvX2hhbmRsZSwgXAo+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2Vt X3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwgXAo+ICsJLmR1bWJfY3JlYXRlCQk9IGRybV9n ZW1fc2htZW1fZHVtYl9jcmVhdGUKPiArCj4gKyNlbmRpZiAvKiBfX0RSTV9HRU1fU0hNRU1fSEVM UEVSX0hfXyAqLwo+IC0tIAo+IDIuMTUuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=