From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Wajdeczko Subject: [PATCH v2 2/6] drm/i915/uc: Move uC fw helper code into dedicated files Date: Mon, 2 Oct 2017 14:01:05 +0000 Message-ID: <20171002140109.52844-3-michal.wajdeczko@intel.com> References: <20171002140109.52844-1-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9E94F6E244 for ; Mon, 2 Oct 2017 14:01:16 +0000 (UTC) In-Reply-To: <20171002140109.52844-1-michal.wajdeczko@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpcyBhIHByZXJlcXVpc2l0ZSB0byB1bmJsb2NrIG5leHQgc3RlcHMuCgpTaWduZWQtb2Zm LWJ5OiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KQ2M6IEpv b25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KQ2M6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogU2FnYXIgQXJ1biBLYW1ibGUg PHNhZ2FyLmEua2FtYmxlQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFNhZ2FyIEFydW4gS2FtYmxl IDxzYWdhci5hLmthbWJsZUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jICAgIHwg MTU5ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdWMuaCAgICB8ICA2NyArLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdWNfZncuYyB8IDE3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5oIHwgIDk1ICsrKysrKysrKysr KysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRpb25zKCspLCAyMjEgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNf ZncuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3 LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDUxODJlM2QuLjQ4NTBmMjYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC01OSw2ICs1OSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc CiAKICMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0CiBpOTE1 LXkgKz0gaW50ZWxfdWMubyBcCisJICBpbnRlbF91Y19mdy5vIFwKIAkgIGludGVsX2d1Y19jdC5v IFwKIAkgIGludGVsX2d1Y19sb2cubyBcCiAJICBpbnRlbF9ndWNfbG9hZGVyLm8gXApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3VjLmMKaW5kZXggMjc3NDc3OC4uMjAxZDIzZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF91Yy5jCkBAIC0yNiwxOSArMjYsNiBAQAogI2luY2x1ZGUgImludGVsX3VjLmgiCiAjaW5jbHVk ZSA8bGludXgvZmlybXdhcmUuaD4KIAotLyogQ2xlYW5zIHVwIHVDIGZpcm13YXJlIGJ5IHJlbGVh c2luZyB0aGUgZmlybXdhcmUgR0VNIG9iai4KLSAqLwotc3RhdGljIHZvaWQgX19pbnRlbF91Y19m d19maW5pKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKLQotCW9iaiA9IGZldGNoX2FuZF96ZXJvKCZ1Y19mdy0+b2JqKTsKLQlp ZiAob2JqKQotCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0KLQl1Y19mdy0+ZmV0Y2hfc3Rh dHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9ORTsKLX0KLQogLyogUmVzZXQgR3VDIHByb3ZpZGlu ZyB1cyB3aXRoIGZyZXNoIHN0YXRlIGZvciBib3RoIEd1QyBhbmQgSHVDLgogICovCiBzdGF0aWMg aW50IF9faW50ZWxfdWNfcmVzZXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQpAQCAtMTEyLDE1NCArOTksMTYgQEAgdm9pZCBpbnRlbF91Y19pbml0X2Vhcmx5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlndWMtPm5vdGlmeSA9IGdlbjhfZ3VjX3JhaXNl X2lycTsKIH0KIAotc3RhdGljIHZvaWQgZmV0Y2hfdWNfZncoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAotCQkJc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdykKLXsKLQlzdHJ1Y3Qg cGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwotCXN0cnVj dCB1Y19jc3NfaGVhZGVyICpjc3M7Ci0Jc2l6ZV90IHNpemU7Ci0JaW50IGVycjsKLQotCWlmICgh dWNfZnctPnBhdGgpCi0JCXJldHVybjsKLQotCXVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9V Q19GSVJNV0FSRV9QRU5ESU5HOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiYmVmb3JlIHJlcXVlc3Rp bmcgZmlybXdhcmU6IHVDIGZ3IGZldGNoIHN0YXR1cyAlc1xuIiwKLQkJCSBpbnRlbF91Y19md19z dGF0dXNfcmVwcih1Y19mdy0+ZmV0Y2hfc3RhdHVzKSk7Ci0KLQllcnIgPSByZXF1ZXN0X2Zpcm13 YXJlKCZmdywgdWNfZnctPnBhdGgsICZwZGV2LT5kZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZmFp bDsKLQlpZiAoIWZ3KQotCQlnb3RvIGZhaWw7Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCB1 QyBmdyBmcm9tICVzIHN1Y2NlZWRlZCwgZncgJXBcbiIsCi0JCQkgdWNfZnctPnBhdGgsIGZ3KTsK LQotCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBibG9iIGJlZm9yZSBleGFtaW5pbmcgYnVmZmVy IGNvbnRlbnRzICovCi0JaWYgKGZ3LT5zaXplIDwgc2l6ZW9mKHN0cnVjdCB1Y19jc3NfaGVhZGVy KSkgewotCQlEUk1fTk9URSgiRmlybXdhcmUgaGVhZGVyIGlzIG1pc3NpbmdcbiIpOwotCQlnb3Rv IGZhaWw7Ci0JfQotCi0JY3NzID0gKHN0cnVjdCB1Y19jc3NfaGVhZGVyICopZnctPmRhdGE7Ci0K LQkvKiBGaXJtd2FyZSBiaXRzIGFsd2F5cyBzdGFydCBmcm9tIGhlYWRlciAqLwotCXVjX2Z3LT5o ZWFkZXJfb2Zmc2V0ID0gMDsKLQl1Y19mdy0+aGVhZGVyX3NpemUgPSAoY3NzLT5oZWFkZXJfc2l6 ZV9kdyAtIGNzcy0+bW9kdWx1c19zaXplX2R3IC0KLQkJCSAgICAgIGNzcy0+a2V5X3NpemVfZHcg LSBjc3MtPmV4cG9uZW50X3NpemVfZHcpICogc2l6ZW9mKHUzMik7Ci0KLQlpZiAodWNfZnctPmhl YWRlcl9zaXplICE9IHNpemVvZihzdHJ1Y3QgdWNfY3NzX2hlYWRlcikpIHsKLQkJRFJNX05PVEUo IkNTUyBoZWFkZXIgZGVmaW5pdGlvbiBtaXNtYXRjaFxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0K LQkvKiB0aGVuLCB1Q29kZSAqLwotCXVjX2Z3LT51Y29kZV9vZmZzZXQgPSB1Y19mdy0+aGVhZGVy X29mZnNldCArIHVjX2Z3LT5oZWFkZXJfc2l6ZTsKLQl1Y19mdy0+dWNvZGVfc2l6ZSA9IChjc3Mt PnNpemVfZHcgLSBjc3MtPmhlYWRlcl9zaXplX2R3KSAqIHNpemVvZih1MzIpOwotCi0JLyogbm93 IFJTQSAqLwotCWlmIChjc3MtPmtleV9zaXplX2R3ICE9IFVPU19SU0FfU0NSQVRDSF9NQVhfQ09V TlQpIHsKLQkJRFJNX05PVEUoIlJTQSBrZXkgc2l6ZSBpcyBiYWRcbiIpOwotCQlnb3RvIGZhaWw7 Ci0JfQotCXVjX2Z3LT5yc2Ffb2Zmc2V0ID0gdWNfZnctPnVjb2RlX29mZnNldCArIHVjX2Z3LT51 Y29kZV9zaXplOwotCXVjX2Z3LT5yc2Ffc2l6ZSA9IGNzcy0+a2V5X3NpemVfZHcgKiBzaXplb2Yo dTMyKTsKLQotCS8qIEF0IGxlYXN0LCBpdCBzaG91bGQgaGF2ZSBoZWFkZXIsIHVDb2RlIGFuZCBS U0EuIFNpemUgb2YgYWxsIHRocmVlLiAqLwotCXNpemUgPSB1Y19mdy0+aGVhZGVyX3NpemUgKyB1 Y19mdy0+dWNvZGVfc2l6ZSArIHVjX2Z3LT5yc2Ffc2l6ZTsKLQlpZiAoZnctPnNpemUgPCBzaXpl KSB7Ci0JCURSTV9OT1RFKCJNaXNzaW5nIGZpcm13YXJlIGNvbXBvbmVudHNcbiIpOwotCQlnb3Rv IGZhaWw7Ci0JfQotCi0JLyoKLQkgKiBUaGUgR3VDIGZpcm13YXJlIGltYWdlIGhhcyB0aGUgdmVy c2lvbiBudW1iZXIgZW1iZWRkZWQgYXQgYQotCSAqIHdlbGwta25vd24gb2Zmc2V0IHdpdGhpbiB0 aGUgZmlybXdhcmUgYmxvYjsgbm90ZSB0aGF0IG1ham9yIC8gbWlub3IKLQkgKiB2ZXJzaW9uIGFy ZSBUV08gYnl0ZXMgZWFjaCAoaS5lLiB1MTYpLCBhbHRob3VnaCBhbGwgcG9pbnRlcnMgYW5kCi0J ICogb2Zmc2V0cyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBieXRlcyAodTgpLgotCSAqLwotCXN3 aXRjaCAodWNfZnctPnR5cGUpIHsKLQljYXNlIElOVEVMX1VDX0ZXX1RZUEVfR1VDOgotCQkvKiBI ZWFkZXIgYW5kIHVDb2RlIHdpbGwgYmUgbG9hZGVkIHRvIFdPUENNLiBTaXplIG9mIHRoZSB0d28u ICovCi0JCXNpemUgPSB1Y19mdy0+aGVhZGVyX3NpemUgKyB1Y19mdy0+dWNvZGVfc2l6ZTsKLQot CQkvKiBUb3AgMzJrIG9mIFdPUENNIGlzIHJlc2VydmVkICg4SyBzdGFjayArIDI0ayBSQzYgY29u dGV4dCkuICovCi0JCWlmIChzaXplID4gaW50ZWxfZ3VjX3dvcGNtX3NpemUoZGV2X3ByaXYpKSB7 Ci0JCQlEUk1fRVJST1IoIkZpcm13YXJlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gV09QQ01cbiIp OwotCQkJZ290byBmYWlsOwotCQl9Ci0JCXVjX2Z3LT5tYWpvcl92ZXJfZm91bmQgPSBjc3MtPmd1 Yy5zd192ZXJzaW9uID4+IDE2OwotCQl1Y19mdy0+bWlub3JfdmVyX2ZvdW5kID0gY3NzLT5ndWMu c3dfdmVyc2lvbiAmIDB4RkZGRjsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVEVMX1VDX0ZXX1RZUEVf SFVDOgotCQl1Y19mdy0+bWFqb3JfdmVyX2ZvdW5kID0gY3NzLT5odWMuc3dfdmVyc2lvbiA+PiAx NjsKLQkJdWNfZnctPm1pbm9yX3Zlcl9mb3VuZCA9IGNzcy0+aHVjLnN3X3ZlcnNpb24gJiAweEZG RkY7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJVbmtub3duIGZpcm13YXJl IHR5cGUgJWRcbiIsIHVjX2Z3LT50eXBlKTsKLQkJZXJyID0gLUVOT0VYRUM7Ci0JCWdvdG8gZmFp bDsKLQl9Ci0KLQlpZiAodWNfZnctPm1ham9yX3Zlcl93YW50ZWQgPT0gMCAmJiB1Y19mdy0+bWlu b3JfdmVyX3dhbnRlZCA9PSAwKSB7Ci0JCURSTV9OT1RFKCJTa2lwcGluZyAlcyBmaXJtd2FyZSB2 ZXJzaW9uIGNoZWNrXG4iLAotCQkJIGludGVsX3VjX2Z3X3R5cGVfcmVwcih1Y19mdy0+dHlwZSkp OwotCX0gZWxzZSBpZiAodWNfZnctPm1ham9yX3Zlcl9mb3VuZCAhPSB1Y19mdy0+bWFqb3JfdmVy X3dhbnRlZCB8fAotCQkgICB1Y19mdy0+bWlub3JfdmVyX2ZvdW5kIDwgdWNfZnctPm1pbm9yX3Zl cl93YW50ZWQpIHsKLQkJRFJNX05PVEUoIiVzIGZpcm13YXJlIHZlcnNpb24gJWQuJWQsIHJlcXVp cmVkICVkLiVkXG4iLAotCQkJIGludGVsX3VjX2Z3X3R5cGVfcmVwcih1Y19mdy0+dHlwZSksCi0J CQkgdWNfZnctPm1ham9yX3Zlcl9mb3VuZCwgdWNfZnctPm1pbm9yX3Zlcl9mb3VuZCwKLQkJCSB1 Y19mdy0+bWFqb3JfdmVyX3dhbnRlZCwgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQpOwotCQllcnIg PSAtRU5PRVhFQzsKLQkJZ290byBmYWlsOwotCX0KLQotCURSTV9ERUJVR19EUklWRVIoImZpcm13 YXJlIHZlcnNpb24gJWQuJWQgT0sgKG1pbmltdW0gJWQuJWQpXG4iLAotCQkJIHVjX2Z3LT5tYWpv cl92ZXJfZm91bmQsIHVjX2Z3LT5taW5vcl92ZXJfZm91bmQsCi0JCQkgdWNfZnctPm1ham9yX3Zl cl93YW50ZWQsIHVjX2Z3LT5taW5vcl92ZXJfd2FudGVkKTsKLQotCW9iaiA9IGk5MTVfZ2VtX29i amVjdF9jcmVhdGVfZnJvbV9kYXRhKGRldl9wcml2LCBmdy0+ZGF0YSwgZnctPnNpemUpOwotCWlm IChJU19FUlIob2JqKSkgewotCQllcnIgPSBQVFJfRVJSKG9iaik7Ci0JCWdvdG8gZmFpbDsKLQl9 Ci0KLQl1Y19mdy0+b2JqID0gb2JqOwotCXVjX2Z3LT5zaXplID0gZnctPnNpemU7Ci0KLQlEUk1f REVCVUdfRFJJVkVSKCJ1QyBmdyBmZXRjaCBzdGF0dXMgU1VDQ0VTUywgb2JqICVwXG4iLAotCQkJ IHVjX2Z3LT5vYmopOwotCi0JcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JdWNfZnctPmZldGNoX3N0 YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7Ci0JcmV0dXJuOwotCi1mYWlsOgotCURS TV9XQVJOKCJGYWlsZWQgdG8gZmV0Y2ggdmFsaWQgdUMgZmlybXdhcmUgZnJvbSAlcyAoZXJyb3Ig JWQpXG4iLAotCQkgdWNfZnctPnBhdGgsIGVycik7Ci0JRFJNX0RFQlVHX0RSSVZFUigidUMgZncg ZmV0Y2ggc3RhdHVzIEZBSUw7IGVyciAlZCwgZncgJXAsIG9iaiAlcFxuIiwKLQkJCSBlcnIsIGZ3 LCB1Y19mdy0+b2JqKTsKLQotCXJlbGVhc2VfZmlybXdhcmUoZncpOwkJLyogT0sgZXZlbiBpZiBm dyBpcyBOVUxMICovCi0JdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZB SUw7Ci19Ci0KIHZvaWQgaW50ZWxfdWNfaW5pdF9mdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiB7Ci0JZmV0Y2hfdWNfZncoZGV2X3ByaXYsICZkZXZfcHJpdi0+aHVjLmZ3KTsK LQlmZXRjaF91Y19mdyhkZXZfcHJpdiwgJmRldl9wcml2LT5ndWMuZncpOworCWk5MTVfZmV0Y2hf dWNfZncoZGV2X3ByaXYsICZkZXZfcHJpdi0+aHVjLmZ3KTsKKwlpOTE1X2ZldGNoX3VjX2Z3KGRl dl9wcml2LCAmZGV2X3ByaXYtPmd1Yy5mdyk7CiB9CiAKIHZvaWQgaW50ZWxfdWNfZmluaV9mdyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JX19pbnRlbF91Y19md19maW5p KCZkZXZfcHJpdi0+Z3VjLmZ3KTsKLQlfX2ludGVsX3VjX2Z3X2ZpbmkoJmRldl9wcml2LT5odWMu ZncpOworCWludGVsX3VjX2Z3X2ZpbmkoJmRldl9wcml2LT5ndWMuZncpOworCWludGVsX3VjX2Z3 X2ZpbmkoJmRldl9wcml2LT5odWMuZncpOwogfQogCiBzdGF0aWMgaW5saW5lIGk5MTVfcmVnX3Qg Z3VjX3NlbmRfcmVnKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIGkpCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWMuaAppbmRleCAzOGVjODgwLi5kMTExZjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmgK QEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgX0lOVEVMX1VDX0hfCiAjZGVmaW5lIF9JTlRFTF9V Q19IXwogCisjaW5jbHVkZSAiaW50ZWxfdWNfZncuaCIKICNpbmNsdWRlICJpbnRlbF9ndWNfZndp Zi5oIgogI2luY2x1ZGUgImk5MTVfZ3VjX3JlZy5oIgogI2luY2x1ZGUgImludGVsX3JpbmdidWZm ZXIuaCIKQEAgLTcwLDcyICs3MSw2IEBAIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgewogCXVpbnQ2 NF90IHN1Ym1pc3Npb25zW0k5MTVfTlVNX0VOR0lORVNdOwogfTsKIAotZW51bSBpbnRlbF91Y19m d19zdGF0dXMgewotCUlOVEVMX1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKLQlJTlRFTF9VQ19GSVJN V0FSRV9OT05FID0gMCwKLQlJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HLAotCUlOVEVMX1VDX0ZJ Uk1XQVJFX1NVQ0NFU1MKLX07Ci0KLS8qIFVzZXItZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2Yg YW4gZW51bSAqLwotc3RhdGljIGlubGluZQotY29uc3QgY2hhciAqaW50ZWxfdWNfZndfc3RhdHVz X3JlcHIoZW51bSBpbnRlbF91Y19md19zdGF0dXMgc3RhdHVzKQotewotCXN3aXRjaCAoc3RhdHVz KSB7Ci0JY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOgotCQlyZXR1cm4gIkZBSUwiOwotCWNh c2UgSU5URUxfVUNfRklSTVdBUkVfTk9ORToKLQkJcmV0dXJuICJOT05FIjsKLQljYXNlIElOVEVM X1VDX0ZJUk1XQVJFX1BFTkRJTkc6Ci0JCXJldHVybiAiUEVORElORyI7Ci0JY2FzZSBJTlRFTF9V Q19GSVJNV0FSRV9TVUNDRVNTOgotCQlyZXR1cm4gIlNVQ0NFU1MiOwotCX0KLQlyZXR1cm4gIjxp bnZhbGlkPiI7Ci19Ci0KLWVudW0gaW50ZWxfdWNfZndfdHlwZSB7Ci0JSU5URUxfVUNfRldfVFlQ RV9HVUMsCi0JSU5URUxfVUNfRldfVFlQRV9IVUMKLX07Ci0KLS8qIFVzZXItZnJpZW5kbHkgcmVw cmVzZW50YXRpb24gb2YgYW4gZW51bSAqLwotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICppbnRl bF91Y19md190eXBlX3JlcHIoZW51bSBpbnRlbF91Y19md190eXBlIHR5cGUpCi17Ci0Jc3dpdGNo ICh0eXBlKSB7Ci0JY2FzZSBJTlRFTF9VQ19GV19UWVBFX0dVQzoKLQkJcmV0dXJuICJHdUMiOwot CWNhc2UgSU5URUxfVUNfRldfVFlQRV9IVUM6Ci0JCXJldHVybiAiSHVDIjsKLQl9Ci0JcmV0dXJu ICJ1QyI7Ci19Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBk YXRhIG5lZWRlZCBkdXJpbmcgdGhlIHByb2Nlc3MKLSAqIG9mIGZldGNoaW5nLCBjYWNoaW5nLCBh bmQgbG9hZGluZyB0aGUgZmlybXdhcmUgaW1hZ2UgaW50byB0aGUgR3VDLgotICovCi1zdHJ1Y3Qg aW50ZWxfdWNfZncgewotCWNvbnN0IGNoYXIgKnBhdGg7Ci0Jc2l6ZV90IHNpemU7Ci0Jc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQllbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBmZXRj aF9zdGF0dXM7Ci0JZW51bSBpbnRlbF91Y19md19zdGF0dXMgbG9hZF9zdGF0dXM7Ci0KLQl1aW50 MTZfdCBtYWpvcl92ZXJfd2FudGVkOwotCXVpbnQxNl90IG1pbm9yX3Zlcl93YW50ZWQ7Ci0JdWlu dDE2X3QgbWFqb3JfdmVyX2ZvdW5kOwotCXVpbnQxNl90IG1pbm9yX3Zlcl9mb3VuZDsKLQotCWVu dW0gaW50ZWxfdWNfZndfdHlwZSB0eXBlOwotCXVpbnQzMl90IGhlYWRlcl9zaXplOwotCXVpbnQz Ml90IGhlYWRlcl9vZmZzZXQ7Ci0JdWludDMyX3QgcnNhX3NpemU7Ci0JdWludDMyX3QgcnNhX29m ZnNldDsKLQl1aW50MzJfdCB1Y29kZV9zaXplOwotCXVpbnQzMl90IHVjb2RlX29mZnNldDsKLX07 Ci0KIHN0cnVjdCBpbnRlbF9ndWNfbG9nIHsKIAl1aW50MzJfdCBmbGFnczsKIAlzdHJ1Y3QgaTkx NV92bWEgKnZtYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJjODkwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTYtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13 YXJlLmg+CisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworLyogQ2xlYW5zIHVwIHVDIGZpcm13YXJl IGJ5IHJlbGVhc2luZyB0aGUgZmlybXdhcmUgR0VNIG9iai4KKyAqLwordm9pZCBpbnRlbF91Y19m d19maW5pKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpCit7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKworCW9iaiA9IGZldGNoX2FuZF96ZXJvKCZ1Y19mdy0+b2JqKTsKKwlp ZiAob2JqKQorCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwl1Y19mdy0+ZmV0Y2hfc3Rh dHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9ORTsKK30KKwordm9pZCBpOTE1X2ZldGNoX3VjX2Z3 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICAgc3RydWN0IGludGVs X3VjX2Z3ICp1Y19mdykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0u cGRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWNvbnN0IHN0cnVjdCBm aXJtd2FyZSAqZncgPSBOVUxMOworCXN0cnVjdCB1Y19jc3NfaGVhZGVyICpjc3M7CisJc2l6ZV90 IHNpemU7CisJaW50IGVycjsKKworCWlmICghdWNfZnctPnBhdGgpCisJCXJldHVybjsKKworCXVj X2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HOworCisJRFJNX0RF QlVHX0RSSVZFUigiYmVmb3JlIHJlcXVlc3RpbmcgZmlybXdhcmU6IHVDIGZ3IGZldGNoIHN0YXR1 cyAlc1xuIiwKKwkJCSBpbnRlbF91Y19md19zdGF0dXNfcmVwcih1Y19mdy0+ZmV0Y2hfc3RhdHVz KSk7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgdWNfZnctPnBhdGgsICZwZGV2LT5k ZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKwlpZiAoIWZ3KQorCQlnb3RvIGZhaWw7CisK KwlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCB1QyBmdyBmcm9tICVzIHN1Y2NlZWRlZCwgZncgJXBc biIsCisJCQkgdWNfZnctPnBhdGgsIGZ3KTsKKworCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBi bG9iIGJlZm9yZSBleGFtaW5pbmcgYnVmZmVyIGNvbnRlbnRzICovCisJaWYgKGZ3LT5zaXplIDwg c2l6ZW9mKHN0cnVjdCB1Y19jc3NfaGVhZGVyKSkgeworCQlEUk1fTk9URSgiRmlybXdhcmUgaGVh ZGVyIGlzIG1pc3NpbmdcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJY3NzID0gKHN0cnVjdCB1 Y19jc3NfaGVhZGVyICopZnctPmRhdGE7CisKKwkvKiBGaXJtd2FyZSBiaXRzIGFsd2F5cyBzdGFy dCBmcm9tIGhlYWRlciAqLworCXVjX2Z3LT5oZWFkZXJfb2Zmc2V0ID0gMDsKKwl1Y19mdy0+aGVh ZGVyX3NpemUgPSAoY3NzLT5oZWFkZXJfc2l6ZV9kdyAtIGNzcy0+bW9kdWx1c19zaXplX2R3IC0K KwkJCSAgICAgIGNzcy0+a2V5X3NpemVfZHcgLSBjc3MtPmV4cG9uZW50X3NpemVfZHcpICoKKwkJ CSAgICAgc2l6ZW9mKHUzMik7CisKKwlpZiAodWNfZnctPmhlYWRlcl9zaXplICE9IHNpemVvZihz dHJ1Y3QgdWNfY3NzX2hlYWRlcikpIHsKKwkJRFJNX05PVEUoIkNTUyBoZWFkZXIgZGVmaW5pdGlv biBtaXNtYXRjaFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiB0aGVuLCB1Q29kZSAqLwor CXVjX2Z3LT51Y29kZV9vZmZzZXQgPSB1Y19mdy0+aGVhZGVyX29mZnNldCArIHVjX2Z3LT5oZWFk ZXJfc2l6ZTsKKwl1Y19mdy0+dWNvZGVfc2l6ZSA9IChjc3MtPnNpemVfZHcgLSBjc3MtPmhlYWRl cl9zaXplX2R3KSAqIHNpemVvZih1MzIpOworCisJLyogbm93IFJTQSAqLworCWlmIChjc3MtPmtl eV9zaXplX2R3ICE9IFVPU19SU0FfU0NSQVRDSF9NQVhfQ09VTlQpIHsKKwkJRFJNX05PVEUoIlJT QSBrZXkgc2l6ZSBpcyBiYWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCXVjX2Z3LT5yc2Ffb2Zm c2V0ID0gdWNfZnctPnVjb2RlX29mZnNldCArIHVjX2Z3LT51Y29kZV9zaXplOworCXVjX2Z3LT5y c2Ffc2l6ZSA9IGNzcy0+a2V5X3NpemVfZHcgKiBzaXplb2YodTMyKTsKKworCS8qIEF0IGxlYXN0 LCBpdCBzaG91bGQgaGF2ZSBoZWFkZXIsIHVDb2RlIGFuZCBSU0EuIFNpemUgb2YgYWxsIHRocmVl LiAqLworCXNpemUgPSB1Y19mdy0+aGVhZGVyX3NpemUgKyB1Y19mdy0+dWNvZGVfc2l6ZSArIHVj X2Z3LT5yc2Ffc2l6ZTsKKwlpZiAoZnctPnNpemUgPCBzaXplKSB7CisJCURSTV9OT1RFKCJNaXNz aW5nIGZpcm13YXJlIGNvbXBvbmVudHNcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyoKKwkg KiBUaGUgR3VDIGZpcm13YXJlIGltYWdlIGhhcyB0aGUgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQg YXQgYQorCSAqIHdlbGwta25vd24gb2Zmc2V0IHdpdGhpbiB0aGUgZmlybXdhcmUgYmxvYjsgbm90 ZSB0aGF0IG1ham9yIC8gbWlub3IKKwkgKiB2ZXJzaW9uIGFyZSBUV08gYnl0ZXMgZWFjaCAoaS5l LiB1MTYpLCBhbHRob3VnaCBhbGwgcG9pbnRlcnMgYW5kCisJICogb2Zmc2V0cyBhcmUgZGVmaW5l ZCBpbiB0ZXJtcyBvZiBieXRlcyAodTgpLgorCSAqLworCXN3aXRjaCAodWNfZnctPnR5cGUpIHsK KwljYXNlIElOVEVMX1VDX0ZXX1RZUEVfR1VDOgorCQkvKiBIZWFkZXIgYW5kIHVDb2RlIHdpbGwg YmUgbG9hZGVkIHRvIFdPUENNLiBTaXplIG9mIHRoZSB0d28uICovCisJCXNpemUgPSB1Y19mdy0+ aGVhZGVyX3NpemUgKyB1Y19mdy0+dWNvZGVfc2l6ZTsKKworCQkvKiBUb3AgMzJrIG9mIFdPUENN IGlzIHJlc2VydmVkICg4SyBzdGFjayArIDI0ayBSQzYgY29udGV4dCkuICovCisJCWlmIChzaXpl ID4gaW50ZWxfZ3VjX3dvcGNtX3NpemUoZGV2X3ByaXYpKSB7CisJCQlEUk1fRVJST1IoIkZpcm13 YXJlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gV09QQ01cbiIpOworCQkJZ290byBmYWlsOworCQl9 CisJCXVjX2Z3LT5tYWpvcl92ZXJfZm91bmQgPSBjc3MtPmd1Yy5zd192ZXJzaW9uID4+IDE2Owor CQl1Y19mdy0+bWlub3JfdmVyX2ZvdW5kID0gY3NzLT5ndWMuc3dfdmVyc2lvbiAmIDB4RkZGRjsK KwkJYnJlYWs7CisKKwljYXNlIElOVEVMX1VDX0ZXX1RZUEVfSFVDOgorCQl1Y19mdy0+bWFqb3Jf dmVyX2ZvdW5kID0gY3NzLT5odWMuc3dfdmVyc2lvbiA+PiAxNjsKKwkJdWNfZnctPm1pbm9yX3Zl cl9mb3VuZCA9IGNzcy0+aHVjLnN3X3ZlcnNpb24gJiAweEZGRkY7CisJCWJyZWFrOworCisJZGVm YXVsdDoKKwkJRFJNX0VSUk9SKCJVbmtub3duIGZpcm13YXJlIHR5cGUgJWRcbiIsIHVjX2Z3LT50 eXBlKTsKKwkJZXJyID0gLUVOT0VYRUM7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodWNfZnct Pm1ham9yX3Zlcl93YW50ZWQgPT0gMCAmJiB1Y19mdy0+bWlub3JfdmVyX3dhbnRlZCA9PSAwKSB7 CisJCURSTV9OT1RFKCJTa2lwcGluZyAlcyBmaXJtd2FyZSB2ZXJzaW9uIGNoZWNrXG4iLAorCQkJ IGludGVsX3VjX2Z3X3R5cGVfcmVwcih1Y19mdy0+dHlwZSkpOworCX0gZWxzZSBpZiAodWNfZnct Pm1ham9yX3Zlcl9mb3VuZCAhPSB1Y19mdy0+bWFqb3JfdmVyX3dhbnRlZCB8fAorCQkgICB1Y19m dy0+bWlub3JfdmVyX2ZvdW5kIDwgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQpIHsKKwkJRFJNX05P VEUoIiVzIGZpcm13YXJlIHZlcnNpb24gJWQuJWQsIHJlcXVpcmVkICVkLiVkXG4iLAorCQkJIGlu dGVsX3VjX2Z3X3R5cGVfcmVwcih1Y19mdy0+dHlwZSksCisJCQkgdWNfZnctPm1ham9yX3Zlcl9m b3VuZCwgdWNfZnctPm1pbm9yX3Zlcl9mb3VuZCwKKwkJCSB1Y19mdy0+bWFqb3JfdmVyX3dhbnRl ZCwgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQpOworCQllcnIgPSAtRU5PRVhFQzsKKwkJZ290byBm YWlsOworCX0KKworCURSTV9ERUJVR19EUklWRVIoImZpcm13YXJlIHZlcnNpb24gJWQuJWQgT0sg KG1pbmltdW0gJWQuJWQpXG4iLAorCQkJIHVjX2Z3LT5tYWpvcl92ZXJfZm91bmQsIHVjX2Z3LT5t aW5vcl92ZXJfZm91bmQsCisJCQkgdWNfZnctPm1ham9yX3Zlcl93YW50ZWQsIHVjX2Z3LT5taW5v cl92ZXJfd2FudGVkKTsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRh KGRldl9wcml2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCWlmIChJU19FUlIob2JqKSkgeworCQll cnIgPSBQVFJfRVJSKG9iaik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwl1Y19mdy0+b2JqID0gb2Jq OworCXVjX2Z3LT5zaXplID0gZnctPnNpemU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJ1QyBmdyBm ZXRjaCBzdGF0dXMgU1VDQ0VTUywgb2JqICVwXG4iLAorCQkJIHVjX2Z3LT5vYmopOworCisJcmVs ZWFzZV9maXJtd2FyZShmdyk7CisJdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1X QVJFX1NVQ0NFU1M7CisJcmV0dXJuOworCitmYWlsOgorCURSTV9XQVJOKCJGYWlsZWQgdG8gZmV0 Y2ggdmFsaWQgdUMgZmlybXdhcmUgZnJvbSAlcyAoZXJyb3IgJWQpXG4iLAorCQkgdWNfZnctPnBh dGgsIGVycik7CisJRFJNX0RFQlVHX0RSSVZFUigidUMgZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGVy ciAlZCwgZncgJXAsIG9iaiAlcFxuIiwKKwkJCSBlcnIsIGZ3LCB1Y19mdy0+b2JqKTsKKworCXJl bGVhc2VfZmlybXdhcmUoZncpOwkJLyogT0sgZXZlbiBpZiBmdyBpcyBOVUxMICovCisJdWNfZnct PmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWNfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY2NWFi Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuaApA QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKyNpZm5kZWYgX0lOVEVMX1VDX0ZXX0hfCisjZGVmaW5lIF9JTlRFTF9VQ19GV19IXwor CitlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyB7CisJSU5URUxfVUNfRklSTVdBUkVfRkFJTCA9IC0x LAorCUlOVEVMX1VDX0ZJUk1XQVJFX05PTkUgPSAwLAorCUlOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJ TkcsCisJSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUworfTsKKworZW51bSBpbnRlbF91Y19md190 eXBlIHsKKwlJTlRFTF9VQ19GV19UWVBFX0dVQywKKwlJTlRFTF9VQ19GV19UWVBFX0hVQworfTsK KworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRhdGEgbmVlZGVk IGR1cmluZyB0aGUgcHJvY2VzcworICogb2YgZmV0Y2hpbmcsIGNhY2hpbmcsIGFuZCBsb2FkaW5n IHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIHRoZSB1Qy4KKyAqLworc3RydWN0IGludGVsX3VjX2Z3 IHsKKwljb25zdCBjaGFyICpwYXRoOworCXNpemVfdCBzaXplOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7CisJZW51bSBpbnRlbF91Y19md19zdGF0dXMgZmV0Y2hfc3RhdHVzOwor CWVudW0gaW50ZWxfdWNfZndfc3RhdHVzIGxvYWRfc3RhdHVzOworCisJdWludDE2X3QgbWFqb3Jf dmVyX3dhbnRlZDsKKwl1aW50MTZfdCBtaW5vcl92ZXJfd2FudGVkOworCXVpbnQxNl90IG1ham9y X3Zlcl9mb3VuZDsKKwl1aW50MTZfdCBtaW5vcl92ZXJfZm91bmQ7CisKKwllbnVtIGludGVsX3Vj X2Z3X3R5cGUgdHlwZTsKKwl1aW50MzJfdCBoZWFkZXJfc2l6ZTsKKwl1aW50MzJfdCBoZWFkZXJf b2Zmc2V0OworCXVpbnQzMl90IHJzYV9zaXplOworCXVpbnQzMl90IHJzYV9vZmZzZXQ7CisJdWlu dDMyX3QgdWNvZGVfc2l6ZTsKKwl1aW50MzJfdCB1Y29kZV9vZmZzZXQ7Cit9OworCitzdGF0aWMg aW5saW5lCitjb25zdCBjaGFyICppbnRlbF91Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX3Vj X2Z3X3N0YXR1cyBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIElOVEVMX1VD X0ZJUk1XQVJFX0ZBSUw6CisJCXJldHVybiAiRkFJTCI7CisJY2FzZSBJTlRFTF9VQ19GSVJNV0FS RV9OT05FOgorCQlyZXR1cm4gIk5PTkUiOworCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfUEVORElO RzoKKwkJcmV0dXJuICJQRU5ESU5HIjsKKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M6 CisJCXJldHVybiAiU1VDQ0VTUyI7CisJfQorCXJldHVybiAiPGludmFsaWQ+IjsKK30KKworc3Rh dGljIGlubGluZSBjb25zdCBjaGFyICppbnRlbF91Y19md190eXBlX3JlcHIoZW51bSBpbnRlbF91 Y19md190eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJTlRFTF9VQ19GV19U WVBFX0dVQzoKKwkJcmV0dXJuICJHdUMiOworCWNhc2UgSU5URUxfVUNfRldfVFlQRV9IVUM6CisJ CXJldHVybiAiSHVDIjsKKwl9CisJcmV0dXJuICJ1QyI7Cit9CisKK3ZvaWQgaW50ZWxfdWNfZndf ZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KTsKK3ZvaWQgaTkxNV9mZXRjaF91Y19mdyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgIHN0cnVjdCBpbnRlbF91 Y19mdyAqdWNfZncpOworCisjZW5kaWYKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK