From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 4/9] drm/vc4: Add an API for creating GPU shaders in GEM BOs. Date: Tue, 8 Dec 2015 10:30:13 -0800 Message-ID: <1449599418-20780-5-git-send-email-eric@anholt.net> References: <1449599418-20780-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449599418-20780-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org U2luY2Ugd2UgaGF2ZSBubyBNTVUsIHRoZSBrZXJuZWwgbmVlZHMgdG8gdmFsaWRhdGUgdGhhdCB0 aGUgc3VibWl0dGVkCnNoYWRlciBjb2RlIHdvbid0IG1ha2UgYW55IGFjY2Vzc2VzIHRvIG1lbW9y eSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QKY29udHJvbCwgd2hpY2ggaW52b2x2ZXMgYmFubmluZyBz b21lIG9wZXJhdGlvbnMgKGdlbmVyYWwgcHVycG9zZSBETUEKd3JpdGVzKSwgYW5kIHRyYWNraW5n IHdoZXJlIHdlIG5lZWQgdG8gd3JpdGUgb3V0IHBvaW50ZXJzIGZvciBvdGhlcgpvcGVyYXRpb25z ICh0ZXh0dXJlIHNhbXBsaW5nKS4gIE9uY2UgaXQncyB2YWxpZGF0ZWQsIHdlIHJldHVybiBhIEdF TQpCTyBjb250YWluaW5nIHRoZSBzaGFkZXIsIHdoaWNoIGRvZXNuJ3QgYWxsb3cgbWFwcGluZyBm b3Igd3JpdGUgb3IKZXhwb3J0aW5nIHRvIG90aGVyIHN1YnN5c3RlbXMuCgpTaWduZWQtb2ZmLWJ5 OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KCnYyOiBVc2UgX191MzItc3R5bGUg dHlwZXMuCgogZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAz ICstCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgICAgICAgICAgfCAxNDAgKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jICAgICAgICAgICAgICB8ICAgOSAr LQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggICAgICAgICAgICAgIHwgIDUwICsrKwog ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcXB1X2RlZmluZXMuaCAgICAgIHwgMjY0ICsrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jIHwgNTEz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL3ZjNF9kcm0u aCAgICAgICAgICAgICAgICAgfCAgMjUgKysKIDcgZmlsZXMgY2hhbmdlZCwgOTk5IGluc2VydGlv bnMoKyksIDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfcXB1X2RlZmluZXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X3ZhbGlkYXRlX3NoYWRlcnMuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92YzQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCmluZGV4IDMyYjRm OWMuLmViNzc2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsOCBAQCB2YzQteSA6 PSBcCiAJdmM0X2ttcy5vIFwKIAl2YzRfaGRtaS5vIFwKIAl2YzRfaHZzLm8gXAotCXZjNF9wbGFu ZS5vCisJdmM0X3BsYW5lLm8gXAorCXZjNF92YWxpZGF0ZV9zaGFkZXJzLm8KIAogdmM0LSQoQ09O RklHX0RFQlVHX0ZTKSArPSB2YzRfZGVidWdmcy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCmluZGV4IDA2 Y2JhMjYuLjE4ZGZlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwpAQCAtNzksNiArNzksMTIgQEAgc3Rh dGljIHZvaWQgdmM0X2JvX2Rlc3Ryb3koc3RydWN0IHZjNF9ibyAqYm8pCiAJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJhc2UuYmFzZTsKIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0g dG9fdmM0X2RldihvYmotPmRldik7CiAKKwlpZiAoYm8tPnZhbGlkYXRlZF9zaGFkZXIpIHsKKwkJ a2ZyZWUoYm8tPnZhbGlkYXRlZF9zaGFkZXItPnRleHR1cmVfc2FtcGxlcyk7CisJCWtmcmVlKGJv LT52YWxpZGF0ZWRfc2hhZGVyKTsKKwkJYm8tPnZhbGlkYXRlZF9zaGFkZXIgPSBOVUxMOworCX0K KwogCXZjNC0+Ym9fc3RhdHMubnVtX2FsbG9jYXRlZC0tOwogCXZjNC0+Ym9fc3RhdHMuc2l6ZV9h bGxvY2F0ZWQgLT0gb2JqLT5zaXplOwogCWRybV9nZW1fY21hX2ZyZWVfb2JqZWN0KG9iaik7CkBA IC0zMTUsNiArMzIxLDEyIEBAIHZvaWQgdmM0X2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtX2JvKQogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoYm8tPnZhbGlkYXRlZF9zaGFk ZXIpIHsKKwkJa2ZyZWUoYm8tPnZhbGlkYXRlZF9zaGFkZXItPnRleHR1cmVfc2FtcGxlcyk7CisJ CWtmcmVlKGJvLT52YWxpZGF0ZWRfc2hhZGVyKTsKKwkJYm8tPnZhbGlkYXRlZF9zaGFkZXIgPSBO VUxMOworCX0KKwogCWJvLT5mcmVlX3RpbWUgPSBqaWZmaWVzOwogCWxpc3RfYWRkKCZiby0+c2l6 ZV9oZWFkLCBjYWNoZV9saXN0KTsKIAlsaXN0X2FkZCgmYm8tPnVucmVmX2hlYWQsICZ2YzQtPmJv X2NhY2hlLnRpbWVfbGlzdCk7CkBAIC0zNDcsNiArMzU5LDc4IEBAIHN0YXRpYyB2b2lkIHZjNF9i b19jYWNoZV90aW1lX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIAlzY2hlZHVsZV93b3JrKCZ2 YzQtPmJvX2NhY2hlLnRpbWVfd29yayk7CiB9CiAKK3N0cnVjdCBkbWFfYnVmICoKK3ZjNF9wcmlt ZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmosIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdmM0X2JvICpibyA9IHRvX3ZjNF9ibyhvYmopOwor CisJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7CisJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0 byBleHBvcnQgc2hhZGVyIEJPXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQor CisJcmV0dXJuIGRybV9nZW1fcHJpbWVfZXhwb3J0KGRldiwgb2JqLCBmbGFncyk7Cit9CisKK2lu dCB2YzRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCB2YzRfYm8gKmJv OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJZ2VtX29iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCWJv ID0gdG9fdmM0X2JvKGdlbV9vYmopOworCisJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyICYmICh2 bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7CisJCURSTV9FUlJPUigibW1hcGluZyBvZiBzaGFk ZXIgQk9zIGZvciB3cml0aW5nIG5vdCBhbGxvd2VkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCS8qCisJICogQ2xlYXIgdGhlIFZNX1BGTk1BUCBmbGFnIHRoYXQgd2FzIHNldCBieSBk cm1fZ2VtX21tYXAoKSwgYW5kIHNldCB0aGUKKwkgKiB2bV9wZ29mZiAodXNlZCBhcyBhIGZha2Ug YnVmZmVyIG9mZnNldCBieSBEUk0pIHRvIDAgYXMgd2Ugd2FudCB0byBtYXAKKwkgKiB0aGUgd2hv bGUgYnVmZmVyLgorCSAqLworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKwl2bWEtPnZt X3Bnb2ZmID0gMDsKKworCXJldCA9IGRtYV9tbWFwX3dyaXRlY29tYmluZShiby0+YmFzZS5iYXNl LmRldi0+ZGV2LCB2bWEsCisJCQkJICAgIGJvLT5iYXNlLnZhZGRyLCBiby0+YmFzZS5wYWRkciwK KwkJCQkgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKKwlpZiAocmV0KQorCQlkcm1f Z2VtX3ZtX2Nsb3NlKHZtYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmM0X3ByaW1lX21t YXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQoreworCXN0cnVjdCB2YzRfYm8gKmJvID0gdG9fdmM0X2JvKG9iaik7CisKKwlpZiAoYm8tPnZh bGlkYXRlZF9zaGFkZXIgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKKwkJRFJNX0VS Uk9SKCJtbWFwaW5nIG9mIHNoYWRlciBCT3MgZm9yIHdyaXRpbmcgbm90IGFsbG93ZWQuXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGRybV9nZW1fY21hX3ByaW1lX21tYXAo b2JqLCB2bWEpOworfQorCit2b2lkICp2YzRfcHJpbWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlzdHJ1Y3QgdmM0X2JvICpibyA9IHRvX3ZjNF9ibyhvYmopOworCisJaWYg KGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7CisJCURSTV9FUlJPUigibW1hcGluZyBvZiBzaGFkZXIg Qk9zIG5vdCBhbGxvd2VkLlxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwor CXJldHVybiBkcm1fZ2VtX2NtYV9wcmltZV92bWFwKG9iaik7Cit9CisKIGludCB2YzRfY3JlYXRl X2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTM4Nyw2ICs0NzEsNjIgQEAgaW50IHZjNF9tbWFw X2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJcmV0dXJuIDA7 CiB9CiAKK2ludAordmM0X2NyZWF0ZV9zaGFkZXJfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorewor CXN0cnVjdCBkcm1fdmM0X2NyZWF0ZV9zaGFkZXJfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCB2 YzRfYm8gKmJvID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPnNpemUgPT0gMCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJncy0+c2l6ZSAlIHNpemVvZih1NjQpICE9IDApCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZ3MtPmZsYWdzICE9IDApIHsKKwkJRFJNX0lORk8o IlVua25vd24gZmxhZ3Mgc2V0OiAweCUwOHhcbiIsIGFyZ3MtPmZsYWdzKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKGFyZ3MtPnBhZCAhPSAwKSB7CisJCURSTV9JTkZPKCJQYWQgc2V0 OiAweCUwOHhcbiIsIGFyZ3MtPnBhZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJvID0g dmM0X2JvX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIHRydWUpOworCWlmICghYm8pCisJCXJldHVy biAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYm8tPmJhc2UudmFkZHIsCisJCQkg ICAgICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+ZGF0YSwKKwkJCSAgICAgYXJncy0+ c2l6ZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWw7CisJLyogQ2xlYXIgdGhlIHJlc3Qg b2YgdGhlIG1lbW9yeSBmcm9tIGFsbG9jYXRpbmcgZnJvbSB0aGUgQk8KKwkgKiBjYWNoZS4KKwkg Ki8KKwltZW1zZXQoYm8tPmJhc2UudmFkZHIgKyBhcmdzLT5zaXplLCAwLAorCSAgICAgICBiby0+ YmFzZS5iYXNlLnNpemUgLSBhcmdzLT5zaXplKTsKKworCWJvLT52YWxpZGF0ZWRfc2hhZGVyID0g dmM0X3ZhbGlkYXRlX3NoYWRlcigmYm8tPmJhc2UpOworCWlmICghYm8tPnZhbGlkYXRlZF9zaGFk ZXIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFdlIGhhdmUg dG8gY3JlYXRlIHRoZSBoYW5kbGUgYWZ0ZXIgdmFsaWRhdGlvbiwgdG8gYXZvaWQKKwkgKiByYWNl cyBmb3IgdXNlcnMgdG8gZG8gZG9pbmcgdGhpbmdzIGxpa2UgbW1hcCB0aGUgc2hhZGVyIEJPLgor CSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+YmFzZS5i YXNlLCAmYXJncy0+aGFuZGxlKTsKKworIGZhaWw6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVu Y2VfdW5sb2NrZWQoJmJvLT5iYXNlLmJhc2UpOworCisJcmV0dXJuIHJldDsKK30KKwogdm9pZCB2 YzRfYm9fY2FjaGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2YzRf ZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCmluZGV4IDVmYTQ2 ODguLmRhNGJlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZjNF9kcm1fZm9wcyA9IHsKIAkub3BlbiA9 IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCiAJLnVubG9ja2VkX2lvY3RsID0g ZHJtX2lvY3RsLAotCS5tbWFwID0gZHJtX2dlbV9jbWFfbW1hcCwKKwkubW1hcCA9IHZjNF9tbWFw LAogCS5wb2xsID0gZHJtX3BvbGwsCiAJLnJlYWQgPSBkcm1fcmVhZCwKICNpZmRlZiBDT05GSUdf Q09NUEFUCkBAIC03Niw2ICs3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHZjNF9kcm1fZm9wcyA9IHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mg dmM0X2RybV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGX0RSVihWQzRfQ1JFQVRFX0JPLCB2 YzRfY3JlYXRlX2JvX2lvY3RsLCAwKSwKIAlEUk1fSU9DVExfREVGX0RSVihWQzRfTU1BUF9CTywg dmM0X21tYXBfYm9faW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUZfRFJWKFZDNF9DUkVBVEVfU0hB REVSX0JPLCB2YzRfY3JlYXRlX3NoYWRlcl9ib19pb2N0bCwgMCksCiB9OwogCiBzdGF0aWMgc3Ry dWN0IGRybV9kcml2ZXIgdmM0X2RybV9kcml2ZXIgPSB7CkBAIC0xMDIsMTIgKzEwMywxMiBAQCBz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmM0X2RybV9kcml2ZXIgPSB7CiAJLnByaW1lX2hhbmRs ZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAogCS5wcmltZV9mZF90b19oYW5k bGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKIAkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRy bV9nZW1fcHJpbWVfaW1wb3J0LAotCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9l eHBvcnQsCisJLmdlbV9wcmltZV9leHBvcnQgPSB2YzRfcHJpbWVfZXhwb3J0LAogCS5nZW1fcHJp bWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAogCS5nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxl LAotCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmlt ZV92bWFwID0gdmM0X3ByaW1lX3ZtYXAsCiAJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2Nt YV9wcmltZV92dW5tYXAsCi0JLmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1h cCwKKwkuZ2VtX3ByaW1lX21tYXAgPSB2YzRfcHJpbWVfbW1hcCwKIAogCS5kdW1iX2NyZWF0ZSA9 IHZjNF9kdW1iX2NyZWF0ZSwKIAkuZHVtYl9tYXBfb2Zmc2V0ID0gZHJtX2dlbV9jbWFfZHVtYl9t YXBfb2Zmc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAppbmRleCBmZGRiMGEwLi5iZDc3ZDU1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaApAQCAtNjksNiArNjksMTEgQEAgc3RydWN0IHZjNF9ibyB7CiAKIAkv KiBMaXN0IGVudHJ5IGZvciB0aGUgQk8ncyBwb3NpdGlvbiBpbiB2YzRfZGV2LT5ib19jYWNoZS5z aXplX2xpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNpemVfaGVhZDsKKworCS8qIFN0cnVjdCBm b3Igc2hhZGVyIHZhbGlkYXRpb24gc3RhdGUsIGlmIGNyZWF0ZWQgYnkKKwkgKiBEUk1fSU9DVExf VkM0X0NSRUFURV9TSEFERVJfQk8uCisJICovCisJc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVy X2luZm8gKnZhbGlkYXRlZF9zaGFkZXI7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRf Ym8gKgpAQCAtMTE4LDYgKzEyMyw0MiBAQCB0b192YzRfZW5jb2RlcihzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCiAjZGVmaW5lIEhWU19XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwg dmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCiAKIC8qKgorICogc3RydWN0IHZjNF90ZXh0dXJlX3Nh bXBsZV9pbmZvIC0gc2F2ZXMgdGhlIG9mZnNldHMgaW50byB0aGUgVUJPIGZvciB0ZXh0dXJlCisg KiBzZXR1cCBwYXJhbWV0ZXJzLgorICoKKyAqIFRoaXMgd2lsbCBiZSB1c2VkIGF0IGRyYXcgdGlt ZSB0byByZWxvY2F0ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlCisgKiBjb250ZW50cyBp biBwMCwgYW5kIHZhbGlkYXRlIHRoYXQgdGhlIG9mZnNldCBjb21iaW5lZCB3aXRoCisgKiB3aWR0 aC9oZWlnaHQvc3RyaWRlL2V0Yy4gZnJvbSBwMSBhbmQgcDIvcDMgZG9lc24ndCBzYW1wbGUgb3V0 c2lkZSB0aGUgQk8uCisgKiBOb3RlIHRoYXQgdGhlIGhhcmR3YXJlIHRyZWF0cyB1bnByb3ZpZGVk IGNvbmZpZyBwYXJhbWV0ZXJzIGFzIDAsIHNvIG5vdCBhbGwKKyAqIG9mIHRoZW0gbmVlZCB0byBi ZSBzZXQgdXAgZm9yIGV2ZXJ5IHRleHVyZSBzYW1wbGUsIGFuZCB3ZSdsbCBzdG9yZSB+MCBhcwor ICogdGhlIG9mZnNldCB0byBtYXJrIHRoZSB1bnVzZWQgb25lcy4KKyAqCisgKiBTZWUgdGhlIFZD NCAzRCBhcmNoaXRlY3R1cmUgZ3VpZGUgcGFnZSA0MSAoIlRleHR1cmUgYW5kIE1lbW9yeSBMb29r dXAgVW5pdAorICogU2V0dXAiKSBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlIHRleHR1cmUgcGFyYW1l dGVycy4KKyAqLworc3RydWN0IHZjNF90ZXh0dXJlX3NhbXBsZV9pbmZvIHsKKwlib29sIGlzX2Rp cmVjdDsKKwl1aW50MzJfdCBwX29mZnNldFs0XTsKK307CisKKy8qKgorICogc3RydWN0IHZjNF92 YWxpZGF0ZWRfc2hhZGVyX2luZm8gLSBpbmZvcm1hdGlvbiBhYm91dCB2YWxpZGF0ZWQgc2hhZGVy cyB0aGF0CisgKiBuZWVkcyB0byBiZSB1c2VkIGZyb20gY29tbWFuZCBsaXN0IHZhbGlkYXRpb24u CisgKgorICogRm9yIGEgZ2l2ZW4gc2hhZGVyLCBlYWNoIHRpbWUgYSBzaGFkZXIgc3RhdGUgcmVj b3JkIHJlZmVyZW5jZXMgaXQsIHdlIG5lZWQKKyAqIHRvIHZlcmlmeSB0aGF0IHRoZSBzaGFkZXIg ZG9lc24ndCByZWFkIG1vcmUgdW5pZm9ybXMgdGhhbiB0aGUgc2hhZGVyIHN0YXRlCisgKiByZWNv cmQncyB1bmlmb3JtIEJPIHBvaW50ZXIgY2FuIHByb3ZpZGUsIGFuZCB3ZSBuZWVkIHRvIGFwcGx5 IHJlbG9jYXRpb25zCisgKiBhbmQgdmFsaWRhdGUgdGhlIHNoYWRlciBzdGF0ZSByZWNvcmQncyB1 bmlmb3JtcyB0aGF0IGRlZmluZSB0aGUgdGV4dHVyZQorICogc2FtcGxlcy4KKyAqLworc3RydWN0 IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8geworCXVpbnQzMl90IHVuaWZvcm1zX3NpemU7CisJ dWludDMyX3QgdW5pZm9ybXNfc3JjX3NpemU7CisJdWludDMyX3QgbnVtX3RleHR1cmVfc2FtcGxl czsKKwlzdHJ1Y3QgdmM0X3RleHR1cmVfc2FtcGxlX2luZm8gKnRleHR1cmVfc2FtcGxlczsKK307 CisKKy8qKgogICogX3dhaXRfZm9yIC0gbWFnaWMgKHJlZ2lzdGVyKSB3YWl0IG1hY3JvCiAgKgog ICogRG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yIG1vZGVzZXQgcGF0aHMgd2hlbiBydW4gdW5kZXIg a2RnYiBvciBzaW1pbGFyIGF0b21pYwpAQCAtMTU3LDggKzE5OCwxMyBAQCBzdHJ1Y3QgZG1hX2J1 ZiAqdmM0X3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdzKTsKIGludCB2YzRfY3JlYXRlX2JvX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdik7CitpbnQgdmM0X2NyZWF0ZV9zaGFkZXJfYm9faW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdik7CiBpbnQgdmM0X21tYXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IHZjNF9t bWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQg dmM0X3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKTsKK3ZvaWQgKnZjNF9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKTsKIHZvaWQgdmM0X2JvX2NhY2hlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CiB2b2lkIHZjNF9ib19jYWNoZV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50 IHZjNF9ib19zdGF0c19kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKTsKQEAg LTE5NCwzICsyNDAsNyBAQCBzdHJ1Y3QgZHJtX3BsYW5lICp2YzRfcGxhbmVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCQkJCSBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpOwogdTMyIHZj NF9wbGFuZV93cml0ZV9kbGlzdChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgdTMyIF9faW9tZW0g KmRsaXN0KTsKIHUzMiB2YzRfcGxhbmVfZGxpc3Rfc2l6ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSk7CisKKy8qIHZjNF92YWxpZGF0ZV9zaGFkZXIuYyAqLworc3RydWN0IHZjNF92YWxp ZGF0ZWRfc2hhZGVyX2luZm8gKgordmM0X3ZhbGlkYXRlX3NoYWRlcihzdHJ1Y3QgZHJtX2dlbV9j bWFfb2JqZWN0ICpzaGFkZXJfb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3FwdV9kZWZpbmVzLmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9xcHVfZGVmaW5lcy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzJmM2MKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9xcHVfZGVmaW5lcy5oCkBAIC0wLDAgKzEs MjY0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgQnJvYWRjb20KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBWQzRfUVBVX0RF RklORVNfSAorI2RlZmluZSBWQzRfUVBVX0RFRklORVNfSAorCitlbnVtIHFwdV9vcF9hZGQgewor CVFQVV9BX05PUCwKKwlRUFVfQV9GQURELAorCVFQVV9BX0ZTVUIsCisJUVBVX0FfRk1JTiwKKwlR UFVfQV9GTUFYLAorCVFQVV9BX0ZNSU5BQlMsCisJUVBVX0FfRk1BWEFCUywKKwlRUFVfQV9GVE9J LAorCVFQVV9BX0lUT0YsCisJUVBVX0FfQUREID0gMTIsCisJUVBVX0FfU1VCLAorCVFQVV9BX1NI UiwKKwlRUFVfQV9BU1IsCisJUVBVX0FfUk9SLAorCVFQVV9BX1NITCwKKwlRUFVfQV9NSU4sCisJ UVBVX0FfTUFYLAorCVFQVV9BX0FORCwKKwlRUFVfQV9PUiwKKwlRUFVfQV9YT1IsCisJUVBVX0Ff Tk9ULAorCVFQVV9BX0NMWiwKKwlRUFVfQV9WOEFERFMgPSAzMCwKKwlRUFVfQV9WOFNVQlMgPSAz MSwKK307CisKK2VudW0gcXB1X29wX211bCB7CisJUVBVX01fTk9QLAorCVFQVV9NX0ZNVUwsCisJ UVBVX01fTVVMMjQsCisJUVBVX01fVjhNVUxELAorCVFQVV9NX1Y4TUlOLAorCVFQVV9NX1Y4TUFY LAorCVFQVV9NX1Y4QUREUywKKwlRUFVfTV9WOFNVQlMsCit9OworCitlbnVtIHFwdV9yYWRkciB7 CisJUVBVX1JfRlJBR19QQVlMT0FEX1pXID0gMTUsIC8qIFcgZm9yIEEgZmlsZSwgWiBmb3IgQiBm aWxlICovCisJLyogMC0zMSBhcmUgdGhlIHBsYWluIHJlZ2ZpbGUgYSBvciBiIGZpZWxkcyAqLwor CVFQVV9SX1VOSUYgPSAzMiwKKwlRUFVfUl9WQVJZID0gMzUsCisJUVBVX1JfRUxFTV9RUFUgPSAz OCwKKwlRUFVfUl9OT1AsCisJUVBVX1JfWFlfUElYRUxfQ09PUkQgPSA0MSwKKwlRUFVfUl9NU19S RVZfRkxBR1MgPSA0MSwKKwlRUFVfUl9WUE0gPSA0OCwKKwlRUFVfUl9WUE1fTERfQlVTWSwKKwlR UFVfUl9WUE1fTERfV0FJVCwKKwlRUFVfUl9NVVRFWF9BQ1FVSVJFLAorfTsKKworZW51bSBxcHVf d2FkZHIgeworCS8qIDAtMzEgYXJlIHRoZSBwbGFpbiByZWdmaWxlIGEgb3IgYiBmaWVsZHMgKi8K KwlRUFVfV19BQ0MwID0gMzIsIC8qIGFrYSByMCAqLworCVFQVV9XX0FDQzEsCisJUVBVX1dfQUND MiwKKwlRUFVfV19BQ0MzLAorCVFQVV9XX1RNVV9OT1NXQVAsCisJUVBVX1dfQUNDNSwKKwlRUFVf V19IT1NUX0lOVCwKKwlRUFVfV19OT1AsCisJUVBVX1dfVU5JRk9STVNfQUREUkVTUywKKwlRUFVf V19RVUFEX1hZLCAvKiBYIGZvciByZWdmaWxlIGEsIFkgZm9yIHJlZ2ZpbGUgYiAqLworCVFQVV9X X01TX0ZMQUdTID0gNDIsCisJUVBVX1dfUkVWX0ZMQUcgPSA0MiwKKwlRUFVfV19UTEJfU1RFTkNJ TF9TRVRVUCA9IDQzLAorCVFQVV9XX1RMQl9aLAorCVFQVV9XX1RMQl9DT0xPUl9NUywKKwlRUFVf V19UTEJfQ09MT1JfQUxMLAorCVFQVV9XX1RMQl9BTFBIQV9NQVNLLAorCVFQVV9XX1ZQTSwKKwlR UFVfV19WUE1WQ0RfU0VUVVAsIC8qIExEIGZvciByZWdmaWxlIGEsIFNUIGZvciByZWdmaWxlIGIg Ki8KKwlRUFVfV19WUE1fQUREUiwgLyogTEQgZm9yIHJlZ2ZpbGUgYSwgU1QgZm9yIHJlZ2ZpbGUg YiAqLworCVFQVV9XX01VVEVYX1JFTEVBU0UsCisJUVBVX1dfU0ZVX1JFQ0lQLAorCVFQVV9XX1NG VV9SRUNJUFNRUlQsCisJUVBVX1dfU0ZVX0VYUCwKKwlRUFVfV19TRlVfTE9HLAorCVFQVV9XX1RN VTBfUywKKwlRUFVfV19UTVUwX1QsCisJUVBVX1dfVE1VMF9SLAorCVFQVV9XX1RNVTBfQiwKKwlR UFVfV19UTVUxX1MsCisJUVBVX1dfVE1VMV9ULAorCVFQVV9XX1RNVTFfUiwKKwlRUFVfV19UTVUx X0IsCit9OworCitlbnVtIHFwdV9zaWdfYml0cyB7CisJUVBVX1NJR19TV19CUkVBS1BPSU5ULAor CVFQVV9TSUdfTk9ORSwKKwlRUFVfU0lHX1RIUkVBRF9TV0lUQ0gsCisJUVBVX1NJR19QUk9HX0VO RCwKKwlRUFVfU0lHX1dBSVRfRk9SX1NDT1JFQk9BUkQsCisJUVBVX1NJR19TQ09SRUJPQVJEX1VO TE9DSywKKwlRUFVfU0lHX0xBU1RfVEhSRUFEX1NXSVRDSCwKKwlRUFVfU0lHX0NPVkVSQUdFX0xP QUQsCisJUVBVX1NJR19DT0xPUl9MT0FELAorCVFQVV9TSUdfQ09MT1JfTE9BRF9FTkQsCisJUVBV X1NJR19MT0FEX1RNVTAsCisJUVBVX1NJR19MT0FEX1RNVTEsCisJUVBVX1NJR19BTFBIQV9NQVNL X0xPQUQsCisJUVBVX1NJR19TTUFMTF9JTU0sCisJUVBVX1NJR19MT0FEX0lNTSwKKwlRUFVfU0lH X0JSQU5DSAorfTsKKworZW51bSBxcHVfbXV4IHsKKwkvKiBoYXJkd2FyZSBtdXggdmFsdWVzICov CisJUVBVX01VWF9SMCwKKwlRUFVfTVVYX1IxLAorCVFQVV9NVVhfUjIsCisJUVBVX01VWF9SMywK KwlRUFVfTVVYX1I0LAorCVFQVV9NVVhfUjUsCisJUVBVX01VWF9BLAorCVFQVV9NVVhfQiwKKwor CS8qIG5vbi1oYXJkd2FyZSBtdXggdmFsdWVzICovCisJUVBVX01VWF9JTU0sCit9OworCitlbnVt IHFwdV9jb25kIHsKKwlRUFVfQ09ORF9ORVZFUiwKKwlRUFVfQ09ORF9BTFdBWVMsCisJUVBVX0NP TkRfWlMsCisJUVBVX0NPTkRfWkMsCisJUVBVX0NPTkRfTlMsCisJUVBVX0NPTkRfTkMsCisJUVBV X0NPTkRfQ1MsCisJUVBVX0NPTkRfQ0MsCit9OworCitlbnVtIHFwdV9wYWNrX211bCB7CisJUVBV X1BBQ0tfTVVMX05PUCwKKwkvKiByZXBsaWNhdGVkIHRvIGVhY2ggOCBiaXRzIG9mIHRoZSAzMi1i aXQgZHN0LiAqLworCVFQVV9QQUNLX01VTF84ODg4ID0gMywKKwlRUFVfUEFDS19NVUxfOEEsCisJ UVBVX1BBQ0tfTVVMXzhCLAorCVFQVV9QQUNLX01VTF84QywKKwlRUFVfUEFDS19NVUxfOEQsCit9 OworCitlbnVtIHFwdV9wYWNrX2EgeworCVFQVV9QQUNLX0FfTk9QLAorCS8qIGNvbnZlcnQgdG8g MTYgYml0IGZsb2F0IGlmIGZsb2F0IGlucHV0LCBvciB0byBpbnQxNi4gKi8KKwlRUFVfUEFDS19B XzE2QSwKKwlRUFVfUEFDS19BXzE2QiwKKwkvKiByZXBsaWNhdGVkIHRvIGVhY2ggOCBiaXRzIG9m IHRoZSAzMi1iaXQgZHN0LiAqLworCVFQVV9QQUNLX0FfODg4OCwKKwkvKiBDb252ZXJ0IHRvIDgt Yml0IHVuc2lnbmVkIGludC4gKi8KKwlRUFVfUEFDS19BXzhBLAorCVFQVV9QQUNLX0FfOEIsCisJ UVBVX1BBQ0tfQV84QywKKwlRUFVfUEFDS19BXzhELAorCisJLyogU2F0dXJhdGluZyB2YXJpYW50 cyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb25zLiAqLworCVFQVV9QQUNLX0FfMzJfU0FULCAv KiBpbnQtb25seSAqLworCVFQVV9QQUNLX0FfMTZBX1NBVCwgLyogaW50IG9yIGZsb2F0ICovCisJ UVBVX1BBQ0tfQV8xNkJfU0FULAorCVFQVV9QQUNLX0FfODg4OF9TQVQsCisJUVBVX1BBQ0tfQV84 QV9TQVQsCisJUVBVX1BBQ0tfQV84Ql9TQVQsCisJUVBVX1BBQ0tfQV84Q19TQVQsCisJUVBVX1BB Q0tfQV84RF9TQVQsCit9OworCitlbnVtIHFwdV91bnBhY2tfcjQgeworCVFQVV9VTlBBQ0tfUjRf Tk9QLAorCVFQVV9VTlBBQ0tfUjRfRjE2QV9UT19GMzIsCisJUVBVX1VOUEFDS19SNF9GMTZCX1RP X0YzMiwKKwlRUFVfVU5QQUNLX1I0XzhEX1JFUCwKKwlRUFVfVU5QQUNLX1I0XzhBLAorCVFQVV9V TlBBQ0tfUjRfOEIsCisJUVBVX1VOUEFDS19SNF84QywKKwlRUFVfVU5QQUNLX1I0XzhELAorfTsK KworI2RlZmluZSBRUFVfTUFTSyhoaWdoLCBsb3cpIFwKKwkoKCgodWludDY0X3QpMSA8PCAoKGhp Z2gpIC0gKGxvdykgKyAxKSkgLSAxKSA8PCAobG93KSkKKworI2RlZmluZSBRUFVfR0VUX0ZJRUxE KHdvcmQsIGZpZWxkKSBcCisJKCh1aW50MzJfdCkoKCh3b3JkKSAgJiBmaWVsZCAjIyBfTUFTSykg Pj4gZmllbGQgIyMgX1NISUZUKSkKKworI2RlZmluZSBRUFVfU0lHX1NISUZUICAgICAgICAgICAg ICAgICAgIDYwCisjZGVmaW5lIFFQVV9TSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgUVBVX01B U0soNjMsIDYwKQorCisjZGVmaW5lIFFQVV9VTlBBQ0tfU0hJRlQgICAgICAgICAgICAgICAgNTcK KyNkZWZpbmUgUVBVX1VOUEFDS19NQVNLICAgICAgICAgICAgICAgICBRUFVfTUFTSyg1OSwgNTcp CisKKy8qKgorICogSWYgc2V0LCB0aGUgcGFjayBmaWVsZCBtZWFucyBQQUNLX01VTCBvciBSNCBw YWNraW5nLCBpbnN0ZWFkIG9mIG5vcm1hbAorICogcmVnZmlsZSBhIHBhY2tpbmcuCisgKi8KKyNk ZWZpbmUgUVBVX1BNICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KTEgPDwgNTYp CisKKyNkZWZpbmUgUVBVX1BBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBR UFVfUEFDS19NQVNLICAgICAgICAgICAgICAgICAgIFFQVV9NQVNLKDU1LCA1MikKKworI2RlZmlu ZSBRUFVfQ09ORF9BRERfU0hJRlQgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIFFQVV9DT05EX0FE RF9NQVNLICAgICAgICAgICAgICAgUVBVX01BU0soNTEsIDQ5KQorI2RlZmluZSBRUFVfQ09ORF9N VUxfU0hJRlQgICAgICAgICAgICAgIDQ2CisjZGVmaW5lIFFQVV9DT05EX01VTF9NQVNLICAgICAg ICAgICAgICAgUVBVX01BU0soNDgsIDQ2KQorCisjZGVmaW5lIFFQVV9TRiAgICAgICAgICAgICAg ICAgICAgICAgICAgKCh1aW50NjRfdCkxIDw8IDQ1KQorCisjZGVmaW5lIFFQVV9XQUREUl9BRERf U0hJRlQgICAgICAgICAgICAgMzgKKyNkZWZpbmUgUVBVX1dBRERSX0FERF9NQVNLICAgICAgICAg ICAgICBRUFVfTUFTSyg0MywgMzgpCisjZGVmaW5lIFFQVV9XQUREUl9NVUxfU0hJRlQgICAgICAg ICAgICAgMzIKKyNkZWZpbmUgUVBVX1dBRERSX01VTF9NQVNLICAgICAgICAgICAgICBRUFVfTUFT SygzNywgMzIpCisKKyNkZWZpbmUgUVBVX09QX01VTF9TSElGVCAgICAgICAgICAgICAgICAyOQor I2RlZmluZSBRUFVfT1BfTVVMX01BU0sgICAgICAgICAgICAgICAgIFFQVV9NQVNLKDMxLCAyOSkK KworI2RlZmluZSBRUFVfUkFERFJfQV9TSElGVCAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFFQ VV9SQUREUl9BX01BU0sgICAgICAgICAgICAgICAgUVBVX01BU0soMjMsIDE4KQorI2RlZmluZSBR UFVfUkFERFJfQl9TSElGVCAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFFQVV9SQUREUl9CX01B U0sgICAgICAgICAgICAgICAgUVBVX01BU0soMTcsIDEyKQorI2RlZmluZSBRUFVfU01BTExfSU1N X1NISUZUICAgICAgICAgICAgIDEyCisjZGVmaW5lIFFQVV9TTUFMTF9JTU1fTUFTSyAgICAgICAg ICAgICAgUVBVX01BU0soMTcsIDEyKQorCisjZGVmaW5lIFFQVV9BRERfQV9TSElGVCAgICAgICAg ICAgICAgICAgOQorI2RlZmluZSBRUFVfQUREX0FfTUFTSyAgICAgICAgICAgICAgICAgIFFQVV9N QVNLKDExLCA5KQorI2RlZmluZSBRUFVfQUREX0JfU0hJRlQgICAgICAgICAgICAgICAgIDYKKyNk ZWZpbmUgUVBVX0FERF9CX01BU0sgICAgICAgICAgICAgICAgICBRUFVfTUFTSyg4LCA2KQorI2Rl ZmluZSBRUFVfTVVMX0FfU0hJRlQgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUVBVX01VTF9B X01BU0sgICAgICAgICAgICAgICAgICBRUFVfTUFTSyg1LCAzKQorI2RlZmluZSBRUFVfTVVMX0Jf U0hJRlQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUVBVX01VTF9CX01BU0sgICAgICAgICAg ICAgICAgICBRUFVfTUFTSygyLCAwKQorCisjZGVmaW5lIFFQVV9XUyAgICAgICAgICAgICAgICAg ICAgICAgICAgKCh1aW50NjRfdCkxIDw8IDQ0KQorCisjZGVmaW5lIFFQVV9PUF9BRERfU0hJRlQg ICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUVBVX09QX0FERF9NQVNLICAgICAgICAgICAgICAg ICBRUFVfTUFTSygyOCwgMjQpCisKKyNlbmRpZiAvKiBWQzRfUVBVX0RFRklORVNfSCAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmY2NzEyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF92YWxpZGF0ZV9zaGFkZXJzLmMKQEAgLTAsMCArMSw1MTMgQEAKKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxNCBCcm9hZGNvbQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKioKKyAqIERPQzogU2hhZGVyIHZhbGlkYXRvciBm b3IgVkM0LgorICoKKyAqIFRoZSBWQzQgaGFzIG5vIElPTU1VIGJldHdlZW4gaXQgYW5kIHN5c3Rl bSBtZW1vcnksIHNvIGEgdXNlciB3aXRoCisgKiBhY2Nlc3MgdG8gZXhlY3V0ZSBzaGFkZXJzIGNv dWxkIGVzY2FsYXRlIHByaXZpbGVnZSBieSBvdmVyd3JpdGluZworICogc3lzdGVtIG1lbW9yeSAo dXNpbmcgdGhlIFZQTSB3cml0ZSBhZGRyZXNzIHJlZ2lzdGVyIGluIHRoZQorICogZ2VuZXJhbC1w dXJwb3NlIERNQSBtb2RlKSBvciByZWFkaW5nIHN5c3RlbSBtZW1vcnkgaXQgc2hvdWxkbid0Cisg KiAocmVhZGluZyBpdCBhcyBhIHRleHR1cmUsIG9yIHVuaWZvcm0gZGF0YSwgb3IgdmVydGV4IGRh dGEpLgorICoKKyAqIFRoaXMgd2Fsa3Mgb3ZlciBhIHNoYWRlciBCTywgZW5zdXJpbmcgdGhhdCBp dHMgYWNjZXNzZXMgYXJlCisgKiBhcHByb3ByaWF0ZWx5IGJvdW5kZWQsIGFuZCByZWNvcmRpbmcg aG93IG1hbnkgdGV4dHVyZSBhY2Nlc3NlcyBhcmUKKyAqIG1hZGUgYW5kIHdoZXJlIHNvIHRoYXQg d2UgY2FuIGRvIHJlbG9jYXRpb25zIGZvciB0aGVtIGluIHRoZQorICogdW5pZm9ybSBzdHJlYW0u CisgKi8KKworI2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcXB1X2RlZmluZXMu aCIKKworc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSB7CisJc3RydWN0IHZjNF90 ZXh0dXJlX3NhbXBsZV9pbmZvIHRtdV9zZXR1cFsyXTsKKwlpbnQgdG11X3dyaXRlX2NvdW50WzJd OworCisJLyogRm9yIHJlZ2lzdGVycyB0aGF0IHdlcmUgbGFzdCB3cml0dGVuIHRvIGJ5IGEgTUlO IGluc3RydWN0aW9uIHdpdGgKKwkgKiBvbmUgYXJndW1lbnQgYmVpbmcgYSB1bmlmb3JtLCB0aGUg YWRkcmVzcyBvZiB0aGUgdW5pZm9ybS4KKwkgKiBPdGhlcndpc2UsIH4wLgorCSAqCisJICogVGhp cyBpcyB1c2VkIGZvciB0aGUgdmFsaWRhdGlvbiBvZiBkaXJlY3QgYWRkcmVzcyBtZW1vcnkgcmVh ZHMuCisJICovCisJdWludDMyX3QgbGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1szMiArIDMyICsgNF07 CisJYm9vbCBsaXZlX21heF9jbGFtcF9yZWdzWzMyICsgMzIgKyA0XTsKK307CisKK3N0YXRpYyB1 aW50MzJfdAord2FkZHJfdG9fbGl2ZV9yZWdfaW5kZXgodWludDMyX3Qgd2FkZHIsIGJvb2wgaXNf YikKK3sKKwlpZiAod2FkZHIgPCAzMikgeworCQlpZiAoaXNfYikKKwkJCXJldHVybiAzMiArIHdh ZGRyOworCQllbHNlCisJCQlyZXR1cm4gd2FkZHI7CisJfSBlbHNlIGlmICh3YWRkciA8PSBRUFVf V19BQ0MzKSB7CisJCXJldHVybiA2NCArIHdhZGRyIC0gUVBVX1dfQUNDMDsKKwl9IGVsc2Ugewor CQlyZXR1cm4gfjA7CisJfQorfQorCitzdGF0aWMgdWludDMyX3QKK3JhZGRyX2FkZF9hX3RvX2xp dmVfcmVnX2luZGV4KHVpbnQ2NF90IGluc3QpCit7CisJdWludDMyX3Qgc2lnID0gUVBVX0dFVF9G SUVMRChpbnN0LCBRUFVfU0lHKTsKKwl1aW50MzJfdCBhZGRfYSA9IFFQVV9HRVRfRklFTEQoaW5z dCwgUVBVX0FERF9BKTsKKwl1aW50MzJfdCByYWRkcl9hID0gUVBVX0dFVF9GSUVMRChpbnN0LCBR UFVfUkFERFJfQSk7CisJdWludDMyX3QgcmFkZHJfYiA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBV X1JBRERSX0IpOworCisJaWYgKGFkZF9hID09IFFQVV9NVVhfQSkKKwkJcmV0dXJuIHJhZGRyX2E7 CisJZWxzZSBpZiAoYWRkX2EgPT0gUVBVX01VWF9CICYmIHNpZyAhPSBRUFVfU0lHX1NNQUxMX0lN TSkKKwkJcmV0dXJuIDMyICsgcmFkZHJfYjsKKwllbHNlIGlmIChhZGRfYSA8PSBRUFVfTVVYX1Iz KQorCQlyZXR1cm4gNjQgKyBhZGRfYTsKKwllbHNlCisJCXJldHVybiB+MDsKK30KKworc3RhdGlj IGJvb2wKK2lzX3RtdV9zdWJtaXQodWludDMyX3Qgd2FkZHIpCit7CisJcmV0dXJuICh3YWRkciA9 PSBRUFVfV19UTVUwX1MgfHwKKwkJd2FkZHIgPT0gUVBVX1dfVE1VMV9TKTsKK30KKworc3RhdGlj IGJvb2wKK2lzX3RtdV93cml0ZSh1aW50MzJfdCB3YWRkcikKK3sKKwlyZXR1cm4gKHdhZGRyID49 IFFQVV9XX1RNVTBfUyAmJgorCQl3YWRkciA8PSBRUFVfV19UTVUxX0IpOworfQorCitzdGF0aWMg Ym9vbAorcmVjb3JkX3RleHR1cmVfc2FtcGxlKHN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9p bmZvICp2YWxpZGF0ZWRfc2hhZGVyLAorCQkgICAgICBzdHJ1Y3QgdmM0X3NoYWRlcl92YWxpZGF0 aW9uX3N0YXRlICp2YWxpZGF0aW9uX3N0YXRlLAorCQkgICAgICBpbnQgdG11KQoreworCXVpbnQz Ml90IHMgPSB2YWxpZGF0ZWRfc2hhZGVyLT5udW1fdGV4dHVyZV9zYW1wbGVzOworCWludCBpOwor CXN0cnVjdCB2YzRfdGV4dHVyZV9zYW1wbGVfaW5mbyAqdGVtcF9zYW1wbGVzOworCisJdGVtcF9z YW1wbGVzID0ga3JlYWxsb2ModmFsaWRhdGVkX3NoYWRlci0+dGV4dHVyZV9zYW1wbGVzLAorCQkJ CShzICsgMSkgKiBzaXplb2YoKnRlbXBfc2FtcGxlcyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYg KCF0ZW1wX3NhbXBsZXMpCisJCXJldHVybiBmYWxzZTsKKworCW1lbWNweSgmdGVtcF9zYW1wbGVz W3NdLAorCSAgICAgICAmdmFsaWRhdGlvbl9zdGF0ZS0+dG11X3NldHVwW3RtdV0sCisJICAgICAg IHNpemVvZigqdGVtcF9zYW1wbGVzKSk7CisKKwl2YWxpZGF0ZWRfc2hhZGVyLT5udW1fdGV4dHVy ZV9zYW1wbGVzID0gcyArIDE7CisJdmFsaWRhdGVkX3NoYWRlci0+dGV4dHVyZV9zYW1wbGVzID0g dGVtcF9zYW1wbGVzOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJdmFsaWRhdGlvbl9z dGF0ZS0+dG11X3NldHVwW3RtdV0ucF9vZmZzZXRbaV0gPSB+MDsKKworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgYm9vbAorY2hlY2tfdG11X3dyaXRlKHVpbnQ2NF90IGluc3QsCisJCXN0cnVj dCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyLAorCQlzdHJ1Y3Qg dmM0X3NoYWRlcl92YWxpZGF0aW9uX3N0YXRlICp2YWxpZGF0aW9uX3N0YXRlLAorCQlib29sIGlz X211bCkKK3sKKwl1aW50MzJfdCB3YWRkciA9IChpc19tdWwgPworCQkJICBRUFVfR0VUX0ZJRUxE KGluc3QsIFFQVV9XQUREUl9NVUwpIDoKKwkJCSAgUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfV0FE RFJfQUREKSk7CisJdWludDMyX3QgcmFkZHJfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1JB RERSX0EpOworCXVpbnQzMl90IHJhZGRyX2IgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9SQURE Ul9CKTsKKwlpbnQgdG11ID0gd2FkZHIgPiBRUFVfV19UTVUwX0I7CisJYm9vbCBzdWJtaXQgPSBp c190bXVfc3VibWl0KHdhZGRyKTsKKwlib29sIGlzX2RpcmVjdCA9IHN1Ym1pdCAmJiB2YWxpZGF0 aW9uX3N0YXRlLT50bXVfd3JpdGVfY291bnRbdG11XSA9PSAwOworCXVpbnQzMl90IHNpZyA9IFFQ VV9HRVRfRklFTEQoaW5zdCwgUVBVX1NJRyk7CisKKwlpZiAoaXNfZGlyZWN0KSB7CisJCXVpbnQz Ml90IGFkZF9iID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfQUREX0IpOworCQl1aW50MzJfdCBj bGFtcF9yZWcsIGNsYW1wX29mZnNldDsKKworCQlpZiAoc2lnID09IFFQVV9TSUdfU01BTExfSU1N KSB7CisJCQlEUk1fRVJST1IoImRpcmVjdCBUTVUgcmVhZCB1c2VkIHNtYWxsIGltbWVkaWF0ZVxu Iik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHRl eHR1cmUgbG9hZCBpcyBhbiBhZGQgb2YgdGhlIGJhc2UKKwkJICogYWRkcmVzcyBvZiB0aGUgVUJP IHRvIGEgY2xhbXBlZCBvZmZzZXQgd2l0aGluIHRoZSBVQk8uCisJCSAqLworCQlpZiAoaXNfbXVs IHx8CisJCSAgICBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9PUF9BREQpICE9IFFQVV9BX0FERCkg eworCQkJRFJNX0VSUk9SKCJkaXJlY3QgVE1VIGxvYWQgd2Fzbid0IGFuIGFkZFxuIik7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBXZSBhc3NlcnQgdGhhdCB0aGUgdGhlIGNsYW1wZWQg YWRkcmVzcyBpcyB0aGUgZmlyc3QKKwkJICogYXJndW1lbnQsIGFuZCB0aGUgVUJPIGJhc2UgYWRk cmVzcyBpcyB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCQkgKiBUaGlzIGlzIGFyYml0cmFyeSwgYnV0 IHNpbXBsZXIgdGhhbiBzdXBwb3J0aW5nIGZsaXBwaW5nIHRoZQorCQkgKiB0d28gZWl0aGVyIHdh eS4KKwkJICovCisJCWNsYW1wX3JlZyA9IHJhZGRyX2FkZF9hX3RvX2xpdmVfcmVnX2luZGV4KGlu c3QpOworCQlpZiAoY2xhbXBfcmVnID09IH4wKSB7CisJCQlEUk1fRVJST1IoImRpcmVjdCBUTVUg bG9hZCB3YXNuJ3QgY2xhbXBlZFxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQljbGFt cF9vZmZzZXQgPSB2YWxpZGF0aW9uX3N0YXRlLT5saXZlX21pbl9jbGFtcF9vZmZzZXRzW2NsYW1w X3JlZ107CisJCWlmIChjbGFtcF9vZmZzZXQgPT0gfjApIHsKKwkJCURSTV9FUlJPUigiZGlyZWN0 IFRNVSBsb2FkIHdhc24ndCBjbGFtcGVkXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJ CS8qIFN0b3JlIHRoZSBjbGFtcCB2YWx1ZSdzIG9mZnNldCBpbiBwMSAoc2VlIHJlbG9jX3RleCgp IGluCisJCSAqIHZjNF92YWxpZGF0ZS5jKS4KKwkJICovCisJCXZhbGlkYXRpb25fc3RhdGUtPnRt dV9zZXR1cFt0bXVdLnBfb2Zmc2V0WzFdID0KKwkJCWNsYW1wX29mZnNldDsKKworCQlpZiAoIShh ZGRfYiA9PSBRUFVfTVVYX0EgJiYgcmFkZHJfYSA9PSBRUFVfUl9VTklGKSAmJgorCQkgICAgIShh ZGRfYiA9PSBRUFVfTVVYX0IgJiYgcmFkZHJfYiA9PSBRUFVfUl9VTklGKSkgeworCQkJRFJNX0VS Uk9SKCJkaXJlY3QgVE1VIGxvYWQgZGlkbid0IGFkZCB0byBhIHVuaWZvcm1cbiIpOworCQkJcmV0 dXJuIGZhbHNlOworCQl9CisKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+dG11X3NldHVwW3RtdV0uaXNf ZGlyZWN0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocmFkZHJfYSA9PSBRUFVfUl9VTklGIHx8 IChzaWcgIT0gUVBVX1NJR19TTUFMTF9JTU0gJiYKKwkJCQkJICAgICAgcmFkZHJfYiA9PSBRUFVf Ul9VTklGKSkgeworCQkJRFJNX0VSUk9SKCJ1bmlmb3JtIHJlYWQgaW4gdGhlIHNhbWUgaW5zdHJ1 Y3Rpb24gYXMgIgorCQkJCSAgInRleHR1cmUgc2V0dXAuXG4iKTsKKwkJCXJldHVybiBmYWxzZTsK KwkJfQorCX0KKworCWlmICh2YWxpZGF0aW9uX3N0YXRlLT50bXVfd3JpdGVfY291bnRbdG11XSA+ PSA0KSB7CisJCURSTV9FUlJPUigiVE1VJWQgZ290IHRvbyBtYW55IHBhcmFtZXRlcnMgYmVmb3Jl IGRpc3BhdGNoXG4iLAorCQkJICB0bXUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXZhbGlkYXRp b25fc3RhdGUtPnRtdV9zZXR1cFt0bXVdLnBfb2Zmc2V0W3ZhbGlkYXRpb25fc3RhdGUtPnRtdV93 cml0ZV9jb3VudFt0bXVdXSA9CisJCXZhbGlkYXRlZF9zaGFkZXItPnVuaWZvcm1zX3NpemU7CisJ dmFsaWRhdGlvbl9zdGF0ZS0+dG11X3dyaXRlX2NvdW50W3RtdV0rKzsKKwkvKiBTaW5jZSBkaXJl Y3QgdXNlcyBhIFJBRERSIHVuaWZvcm0gcmVmZXJlbmNlLCBpdCB3aWxsIGdldCBjb3VudGVkIGlu CisJICogY2hlY2tfaW5zdHJ1Y3Rpb25fcmVhZHMoKQorCSAqLworCWlmICghaXNfZGlyZWN0KQor CQl2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplICs9IDQ7CisKKwlpZiAoc3VibWl0KSB7 CisJCWlmICghcmVjb3JkX3RleHR1cmVfc2FtcGxlKHZhbGlkYXRlZF9zaGFkZXIsCisJCQkJCSAg IHZhbGlkYXRpb25fc3RhdGUsIHRtdSkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXZh bGlkYXRpb25fc3RhdGUtPnRtdV93cml0ZV9jb3VudFt0bXVdID0gMDsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX3JlZ193cml0ZSh1aW50NjRfdCBpbnN0LAor CQlzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlciwKKwkJ c3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSwKKwkJ Ym9vbCBpc19tdWwpCit7CisJdWludDMyX3Qgd2FkZHIgPSAoaXNfbXVsID8KKwkJCSAgUVBVX0dF VF9GSUVMRChpbnN0LCBRUFVfV0FERFJfTVVMKSA6CisJCQkgIFFQVV9HRVRfRklFTEQoaW5zdCwg UVBVX1dBRERSX0FERCkpOworCisJc3dpdGNoICh3YWRkcikgeworCWNhc2UgUVBVX1dfVU5JRk9S TVNfQUREUkVTUzoKKwkJLyogWFhYOiBXZSdsbCBwcm9iYWJseSBuZWVkIHRvIHN1cHBvcnQgdGhp cyBmb3IgcmVsYWRkciwgYnV0CisJCSAqIGl0J3MgZGVmaW5pdGVseSBhIHNlY3VyaXR5LXJlbGF0 ZWQgb25lLgorCQkgKi8KKwkJRFJNX0VSUk9SKCJ1bmlmb3JtcyBhZGRyZXNzIGxvYWQgdW5zdXBw b3J0ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisKKwljYXNlIFFQVV9XX1RMQl9DT0xPUl9NUzoK KwljYXNlIFFQVV9XX1RMQl9DT0xPUl9BTEw6CisJY2FzZSBRUFVfV19UTEJfWjoKKwkJLyogVGhl c2Ugb25seSBpbnRlcmFjdCB3aXRoIHRoZSB0aWxlIGJ1ZmZlciwgbm90IG1haW4gbWVtb3J5LAor CQkgKiBzbyB0aGV5J3JlIHNhZmUuCisJCSAqLworCQlyZXR1cm4gdHJ1ZTsKKworCWNhc2UgUVBV X1dfVE1VMF9TOgorCWNhc2UgUVBVX1dfVE1VMF9UOgorCWNhc2UgUVBVX1dfVE1VMF9SOgorCWNh c2UgUVBVX1dfVE1VMF9COgorCWNhc2UgUVBVX1dfVE1VMV9TOgorCWNhc2UgUVBVX1dfVE1VMV9U OgorCWNhc2UgUVBVX1dfVE1VMV9SOgorCWNhc2UgUVBVX1dfVE1VMV9COgorCQlyZXR1cm4gY2hl Y2tfdG11X3dyaXRlKGluc3QsIHZhbGlkYXRlZF9zaGFkZXIsIHZhbGlkYXRpb25fc3RhdGUsCisJ CQkJICAgICAgIGlzX211bCk7CisKKwljYXNlIFFQVV9XX0hPU1RfSU5UOgorCWNhc2UgUVBVX1df VE1VX05PU1dBUDoKKwljYXNlIFFQVV9XX1RMQl9BTFBIQV9NQVNLOgorCWNhc2UgUVBVX1dfTVVU RVhfUkVMRUFTRToKKwkJLyogWFhYOiBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGVzZSwgc28g ZG9uJ3Qgc3VwcG9ydCB0aGVtCisJCSAqIGZvciBub3cuCisJCSAqLworCQlEUk1fRVJST1IoIlVu c3VwcG9ydGVkIHdhZGRyICVkXG4iLCB3YWRkcik7CisJCXJldHVybiBmYWxzZTsKKworCWNhc2Ug UVBVX1dfVlBNX0FERFI6CisJCURSTV9FUlJPUigiR2VuZXJhbCBWUE0gRE1BIHVuc3VwcG9ydGVk XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCisJY2FzZSBRUFVfV19WUE06CisJY2FzZSBRUFVfV19W UE1WQ0RfU0VUVVA6CisJCS8qIFdlIGFsbG93IFZQTSBzZXR1cCBpbiBnZW5lcmFsLCBldmVuIGlu Y2x1ZGluZyBWUE0gRE1BCisJCSAqIGNvbmZpZ3VyYXRpb24gc2V0dXAsIGJlY2F1c2UgdGhlICh1 bnNhZmUpIERNQSBjYW4gb25seSBiZQorCQkgKiB0cmlnZ2VyZWQgYnkgUVBVX1dfVlBNX0FERFIg d3JpdGVzLgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisKKwljYXNlIFFQVV9XX1RMQl9TVEVOQ0lM X1NFVFVQOgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQKK3RyYWNrX2xpdmVfY2xhbXBzKHVpbnQ2NF90IGluc3QsCisJCSAgc3RydWN0IHZjNF92 YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRlZF9zaGFkZXIsCisJCSAgc3RydWN0IHZjNF9z aGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSkKK3sKKwl1aW50MzJfdCBv cF9hZGQgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9PUF9BREQpOworCXVpbnQzMl90IHdhZGRy X2FkZCA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1dBRERSX0FERCk7CisJdWludDMyX3Qgd2Fk ZHJfbXVsID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfV0FERFJfTVVMKTsKKwl1aW50MzJfdCBj b25kX2FkZCA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX0NPTkRfQUREKTsKKwl1aW50MzJfdCBh ZGRfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX0FERF9BKTsKKwl1aW50MzJfdCBhZGRfYiA9 IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX0FERF9CKTsKKwl1aW50MzJfdCByYWRkcl9hID0gUVBV X0dFVF9GSUVMRChpbnN0LCBRUFVfUkFERFJfQSk7CisJdWludDMyX3QgcmFkZHJfYiA9IFFQVV9H RVRfRklFTEQoaW5zdCwgUVBVX1JBRERSX0IpOworCXVpbnQzMl90IHNpZyA9IFFQVV9HRVRfRklF TEQoaW5zdCwgUVBVX1NJRyk7CisJYm9vbCB3cyA9IGluc3QgJiBRUFVfV1M7CisJdWludDMyX3Qg bHJpX2FkZF9hLCBscmlfYWRkLCBscmlfbXVsOworCWJvb2wgYWRkX2FfaXNfbWluXzA7CisKKwkv KiBDaGVjayB3aGV0aGVyIE9QX0FERCdzIEEgYXJndW1lbm50IGNvbWVzIGZyb20gYSBsaXZlIE1B WCh4LCAwKSwKKwkgKiBiZWZvcmUgd2UgY2xlYXIgcHJldmlvdXMgbGl2ZSBzdGF0ZS4KKwkgKi8K KwlscmlfYWRkX2EgPSByYWRkcl9hZGRfYV90b19saXZlX3JlZ19pbmRleChpbnN0KTsKKwlhZGRf YV9pc19taW5fMCA9IChscmlfYWRkX2EgIT0gfjAgJiYKKwkJCSAgdmFsaWRhdGlvbl9zdGF0ZS0+ bGl2ZV9tYXhfY2xhbXBfcmVnc1tscmlfYWRkX2FdKTsKKworCS8qIENsZWFyIGxpdmUgc3RhdGUg Zm9yIHJlZ2lzdGVycyB3cml0dGVuIGJ5IG91ciBpbnN0cnVjdGlvbi4gKi8KKwlscmlfYWRkID0g d2FkZHJfdG9fbGl2ZV9yZWdfaW5kZXgod2FkZHJfYWRkLCB3cyk7CisJbHJpX211bCA9IHdhZGRy X3RvX2xpdmVfcmVnX2luZGV4KHdhZGRyX211bCwgIXdzKTsKKwlpZiAobHJpX211bCAhPSB+MCkg eworCQl2YWxpZGF0aW9uX3N0YXRlLT5saXZlX21heF9jbGFtcF9yZWdzW2xyaV9tdWxdID0gZmFs c2U7CisJCXZhbGlkYXRpb25fc3RhdGUtPmxpdmVfbWluX2NsYW1wX29mZnNldHNbbHJpX211bF0g PSB+MDsKKwl9CisJaWYgKGxyaV9hZGQgIT0gfjApIHsKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2 ZV9tYXhfY2xhbXBfcmVnc1tscmlfYWRkXSA9IGZhbHNlOworCQl2YWxpZGF0aW9uX3N0YXRlLT5s aXZlX21pbl9jbGFtcF9vZmZzZXRzW2xyaV9hZGRdID0gfjA7CisJfSBlbHNlIHsKKwkJLyogTm90 aGluZyBmdXJ0aGVyIHRvIGRvIGZvciBsaXZlIHRyYWNraW5nLCBzaW5jZSBvbmx5IEFERHMKKwkJ ICogZ2VuZXJhdGUgbmV3IGxpdmUgY2xhbXAgcmVnaXN0ZXJzLgorCQkgKi8KKwkJcmV0dXJuOwor CX0KKworCS8qIE5vdywgaGFuZGxlIHJlbWFpbmluZyBsaXZlIGNsYW1wIHRyYWNraW5nIGZvciB0 aGUgQUREIG9wZXJhdGlvbi4gKi8KKworCWlmIChjb25kX2FkZCAhPSBRUFVfQ09ORF9BTFdBWVMp CisJCXJldHVybjsKKworCWlmIChvcF9hZGQgPT0gUVBVX0FfTUFYKSB7CisJCS8qIFRyYWNrIGxp dmUgY2xhbXBzIG9mIGEgdmFsdWUgdG8gYSBtaW5pbXVtIG9mIDAgKGluIGVpdGhlcgorCQkgKiBh cmcpLgorCQkgKi8KKwkJaWYgKHNpZyAhPSBRUFVfU0lHX1NNQUxMX0lNTSB8fCByYWRkcl9iICE9 IDAgfHwKKwkJICAgIChhZGRfYSAhPSBRUFVfTVVYX0IgJiYgYWRkX2IgIT0gUVBVX01VWF9CKSkg eworCQkJcmV0dXJuOworCQl9CisKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2ZV9tYXhfY2xhbXBf cmVnc1tscmlfYWRkXSA9IHRydWU7CisJfSBlbHNlIGlmIChvcF9hZGQgPT0gUVBVX0FfTUlOKSB7 CisJCS8qIFRyYWNrIGxpdmUgY2xhbXBzIG9mIGEgdmFsdWUgY2xhbXBlZCB0byBhIG1pbmltdW0g b2YgMCBhbmQKKwkJICogYSBtYXhpbXVtIG9mIHNvbWUgdW5pZm9ybSdzIG9mZnNldC4KKwkJICov CisJCWlmICghYWRkX2FfaXNfbWluXzApCisJCQlyZXR1cm47CisKKwkJaWYgKCEoYWRkX2IgPT0g UVBVX01VWF9BICYmIHJhZGRyX2EgPT0gUVBVX1JfVU5JRikgJiYKKwkJICAgICEoYWRkX2IgPT0g UVBVX01VWF9CICYmIHJhZGRyX2IgPT0gUVBVX1JfVU5JRiAmJgorCQkgICAgICBzaWcgIT0gUVBV X1NJR19TTUFMTF9JTU0pKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl2YWxpZGF0aW9uX3N0YXRl LT5saXZlX21pbl9jbGFtcF9vZmZzZXRzW2xyaV9hZGRdID0KKwkJCXZhbGlkYXRlZF9zaGFkZXIt PnVuaWZvcm1zX3NpemU7CisJfQorfQorCitzdGF0aWMgYm9vbAorY2hlY2tfaW5zdHJ1Y3Rpb25f d3JpdGVzKHVpbnQ2NF90IGluc3QsCisJCQkgc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2lu Zm8gKnZhbGlkYXRlZF9zaGFkZXIsCisJCQkgc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9z dGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSkKK3sKKwl1aW50MzJfdCB3YWRkcl9hZGQgPSBRUFVfR0VU X0ZJRUxEKGluc3QsIFFQVV9XQUREUl9BREQpOworCXVpbnQzMl90IHdhZGRyX211bCA9IFFQVV9H RVRfRklFTEQoaW5zdCwgUVBVX1dBRERSX01VTCk7CisJYm9vbCBvazsKKworCWlmIChpc190bXVf d3JpdGUod2FkZHJfYWRkKSAmJiBpc190bXVfd3JpdGUod2FkZHJfbXVsKSkgeworCQlEUk1fRVJS T1IoIkFERCBhbmQgTVVMIGJvdGggc2V0IHVwIHRleHR1cmVzXG4iKTsKKwkJcmV0dXJuIGZhbHNl OworCX0KKworCW9rID0gKGNoZWNrX3JlZ193cml0ZShpbnN0LCB2YWxpZGF0ZWRfc2hhZGVyLCB2 YWxpZGF0aW9uX3N0YXRlLAorCQkJICAgICAgZmFsc2UpICYmCisJICAgICAgY2hlY2tfcmVnX3dy aXRlKGluc3QsIHZhbGlkYXRlZF9zaGFkZXIsIHZhbGlkYXRpb25fc3RhdGUsCisJCQkgICAgICB0 cnVlKSk7CisKKwl0cmFja19saXZlX2NsYW1wcyhpbnN0LCB2YWxpZGF0ZWRfc2hhZGVyLCB2YWxp ZGF0aW9uX3N0YXRlKTsKKworCXJldHVybiBvazsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX2lu c3RydWN0aW9uX3JlYWRzKHVpbnQ2NF90IGluc3QsCisJCQlzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9z aGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlcikKK3sKKwl1aW50MzJfdCByYWRkcl9hID0gUVBV X0dFVF9GSUVMRChpbnN0LCBRUFVfUkFERFJfQSk7CisJdWludDMyX3QgcmFkZHJfYiA9IFFQVV9H RVRfRklFTEQoaW5zdCwgUVBVX1JBRERSX0IpOworCXVpbnQzMl90IHNpZyA9IFFQVV9HRVRfRklF TEQoaW5zdCwgUVBVX1NJRyk7CisKKwlpZiAocmFkZHJfYSA9PSBRUFVfUl9VTklGIHx8CisJICAg IChyYWRkcl9iID09IFFQVV9SX1VOSUYgJiYgc2lnICE9IFFQVV9TSUdfU01BTExfSU1NKSkgewor CQkvKiBUaGlzIGNhbid0IG92ZXJmbG93IHRoZSB1aW50MzJfdCwgYmVjYXVzZSB3ZSdyZSByZWFk aW5nIDgKKwkJICogYnl0ZXMgb2YgaW5zdHJ1Y3Rpb24gdG8gaW5jcmVtZW50IGJ5IDQgaGVyZSwg c28gd2UnZAorCQkgKiBhbHJlYWR5IGJlIE9PTS4KKwkJICovCisJCXZhbGlkYXRlZF9zaGFkZXIt PnVuaWZvcm1zX3NpemUgKz0gNDsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IHZj NF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKgordmM0X3ZhbGlkYXRlX3NoYWRlcihzdHJ1Y3QgZHJt X2dlbV9jbWFfb2JqZWN0ICpzaGFkZXJfb2JqKQoreworCWJvb2wgZm91bmRfc2hhZGVyX2VuZCA9 IGZhbHNlOworCWludCBzaGFkZXJfZW5kX2lwID0gMDsKKwl1aW50MzJfdCBpcCwgbWF4X2lwOwor CXVpbnQ2NF90ICpzaGFkZXI7CisJc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZh bGlkYXRlZF9zaGFkZXI7CisJc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSB2YWxp ZGF0aW9uX3N0YXRlOworCWludCBpOworCisJbWVtc2V0KCZ2YWxpZGF0aW9uX3N0YXRlLCAwLCBz aXplb2YodmFsaWRhdGlvbl9zdGF0ZSkpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJ dmFsaWRhdGlvbl9zdGF0ZS50bXVfc2V0dXBbaSAvIDRdLnBfb2Zmc2V0W2kgJSA0XSA9IH4wOwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhbGlkYXRpb25fc3RhdGUubGl2ZV9taW5fY2xh bXBfb2Zmc2V0cyk7IGkrKykKKwkJdmFsaWRhdGlvbl9zdGF0ZS5saXZlX21pbl9jbGFtcF9vZmZz ZXRzW2ldID0gfjA7CisKKwlzaGFkZXIgPSBzaGFkZXJfb2JqLT52YWRkcjsKKwltYXhfaXAgPSBz aGFkZXJfb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodWludDY0X3QpOworCisJdmFsaWRhdGVkX3No YWRlciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2YWxpZGF0ZWRfc2hhZGVyKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCF2YWxpZGF0ZWRfc2hhZGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaXAgPSAw OyBpcCA8IG1heF9pcDsgaXArKykgeworCQl1aW50NjRfdCBpbnN0ID0gc2hhZGVyW2lwXTsKKwkJ dWludDMyX3Qgc2lnID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfU0lHKTsKKworCQlzd2l0Y2gg KHNpZykgeworCQljYXNlIFFQVV9TSUdfTk9ORToKKwkJY2FzZSBRUFVfU0lHX1dBSVRfRk9SX1ND T1JFQk9BUkQ6CisJCWNhc2UgUVBVX1NJR19TQ09SRUJPQVJEX1VOTE9DSzoKKwkJY2FzZSBRUFVf U0lHX0NPTE9SX0xPQUQ6CisJCWNhc2UgUVBVX1NJR19MT0FEX1RNVTA6CisJCWNhc2UgUVBVX1NJ R19MT0FEX1RNVTE6CisJCWNhc2UgUVBVX1NJR19QUk9HX0VORDoKKwkJY2FzZSBRUFVfU0lHX1NN QUxMX0lNTToKKwkJCWlmICghY2hlY2tfaW5zdHJ1Y3Rpb25fd3JpdGVzKGluc3QsIHZhbGlkYXRl ZF9zaGFkZXIsCisJCQkJCQkgICAgICAmdmFsaWRhdGlvbl9zdGF0ZSkpIHsKKwkJCQlEUk1fRVJS T1IoIkJhZCB3cml0ZSBhdCBpcCAlZFxuIiwgaXApOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwor CQkJaWYgKCFjaGVja19pbnN0cnVjdGlvbl9yZWFkcyhpbnN0LCB2YWxpZGF0ZWRfc2hhZGVyKSkK KwkJCQlnb3RvIGZhaWw7CisKKwkJCWlmIChzaWcgPT0gUVBVX1NJR19QUk9HX0VORCkgeworCQkJ CWZvdW5kX3NoYWRlcl9lbmQgPSB0cnVlOworCQkJCXNoYWRlcl9lbmRfaXAgPSBpcDsKKwkJCX0K KworCQkJYnJlYWs7CisKKwkJY2FzZSBRUFVfU0lHX0xPQURfSU1NOgorCQkJaWYgKCFjaGVja19p bnN0cnVjdGlvbl93cml0ZXMoaW5zdCwgdmFsaWRhdGVkX3NoYWRlciwKKwkJCQkJCSAgICAgICZ2 YWxpZGF0aW9uX3N0YXRlKSkgeworCQkJCURSTV9FUlJPUigiQmFkIExPQURfSU1NIHdyaXRlIGF0 IGlwICVkXG4iLCBpcCk7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgUVBVIHNpZ25hbCAlZCBhdCAiCisJCQkJ ICAiaW5zdHJ1Y3Rpb24gJWRcbiIsIHNpZywgaXApOworCQkJZ290byBmYWlsOworCQl9CisKKwkJ LyogVGhlcmUgYXJlIHR3byBkZWxheSBzbG90cyBhZnRlciBwcm9ncmFtIGVuZCBpcyBzaWduYWxl ZAorCQkgKiB0aGF0IGFyZSBzdGlsbCBleGVjdXRlZCwgdGhlbiB3ZSdyZSBmaW5pc2hlZC4KKwkJ ICovCisJCWlmIChmb3VuZF9zaGFkZXJfZW5kICYmIGlwID09IHNoYWRlcl9lbmRfaXAgKyAyKQor CQkJYnJlYWs7CisJfQorCisJaWYgKGlwID09IG1heF9pcCkgeworCQlEUk1fRVJST1IoInNoYWRl ciBmYWlsZWQgdG8gdGVybWluYXRlIGJlZm9yZSAiCisJCQkgICJzaGFkZXIgQk8gZW5kIGF0ICV6 ZFxuIiwKKwkJCSAgc2hhZGVyX29iai0+YmFzZS5zaXplKTsKKwkJZ290byBmYWlsOworCX0KKwor CS8qIEFnYWluLCBubyBjaGFuY2Ugb2YgaW50ZWdlciBvdmVyZmxvdyBoZXJlIGJlY2F1c2UgdGhl IHdvcnN0IGNhc2UKKwkgKiBzY2VuYXJpbyBpcyA4IGJ5dGVzIG9mIHVuaWZvcm1zIHBsdXMgaGFu ZGxlcyBwZXIgOC1ieXRlCisJICogaW5zdHJ1Y3Rpb24uCisJICovCisJdmFsaWRhdGVkX3NoYWRl ci0+dW5pZm9ybXNfc3JjX3NpemUgPQorCQkodmFsaWRhdGVkX3NoYWRlci0+dW5pZm9ybXNfc2l6 ZSArCisJCSA0ICogdmFsaWRhdGVkX3NoYWRlci0+bnVtX3RleHR1cmVfc2FtcGxlcyk7CisKKwly ZXR1cm4gdmFsaWRhdGVkX3NoYWRlcjsKKworZmFpbDoKKwlpZiAodmFsaWRhdGVkX3NoYWRlcikg eworCQlrZnJlZSh2YWxpZGF0ZWRfc2hhZGVyLT50ZXh0dXJlX3NhbXBsZXMpOworCQlrZnJlZSh2 YWxpZGF0ZWRfc2hhZGVyKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9pbmNs dWRlL3VhcGkvZHJtL3ZjNF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdmM0X2RybS5oCmluZGV4 IDIxOWQzNGMuLjc0ZGUxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vdmM0X2RybS5o CisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vdmM0X2RybS5oCkBAIC0yOCw5ICsyOCwxMSBAQAogCiAj ZGVmaW5lIERSTV9WQzRfQ1JFQVRFX0JPICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKICNk ZWZpbmUgRFJNX1ZDNF9NTUFQX0JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2Rl ZmluZSBEUk1fVkM0X0NSRUFURV9TSEFERVJfQk8gICAgICAgICAgICAgICAgICAweDA1CiAKICNk ZWZpbmUgRFJNX0lPQ1RMX1ZDNF9DUkVBVEVfQk8gICAgICAgICAgIERSTV9JT1dSKERSTV9DT01N QU5EX0JBU0UgKyBEUk1fVkM0X0NSRUFURV9CTywgc3RydWN0IGRybV92YzRfY3JlYXRlX2JvKQog I2RlZmluZSBEUk1fSU9DVExfVkM0X01NQVBfQk8gICAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NP TU1BTkRfQkFTRSArIERSTV9WQzRfTU1BUF9CTywgc3RydWN0IGRybV92YzRfbW1hcF9ibykKKyNk ZWZpbmUgRFJNX0lPQ1RMX1ZDNF9DUkVBVEVfU0hBREVSX0JPICAgIERSTV9JT1dSKERSTV9DT01N QU5EX0JBU0UgKyBEUk1fVkM0X0NSRUFURV9TSEFERVJfQk8sIHN0cnVjdCBkcm1fdmM0X2NyZWF0 ZV9zaGFkZXJfYm8pCiAKIC8qKgogICogc3RydWN0IGRybV92YzRfY3JlYXRlX2JvIC0gaW9jdGwg YXJndW1lbnQgZm9yIGNyZWF0aW5nIFZDNCBCT3MuCkBAIC02NSw0ICs2NywyNyBAQCBzdHJ1Y3Qg ZHJtX3ZjNF9tbWFwX2JvIHsKIAlfX3U2NCBvZmZzZXQ7CiB9OwogCisvKioKKyAqIHN0cnVjdCBk cm1fdmM0X2NyZWF0ZV9zaGFkZXJfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3IgY3JlYXRpbmcgVkM0 CisgKiBzaGFkZXIgQk9zLgorICoKKyAqIFNpbmNlIGFsbG93aW5nIGEgc2hhZGVyIHRvIGJlIG92 ZXJ3cml0dGVuIHdoaWxlIGl0J3MgYWxzbyBiZWluZworICogZXhlY3V0ZWQgZnJvbSB3b3VsZCBh bGxvdyBwcml2bGVnZSBlc2NhbGF0aW9uLCBzaGFkZXJzIG11c3QgYmUKKyAqIGNyZWF0ZWQgdXNp bmcgdGhpcyBpb2N0bCwgYW5kIHRoZXkgY2FuJ3QgYmUgbW1hcHBlZCBsYXRlci4KKyAqLworc3Ry dWN0IGRybV92YzRfY3JlYXRlX3NoYWRlcl9ibyB7CisJLyogU2l6ZSBvZiB0aGUgZGF0YSBhcmd1 bWVudC4gKi8KKwlfX3UzMiBzaXplOworCS8qIEZsYWdzLCBjdXJyZW50bHkgbXVzdCBiZSAwLiAq LworCV9fdTMyIGZsYWdzOworCisJLyogUG9pbnRlciB0byB0aGUgZGF0YS4gKi8KKwlfX3U2NCBk YXRhOworCisJLyoqIFJldHVybmVkIEdFTSBoYW5kbGUgZm9yIHRoZSBCTy4gKi8KKwlfX3UzMiBo YW5kbGU7CisJLyogUGFkLCBtdXN0IGJlIDAuICovCisJX191MzIgcGFkOworfTsKKwogI2VuZGlm IC8qIF9VQVBJX1ZDNF9EUk1fSF8gKi8KLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=