From mboxrd@z Thu Jan 1 00:00:00 1970 From: Umesh Nerlige Ramappa Subject: [PATCH v2 2/3] drm/i915/tgl: Add perf support on TGL Date: Thu, 17 Oct 2019 00:20:08 -0700 Message-ID: <20191017072009.31539-2-umesh.nerlige.ramappa@intel.com> References: <20191017072009.31539-1-umesh.nerlige.ramappa@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id E8B356E578 for ; Thu, 17 Oct 2019 07:20:10 +0000 (UTC) In-Reply-To: <20191017072009.31539-1-umesh.nerlige.ramappa@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 Cc: Lucas De Marchi , Chris Wilson List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VGhlIGRlc2lnbiBvZiB0aGUgT0EgdW5pdCBoYXMgYmVlbiBzcGxpdCBpbnRvIHNldmVyYWwgdW5p dHMuIFdlIG5vdwpoYXZlIGEgZ2xvYmFsIHVuaXQgKE9BRykgYW5kIGEgcmVuZGVyIHNwZWNpZmlj IHVuaXQgKE9BUikuIFRoaXMgbGVhZHMKdG8gc29tZSBjaGFuZ2VzIG9uIGhvdyB3ZSBwcm9ncmFt IHRoaW5ncy4gU29tZSBkZXRhaWxzIDoKCk9BUjoKICAtIGhhcyBpdHMgb3duIHNldCBvZiBjb3Vu dGVyIHJlZ2lzdGVycywgdGhleSBhcmUgcGVyLWNvbnRleHQKICAgIHNhdmVkL3Jlc3RvcmVkCiAg LSBjb3VudGVycyBhcmUgbm90IHdyaXR0ZW4gdG8gdGhlIGNpcmN1bGFyIE9BIGJ1ZmZlcgogIC0g YSBzbmFwc2hvdCBvZiB0aGUgY291bnRlcnMgY2FuIGJlIGFjcXVpcmVkIHdpdGgKICAgIE1JX1JF Q09SRF9QRVJGX0NPVU5ULCBvciBhIHNpbmdsZSBjb3VudGVyIGNhbiBiZSByZWFkIHdpdGgKICAg IE1JX1NUT1JFX1JFR0lTVEVSX01FTS4KCk9BRzoKICAtIGhhcyBnbG9iYWwgY291bnRlcnMgdGhh dCBpbmNyZW1lbnQgYWNyb3NzIGNvbnRleHQgc3dpdGNoZXMKICAtIGNvdW50ZXJzIGFyZSB3cml0 dGVuIGludG8gdGhlIGNpcmN1bGFyIE9BIGJ1ZmZlciAoaWYgcmVxdWVzdGVkKQoKdjI6IEZpeCBj aGVja3BhdGNoIHdhcm5pbmdzIG9uIGNvZGUgc3R5bGUgKEx1Y2FzKQp2MzogKFVtZXNoKQogIC0g VXBkYXRlIHJlZ2lzdGVyIGZyb20gd2hpY2ggdGFpbCwgc3RhdHVzIGFuZCBoZWFkIGFyZSByZWFk CiAgLSBVcGRhdGUgbG9naWMgdG8gc2FtcGxlIGNvbnRleHQgcmVwb3J0cwogIC0gVXBkYXRlIHdo aXRlbGlzdCBtdXggYW5kIGIgY291bnRlciByZWdzCgpCU3BlYzogMjg3MjcsIDMwMDIxCgpTaWdu ZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5j b20+ClNpZ25lZC1vZmYtYnk6IFVtZXNoIE5lcmxpZ2UgUmFtYXBwYSA8dW1lc2gubmVybGlnZS5y YW1hcHBhQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5k ZW1hcmNoaUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAg ICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgICAgICB8IDI4 MCArKysrKysrKysrKysrKysrKysrKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaCAgICAgICB8IDEwMyArKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9vYS9pOTE1 X29hX3RnbC5jIHwgMTIxICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9vYS9pOTE1 X29hX3RnbC5oIHwgIDE2ICsrCiA1IGZpbGVzIGNoYW5nZWQsIDQ5MiBpbnNlcnRpb25zKCspLCAz MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9v YS9pOTE1X29hX3RnbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv b2EvaTkxNV9vYV90Z2wuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZTc5MWQ5MzIzYjUxLi4w ZWM5ZmVlNThiYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0yNDIsNyArMjQyLDggQEAgaTkx NS15ICs9IFwKIAlvYS9pOTE1X29hX2NmbGd0Mi5vIFwKIAlvYS9pOTE1X29hX2NmbGd0My5vIFwK IAlvYS9pOTE1X29hX2NubC5vIFwKLQlvYS9pOTE1X29hX2ljbC5vCisJb2EvaTkxNV9vYV9pY2wu byBcCisJb2EvaTkxNV9vYV90Z2wubwogaTkxNS15ICs9IGk5MTVfcGVyZi5vCiAKICMgUG9zdC1t b3J0ZW0gZGVidWcgYW5kIEdQVSBoYW5nIHN0YXRlIGNhcHR1cmUKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w ZXJmLmMKaW5kZXggOTE3MDc1NThhMGY1Li5hYmMyYjdhNmRjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jCkBAIC0yMTcsNiArMjE3LDcgQEAKICNpbmNsdWRlICJvYS9pOTE1X29hX2NmbGd0 My5oIgogI2luY2x1ZGUgIm9hL2k5MTVfb2FfY25sLmgiCiAjaW5jbHVkZSAib2EvaTkxNV9vYV9p Y2wuaCIKKyNpbmNsdWRlICJvYS9pOTE1X29hX3RnbC5oIgogCiAvKiBIVyByZXF1aXJlcyB0aGlz IHRvIGJlIGEgcG93ZXIgb2YgdHdvLCBiZXR3ZWVuIDEyOGsgYW5kIDE2TSwgdGhvdWdoIGRyaXZl cgogICogaXMgY3VycmVudGx5IGdlbmVyYWxseSBkZXNpZ25lZCBhc3N1bWluZyB0aGUgbGFyZ2Vz dCAxNk0gc2l6ZSBpcyB1c2VkIHN1Y2gKQEAgLTI5Miw3ICsyOTMsOCBAQCBzdGF0aWMgdTMyIGk5 MTVfcGVyZl9zdHJlYW1fcGFyYW5vaWQgPSB0cnVlOwogI2RlZmluZSBJTlZBTElEX0NUWF9JRCAw eGZmZmZmZmZmCiAKIC8qIE9uIEdlbjgrIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcmVkIE9BIHJlcG9y dHMgaW5jbHVkZSBhICdyZWFzb24nIGZpZWxkLi4uICovCi0jZGVmaW5lIE9BUkVQT1JUX1JFQVNP Tl9NQVNLICAgICAgICAgICAweDNmCisjZGVmaW5lIE9BUkVQT1JUX1JFQVNPTl9NQVNLICAgICAg ICAgICAoSVNfR0VOKHN0cmVhbS0+cGVyZi0+aTkxNSwgMTIpID8gXAorCQkJCQkweDdmIDogMHgz ZikKICNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX1NISUZUICAgICAgICAgIDE5CiAjZGVmaW5lIE9B UkVQT1JUX1JFQVNPTl9USU1FUiAgICAgICAgICAoMTw8MCkKICNkZWZpbmUgT0FSRVBPUlRfUkVB U09OX0NUWF9TV0lUQ0ggICAgICgxPDwzKQpAQCAtMzM4LDYgKzM0MCwxMCBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGk5MTVfb2FfZm9ybWF0IGdlbjhfcGx1c19vYV9mb3JtYXRzW0k5MTVfT0FfRk9S TUFUX01BWF0gPSB7CiAJW0k5MTVfT0FfRk9STUFUX0M0X0I4XQkJICAgID0geyA3LCA2NCB9LAog fTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X29hX2Zvcm1hdCBnZW4xMl9vYV9mb3JtYXRz W0k5MTVfT0FfRk9STUFUX01BWF0gPSB7CisJW0k5MTVfT0FfRk9STUFUX0EzMnU0MF9BNHUzMl9C OF9DOF0gPSB7IDUsIDI1NiB9LAorfTsKKwogI2RlZmluZSBTQU1QTEVfT0FfUkVQT1JUICAgICAg KDE8PDApCiAKIC8qKgpAQCAtNDE4LDYgKzQyNCwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX29hX2Nv bmZpZ19ibyhzdHJ1Y3QgaTkxNV9vYV9jb25maWdfYm8gKm9hX2JvKQogCWtmcmVlKG9hX2JvKTsK IH0KIAorc3RhdGljIHUzMiBnZW4xMl9vYV9od190YWlsX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0t PnVuY29yZTsKKworCXJldHVybiBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjEyX09BR19P QVRBSUxQVFIpICYKKwkgICAgICAgR0VOMTJfT0FHX09BVEFJTFBUUl9NQVNLOworfQorCiBzdGF0 aWMgdTMyIGdlbjhfb2FfaHdfdGFpbF9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCiB7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT51bmNvcmU7CkBA IC01MzgsNyArNTUyLDcgQEAgc3RhdGljIGJvb2wgb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJCQkJYWdpbmdfdGFpbCA9IGh3X3RhaWw7 CiAJCQlzdHJlYW0tPm9hX2J1ZmZlci5hZ2luZ190aW1lc3RhbXAgPSBub3c7CiAJCX0gZWxzZSB7 Ci0JCQlEUk1fRVJST1IoIklnbm9yaW5nIHNwdXJpb3VzIG91dCBvZiByYW5nZSBPQSBidWZmZXIg dGFpbCBwb2ludGVyID0gJXVcbiIsCisJCQlEUk1fRVJST1IoIklnbm9yaW5nIHNwdXJpb3VzIG91 dCBvZiByYW5nZSBPQSBidWZmZXIgdGFpbCBwb2ludGVyID0gJXhcbiIsCiAJCQkJICBod190YWls KTsKIAkJfQogCX0KQEAgLTc1Nyw3ICs3NzEsOCBAQCBzdGF0aWMgaW50IGdlbjhfYXBwZW5kX29h X3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJICogTm90ZTogdGhh dCB3ZSBkb24ndCBjbGVhciB0aGUgdmFsaWRfY3R4X2JpdCBzbyB1c2Vyc3BhY2UgY2FuCiAJCSAq IHVuZGVyc3RhbmQgdGhhdCB0aGUgSUQgaGFzIGJlZW4gc3F1YXNoZWQgYnkgdGhlIGtlcm5lbC4K IAkJICovCi0JCWlmICghKHJlcG9ydDMyWzBdICYgc3RyZWFtLT5wZXJmLT5nZW44X3ZhbGlkX2N0 eF9iaXQpKQorCQlpZiAoIShyZXBvcnQzMlswXSAmIHN0cmVhbS0+cGVyZi0+Z2VuOF92YWxpZF9j dHhfYml0KSAmJgorCQkgICAgSU5URUxfR0VOKHN0cmVhbS0+cGVyZi0+aTkxNSkgPD0gMTEpCiAJ CQljdHhfaWQgPSByZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RYX0lEOwogCiAJCS8qCkBAIC04MjQs NiArODM5LDExIEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCX0KIAogCWlmIChzdGFydF9vZmZzZXQgIT0gKm9mZnNl dCkgeworCQlpOTE1X3JlZ190IG9haGVhZHB0cjsKKworCQlvYWhlYWRwdHIgPSBJU19HRU4oc3Ry ZWFtLT5wZXJmLT5pOTE1LCAxMikgPworCQkJICAgIEdFTjEyX09BR19PQUhFQURQVFIgOiBHRU44 X09BSEVBRFBUUjsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RyZWFtLT5vYV9idWZmZXIucHRy X2xvY2ssIGZsYWdzKTsKIAogCQkvKgpAQCAtODMxLDkgKzg1MSw4IEBAIHN0YXRpYyBpbnQgZ2Vu OF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkg KiByZWxhdGl2ZSB0byBvYV9idWZfYmFzZSBzbyBwdXQgYmFjayBoZXJlLi4uCiAJCSAqLwogCQlo ZWFkICs9IGd0dF9vZmZzZXQ7Ci0KLQkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOOF9P QUhFQURQVFIsCi0JCQkJICAgaGVhZCAmIEdFTjhfT0FIRUFEUFRSX01BU0spOworCQlpbnRlbF91 bmNvcmVfd3JpdGUodW5jb3JlLCBvYWhlYWRwdHIsCisJCQkJICAgaGVhZCAmIEdFTjEyX09BR19P QUhFQURQVFJfTUFTSyk7CiAJCXN0cmVhbS0+b2FfYnVmZmVyLmhlYWQgPSBoZWFkOwogCiAJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0cmVhbS0+b2FfYnVmZmVyLnB0cl9sb2NrLCBmbGFncyk7 CkBAIC04NjksMTIgKzg4OCwxNiBAQCBzdGF0aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogewogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHN0cmVhbS0+dW5jb3JlOwogCXUzMiBvYXN0YXR1czsKKwlpOTE1X3JlZ190IG9hc3RhdHVzX3Jl ZzsKIAlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04oIXN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyKSkK IAkJcmV0dXJuIC1FSU87CiAKLQlvYXN0YXR1cyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwg R0VOOF9PQVNUQVRVUyk7CisJb2FzdGF0dXNfcmVnID0gSVNfR0VOKHN0cmVhbS0+cGVyZi0+aTkx NSwgMTIpID8KKwkJICAgICAgIEdFTjEyX09BR19PQVNUQVRVUyA6IEdFTjhfT0FTVEFUVVM7CisK KwlvYXN0YXR1cyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgb2FzdGF0dXNfcmVnKTsKIAog CS8qCiAJICogV2UgdHJlYXQgT0FCVUZGRVJfT1ZFUkZMT1cgYXMgYSBzaWduaWZpY2FudCBlcnJv cjoKQEAgLTkwNiw3ICs5MjksNyBAQCBzdGF0aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkgKiBOb3RlOiAub2FfZW5hYmxlKCkgaXMgZXhwZWN0 ZWQgdG8gcmUtaW5pdCB0aGUgb2FidWZmZXIgYW5kCiAJCSAqIHJlc2V0IEdFTjhfT0FTVEFUVVMg Zm9yIHVzCiAJCSAqLwotCQlvYXN0YXR1cyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VO OF9PQVNUQVRVUyk7CisJCW9hc3RhdHVzID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBvYXN0 YXR1c19yZWcpOwogCX0KIAogCWlmIChvYXN0YXR1cyAmIEdFTjhfT0FTVEFUVVNfUkVQT1JUX0xP U1QpIHsKQEAgLTkxNCw3ICs5MzcsNyBAQCBzdGF0aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCSAgICAgICBEUk1fSTkxNV9QRVJGX1JFQ09S RF9PQV9SRVBPUlRfTE9TVCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpbnRlbF91 bmNvcmVfd3JpdGUodW5jb3JlLCBHRU44X09BU1RBVFVTLAorCQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBvYXN0YXR1c19yZWcsCiAJCQkJICAgb2FzdGF0dXMgJiB+R0VOOF9PQVNUQVRVU19S RVBPUlRfTE9TVCk7CiAJfQogCkBAIC0xNDg4LDYgKzE1MTEsNjcgQEAgc3RhdGljIHZvaWQgZ2Vu OF9pbml0X29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCXN0cmVh bS0+cG9sbGluID0gZmFsc2U7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbjEyX2luaXRfb2FfYnVmZmVy KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gc3RyZWFtLT51bmNvcmU7CisJdTMyIGd0dF9vZmZzZXQgPSBpOTE1X2dndHRf b2Zmc2V0KHN0cmVhbS0+b2FfYnVmZmVyLnZtYSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZzdHJlYW0tPm9hX2J1ZmZlci5wdHJfbG9jaywgZmxhZ3MpOwor CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTJfT0FHX09BU1RBVFVTLCAwKTsKKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMl9PQUdfT0FIRUFEUFRSLAorCQkJICAgZ3R0 X29mZnNldCAmIEdFTjEyX09BR19PQUhFQURQVFJfTUFTSyk7CisJc3RyZWFtLT5vYV9idWZmZXIu aGVhZCA9IGd0dF9vZmZzZXQ7CisKKwkvKgorCSAqIFBSTSBzYXlzOgorCSAqCisJICogICJUaGlz IE1NSU8gbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBPQVRBSUxQVFIKKwkgKiAgcmVnaXN0ZXIgYW5k IGFmdGVyIHRoZSBPQUhFQURQVFIgcmVnaXN0ZXIuIFRoaXMgaXMKKwkgKiAgdG8gZW5hYmxlIHBy b3BlciBmdW5jdGlvbmFsaXR5IG9mIHRoZSBvdmVyZmxvdworCSAqICBiaXQuIgorCSAqLworCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjEyX09BR19PQUJVRkZFUiwgZ3R0X29mZnNldCB8 CisJCQkgICBPQUJVRkZFUl9TSVpFXzE2TSB8IEdFTjhfT0FCVUZGRVJfTUVNX1NFTEVDVF9HR1RU KTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMl9PQUdfT0FUQUlMUFRSLAorCQkJ ICAgZ3R0X29mZnNldCAmIEdFTjEyX09BR19PQVRBSUxQVFJfTUFTSyk7CisKKwkvKiBNYXJrIHRo YXQgd2UgbmVlZCB1cGRhdGVkIHRhaWwgcG9pbnRlcnMgdG8gcmVhZCBmcm9tLi4uICovCisJc3Ry ZWFtLT5vYV9idWZmZXIudGFpbHNbMF0ub2Zmc2V0ID0gSU5WQUxJRF9UQUlMX1BUUjsKKwlzdHJl YW0tPm9hX2J1ZmZlci50YWlsc1sxXS5vZmZzZXQgPSBJTlZBTElEX1RBSUxfUFRSOworCisJLyoK KwkgKiBSZXNldCBzdGF0ZSB1c2VkIHRvIHJlY29nbmlzZSBjb250ZXh0IHN3aXRjaGVzLCBhZmZl Y3Rpbmcgd2hpY2gKKwkgKiByZXBvcnRzIHdlIHdpbGwgZm9yd2FyZCB0byB1c2Vyc3BhY2Ugd2hp bGUgZmlsdGVyaW5nIGZvciBhIHNpbmdsZQorCSAqIGNvbnRleHQuCisJICovCisJc3RyZWFtLT5v YV9idWZmZXIubGFzdF9jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnN0cmVhbS0+b2FfYnVmZmVyLnB0cl9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAq IE5COiBhbHRob3VnaCB0aGUgT0EgYnVmZmVyIHdpbGwgaW5pdGlhbGx5IGJlIGFsbG9jYXRlZAor CSAqIHplcm9lZCB2aWEgc2htZnMgKGFuZCBzbyB0aGlzIG1lbXNldCBpcyByZWR1bmRhbnQgd2hl bgorCSAqIGZpcnN0IGFsbG9jYXRpbmcpLCB3ZSBtYXkgcmUtaW5pdCB0aGUgT0EgYnVmZmVyLCBl aXRoZXIKKwkgKiB3aGVuIHJlLWVuYWJsaW5nIGEgc3RyZWFtIG9yIGluIGVycm9yL3Jlc2V0IHBh dGhzLgorCSAqCisJICogVGhlIHJlYXNvbiB3ZSBjbGVhciB0aGUgYnVmZmVyIGZvciBlYWNoIHJl LWluaXQgaXMgZm9yIHRoZQorCSAqIHNhbml0eSBjaGVjayBpbiBnZW44X2FwcGVuZF9vYV9yZXBv cnRzKCkgdGhhdCBsb29rcyBhdCB0aGUKKwkgKiByZWFzb24gZmllbGQgdG8gbWFrZSBzdXJlIGl0 J3Mgbm9uLXplcm8gd2hpY2ggcmVsaWVzIG9uCisJICogdGhlIGFzc3VtcHRpb24gdGhhdCBuZXcg cmVwb3J0cyBhcmUgYmVpbmcgd3JpdHRlbiB0byB6ZXJvZWQKKwkgKiBtZW1vcnkuLi4KKwkgKi8K KwltZW1zZXQoc3RyZWFtLT5vYV9idWZmZXIudmFkZHIsIDAsCisJICAgICAgIHN0cmVhbS0+b2Ff YnVmZmVyLnZtYS0+c2l6ZSk7CisKKwkvKgorCSAqIE1heWJlIG1ha2UgLT5wb2xsaW4gcGVyLXN0 cmVhbSBzdGF0ZSBpZiB3ZSBzdXBwb3J0IG11bHRpcGxlCisJICogY29uY3VycmVudCBzdHJlYW1z IGluIHRoZSBmdXR1cmUuCisJICovCisJc3RyZWFtLT5wb2xsaW4gPSBmYWxzZTsKK30KKwogc3Rh dGljIGludCBhbGxvY19vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYm87CkBAIC0xOTk0LDcgKzIwNzgsNyBA QCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoY29uc3Qgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAogCQkoc3RyZWFtLT5wZXJpb2RpYyA/IEdFTjhfT0FfVElNRVJfRU5BQkxFIDogMCkg fAogCQlHRU44X09BX0NPVU5URVJfUkVTVU1FOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZmxleF9yZWdzKTsgaSsrKQorCWZvciAoaSA9IDA7ICEhY3R4X2ZsZXhldTAgJiYgaSA8IEFS UkFZX1NJWkUoZmxleF9yZWdzKTsgaSsrKQogCQlyZWdfc3RhdGVbY3R4X2ZsZXhldTAgKyBpICog MiArIDFdID0KIAkJCW9hX2NvbmZpZ19mbGV4X3JlZyhzdHJlYW0tPm9hX2NvbmZpZywgZmxleF9y ZWdzW2ldKTsKIApAQCAtMjE1MSw4ICsyMjM1LDggQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3Vy ZV9jb250ZXh0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCiAgKgogICogTm90ZTogaXQn cyBvbmx5IHRoZSBSQ1MvUmVuZGVyIGNvbnRleHQgdGhhdCBoYXMgYW55IE9BIHN0YXRlLgogICov Ci1zdGF0aWMgaW50IGdlbjhfY29uZmlndXJlX2FsbF9jb250ZXh0cyhzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9vYV9jb25maWcg Km9hX2NvbmZpZykKK3N0YXRpYyBpbnQgbHJjX2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9v YV9jb25maWcgKm9hX2NvbmZpZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHN0cmVhbS0+cGVyZi0+aTkxNTsKIAkvKiBUaGUgTU1JTyBvZmZzZXRzIGZvciBGbGV4IEVVIHJl Z2lzdGVycyBhcmVuJ3QgY29udGlndW91cyAqLwpAQCAtMjE2NCwxMSArMjI0OCw5IEBAIHN0YXRp YyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCiAJCQlDVFhfUl9QV1JfQ0xLX1NUQVRFLAogCQl9LAogCQl7Ci0JCQlHRU44X09B Q1RYQ09OVFJPTCwKKwkJCUlTX0dFTihpOTE1LCAxMikgPworCQkJR0VOMTJfT0FSX09BQ09OVFJP TCA6IEdFTjhfT0FDVFhDT05UUk9MLAogCQkJc3RyZWFtLT5wZXJmLT5jdHhfb2FjdHhjdHJsX29m ZnNldCArIDEsCi0JCQkoKHN0cmVhbS0+cGVyaW9kX2V4cG9uZW50IDw8IEdFTjhfT0FfVElNRVJf UEVSSU9EX1NISUZUKSB8Ci0JCQkgKHN0cmVhbS0+cGVyaW9kaWMgPyBHRU44X09BX1RJTUVSX0VO QUJMRSA6IDApIHwKLQkJCSBHRU44X09BX0NPVU5URVJfUkVTVU1FKQogCQl9LAogCQl7IEVVX1BF UkZfQ05UTDAsIGN0eF9mbGV4ZXVOKDApIH0sCiAJCXsgRVVfUEVSRl9DTlRMMSwgY3R4X2ZsZXhl dU4oMSkgfSwKQEAgLTIxODEsOSArMjI2MywyMyBAQCBzdGF0aWMgaW50IGdlbjhfY29uZmlndXJl X2FsbF9jb250ZXh0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogI3VuZGVmIGN0 eF9mbGV4ZXVOCiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsICpjbjsKKwlzaXplX3QgYXJyYXlfc2l6ZSA9IElTX0dFTihpOTE1 LCAxMikgPyAyIDogQVJSQVlfU0laRShyZWdzKTsKIAlpbnQgaSwgZXJyOwogCi0JZm9yIChpID0g MjsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykKKwlpZiAoSVNfR0VOKGk5MTUsIDEyKSkgewor CQl1MzIgZm9ybWF0ID0gc3RyZWFtLT5vYV9idWZmZXIuZm9ybWF0OworCisJCXJlZ3NbMV0udmFs dWUgPQorCQkJKGZvcm1hdCA8PCBHRU4xMl9PQVJfT0FDT05UUk9MX0NPVU5URVJfRk9STUFUX1NI SUZUKSB8CisJCQkob2FfY29uZmlnID8gR0VOMTJfT0FSX09BQ09OVFJPTF9DT1VOVEVSX0VOQUJM RSA6IDApOworCX0gZWxzZSB7CisJCXJlZ3NbMV0udmFsdWUgPQorCQkJKHN0cmVhbS0+cGVyaW9k X2V4cG9uZW50IDw8IEdFTjhfT0FfVElNRVJfUEVSSU9EX1NISUZUKSB8CisJCQkoc3RyZWFtLT5w ZXJpb2RpYyA/IEdFTjhfT0FfVElNRVJfRU5BQkxFIDogMCkgfAorCQkJR0VOOF9PQV9DT1VOVEVS X1JFU1VNRTsKKwl9CisKKwlmb3IgKGkgPSAyOyAhIWN0eF9mbGV4ZXUwICYmIGkgPCBhcnJheV9z aXplOyBpKyspCiAJCXJlZ3NbaV0udmFsdWUgPSBvYV9jb25maWdfZmxleF9yZWcob2FfY29uZmln LCByZWdzW2ldLnJlZyk7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdHJlYW0tPnBlcmYtPmxv Y2spOwpAQCAtMjIxNCw3ICsyMzEwLDcgQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxf Y29udGV4dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAogCQlzcGluX3VubG9j aygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwogCi0JCWVyciA9IGdlbjhfY29uZmlndXJlX2Nv bnRleHQoY3R4LCByZWdzLCBBUlJBWV9TSVpFKHJlZ3MpKTsKKwkJZXJyID0gZ2VuOF9jb25maWd1 cmVfY29udGV4dChjdHgsIHJlZ3MsIGFycmF5X3NpemUpOwogCQlpZiAoZXJyKSB7CiAJCQlpOTE1 X2dlbV9jb250ZXh0X3B1dChjdHgpOwogCQkJcmV0dXJuIGVycjsKQEAgLTIyMzksNyArMjMzNSw3 IEBAIHN0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCiAKIAkJcmVnc1swXS52YWx1ZSA9IGludGVsX3NzZXVfbWFrZV9y cGNzKGk5MTUsICZjZS0+c3NldSk7CiAKLQkJZXJyID0gZ2VuOF9tb2RpZnlfc2VsZihjZSwgcmVn cywgQVJSQVlfU0laRShyZWdzKSk7CisJCWVyciA9IGdlbjhfbW9kaWZ5X3NlbGYoY2UsIHJlZ3Ms IGFycmF5X3NpemUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yMjg3LDcg KzIzODMsNDUgQEAgc3RhdGljIGludCBnZW44X2VuYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJICogdG8gbWFrZSBzdXJlIGFsbCBzbGljZXMvc3Vic2xp Y2VzIGFyZSBPTiBiZWZvcmUgd3JpdGluZyB0byBOT0EKIAkgKiByZWdpc3RlcnMuCiAJICovCi0J cmV0ID0gZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cmVhbSwgb2FfY29uZmlnKTsKKwly ZXQgPSBscmNfY29uZmlndXJlX2FsbF9jb250ZXh0cyhzdHJlYW0sIG9hX2NvbmZpZyk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBlbWl0X29hX2NvbmZpZyhzdHJlYW0sIG9h X2NvbnRleHQoc3RyZWFtKSk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuMTJfZW5hYmxlX21ldHJpY19z ZXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUgPSBzdHJlYW0tPnVuY29yZTsKKwlzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKm9h X2NvbmZpZyA9IHN0cmVhbS0+b2FfY29uZmlnOworCWJvb2wgcGVyaW9kaWMgPSBzdHJlYW0tPnBl cmlvZGljOworCXUzMiBwZXJpb2RfZXhwb25lbnQgPSBzdHJlYW0tPnBlcmlvZF9leHBvbmVudDsK KwlpbnQgcmV0OworCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTJfT0FHX09BX0RF QlVHLAorCQkJICAgLyogRGlzYWJsZSBjbGsgcmF0aW8gcmVwb3J0cywgbGlrZSBwcmV2aW91cyBH ZW5zLiAqLworCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjEyX09BR19PQV9ERUJVR19ESVNB QkxFX0NMS19SQVRJT19SRVBPUlRTIHwKKwkJCQkJICAgICAgR0VOMTJfT0FHX09BX0RFQlVHX0lO Q0xVREVfQ0xLX1JBVElPKSB8CisJCQkgICAvKgorCQkJICAgICogSWYgdGhlIHVzZXIgZGlkbid0 IHJlcXVpcmUgT0EgcmVwb3J0cywgaW5zdHJ1Y3QgdGhlCisJCQkgICAgKiBoYXJkd2FyZSBub3Qg dG8gZW1pdCBjdHggc3dpdGNoIHJlcG9ydHMuCisJCQkgICAgKi8KKwkJCSAgICEoc3RyZWFtLT5z YW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSA/CisJCQkgICBfTUFTS0VEX0JJVF9FTkFC TEUoR0VOMTJfT0FHX09BX0RFQlVHX0RJU0FCTEVfQ1RYX1NXSVRDSF9SRVBPUlRTKSA6CisJCQkg ICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdFTjEyX09BR19PQV9ERUJVR19ESVNBQkxFX0NUWF9TV0lU Q0hfUkVQT1JUUykpOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTJfT0FHX09B R0xCQ1RYQ1RSTCwgcGVyaW9kaWMgPworCQkJICAgKEdFTjEyX09BR19PQUdMQkNUWENUUkxfQ09V TlRFUl9SRVNVTUUgfAorCQkJICAgIEdFTjEyX09BR19PQUdMQkNUWENUUkxfVElNRVJfRU5BQkxF IHwKKwkJCSAgICAocGVyaW9kX2V4cG9uZW50IDw8IEdFTjEyX09BR19PQUdMQkNUWENUUkxfVElN RVJfUEVSSU9EX1NISUZUKSkKKwkJCSAgICA6IDApOworCisJLyoKKwkgKiBVcGRhdGUgYWxsIGNv bnRleHRzIHByaW9yIHdyaXRpbmcgdGhlIG11eCBjb25maWd1cmF0aW9ucyBhcyB3ZSBuZWVkCisJ ICogdG8gbWFrZSBzdXJlIGFsbCBzbGljZXMvc3Vic2xpY2VzIGFyZSBPTiBiZWZvcmUgd3JpdGlu ZyB0byBOT0EKKwkgKiByZWdpc3RlcnMuCisJICovCisJcmV0ID0gbHJjX2NvbmZpZ3VyZV9hbGxf Y29udGV4dHMoc3RyZWFtLCBvYV9jb25maWcpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAK QEAgLTIyOTksNyArMjQzMyw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfZGlzYWJsZV9tZXRyaWNfc2V0 KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJc3RydWN0IGludGVsX3VuY29yZSAq dW5jb3JlID0gc3RyZWFtLT51bmNvcmU7CiAKIAkvKiBSZXNldCBhbGwgY29udGV4dHMnIHNsaWNl cy9zdWJzbGljZXMgY29uZmlndXJhdGlvbnMuICovCi0JZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRl eHRzKHN0cmVhbSwgTlVMTCk7CisJbHJjX2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RyZWFtLCBO VUxMKTsKIAogCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRFRfQ0hJQ0tFTl9CSVRTLCBHVF9O T0FfRU5BQkxFLCAwKTsKIH0KQEAgLTIzMDksNyArMjQ0Myw3IEBAIHN0YXRpYyB2b2lkIGdlbjEw X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCXN0 cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+dW5jb3JlOwogCiAJLyogUmVzZXQg YWxsIGNvbnRleHRzJyBzbGljZXMvc3Vic2xpY2VzIGNvbmZpZ3VyYXRpb25zLiAqLwotCWdlbjhf Y29uZmlndXJlX2FsbF9jb250ZXh0cyhzdHJlYW0sIE5VTEwpOworCWxyY19jb25maWd1cmVfYWxs X2NvbnRleHRzKHN0cmVhbSwgTlVMTCk7CiAKIAkvKiBNYWtlIHN1cmUgd2UgZGlzYWJsZSBub2Eg dG8gc2F2ZSBwb3dlci4gKi8KIAlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgUlBNX0NPTkZJRzEs IEdFTjEwX0dUX05PQV9FTkFCTEUsIDApOwpAQCAtMjM3MSw2ICsyNTA1LDI1IEBAIHN0YXRpYyB2 b2lkIGdlbjhfb2FfZW5hYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJCQkg ICBHRU44X09BX0NPVU5URVJfRU5BQkxFKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuMTJfb2FfZW5h YmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gc3RyZWFtLT51bmNvcmU7CisJdTMyIHJlcG9ydF9mb3JtYXQgPSBzdHJl YW0tPm9hX2J1ZmZlci5mb3JtYXQ7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHdhbnQgT0EgcmVw b3J0cyBmcm9tIHRoZSBPQSBidWZmZXIsIHRoZW4gd2UgZG9uJ3QgZXZlbgorCSAqIG5lZWQgdG8g cHJvZ3JhbSB0aGUgT0FHIHVuaXQuCisJICovCisJaWYgKCEoc3RyZWFtLT5zYW1wbGVfZmxhZ3Mg JiBTQU1QTEVfT0FfUkVQT1JUKSkKKwkJcmV0dXJuOworCisJZ2VuMTJfaW5pdF9vYV9idWZmZXIo c3RyZWFtKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjEyX09BR19PQUNPTlRS T0wsCisJCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBHRU4xMl9PQUdfT0FDT05UUk9MX09BX0NPVU5U RVJfRk9STUFUX1NISUZUKSB8CisJCQkgICBHRU4xMl9PQUdfT0FDT05UUk9MX09BX0NPVU5URVJf RU5BQkxFKTsKK30KKwogLyoqCiAgKiBpOTE1X29hX3N0cmVhbV9lbmFibGUgLSBoYW5kbGUgYEk5 MTVfUEVSRl9JT0NUTF9FTkFCTEVgIGZvciBPQSBzdHJlYW0KICAqIEBzdHJlYW06IEFuIGk5MTUg cGVyZiBzdHJlYW0gb3BlbmVkIGZvciBPQSBtZXRyaWNzCkBAIC0yNDEyLDYgKzI1NjUsMTggQEAg c3RhdGljIHZvaWQgZ2VuOF9vYV9kaXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCiAJCURSTV9FUlJPUigid2FpdCBmb3IgT0EgdG8gYmUgZGlzYWJsZWQgdGltZWQgb3V0XG4i KTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuMTJfb2FfZGlzYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+ dW5jb3JlOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTJfT0FHX09BQ09OVFJP TCwgMCk7CisJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKHVuY29yZSwKKwkJCQkgICAgR0VO MTJfT0FHX09BQ09OVFJPTCwKKwkJCQkgICAgR0VOMTJfT0FHX09BQ09OVFJPTF9PQV9DT1VOVEVS X0VOQUJMRSwgMCwKKwkJCQkgICAgNTApKQorCQlEUk1fRVJST1IoIndhaXQgZm9yIE9BIHRvIGJl IGRpc2FibGVkIHRpbWVkIG91dFxuIik7Cit9CisKIC8qKgogICogaTkxNV9vYV9zdHJlYW1fZGlz YWJsZSAtIGhhbmRsZSBgSTkxNV9QRVJGX0lPQ1RMX0RJU0FCTEVgIGZvciBPQSBzdHJlYW0KICAq IEBzdHJlYW06IEFuIGk5MTUgcGVyZiBzdHJlYW0gb3BlbmVkIGZvciBPQSBtZXRyaWNzCkBAIC0y NjEzLDcgKzI3NzgsNyBAQCB2b2lkIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoY29uc3Qgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAogewogCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW07 CiAKLQkvKiBwZXJmLmV4Y2x1c2l2ZV9zdHJlYW0gc2VyaWFsaXNlZCBieSBnZW44X2NvbmZpZ3Vy ZV9hbGxfY29udGV4dHMoKSAqLworCS8qIHBlcmYuZXhjbHVzaXZlX3N0cmVhbSBzZXJpYWxpc2Vk IGJ5IGxyY19jb25maWd1cmVfYWxsX2NvbnRleHRzKCkgKi8KIAlsb2NrZGVwX2Fzc2VydF9oZWxk KCZjZS0+cGluX211dGV4KTsKIAogCWlmIChlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykK QEAgLTMwOTMsMTYgKzMyNTgsMjQgQEAgaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVj dCBpOTE1X3BlcmYgKnBlcmYsCiAJICogcmVzdCBvZiB0aGUgc3lzdGVtLCB3aGljaCB3ZSBjb25z aWRlciBhY2NlcHRhYmxlIGZvciBhCiAJICogbm9uLXByaXZpbGVnZWQgY2xpZW50LgogCSAqCi0J ICogRm9yIEdlbjgrIHRoZSBPQSB1bml0IG5vIGxvbmdlciBzdXBwb3J0cyBjbG9jayBnYXRpbmcg b2ZmIGZvciBhCisJICogRm9yIEdlbjgtPjExIHRoZSBPQSB1bml0IG5vIGxvbmdlciBzdXBwb3J0 cyBjbG9jayBnYXRpbmcgb2ZmIGZvciBhCiAJICogc3BlY2lmaWMgY29udGV4dCBhbmQgdGhlIGtl cm5lbCBjYW4ndCBzZWN1cmVseSBzdG9wIHRoZSBjb3VudGVycwogCSAqIGZyb20gdXBkYXRpbmcg YXMgc3lzdGVtLXdpZGUgLyBnbG9iYWwgdmFsdWVzLiBFdmVuIHRob3VnaCB3ZSBjYW4KIAkgKiBm aWx0ZXIgcmVwb3J0cyBiYXNlZCBvbiB0aGUgaW5jbHVkZWQgY29udGV4dCBJRCB3ZSBjYW4ndCBi bG9jawogCSAqIGNsaWVudHMgZnJvbSBzZWVpbmcgdGhlIHJhdyAvIGdsb2JhbCBjb3VudGVyIHZh bHVlcyB2aWEKIAkgKiBNSV9SRVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcyBhbmQgc28gY29uc2lk ZXIgaXQgYSBwcml2aWxlZ2VkIG9wIHRvCiAJICogZW5hYmxlIHRoZSBPQSB1bml0IGJ5IGRlZmF1 bHQuCisJICoKKwkgKiBGb3IgR2VuMTIrIHdlIGdhaW4gYSBuZXcgT0FSIHVuaXQgdGhhdCBvbmx5 IG1vbml0b3JzIHRoZSBSQ1Mgb24gYQorCSAqIHBlciBjb250ZXh0IGJhc2lzLiBTbyB3ZSBjYW4g cmVsYXggcmVxdWlyZW1lbnRzIHRoZXJlIGlmIHRoZSB1c2VyCisJICogZG9lc24ndCByZXF1ZXN0 IGdsb2JhbCBzdHJlYW0gYWNjZXNzIChpLmUuIHF1ZXJ5IGJhc2VkIHNhbXBsaW5nCisJICogdXNp bmcgTUlfUkVDT1JEX1BFUkZfQ09VTlQuCiAJICovCiAJaWYgKElTX0hBU1dFTEwocGVyZi0+aTkx NSkgJiYgc3BlY2lmaWNfY3R4ICYmICFwcm9wcy0+aG9sZF9wcmVlbXB0aW9uKQogCQlwcml2aWxl Z2VkX29wID0gZmFsc2U7CisJZWxzZSBpZiAoSVNfR0VOKHBlcmYtPmk5MTUsIDEyKSAmJiBzcGVj aWZpY19jdHggJiYKKwkJIChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkg PT0gMCkKKwkJcHJpdmlsZWdlZF9vcCA9IGZhbHNlOwogCiAJLyogU2ltaWxhciB0byBwZXJmJ3Mg a2VybmVsLnBlcmZfcGFyYW5vaWRfY3B1IHN5c2N0bCBvcHRpb24KIAkgKiB3ZSBjaGVjayBhIGRl di5pOTE1LnBlcmZfc3RyZWFtX3BhcmFub2lkIHN5c2N0bCBvcHRpb24KQEAgLTM0MTcsNyArMzU5 MCw5IEBAIHZvaWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQogCiAJc3lzZnNfYXR0cl9pbml0KCZwZXJmLT50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWNf aWQuYXR0cik7CiAKLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7CisJaWYgKElTX1RJR0VS TEFLRShpOTE1KSkgeworCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ190Z2woaTkxNSk7CisJ fSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpIHsKIAkJaTkxNV9wZXJmX2xvYWRfdGVz dF9jb25maWdfaWNsKGk5MTUpOwogCX0gZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShpOTE1KSkgewog CQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19jbmwoaTkxNSk7CkBAIC0zNTY4LDYgKzM3NDMs MjggQEAgc3RhdGljIGJvb2wgY2h2X2lzX3ZhbGlkX211eF9hZGRyKHN0cnVjdCBpOTE1X3BlcmYg KnBlcmYsIHUzMiBhZGRyKQogCSAgICAgICBBRERSX0lOX1JBTkdFKGFkZHIsIDB4MTgyMzAwLCAw eDE4MjNBNCk7CiB9CiAKK3N0YXRpYyBib29sIGdlbjEyX2lzX3ZhbGlkX2JfY291bnRlcl9hZGRy KHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKQoreworCXJldHVybiBSRUdfSU5fUkFO R0UoYWRkciwgR0VOMTJfT0FHX09BU1RBUlRUUklHMSwgR0VOMTJfT0FHX09BU1RBUlRUUklHOCkg fHwKKwkgICAgICAgUkVHX0lOX1JBTkdFKGFkZHIsIEdFTjEyX09BR19PQVJFUE9SVFRSSUcxLCBH RU4xMl9PQUdfT0FSRVBPUlRUUklHOCkgfHwKKwkgICAgICAgUkVHX0lOX1JBTkdFKGFkZHIsIEdF TjEyX09BR19DRUMwXzAsIEdFTjEyX09BR19DRUM3XzEpIHx8CisJICAgICAgIFJFR19JTl9SQU5H RShhZGRyLCBHRU4xMl9PQUdfU0NFQzBfMCwgR0VOMTJfT0FHX1NDRUM3XzEpIHx8CisJICAgICAg IFJFR19FUVVBTChhZGRyLCBHRU4xMl9PQUFfREJHX1JFRykgfHwKKwkgICAgICAgUkVHX0VRVUFM KGFkZHIsIEdFTjEyX09BR19PQV9QRVNTKSB8fAorCSAgICAgICBSRUdfRVFVQUwoYWRkciwgR0VO MTJfT0FHX1NQQ1RSX0NORik7Cit9CisKK3N0YXRpYyBib29sIGdlbjEyX2lzX3ZhbGlkX211eF9h ZGRyKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKQoreworCXJldHVybiBSRUdfRVFV QUwoYWRkciwgTk9BX1dSSVRFKSB8fAorCSAgICAgICBSRUdfRVFVQUwoYWRkciwgR0VOMTBfTk9B X1dSSVRFX0hJR0gpIHx8CisJICAgICAgIFJFR19FUVVBTChhZGRyLCBHRFRfQ0hJQ0tFTl9CSVRT KSB8fAorCSAgICAgICBSRUdfRVFVQUwoYWRkciwgV0FJVF9GT1JfUkM2X0VYSVQpIHx8CisJICAg ICAgIFJFR19FUVVBTChhZGRyLCBSUE1fQ09ORklHMCkgfHwKKwkgICAgICAgUkVHX0VRVUFMKGFk ZHIsIFJQTV9DT05GSUcxKSB8fAorCSAgICAgICBSRUdfSU5fUkFOR0UoYWRkciwgTk9BX0NPTkZJ RygwKSwgTk9BX0NPTkZJRyg4KSk7Cit9CisKIHN0YXRpYyB1MzIgbWFza19yZWdfdmFsdWUodTMy IHJlZywgdTMyIHZhbCkKIHsKIAkvKiBIQUxGX1NMSUNFX0NISUNLRU4yIGlzIHByb2dyYW1tZWQg d2l0aCBhIHRoZQpAQCAtMzk2MCwxNCArNDE1NywxMSBAQCB2b2lkIGk5MTVfcGVyZl9pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCQkgKiB3b3J0aCB0aGUgY29tcGxleGl0eSB0 byBtYWludGFpbiBub3cgdGhhdCBCRFcrIGVuYWJsZQogCQkgKiBleGVjbGlzdCBtb2RlIGJ5IGRl ZmF1bHQuCiAJCSAqLwotCQlwZXJmLT5vYV9mb3JtYXRzID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHM7 Ci0KLQkJcGVyZi0+b3BzLm9hX2VuYWJsZSA9IGdlbjhfb2FfZW5hYmxlOwotCQlwZXJmLT5vcHMu b2FfZGlzYWJsZSA9IGdlbjhfb2FfZGlzYWJsZTsKIAkJcGVyZi0+b3BzLnJlYWQgPSBnZW44X29h X3JlYWQ7Ci0JCXBlcmYtPm9wcy5vYV9od190YWlsX3JlYWQgPSBnZW44X29hX2h3X3RhaWxfcmVh ZDsKIAogCQlpZiAoSVNfR0VOX1JBTkdFKGk5MTUsIDgsIDkpKSB7CisJCQlwZXJmLT5vYV9mb3Jt YXRzID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHM7CisKIAkJCXBlcmYtPm9wcy5pc192YWxpZF9iX2Nv dW50ZXJfcmVnID0KIAkJCQlnZW43X2lzX3ZhbGlkX2JfY291bnRlcl9hZGRyOwogCQkJcGVyZi0+ b3BzLmlzX3ZhbGlkX211eF9yZWcgPQpAQCAtMzk4MCw4ICs0MTc0LDExIEBAIHZvaWQgaTkxNV9w ZXJmX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJCQkJCWNodl9pc192YWxp ZF9tdXhfYWRkcjsKIAkJCX0KIAorCQkJcGVyZi0+b3BzLm9hX2VuYWJsZSA9IGdlbjhfb2FfZW5h YmxlOworCQkJcGVyZi0+b3BzLm9hX2Rpc2FibGUgPSBnZW44X29hX2Rpc2FibGU7CiAJCQlwZXJm LT5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBnZW44X2VuYWJsZV9tZXRyaWNfc2V0OwogCQkJcGVy Zi0+b3BzLmRpc2FibGVfbWV0cmljX3NldCA9IGdlbjhfZGlzYWJsZV9tZXRyaWNfc2V0OworCQkJ cGVyZi0+b3BzLm9hX2h3X3RhaWxfcmVhZCA9IGdlbjhfb2FfaHdfdGFpbF9yZWFkOwogCiAJCQlp ZiAoSVNfR0VOKGk5MTUsIDgpKSB7CiAJCQkJcGVyZi0+Y3R4X29hY3R4Y3RybF9vZmZzZXQgPSAw eDEyMDsKQEAgLTM5OTUsNiArNDE5Miw4IEBAIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJCQkJcGVyZi0+Z2VuOF92YWxpZF9jdHhfYml0ID0gQklU KDE2KTsKIAkJCX0KIAkJfSBlbHNlIGlmIChJU19HRU5fUkFOR0UoaTkxNSwgMTAsIDExKSkgewor CQkJcGVyZi0+b2FfZm9ybWF0cyA9IGdlbjhfcGx1c19vYV9mb3JtYXRzOworCiAJCQlwZXJmLT5v cHMuaXNfdmFsaWRfYl9jb3VudGVyX3JlZyA9CiAJCQkJZ2VuN19pc192YWxpZF9iX2NvdW50ZXJf YWRkcjsKIAkJCXBlcmYtPm9wcy5pc192YWxpZF9tdXhfcmVnID0KQEAgLTQwMDIsOCArNDIwMSwx MSBAQCB2b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQog CQkJcGVyZi0+b3BzLmlzX3ZhbGlkX2ZsZXhfcmVnID0KIAkJCQlnZW44X2lzX3ZhbGlkX2ZsZXhf YWRkcjsKIAorCQkJcGVyZi0+b3BzLm9hX2VuYWJsZSA9IGdlbjhfb2FfZW5hYmxlOworCQkJcGVy Zi0+b3BzLm9hX2Rpc2FibGUgPSBnZW44X29hX2Rpc2FibGU7CiAJCQlwZXJmLT5vcHMuZW5hYmxl X21ldHJpY19zZXQgPSBnZW44X2VuYWJsZV9tZXRyaWNfc2V0OwogCQkJcGVyZi0+b3BzLmRpc2Fi bGVfbWV0cmljX3NldCA9IGdlbjEwX2Rpc2FibGVfbWV0cmljX3NldDsKKwkJCXBlcmYtPm9wcy5v YV9od190YWlsX3JlYWQgPSBnZW44X29hX2h3X3RhaWxfcmVhZDsKIAogCQkJaWYgKElTX0dFTihp OTE1LCAxMCkpIHsKIAkJCQlwZXJmLT5jdHhfb2FjdHhjdHJsX29mZnNldCA9IDB4MTI4OwpAQCAt NDAxMyw2ICs0MjE1LDI0IEBAIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCiAJCQkJcGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0ID0gMHg3OGU7CiAJCQl9 CiAJCQlwZXJmLT5nZW44X3ZhbGlkX2N0eF9iaXQgPSBCSVQoMTYpOworCQl9IGVsc2UgaWYgKElT X0dFTihpOTE1LCAxMikpIHsKKwkJCXBlcmYtPm9hX2Zvcm1hdHMgPSBnZW4xMl9vYV9mb3JtYXRz OworCisJCQlwZXJmLT5vcHMuaXNfdmFsaWRfYl9jb3VudGVyX3JlZyA9CisJCQkJZ2VuMTJfaXNf dmFsaWRfYl9jb3VudGVyX2FkZHI7CisJCQlwZXJmLT5vcHMuaXNfdmFsaWRfbXV4X3JlZyA9CisJ CQkJZ2VuMTJfaXNfdmFsaWRfbXV4X2FkZHI7CisJCQlwZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9y ZWcgPQorCQkJCWdlbjhfaXNfdmFsaWRfZmxleF9hZGRyOworCisJCQlwZXJmLT5vcHMub2FfZW5h YmxlID0gZ2VuMTJfb2FfZW5hYmxlOworCQkJcGVyZi0+b3BzLm9hX2Rpc2FibGUgPSBnZW4xMl9v YV9kaXNhYmxlOworCQkJcGVyZi0+b3BzLmVuYWJsZV9tZXRyaWNfc2V0ID0gZ2VuMTJfZW5hYmxl X21ldHJpY19zZXQ7CisJCQlwZXJmLT5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0ID0gZ2VuMTBfZGlz YWJsZV9tZXRyaWNfc2V0OworCQkJcGVyZi0+b3BzLm9hX2h3X3RhaWxfcmVhZCA9IGdlbjEyX29h X2h3X3RhaWxfcmVhZDsKKworCQkJcGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0ID0gMDsKKwkJCXBl cmYtPmN0eF9vYWN0eGN0cmxfb2Zmc2V0ID0gMHgxNDQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCmluZGV4IDg1NWRiODg4NTE2Yy4uNmVmMDliYmE4OWFmIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKQEAgLTY4NCw2ICs2ODQsNDUgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVf bW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lIE9BQlVGRkVSX1NJWkVfOE0g ICAgKDYgPDwgMykKICNkZWZpbmUgT0FCVUZGRVJfU0laRV8xNk0gICAoNyA8PCAzKQogCisvKiBH ZW4xMiBPQVIgdW5pdCAqLworI2RlZmluZSBHRU4xMl9PQVJfT0FDT05UUk9MIF9NTUlPKDB4Mjk2 MCkKKyNkZWZpbmUgIEdFTjEyX09BUl9PQUNPTlRST0xfQ09VTlRFUl9GT1JNQVRfU0hJRlQgMQor I2RlZmluZSAgR0VOMTJfT0FSX09BQ09OVFJPTF9DT1VOVEVSX0VOQUJMRSAgICAgICAoMSA8PCAw KQorCisjZGVmaW5lIEdFTjEyX09BQ1RYQ09OVFJPTCBfTU1JTygweDIzNjApCisjZGVmaW5lIEdF TjEyX09BUl9PQVNUQVRVUyBfTU1JTygweDI5NjgpCisKKy8qIEdlbjEyIE9BRyB1bml0ICovCisj ZGVmaW5lIEdFTjEyX09BR19PQUhFQURQVFIgX01NSU8oMHhkYjAwKQorI2RlZmluZSAgR0VOMTJf T0FHX09BSEVBRFBUUl9NQVNLIDB4ZmZmZmZmYzAKKyNkZWZpbmUgR0VOMTJfT0FHX09BVEFJTFBU UiBfTU1JTygweGRiMDQpCisjZGVmaW5lICBHRU4xMl9PQUdfT0FUQUlMUFRSX01BU0sgMHhmZmZm ZmZjMAorCisjZGVmaW5lIEdFTjEyX09BR19PQUJVRkZFUiAgX01NSU8oMHhkYjA4KQorI2RlZmlu ZSAgR0VOMTJfT0FHX09BQlVGRkVSX0JVRkZFUl9TSVpFX01BU0sgICgweDcpCisjZGVmaW5lICBH RU4xMl9PQUdfT0FCVUZGRVJfQlVGRkVSX1NJWkVfU0hJRlQgKDMpCisjZGVmaW5lICBHRU4xMl9P QUdfT0FCVUZGRVJfTUVNT1JZX1NFTEVDVCAgICAgKDEgPDwgMCkgLyogMDogUFBHVFQsIDE6IEdH VFQgKi8KKworI2RlZmluZSBHRU4xMl9PQUdfT0FHTEJDVFhDVFJMIF9NTUlPKDB4MmIyOCkKKyNk ZWZpbmUgIEdFTjEyX09BR19PQUdMQkNUWENUUkxfVElNRVJfUEVSSU9EX1NISUZUIDIKKyNkZWZp bmUgIEdFTjEyX09BR19PQUdMQkNUWENUUkxfVElNRVJfRU5BQkxFICAgICAgICgxIDw8IDEpCisj ZGVmaW5lICBHRU4xMl9PQUdfT0FHTEJDVFhDVFJMX0NPVU5URVJfUkVTVU1FICAgICAoMSA8PCAw KQorCisjZGVmaW5lIEdFTjEyX09BR19PQUNPTlRST0wgX01NSU8oMHhkYWY0KQorI2RlZmluZSAg R0VOMTJfT0FHX09BQ09OVFJPTF9PQV9DT1VOVEVSX0ZPUk1BVF9TSElGVCAyCisjZGVmaW5lICBH RU4xMl9PQUdfT0FDT05UUk9MX09BX0NPVU5URVJfRU5BQkxFICAgICAgICgxIDw8IDApCisKKyNk ZWZpbmUgR0VOMTJfT0FHX09BX0RFQlVHIF9NTUlPKDB4ZGFmOCkKKyNkZWZpbmUgIEdFTjEyX09B R19PQV9ERUJVR19JTkNMVURFX0NMS19SQVRJTyAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSAg R0VOMTJfT0FHX09BX0RFQlVHX0RJU0FCTEVfQ0xLX1JBVElPX1JFUE9SVFMgICgxIDw8IDUpCisj ZGVmaW5lICBHRU4xMl9PQUdfT0FfREVCVUdfRElTQUJMRV9HT18xXzBfUkVQT1JUUyAgICAgKDEg PDwgMikKKyNkZWZpbmUgIEdFTjEyX09BR19PQV9ERUJVR19ESVNBQkxFX0NUWF9TV0lUQ0hfUkVQ T1JUUyAoMSA8PCAxKQorCisjZGVmaW5lIEdFTjEyX09BR19PQVNUQVRVUyBfTU1JTygweGRhZmMp CisjZGVmaW5lICBHRU4xMl9PQUdfT0FTVEFUVVNfQ09VTlRFUl9PVkVSRkxPVyAoMSA8PCAyKQor I2RlZmluZSAgR0VOMTJfT0FHX09BU1RBVFVTX0JVRkZFUl9PVkVSRkxPVyAgKDEgPDwgMSkKKyNk ZWZpbmUgIEdFTjEyX09BR19PQVNUQVRVU19SRVBPUlRfTE9TVCAgICAgICgxIDw8IDApCisKIC8q CiAgKiBGbGV4aWJsZSwgQWdncmVnYXRlIEVVIENvdW50ZXIgUmVnaXN0ZXJzLgogICogTm90ZTog dGhlc2UgYXJlbid0IGNvbnRpZ3VvdXMKQEAgLTkyMCw2ICs5NTksMjYgQEAgc3RhdGljIGlubGlu ZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lIE9BUkVQ T1JUVFJJRzhfTk9BX1NFTEVDVF82X1NISUZUICAgIDI0CiAjZGVmaW5lIE9BUkVQT1JUVFJJRzhf Tk9BX1NFTEVDVF83X1NISUZUICAgIDI4CiAKKy8qIFNhbWUgbGF5b3V0IGFzIE9BU1RBUlRUUklH WCAqLworI2RlZmluZSBHRU4xMl9PQUdfT0FTVEFSVFRSSUcxIF9NTUlPKDB4ZDkwMCkKKyNkZWZp bmUgR0VOMTJfT0FHX09BU1RBUlRUUklHMiBfTU1JTygweGQ5MDQpCisjZGVmaW5lIEdFTjEyX09B R19PQVNUQVJUVFJJRzMgX01NSU8oMHhkOTA4KQorI2RlZmluZSBHRU4xMl9PQUdfT0FTVEFSVFRS SUc0IF9NTUlPKDB4ZDkwYykKKyNkZWZpbmUgR0VOMTJfT0FHX09BU1RBUlRUUklHNSBfTU1JTygw eGQ5MTApCisjZGVmaW5lIEdFTjEyX09BR19PQVNUQVJUVFJJRzYgX01NSU8oMHhkOTE0KQorI2Rl ZmluZSBHRU4xMl9PQUdfT0FTVEFSVFRSSUc3IF9NTUlPKDB4ZDkxOCkKKyNkZWZpbmUgR0VOMTJf T0FHX09BU1RBUlRUUklHOCBfTU1JTygweGQ5MWMpCisKKy8qIFNhbWUgbGF5b3V0IGFzIE9BUkVQ T1JUVFJJR1ggKi8KKyNkZWZpbmUgR0VOMTJfT0FHX09BUkVQT1JUVFJJRzEgX01NSU8oMHhkOTIw KQorI2RlZmluZSBHRU4xMl9PQUdfT0FSRVBPUlRUUklHMiBfTU1JTygweGQ5MjQpCisjZGVmaW5l IEdFTjEyX09BR19PQVJFUE9SVFRSSUczIF9NTUlPKDB4ZDkyOCkKKyNkZWZpbmUgR0VOMTJfT0FH X09BUkVQT1JUVFJJRzQgX01NSU8oMHhkOTJjKQorI2RlZmluZSBHRU4xMl9PQUdfT0FSRVBPUlRU UklHNSBfTU1JTygweGQ5MzApCisjZGVmaW5lIEdFTjEyX09BR19PQVJFUE9SVFRSSUc2IF9NTUlP KDB4ZDkzNCkKKyNkZWZpbmUgR0VOMTJfT0FHX09BUkVQT1JUVFJJRzcgX01NSU8oMHhkOTM4KQor I2RlZmluZSBHRU4xMl9PQUdfT0FSRVBPUlRUUklHOCBfTU1JTygweGQ5M2MpCisKIC8qIENFQ1hf MCAqLwogI2RlZmluZSBPQUNFQ19DT01QQVJFX0xFU1NfT1JfRVFVQUwJNgogI2RlZmluZSBPQUNF Q19DT01QQVJFX05PVF9FUVVBTAkJNQpAQCAtOTM2LDYgKzk5NSwxMCBAQCBzdGF0aWMgaW5saW5l IGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgT0FDRUNf U0VMRUNUX1BSRVYJKDEgPDwgMTkpCiAjZGVmaW5lIE9BQ0VDX1NFTEVDVF9CT09MRUFOCSgyIDw8 IDE5KQogCisvKiAxMS1iaXQgYXJyYXkgMDogcGFzcy10aHJvdWdoLCAxOiBuZWdhdGVkICovCisj ZGVmaW5lIEdFTjEyX09BU0NFQ19ORUdBVEVfTUFTSyAgMHg3ZmYKKyNkZWZpbmUgR0VOMTJfT0FT Q0VDX05FR0FURV9TSElGVCAyMQorCiAvKiBDRUNYXzEgKi8KICNkZWZpbmUgT0FDRUNfTUFTS19N QVNLCQkgICAgMHhmZmZmCiAjZGVmaW5lIE9BQ0VDX0NPTlNJREVSQVRJT05TX01BU0sgICAweGZm ZmYKQEAgLTk1OCw2ICsxMDIxLDQyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVn X3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQogI2RlZmluZSBPQUNFQzdfMCBfTU1JTygweDI3YTgpCiAj ZGVmaW5lIE9BQ0VDN18xIF9NTUlPKDB4MjdhYykKIAorLyogU2FtZSBsYXlvdXQgYXMgQ0VDWF9Z ICovCisjZGVmaW5lIEdFTjEyX09BR19DRUMwXzAgX01NSU8oMHhkOTQwKQorI2RlZmluZSBHRU4x Ml9PQUdfQ0VDMF8xIF9NTUlPKDB4ZDk0NCkKKyNkZWZpbmUgR0VOMTJfT0FHX0NFQzFfMCBfTU1J TygweGQ5NDgpCisjZGVmaW5lIEdFTjEyX09BR19DRUMxXzEgX01NSU8oMHhkOTRjKQorI2RlZmlu ZSBHRU4xMl9PQUdfQ0VDMl8wIF9NTUlPKDB4ZDk1MCkKKyNkZWZpbmUgR0VOMTJfT0FHX0NFQzJf MSBfTU1JTygweGQ5NTQpCisjZGVmaW5lIEdFTjEyX09BR19DRUMzXzAgX01NSU8oMHhkOTU4KQor I2RlZmluZSBHRU4xMl9PQUdfQ0VDM18xIF9NTUlPKDB4ZDk1YykKKyNkZWZpbmUgR0VOMTJfT0FH X0NFQzRfMCBfTU1JTygweGQ5NjApCisjZGVmaW5lIEdFTjEyX09BR19DRUM0XzEgX01NSU8oMHhk OTY0KQorI2RlZmluZSBHRU4xMl9PQUdfQ0VDNV8wIF9NTUlPKDB4ZDk2OCkKKyNkZWZpbmUgR0VO MTJfT0FHX0NFQzVfMSBfTU1JTygweGQ5NmMpCisjZGVmaW5lIEdFTjEyX09BR19DRUM2XzAgX01N SU8oMHhkOTcwKQorI2RlZmluZSBHRU4xMl9PQUdfQ0VDNl8xIF9NTUlPKDB4ZDk3NCkKKyNkZWZp bmUgR0VOMTJfT0FHX0NFQzdfMCBfTU1JTygweGQ5NzgpCisjZGVmaW5lIEdFTjEyX09BR19DRUM3 XzEgX01NSU8oMHhkOTdjKQorCisvKiBTYW1lIGxheW91dCBhcyBDRUNYX1kgKyBuZWdhdGUgMTEt Yml0IGFycmF5ICovCisjZGVmaW5lIEdFTjEyX09BR19TQ0VDMF8wIF9NTUlPKDB4ZGMwMCkKKyNk ZWZpbmUgR0VOMTJfT0FHX1NDRUMwXzEgX01NSU8oMHhkYzA0KQorI2RlZmluZSBHRU4xMl9PQUdf U0NFQzFfMCBfTU1JTygweGRjMDgpCisjZGVmaW5lIEdFTjEyX09BR19TQ0VDMV8xIF9NTUlPKDB4 ZGMwYykKKyNkZWZpbmUgR0VOMTJfT0FHX1NDRUMyXzAgX01NSU8oMHhkYzEwKQorI2RlZmluZSBH RU4xMl9PQUdfU0NFQzJfMSBfTU1JTygweGRjMTQpCisjZGVmaW5lIEdFTjEyX09BR19TQ0VDM18w IF9NTUlPKDB4ZGMxOCkKKyNkZWZpbmUgR0VOMTJfT0FHX1NDRUMzXzEgX01NSU8oMHhkYzFjKQor I2RlZmluZSBHRU4xMl9PQUdfU0NFQzRfMCBfTU1JTygweGRjMjApCisjZGVmaW5lIEdFTjEyX09B R19TQ0VDNF8xIF9NTUlPKDB4ZGMyNCkKKyNkZWZpbmUgR0VOMTJfT0FHX1NDRUM1XzAgX01NSU8o MHhkYzI4KQorI2RlZmluZSBHRU4xMl9PQUdfU0NFQzVfMSBfTU1JTygweGRjMmMpCisjZGVmaW5l IEdFTjEyX09BR19TQ0VDNl8wIF9NTUlPKDB4ZGMzMCkKKyNkZWZpbmUgR0VOMTJfT0FHX1NDRUM2 XzEgX01NSU8oMHhkYzM0KQorI2RlZmluZSBHRU4xMl9PQUdfU0NFQzdfMCBfTU1JTygweGRjMzgp CisjZGVmaW5lIEdFTjEyX09BR19TQ0VDN18xIF9NTUlPKDB4ZGMzYykKKwogLyogT0EgcGVyZiBj b3VudGVycyAqLwogI2RlZmluZSBPQV9QRVJGQ05UMV9MTyAgICAgIF9NTUlPKDB4OTFCOCkKICNk ZWZpbmUgT0FfUEVSRkNOVDFfSEkgICAgICBfTU1JTygweDkxQkMpCkBAIC0xMDM4LDYgKzExMzcs MTAgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCBy ZWcpCiAjZGVmaW5lIE1JQ1JPX0JQM19DT1VOVF9TVEFUVVMyMwlfTU1JTygweDk4MzgpCiAjZGVm aW5lIE1JQ1JPX0JQX0ZJUkVEX0FSTUVECQlfTU1JTygweDk4M0MpCiAKKyNkZWZpbmUgR0VOMTJf T0FBX0RCR19SRUcgX01NSU8oMHhkYzQ0KQorI2RlZmluZSBHRU4xMl9PQUdfT0FfUEVTUyBfTU1J TygweDJiMmMpCisjZGVmaW5lIEdFTjEyX09BR19TUENUUl9DTkYgX01NSU8oMHhkYzQwKQorCiAj ZGVmaW5lIEdEVF9DSElDS0VOX0JJVFMgICAgX01NSU8oMHg5ODQwKQogI2RlZmluZSAgIEdUX05P QV9FTkFCTEUJICAgIDB4MDAwMDAwODAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvb2EvaTkxNV9vYV90Z2wuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L29hL2k5MTVfb2FfdGds LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMjlkOTM3MDczNDUK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9vYS9pOTE1X29hX3RnbC5j CkBAIC0wLDAgKzEsMTIxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRvZ2VuZXJh dGVkIGZpbGUgYnkgR1BVIFRvcCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yaWIvZ3B1dG9wCisgKiBE TyBOT1QgRURJVCBtYW51YWxseSEKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKwor I2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9vYV90Z2wuaCIKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBpOTE1X29hX3JlZyBiX2NvdW50ZXJfY29uZmlnX3Rlc3Rfb2FbXSA9IHsK Kwl7IF9NTUlPKDB4RDkyMCksIDB4MDAwMDAwMDAgfSwKKwl7IF9NTUlPKDB4RDkwMCksIDB4MDAw MDAwMDAgfSwKKwl7IF9NTUlPKDB4RDkwNCksIDB4RjA4MDAwMDAgfSwKKwl7IF9NTUlPKDB4RDkx MCksIDB4MDAwMDAwMDAgfSwKKwl7IF9NTUlPKDB4RDkxNCksIDB4RjA4MDAwMDAgfSwKKwl7IF9N TUlPKDB4REM0MCksIDB4MDBGRjAwMDAgfSwKKwl7IF9NTUlPKDB4RDk0MCksIDB4MDAwMDAwMDQg fSwKKwl7IF9NTUlPKDB4RDk0NCksIDB4MDAwMEZGRkYgfSwKKwl7IF9NTUlPKDB4REMwMCksIDB4 MDAwMDAwMDQgfSwKKwl7IF9NTUlPKDB4REMwNCksIDB4MDAwMEZGRkYgfSwKKwl7IF9NTUlPKDB4 RDk0OCksIDB4MDAwMDAwMDMgfSwKKwl7IF9NTUlPKDB4RDk0QyksIDB4MDAwMEZGRkYgfSwKKwl7 IF9NTUlPKDB4REMwOCksIDB4MDAwMDAwMDMgfSwKKwl7IF9NTUlPKDB4REMwQyksIDB4MDAwMEZG RkYgfSwKKwl7IF9NTUlPKDB4RDk1MCksIDB4MDAwMDAwMDcgfSwKKwl7IF9NTUlPKDB4RDk1NCks IDB4MDAwMEZGRkYgfSwKKwl7IF9NTUlPKDB4REMxMCksIDB4MDAwMDAwMDcgfSwKKwl7IF9NTUlP KDB4REMxNCksIDB4MDAwMEZGRkYgfSwKKwl7IF9NTUlPKDB4RDk1OCksIDB4MDAxMDAwMDIgfSwK Kwl7IF9NTUlPKDB4RDk1QyksIDB4MDAwMEZGRjcgfSwKKwl7IF9NTUlPKDB4REMxOCksIDB4MDAx MDAwMDIgfSwKKwl7IF9NTUlPKDB4REMxQyksIDB4MDAwMEZGRjcgfSwKKwl7IF9NTUlPKDB4RDk2 MCksIDB4MDAxMDAwMDIgfSwKKwl7IF9NTUlPKDB4RDk2NCksIDB4MDAwMEZGQ0YgfSwKKwl7IF9N TUlPKDB4REMyMCksIDB4MDAxMDAwMDIgfSwKKwl7IF9NTUlPKDB4REMyNCksIDB4MDAwMEZGQ0Yg fSwKKwl7IF9NTUlPKDB4RDk2OCksIDB4MDAxMDAwODIgfSwKKwl7IF9NTUlPKDB4RDk2QyksIDB4 MDAwMEZGRUYgfSwKKwl7IF9NTUlPKDB4REMyOCksIDB4MDAxMDAwODIgfSwKKwl7IF9NTUlPKDB4 REMyQyksIDB4MDAwMEZGRUYgfSwKKwl7IF9NTUlPKDB4RDk3MCksIDB4MDAxMDAwQzIgfSwKKwl7 IF9NTUlPKDB4RDk3NCksIDB4MDAwMEZGRTcgfSwKKwl7IF9NTUlPKDB4REMzMCksIDB4MDAxMDAw QzIgfSwKKwl7IF9NTUlPKDB4REMzNCksIDB4MDAwMEZGRTcgfSwKKwl7IF9NTUlPKDB4RDk3OCks IDB4MDAxMDAwMDEgfSwKKwl7IF9NTUlPKDB4RDk3QyksIDB4MDAwMEZGRTcgfSwKKwl7IF9NTUlP KDB4REMzOCksIDB4MDAxMDAwMDEgfSwKKwl7IF9NTUlPKDB4REMzQyksIDB4MDAwMEZGRTcgfSwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9vYV9yZWcgZmxleF9ldV9jb25maWdfdGVz dF9vYVtdID0geworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X29hX3JlZyBtdXhfY29u ZmlnX3Rlc3Rfb2FbXSA9IHsKKwl7IF9NTUlPKDB4MEQwNCksIDB4MDAwMDAyMDAgfSwKKwl7IF9N TUlPKDB4OTg0MCksIDB4MDAwMDAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4NCksIDB4MDAwMDAwMDAg fSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MjgwRTAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4 MUUwRTAxNDcgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MTgwRTAwMDAgfSwKKwl7IF9NTUlPKDB4 OTg4OCksIDB4MTYwRTAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MUUwRjEwMDAgfSwKKwl7 IF9NTUlPKDB4OTg4OCksIDB4MUUxMDQwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MkUwMjAx MDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MkMwMzAwMDQgfSwKKwl7IF9NTUlPKDB4OTg4OCks IDB4MzgwMDMwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MUUwQTgwMDAgfSwKKwl7IF9NTUlP KDB4OTg4NCksIDB4MDAwMDAwMDMgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4NDkxMTAwMDAgfSwK Kwl7IF9NTUlPKDB4OTg4OCksIDB4NUQxMDE0MDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MUQx NDAwMjAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MUQxMTAzQTMgfSwKKwl7IF9NTUlPKDB4OTg4 OCksIDB4MDExMTAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4NjExMTEwMDAgfSwKKwl7IF9N TUlPKDB4OTg4OCksIDB4MUYxMjgwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MTcxMDAwMDAg fSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4NTUxMDA2MzAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4 NTcxMDAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4MzExMDAwMDAgfSwKKwl7IF9NTUlPKDB4 OTg4NCksIDB4MDAwMDAwMDMgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4NjUxMDAwMDIgfSwKKwl7 IF9NTUlPKDB4OTg4NCksIDB4MDAwMDAwMDAgfSwKKwl7IF9NTUlPKDB4OTg4OCksIDB4NDIwMDAw MDEgfSwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3Rlc3Rfb2FfaWQoc3RydWN0IGRldmlj ZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwly ZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKK30KKwordm9pZAoraTkxNV9wZXJmX2xvYWRfdGVz dF9jb25maWdfdGdsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJs Y3B5KGRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLnV1aWQsCisJCSI4MGE4MzNmMC0yNTA0LTQz MjEtODg5NC1lOTI3Nzg0NGNlN2IiLAorCQlzaXplb2YoZGV2X3ByaXYtPnBlcmYudGVzdF9jb25m aWcudXVpZCkpOworCWRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmlkID0gMTsKKworCWRldl9w cml2LT5wZXJmLnRlc3RfY29uZmlnLm11eF9yZWdzID0gbXV4X2NvbmZpZ190ZXN0X29hOworCWRl dl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLm11eF9yZWdzX2xlbiA9IEFSUkFZX1NJWkUobXV4X2Nv bmZpZ190ZXN0X29hKTsKKworCWRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmJfY291bnRlcl9y ZWdzID0gYl9jb3VudGVyX2NvbmZpZ190ZXN0X29hOworCWRldl9wcml2LT5wZXJmLnRlc3RfY29u ZmlnLmJfY291bnRlcl9yZWdzX2xlbiA9IEFSUkFZX1NJWkUoYl9jb3VudGVyX2NvbmZpZ190ZXN0 X29hKTsKKworCWRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmZsZXhfcmVncyA9IGZsZXhfZXVf Y29uZmlnX3Rlc3Rfb2E7CisJZGV2X3ByaXYtPnBlcmYudGVzdF9jb25maWcuZmxleF9yZWdzX2xl biA9IEFSUkFZX1NJWkUoZmxleF9ldV9jb25maWdfdGVzdF9vYSk7CisKKwlkZXZfcHJpdi0+cGVy Zi50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWMubmFtZSA9ICI4MGE4MzNmMC0yNTA0LTQzMjEtODg5 NC1lOTI3Nzg0NGNlN2IiOworCWRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLnN5c2ZzX21ldHJp Yy5hdHRycyA9IGRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmF0dHJzOworCisJZGV2X3ByaXYt PnBlcmYudGVzdF9jb25maWcuYXR0cnNbMF0gPSAmZGV2X3ByaXYtPnBlcmYudGVzdF9jb25maWcu c3lzZnNfbWV0cmljX2lkLmF0dHI7CisKKwlkZXZfcHJpdi0+cGVyZi50ZXN0X2NvbmZpZy5zeXNm c19tZXRyaWNfaWQuYXR0ci5uYW1lID0gImlkIjsKKwlkZXZfcHJpdi0+cGVyZi50ZXN0X2NvbmZp Zy5zeXNmc19tZXRyaWNfaWQuYXR0ci5tb2RlID0gMDQ0NDsKKwlkZXZfcHJpdi0+cGVyZi50ZXN0 X2NvbmZpZy5zeXNmc19tZXRyaWNfaWQuc2hvdyA9IHNob3dfdGVzdF9vYV9pZDsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L29hL2k5MTVfb2FfdGdsLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9vYS9pOTE1X29hX3RnbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNGMyNWYwYmU4MjVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvb2EvaTkxNV9vYV90Z2wuaApAQCAtMCwwICsxLDE2IEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBBdXRvZ2VuZXJhdGVkIGZpbGUgYnkgR1BVIFRvcCA6IGh0dHBzOi8v Z2l0aHViLmNvbS9yaWIvZ3B1dG9wCisgKiBETyBOT1QgRURJVCBtYW51YWxseSEKKyAqLworCisj aWZuZGVmIF9fSTkxNV9PQV9UR0xfSF9fCisjZGVmaW5lIF9fSTkxNV9PQV9UR0xfSF9fCisKK3N0 cnVjdCBkcm1faTkxNV9wcml2YXRlOworCit2b2lkIGk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmln X3RnbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisjZW5kaWYKLS0gCjIu MjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4