From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v8 1/2] drm/rockchip: hdmi: add Innosilicon HDMI support Date: Fri, 29 Jan 2016 14:47:39 +0800 Message-ID: <1454050059-31196-1-git-send-email-ykk@rock-chips.com> References: <1454049768-30872-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1454049768-30872-1-git-send-email-ykk@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Yao , Heiko Stuebner Cc: Mark Rutland , devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Ben Chan , Ken Mixte , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Rob Herring , Kumar Gala , Thierry Reding , linux-arm-kernel@lists.infradead.org, Zheng Yang List-Id: devicetree@vger.kernel.org VGhlIElubm9zaWxpY29uIEhETUkgaXMgYSBsb3cgcG93ZXIgSERNSSAxLjQgdHJhbnNtaXR0ZXIK SVAsIGFuZCBpdCBoYXZlIGJlZW4gaW50ZWdyYXRlZCBvbiBzb21lIHJvY2tjaGlwIENQVXMKKGxp a2UgUkszMDM2LCBSSzMxMngpLgoKU2lnbmVkLW9mZi1ieTogWWFraXIgWWFuZyA8eWtrQHJvY2st Y2hpcHMuY29tPgotLS0KQ2hhbmdlcyBpbiB2ODoKLSBEb24ndCBjaGVjayB3aGV0aGVyIGVuY29k ZXIgb3V0cHV0IGZvcm1hdCBpcyBSR0IgY29sb3JzcGFjZSwgY2F1c2UgZHJpdmVyCiAgZGVmYXVs dCBjb25maWd1cmUgdGhlIG91dHB1dCBjb2xvcnNwYWNlIHRvIFJHQi4gKFpoZW5nWWFuZykKLSBD b3JyZWN0IHRoZSBjaGVjayBjb25kaXRpb24gaW4gaW5ub19oZG1pX2NvbmZpZ192aWRlb19jc2Mo KSAoWmhlbmdZYW5nKQogICAgLSBpZiAoZGF0YS0+ZW5jX291dF9mb3JtYXQgPT0gZGF0YS0+ZW5j X291dF9mb3JtYXQpIHsKICAgICsgaWYgKGRhdGEtPmVuY19pbl9mb3JtYXQgPT0gZGF0YS0+ZW5j X291dF9mb3JtYXQpIHsKCkNoYW5nZXMgaW4gdjc6Ci0gQ29ycmVjdCB0aGUgbW9kdWxlIGxpY25l c2Ugc3RhdGVtZW50IChQYXVsKQogICAgIC0gTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogICAgICsg TU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7Ci0gU3RhcnQgaW5kZW50YXRpb24gd2l0aCB0YWJzIGFu ZCBmaXggdGhlIG1pc3NwZWxsIGluIEtjb25maWcgKFBhdWwpCi0gQ2FycnkgdGhlIGxvc3QgZGV2 aWNlLWJpbmRpbmcgZG9jdW1lbnQgKEhlaWtvKQoKQ2hhbmdlcyBpbiB2NjoKLSBSZWJhc2UgdGhl IE1ha2VmaWxlL0tjb25maWcgZmlsZXMgd2hpY2ggYWRkIGJ5IENocmlzJ3Mgcm9ja2NoaXAtbWlw aSBkcml2ZXIgKENhZXNlcikKCkNoYW5nZXMgaW4gdjU6Ci0gVXNlIGhkbWlfaW5mb2ZyYW1lIGhl bHBlciBmdW5jdGlvbnMgdG8gcGFja2VkIHRoZSBpbmZvZnJhbWUgKFJ1c3NlbGwpCi0gUmVtb3Zl IHRoZSB1bnVzZWQgZG91YmxlIHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCBmb3IgZGRjIHRy YW5zZmVyIChSdXNzZWxsKQotIFJlbW92ZSB0aGUgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGluICJp bm5vX2hkbWlfaTJjX3dyaXRlKCkiIGZ1bmN0aW9uIChSdXNzZWxsKQoKQ2hhbmdlcyBpbiB2NDoK LSBNb2RpZnkgdGhlIGNvbW1pdCB0aXRsZSAiZHJtL3JvY2tjaGlwOiBoZG1pOiAuLi4iIChNYXJr KQotIENvcnJlY3QgdGhlICJES01TIiB0byAiRFBNUyIgKE1hcmspCi0gRml4IG92ZXIgODAgY2hh cmFjdGVycyBwcm9ibGVtcyAoTWFyaykKLSBSZW1vdmUgZW5jb2RlciAucHJlcGFyZS8uY29tbWl0 IGhlbHBlciBmdW5jdGlvbnMsIGFuZCBtb3ZlIHRoZSB2b3AgbW9kZQpjb25maWd1cmUgZnVuY3Rp b24gaW50byBlbmNvZGVyIC5lbmFibGUgaGVscGVyIGZ1bmN0aW9ucy4gKE1hcmspCgpDaGFuZ2Vz IGluIHYzOgotIFVzZSBlbmNvZGVyIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uLCBhbmQgcmVtb3Zl IHRoZSBlbmNvZGVyIERQTVMgZnVuY3Rpb24KLSBLZWVwIEhETUkgUExMIHBvd2VyIG9uIGluIHN0 YW5kYnkgbW9kZQoKQ2hhbmdlcyBpbiB2MjoKLSBVc2luZyBEUk0gYXRvbWljIGhlbHBlciBmdW5j dGlvbnMgZm9yIGNvbm5lY3RvciBpbml0IChNYXJrKQotIFJlbW92ZSAiaGRtaS0+Y29ubmVjdG9y LmVuY29kZXIgPSBlbmNvZGVyOyIgKE1hcmspCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tj b25maWcgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSAgICB8 ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmMgfCA5MzkgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9p bm5vX2hkbWkuaCB8IDM2MiArKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzEwIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv aW5ub19oZG1pLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv aW5ub19oZG1pLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCmluZGV4IDg1NzM5ODUuLjc2YjMz NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCkBAIC0zNSwzICszNSwxMSBAQCBjb25maWcg Uk9DS0NISVBfRFdfTUlQSV9EU0kKIAkgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEhETUkg ZHJpdmVyLiBJZiB5b3Ugd2FudCB0bwogCSBlbmFibGUgTUlQSSBEU0kgb24gUkszMjg4IGJhc2Vk IFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzCiAJIG9wdGlvbi4KKworY29uZmlnIFJPQ0tDSElQ X0lOTk9fSERNSQorCXRyaXN0YXRlICJSb2NrY2hpcCBzcGVjaWZpYyBleHRlbnNpb25zIGZvciBJ bm5vc2lsaWNvbiBIRE1JIgorCWRlcGVuZHMgb24gRFJNX1JPQ0tDSElQCisJaGVscAorCSAgVGhp cyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNpb25zCisJ ICBmb3IgdGhlIElubm9zaWxpY29uIEhETUkgZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBlbmFibGUK KwkgIEhETUkgb24gUkszMDM2IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRp b24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKaW5kZXggZjZhODA5YS4uZGY4ZmJlZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQpAQCAtOCw1ICs4LDYgQEAgcm9ja2NoaXBkcm0tJChD T05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8KIAogb2Jq LSQoQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpICs9IGR3X2hkbWktcm9ja2NoaXAubwogb2JqLSQo Q09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5vCitvYmotJChDT05G SUdfUk9DS0NISVBfSU5OT19IRE1JKSArPSBpbm5vX2hkbWkubwogCiBvYmotJChDT05GSUdfRFJN X1JPQ0tDSElQKSArPSByb2NrY2hpcGRybS5vIHJvY2tjaGlwX3ZvcF9yZWcubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5jIGIvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2lubm9faGRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmM5OWQ4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5u b19oZG1pLmMKQEAgLTAsMCArMSw5MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBS b2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqICAgIFpoZW5nIFlhbmcgPHpoZW5neWFuZ0By b2NrLWNoaXBzLmNvbT4KKyAqICAgIFlha2lyIFlhbmcgPHlra0Byb2NrLWNoaXBzLmNvbT4KKyAq CisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJp YnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgor I2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXJfc2xhdmUuaD4KKworI2luY2x1ZGUgInJvY2tjaGlw X2RybV9kcnYuaCIKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCisKKyNpbmNsdWRlICJp bm5vX2hkbWkuaCIKKworI2RlZmluZSB0b19pbm5vX2hkbWkoeCkJY29udGFpbmVyX29mKHgsIHN0 cnVjdCBpbm5vX2hkbWksIHgpCisKK3N0cnVjdCBoZG1pX2RhdGFfaW5mbyB7CisJaW50IHZpYzsK Kwlib29sIHNpbmtfaXNfaGRtaTsKKwlib29sIHNpbmtfaGFzX2F1ZGlvOworCXVuc2lnbmVkIGlu dCBlbmNfaW5fZm9ybWF0OworCXVuc2lnbmVkIGludCBlbmNfb3V0X2Zvcm1hdDsKKwl1bnNpZ25l ZCBpbnQgY29sb3JpbWV0cnk7Cit9OworCitzdHJ1Y3QgaW5ub19oZG1pX2kyYyB7CisJc3RydWN0 IGkyY19hZGFwdGVyIGFkYXA7CisKKwl1OCBkZGNfYWRkcjsKKwl1OCBzZWdtZW50X2FkZHI7CisK KwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbXA7Cit9OworCitzdHJ1 Y3QgaW5ub19oZG1pIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybV9kZXY7CisKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKnBjbGs7CisJdm9pZCBfX2lvbWVt ICpyZWdzOworCisJc3RydWN0IGRybV9jb25uZWN0b3IJY29ubmVjdG9yOworCXN0cnVjdCBkcm1f ZW5jb2RlcgllbmNvZGVyOworCisJc3RydWN0IGlubm9faGRtaV9pMmMgKmkyYzsKKwlzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmRkYzsKKworCXVuc2lnbmVkIGludCB0bWRzX3JhdGU7CisKKwlzdHJ1Y3Qg aGRtaV9kYXRhX2luZm8JaGRtaV9kYXRhOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHByZXZp b3VzX21vZGU7Cit9OworCitlbnVtIHsKKwlDU0NfSVRVNjAxXzE2XzIzNV9UT19SR0JfMF8yNTVf OEJJVCwKKwlDU0NfSVRVNjAxXzBfMjU1X1RPX1JHQl8wXzI1NV84QklULAorCUNTQ19JVFU3MDlf MTZfMjM1X1RPX1JHQl8wXzI1NV84QklULAorCUNTQ19SR0JfMF8yNTVfVE9fSVRVNjAxXzE2XzIz NV84QklULAorCUNTQ19SR0JfMF8yNTVfVE9fSVRVNzA5XzE2XzIzNV84QklULAorCUNTQ19SR0Jf MF8yNTVfVE9fUkdCXzE2XzIzNV84QklULAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgY29lZmZf Y3NjW11bMjRdID0geworCS8qCisJICogWVVWMlJHQjo2MDEgU0QgbW9kZShZWzE2OjIzNV0sIFVW WzE2OjI0MF0sIFJHQlswOjI1NV0pOgorCSAqICAgUiA9IDEuMTY0KlkgKyAxLjU5NipWIC0gMjA0 CisJICogICBHID0gMS4xNjQqWSAtIDAuMzkxKlUgLSAwLjgxMypWICsgMTU0CisJICogICBCID0g MS4xNjQqWSArIDIuMDE4KlUgLSAyNTgKKwkgKi8KKwl7CisJCTB4MDQsIDB4YTcsIDB4MDAsIDB4 MDAsIDB4MDYsIDB4NjIsIDB4MDIsIDB4Y2MsCisJCTB4MDQsIDB4YTcsIDB4MTEsIDB4OTAsIDB4 MTMsIDB4NDAsIDB4MDAsIDB4OWEsCisJCTB4MDQsIDB4YTcsIDB4MDgsIDB4MTIsIDB4MDAsIDB4 MDAsIDB4MDMsIDB4MDIKKwl9LAorCS8qCisJICogWVVWMlJHQjo2MDEgU0QgbW9kZShZVVZbMDoy NTVdLFJHQlswOjI1NV0pOgorCSAqICAgUiA9IFkgKyAxLjQwMipWIC0gMjQ4CisJICogICBHID0g WSAtIDAuMzQ0KlUgLSAwLjcxNCpWICsgMTM1CisJICogICBCID0gWSArIDEuNzcyKlUgLSAyMjcK KwkgKi8KKwl7CisJCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OWIsIDB4MDIsIDB4 ZjgsCisJCTB4MDQsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MTIsIDB4ZGIsIDB4MDAsIDB4ODcsCisJ CTB4MDQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTMKKwl9LAorCS8q CisJICogWVVWMlJHQjo3MDkgSEQgbW9kZShZWzE2OjIzNV0sVVZbMTY6MjQwXSxSR0JbMDoyNTVd KToKKwkgKiAgIFIgPSAxLjE2NCpZICsgMS43OTMqViAtIDI0OAorCSAqICAgRyA9IDEuMTY0Klkg LSAwLjIxMypVIC0gMC41MzQqViArIDc3CisJICogICBCID0gMS4xNjQqWSArIDIuMTE1KlUgLSAy ODkKKwkgKi8KKwl7CisJCTB4MDQsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MmMsIDB4MDIs IDB4ZjgsCisJCTB4MDQsIDB4YTcsIDB4MTAsIDB4ZGEsIDB4MTIsIDB4MjIsIDB4MDAsIDB4NGQs CisJCTB4MDQsIDB4YTcsIDB4MDgsIDB4NzQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjEKKwl9LAor CisJLyoKKwkgKiBSR0IyWVVWOjYwMSBTRCBtb2RlOgorCSAqICAgQ2IgPSAtMC4yOTFHIC0gMC4x NDhSICsgMC40MzlCICsgMTI4CisJICogICBZICA9IDAuNTA0RyAgKyAwLjI1N1IgKyAwLjA5OEIg KyAxNgorCSAqICAgQ3IgPSAtMC4zNjhHICsgMC40MzlSIC0gMC4wNzFCICsgMTI4CisJICovCisJ eworCQkweDExLCAweDVmLCAweDAxLCAweDgyLCAweDEwLCAweDIzLCAweDAwLCAweDgwLAorCQkw eDAyLCAweDFjLCAweDAwLCAweGExLCAweDAwLCAweDM2LCAweDAwLCAweDFlLAorCQkweDExLCAw eDI5LCAweDEwLCAweDU5LCAweDAxLCAweDgyLCAweDAwLCAweDgwCisJfSwKKwkvKgorCSAqIFJH QjJZVVY6NzA5IEhEIG1vZGU6CisJICogICBDYiA9IC0gMC4zMzhHIC0gMC4xMDFSICsgMC40MzlC ICsgMTI4CisJICogICBZICA9IDAuNjE0RyAgICsgMC4xODNSICsgMC4wNjJCICsgMTYKKwkgKiAg IENyID0gLSAwLjM5OUcgKyAwLjQzOVIgLSAwLjA0MEIgKyAxMjgKKwkgKi8KKwl7CisJCTB4MTEs IDB4OTgsIDB4MDEsIDB4YzEsIDB4MTAsIDB4MjgsIDB4MDAsIDB4ODAsCisJCTB4MDIsIDB4NzQs IDB4MDAsIDB4YmIsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MTAsCisJCTB4MTEsIDB4NWEsIDB4MTAs IDB4NjcsIDB4MDEsIDB4YzEsIDB4MDAsIDB4ODAKKwl9LAorCS8qCisJICogUkdCWzA6MjU1XTJS R0JbMTY6MjM1XToKKwkgKiAgIFInID0gUiB4ICgyMzUtMTYpLzI1NSArIDE2OworCSAqICAgRycg PSBHIHggKDIzNS0xNikvMjU1ICsgMTY7CisJICogICBCJyA9IEIgeCAoMjM1LTE2KS8yNTUgKyAx NjsKKwkgKi8KKwl7CisJCTB4MDAsIDB4MDAsIDB4MDMsIDB4NkYsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MTAsCisJCTB4MDMsIDB4NkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAs CisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NkYsIDB4MDAsIDB4MTAKKwl9LAor fTsKKworc3RhdGljIGlubGluZSB1OCBoZG1pX3JlYWRiKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWks IHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoaGRtaS0+cmVncyArIChvZmZz ZXQpICogMHgwNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZG1pX3dyaXRlYihzdHJ1Y3Qg aW5ub19oZG1pICpoZG1pLCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbF9yZWxheGVk KHZhbCwgaGRtaS0+cmVncyArIChvZmZzZXQpICogMHgwNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBoZG1pX21vZGIoc3RydWN0IGlubm9faGRtaSAqaGRtaSwgdTE2IG9mZnNldCwKKwkJCSAg ICAgdTMyIG1zaywgdTMyIHZhbCkKK3sKKwl1OCB0ZW1wID0gaGRtaV9yZWFkYihoZG1pLCBvZmZz ZXQpICYgfm1zazsKKworCXRlbXAgfD0gdmFsICYgbXNrOworCWhkbWlfd3JpdGViKGhkbWksIG9m ZnNldCwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGlubm9faGRtaV9pMmNfaW5pdChzdHJ1Y3Qg aW5ub19oZG1pICpoZG1pKQoreworCWludCBkZGNfYnVzX2ZyZXE7CisKKwlkZGNfYnVzX2ZyZXEg PSAoaGRtaS0+dG1kc19yYXRlID4+IDIpIC8gSERNSV9TQ0xfUkFURTsKKworCWhkbWlfd3JpdGVi KGhkbWksIEREQ19CVVNfRlJFUV9MLCBkZGNfYnVzX2ZyZXEgJiAweEZGKTsKKwloZG1pX3dyaXRl YihoZG1pLCBERENfQlVTX0ZSRVFfSCwgKGRkY19idXNfZnJlcSA+PiA4KSAmIDB4RkYpOworCisJ LyogQ2xlYXIgdGhlIEVESUQgaW50ZXJydXB0IGZsYWcgYW5kIG11dGUgdGhlIGludGVycnVwdCAq LworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfSU5URVJSVVBUX01BU0sxLCAwKTsKKwloZG1pX3dy aXRlYihoZG1pLCBIRE1JX0lOVEVSUlVQVF9TVEFUVVMxLCBtX0lOVF9FRElEX1JFQURZKTsKK30K Kworc3RhdGljIHZvaWQgaW5ub19oZG1pX3N5c19wb3dlcihzdHJ1Y3QgaW5ub19oZG1pICpoZG1p LCBib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQloZG1pX21vZGIoaGRtaSwgSERNSV9T WVNfQ1RSTCwgbV9QT1dFUiwgdl9QV1JfT04pOworCWVsc2UKKwkJaGRtaV9tb2RiKGhkbWksIEhE TUlfU1lTX0NUUkwsIG1fUE9XRVIsIHZfUFdSX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIGlubm9f aGRtaV9zZXRfcHdyX21vZGUoc3RydWN0IGlubm9faGRtaSAqaGRtaSwgaW50IG1vZGUpCit7CisJ c3dpdGNoIChtb2RlKSB7CisJY2FzZSBOT1JNQUw6CisJCWlubm9faGRtaV9zeXNfcG93ZXIoaGRt aSwgZmFsc2UpOworCisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX1BSRV9FTVBIQVNJUywg MHg2Zik7CisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX0RSSVZFUiwgMHhiYik7CisKKwkJ aGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfU1lTX0NUTCwgMHgxNSk7CisJCWhkbWlfd3JpdGVi KGhkbWksIEhETUlfUEhZX1NZU19DVEwsIDB4MTQpOworCQloZG1pX3dyaXRlYihoZG1pLCBIRE1J X1BIWV9TWVNfQ1RMLCAweDEwKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfQ0hHX1BX UiwgMHgwZik7CisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX1NZTkMsIDB4MDApOworCQlo ZG1pX3dyaXRlYihoZG1pLCBIRE1JX1BIWV9TWU5DLCAweDAxKTsKKworCQlpbm5vX2hkbWlfc3lz X3Bvd2VyKGhkbWksIHRydWUpOworCQlicmVhazsKKworCWNhc2UgTE9XRVJfUFdSOgorCQlpbm5v X2hkbWlfc3lzX3Bvd2VyKGhkbWksIGZhbHNlKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9Q SFlfRFJJVkVSLCAweDAwKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfUFJFX0VNUEhB U0lTLCAweDAwKTsKKwkJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfQ0hHX1BXUiwgMHgwMCk7 CisJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfUEhZX1NZU19DVEwsIDB4MTUpOworCisJCWJyZWFr OworCisJZGVmYXVsdDoKKwkJZGV2X2VycihoZG1pLT5kZXYsICJVbmtub3duIHBvd2VyIG1vZGUg JWRcbiIsIG1vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX3Jlc2V0KHN0cnVj dCBpbm5vX2hkbWkgKmhkbWkpCit7CisJdTMyIHZhbDsKKwl1MzIgbXNrOworCisJaGRtaV9tb2Ri KGhkbWksIEhETUlfU1lTX0NUUkwsIG1fUlNUX0RJR0lUQUwsIHZfTk9UX1JTVF9ESUdJVEFMKTsK Kwl1ZGVsYXkoMTAwKTsKKworCWhkbWlfbW9kYihoZG1pLCBIRE1JX1NZU19DVFJMLCBtX1JTVF9B TkFMT0csIHZfTk9UX1JTVF9BTkFMT0cpOworCXVkZWxheSgxMDApOworCisJbXNrID0gbV9SRUdf Q0xLX0lOViB8IG1fUkVHX0NMS19TT1VSQ0UgfCBtX1BPV0VSIHwgbV9JTlRfUE9MOworCXZhbCA9 IHZfUkVHX0NMS19JTlYgfCB2X1JFR19DTEtfU09VUkNFX1NZUyB8IHZfUFdSX09OIHwgdl9JTlRf UE9MX0hJR0g7CisJaGRtaV9tb2RiKGhkbWksIEhETUlfU1lTX0NUUkwsIG1zaywgdmFsKTsKKwor CWlubm9faGRtaV9zZXRfcHdyX21vZGUoaGRtaSwgTk9STUFMKTsKK30KKworc3RhdGljIGludCBp bm5vX2hkbWlfdXBsb2FkX2ZyYW1lKHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksIGludCBzZXR1cF9y YywKKwkJCQkgIHVuaW9uIGhkbWlfaW5mb2ZyYW1lICpmcmFtZSwgdTMyIGZyYW1lX2luZGV4LAor CQkJCSAgdTMyIG1hc2ssIHUzMiBkaXNhYmxlLCB1MzIgZW5hYmxlKQoreworCWlmIChtYXNrKQor CQloZG1pX21vZGIoaGRtaSwgSERNSV9QQUNLRVRfU0VORF9BVVRPLCBtYXNrLCBkaXNhYmxlKTsK KworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfQ09OVFJPTF9QQUNLRVRfQlVGX0lOREVYLCBmcmFt ZV9pbmRleCk7CisKKwlpZiAoc2V0dXBfcmMgPj0gMCkgeworCQl1OCBwYWNrZWRfZnJhbWVbSERN SV9NQVhJTVVNX0lORk9fRlJBTUVfU0laRV07CisJCXNzaXplX3QgcmMsIGk7CisKKwkJcmMgPSBo ZG1pX2luZm9mcmFtZV9wYWNrKGZyYW1lLCBwYWNrZWRfZnJhbWUsCisJCQkJCSBzaXplb2YocGFj a2VkX2ZyYW1lKSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJZm9yIChpID0g MDsgaSA8IHJjOyBpKyspCisJCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0NPTlRST0xfUEFDS0VU X0FERFIgKyBpLAorCQkJCSAgICBwYWNrZWRfZnJhbWVbaV0pOworCisJCWlmIChtYXNrKQorCQkJ aGRtaV9tb2RiKGhkbWksIEhETUlfUEFDS0VUX1NFTkRfQVVUTywgbWFzaywgZW5hYmxlKTsKKwl9 CisKKwlyZXR1cm4gc2V0dXBfcmM7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2NvbmZpZ192 aWRlb192c2koc3RydWN0IGlubm9faGRtaSAqaGRtaSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFtZTsKKwlpbnQg cmM7CisKKwlyYyA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUo JmZyYW1lLnZlbmRvci5oZG1pLAorCQkJCQkJCSBtb2RlKTsKKworCXJldHVybiBpbm5vX2hkbWlf dXBsb2FkX2ZyYW1lKGhkbWksIHJjLCAmZnJhbWUsIElORk9GUkFNRV9WU0ksCisJCW1fUEFDS0VU X1ZTSV9FTiwgdl9QQUNLRVRfVlNJX0VOKDApLCB2X1BBQ0tFVF9WU0lfRU4oMSkpOworfQorCitz dGF0aWMgaW50IGlubm9faGRtaV9jb25maWdfdmlkZW9fYXZpKHN0cnVjdCBpbm5vX2hkbWkgKmhk bWksCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdW5pb24g aGRtaV9pbmZvZnJhbWUgZnJhbWU7CisJaW50IHJjOworCisJcmMgPSBkcm1faGRtaV9hdmlfaW5m b2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZS5hdmksIG1vZGUpOworCisJaWYgKGhkbWkt PmhkbWlfZGF0YS5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KQorCQlm cmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQ7CisJZWxzZSBpZiAo aGRtaS0+aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0MjIp CisJCWZyYW1lLmF2aS5jb2xvcnNwYWNlID0gSERNSV9DT0xPUlNQQUNFX1lVVjQyMjsKKwllbHNl CisJCWZyYW1lLmF2aS5jb2xvcnNwYWNlID0gSERNSV9DT0xPUlNQQUNFX1JHQjsKKworCXJldHVy biBpbm5vX2hkbWlfdXBsb2FkX2ZyYW1lKGhkbWksIHJjLCAmZnJhbWUsIElORk9GUkFNRV9BVkks IDAsIDAsIDApOworfQorCitzdGF0aWMgaW50IGlubm9faGRtaV9jb25maWdfdmlkZW9fY3NjKHN0 cnVjdCBpbm5vX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGhkbWlfZGF0YV9pbmZvICpkYXRhID0g JmhkbWktPmhkbWlfZGF0YTsKKwlpbnQgYzBfYzJfY2hhbmdlID0gMDsKKwlpbnQgY3NjX2VuYWJs ZSA9IDA7CisJaW50IGNzY19tb2RlID0gMDsKKwlpbnQgYXV0b19jc2MgPSAwOworCWludCB2YWx1 ZTsKKwlpbnQgaTsKKworCS8qIElucHV0IHZpZGVvIG1vZGUgaXMgU0RSIFJHQjI0Yml0LCBkYXRh IGVuYWJsZSBzaWduYWwgZnJvbSBleHRlcm5hbCAqLworCWhkbWlfd3JpdGViKGhkbWksIEhETUlf VklERU9fQ09OVFJMMSwgdl9ERV9FWFRFUk5BTCB8CisJCSAgICB2X1ZJREVPX0lOUFVUX0ZPUk1B VChWSURFT19JTlBVVF9TRFJfUkdCNDQ0KSk7CisKKwkvKiBJbnB1dCBjb2xvciBoYXJkY29kZSB0 byBSR0IsIGFuZCBvdXRwdXQgY29sb3IgaGFyZGNvZGUgdG8gUkdCODg4ICovCisJdmFsdWUgPSB2 X1ZJREVPX0lOUFVUX0JJVFMoVklERU9fSU5QVVRfOEJJVFMpIHwKKwkJdl9WSURFT19PVVRQVVRf Q09MT1IoMCkgfAorCQl2X1ZJREVPX0lOUFVUX0NTUCgwKTsKKwloZG1pX3dyaXRlYihoZG1pLCBI RE1JX1ZJREVPX0NPTlRSTDIsIHZhbHVlKTsKKworCWlmIChkYXRhLT5lbmNfaW5fZm9ybWF0ID09 IGRhdGEtPmVuY19vdXRfZm9ybWF0KSB7CisJCWlmICgoZGF0YS0+ZW5jX2luX2Zvcm1hdCA9PSBI RE1JX0NPTE9SU1BBQ0VfUkdCKSB8fAorCQkgICAgKGRhdGEtPmVuY19pbl9mb3JtYXQgPj0gSERN SV9DT0xPUlNQQUNFX1lVVjQ0NCkpIHsKKwkJCXZhbHVlID0gdl9TT0ZfRElTQUJMRSB8IHZfQ09M T1JfREVQVEhfTk9UX0lORElDQVRFRCgxKTsKKwkJCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklE RU9fQ09OVFJMMywgdmFsdWUpOworCisJCQloZG1pX21vZGIoaGRtaSwgSERNSV9WSURFT19DT05U UkwsCisJCQkJICBtX1ZJREVPX0FVVE9fQ1NDIHwgbV9WSURFT19DMF9DMl9TV0FQLAorCQkJCSAg dl9WSURFT19BVVRPX0NTQyhBVVRPX0NTQ19ESVNBQkxFKSB8CisJCQkJICB2X1ZJREVPX0MwX0My X1NXQVAoQzBfQzJfQ0hBTkdFX0RJU0FCTEUpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJ aWYgKGRhdGEtPmNvbG9yaW1ldHJ5ID09IEhETUlfQ09MT1JJTUVUUllfSVRVXzYwMSkgeworCQlp ZiAoKGRhdGEtPmVuY19pbl9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1JHQikgJiYKKwkJICAg IChkYXRhLT5lbmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSkgeworCQkJ Y3NjX21vZGUgPSBDU0NfUkdCXzBfMjU1X1RPX0lUVTYwMV8xNl8yMzVfOEJJVDsKKwkJCWF1dG9f Y3NjID0gQVVUT19DU0NfRElTQUJMRTsKKwkJCWMwX2MyX2NoYW5nZSA9IEMwX0MyX0NIQU5HRV9E SVNBQkxFOworCQkJY3NjX2VuYWJsZSA9IHZfQ1NDX0VOQUJMRTsKKwkJfSBlbHNlIGlmICgoZGF0 YS0+ZW5jX2luX2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0KSAmJgorCQkJICAgKGRh dGEtPmVuY19vdXRfZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9SR0IpKSB7CisJCQljc2NfbW9k ZSA9IENTQ19JVFU2MDFfMTZfMjM1X1RPX1JHQl8wXzI1NV84QklUOworCQkJYXV0b19jc2MgPSBB VVRPX0NTQ19FTkFCTEU7CisJCQljMF9jMl9jaGFuZ2UgPSBDMF9DMl9DSEFOR0VfRElTQUJMRTsK KwkJCWNzY19lbmFibGUgPSB2X0NTQ19ESVNBQkxFOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKChk YXRhLT5lbmNfaW5fZm9ybWF0ID09IEhETUlfQ09MT1JTUEFDRV9SR0IpICYmCisJCSAgICAoZGF0 YS0+ZW5jX291dF9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NCkpIHsKKwkJCWNzY19t b2RlID0gQ1NDX1JHQl8wXzI1NV9UT19JVFU3MDlfMTZfMjM1XzhCSVQ7CisJCQlhdXRvX2NzYyA9 IEFVVE9fQ1NDX0RJU0FCTEU7CisJCQljMF9jMl9jaGFuZ2UgPSBDMF9DMl9DSEFOR0VfRElTQUJM RTsKKwkJCWNzY19lbmFibGUgPSB2X0NTQ19FTkFCTEU7CisJCX0gZWxzZSBpZiAoKGRhdGEtPmVu Y19pbl9mb3JtYXQgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NCkgJiYKKwkJCSAgIChkYXRhLT5l bmNfb3V0X2Zvcm1hdCA9PSBIRE1JX0NPTE9SU1BBQ0VfUkdCKSkgeworCQkJY3NjX21vZGUgPSBD U0NfSVRVNzA5XzE2XzIzNV9UT19SR0JfMF8yNTVfOEJJVDsKKwkJCWF1dG9fY3NjID0gQVVUT19D U0NfRU5BQkxFOworCQkJYzBfYzJfY2hhbmdlID0gQzBfQzJfQ0hBTkdFX0RJU0FCTEU7CisJCQlj c2NfZW5hYmxlID0gdl9DU0NfRElTQUJMRTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAy NDsgaSsrKQorCQloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0NTQ19DT0VGICsgaSwKKwkJ CSAgICBjb2VmZl9jc2NbY3NjX21vZGVdW2ldKTsKKworCXZhbHVlID0gdl9TT0ZfRElTQUJMRSB8 IGNzY19lbmFibGUgfCB2X0NPTE9SX0RFUFRIX05PVF9JTkRJQ0FURUQoMSk7CisJaGRtaV93cml0 ZWIoaGRtaSwgSERNSV9WSURFT19DT05UUkwzLCB2YWx1ZSk7CisJaGRtaV9tb2RiKGhkbWksIEhE TUlfVklERU9fQ09OVFJMLCBtX1ZJREVPX0FVVE9fQ1NDIHwKKwkJICBtX1ZJREVPX0MwX0MyX1NX QVAsIHZfVklERU9fQVVUT19DU0MoYXV0b19jc2MpIHwKKwkJICB2X1ZJREVPX0MwX0MyX1NXQVAo YzBfYzJfY2hhbmdlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlf Y29uZmlnX3ZpZGVvX3RpbWluZyhzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLAorCQkJCQkgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJaW50IHZhbHVlOworCisJLyogU2V0IGRldGFp bCBleHRlcm5hbCB2aWRlbyB0aW1pbmcgcG9sYXJpdHkgYW5kIGludGVybGFjZSBtb2RlICovCisJ dmFsdWUgPSB2X0VYVEVSQU5MX1ZJREVPKDEpOworCXZhbHVlIHw9IG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19QSFNZTkMgPworCQkgdl9IU1lOQ19QT0xBUklUWSgxKSA6IHZfSFNZTkNfUE9M QVJJVFkoMCk7CisJdmFsdWUgfD0gbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQyA/ CisJCSB2X1ZTWU5DX1BPTEFSSVRZKDEpIDogdl9WU1lOQ19QT0xBUklUWSgwKTsKKwl2YWx1ZSB8 PSBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFID8KKwkJIHZfSU5FVExBQ0Uo MSkgOiB2X0lORVRMQUNFKDApOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fVElNSU5H X0NUTCwgdmFsdWUpOworCisJLyogU2V0IGRldGFpbCBleHRlcm5hbCB2aWRlbyB0aW1pbmcgKi8K Kwl2YWx1ZSA9IG1vZGUtPmh0b3RhbDsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVPX0VY VF9IVE9UQUxfTCwgdmFsdWUgJiAweEZGKTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVP X0VYVF9IVE9UQUxfSCwgKHZhbHVlID4+IDgpICYgMHhGRik7CisKKwl2YWx1ZSA9IG1vZGUtPmh0 b3RhbCAtIG1vZGUtPmhkaXNwbGF5OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhU X0hCTEFOS19MLCB2YWx1ZSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9f RVhUX0hCTEFOS19ILCAodmFsdWUgPj4gOCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+aHN5 bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJREVP X0VYVF9IREVMQVlfTCwgdmFsdWUgJiAweEZGKTsKKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX1ZJ REVPX0VYVF9IREVMQVlfSCwgKHZhbHVlID4+IDgpICYgMHhGRik7CisKKwl2YWx1ZSA9IG1vZGUt PmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlf VklERU9fRVhUX0hEVVJBVElPTl9MLCB2YWx1ZSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWks IEhETUlfVklERU9fRVhUX0hEVVJBVElPTl9ILCAodmFsdWUgPj4gOCkgJiAweEZGKTsKKworCXZh bHVlID0gbW9kZS0+dnRvdGFsOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX1ZU T1RBTF9MLCB2YWx1ZSAmIDB4RkYpOworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhU X1ZUT1RBTF9ILCAodmFsdWUgPj4gOCkgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+dnRvdGFs IC0gbW9kZS0+dmRpc3BsYXk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfVkJM QU5LLCB2YWx1ZSAmIDB4RkYpOworCisJdmFsdWUgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUt PnZkaXNwbGF5OworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfVklERU9fRVhUX1ZERUxBWSwgdmFs dWUgJiAweEZGKTsKKworCXZhbHVlID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3Rh cnQ7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9WSURFT19FWFRfVkRVUkFUSU9OLCB2YWx1ZSAm IDB4RkYpOworCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfUFJFX0RJVl9SQVRJTywgMHgx ZSk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfRkVFREJBQ0tfRElWX1JBVElPX0xPVywg MHgyYyk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9QSFlfRkVFREJBQ0tfRElWX1JBVElPX0hJ R0gsIDB4MDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX3NldHVw KHN0cnVjdCBpbm5vX2hkbWkgKmhkbWksCisJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwloZG1pLT5oZG1pX2RhdGEudmljID0gZHJtX21hdGNoX2NlYV9tb2RlKG1vZGUp OworCisJaGRtaS0+aGRtaV9kYXRhLmVuY19pbl9mb3JtYXQgPSBIRE1JX0NPTE9SU1BBQ0VfUkdC OworCWhkbWktPmhkbWlfZGF0YS5lbmNfb3V0X2Zvcm1hdCA9IEhETUlfQ09MT1JTUEFDRV9SR0I7 CisKKwlpZiAoKGhkbWktPmhkbWlfZGF0YS52aWMgPT0gNikgfHwgKGhkbWktPmhkbWlfZGF0YS52 aWMgPT0gNykgfHwKKwkgICAgKGhkbWktPmhkbWlfZGF0YS52aWMgPT0gMjEpIHx8IChoZG1pLT5o ZG1pX2RhdGEudmljID09IDIyKSB8fAorCSAgICAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAyKSB8 fCAoaGRtaS0+aGRtaV9kYXRhLnZpYyA9PSAzKSB8fAorCSAgICAoaGRtaS0+aGRtaV9kYXRhLnZp YyA9PSAxNykgfHwgKGhkbWktPmhkbWlfZGF0YS52aWMgPT0gMTgpKQorCQloZG1pLT5oZG1pX2Rh dGEuY29sb3JpbWV0cnkgPSBIRE1JX0NPTE9SSU1FVFJZX0lUVV82MDE7CisJZWxzZQorCQloZG1p LT5oZG1pX2RhdGEuY29sb3JpbWV0cnkgPSBIRE1JX0NPTE9SSU1FVFJZX0lUVV83MDk7CisKKwkv KiBNdXRlIHZpZGVvIGFuZCBhdWRpbyBvdXRwdXQgKi8KKwloZG1pX21vZGIoaGRtaSwgSERNSV9B Vl9NVVRFLCBtX0FVRElPX01VVEUgfCBtX1ZJREVPX0JMQUNLLAorCQkgIHZfQVVESU9fTVVURSgx KSB8IHZfVklERU9fTVVURSgxKSk7CisKKwkvKiBTZXQgSERNSSBNb2RlICovCisJaGRtaV93cml0 ZWIoaGRtaSwgSERNSV9IRENQX0NUUkwsCisJCSAgICB2X0hETUlfRFZJKGhkbWktPmhkbWlfZGF0 YS5zaW5rX2lzX2hkbWkpKTsKKworCWlubm9faGRtaV9jb25maWdfdmlkZW9fdGltaW5nKGhkbWks IG1vZGUpOworCisJaW5ub19oZG1pX2NvbmZpZ192aWRlb19jc2MoaGRtaSk7CisKKwlpZiAoaGRt aS0+aGRtaV9kYXRhLnNpbmtfaXNfaGRtaSkgeworCQlpbm5vX2hkbWlfY29uZmlnX3ZpZGVvX2F2 aShoZG1pLCBtb2RlKTsKKwkJaW5ub19oZG1pX2NvbmZpZ192aWRlb192c2koaGRtaSwgbW9kZSk7 CisJfQorCisJLyoKKwkgKiBXaGVuIElQIGNvbnRyb2xsZXIgaGF2ZSBjb25maWd1cmVkIHRvIGFu IGFjY3VyYXRlIHZpZGVvCisJICogdGltaW5nLCB0aGVuIHRoZSBUTURTIGNsb2NrIHNvdXJjZSB3 b3VsZCBiZSBzd2l0Y2hlZCB0bworCSAqIERDTEtfTENEQywgc28gd2UgbmVlZCB0byBpbml0IHRo ZSBUTURTIHJhdGUgdG8gbW9kZSBwaXhlbAorCSAqIGNsb2NrIHJhdGUsIGFuZCByZWNvbmZpZ3Vy ZSB0aGUgRERDIGNsb2NrLgorCSAqLworCWhkbWktPnRtZHNfcmF0ZSA9IG1vZGUtPmNsb2NrICog MTAwMDsKKwlpbm5vX2hkbWlfaTJjX2luaXQoaGRtaSk7CisKKwkvKiBVbm11dGUgdmlkZW8gYW5k IGF1ZGlvIG91dHB1dCAqLworCWhkbWlfbW9kYihoZG1pLCBIRE1JX0FWX01VVEUsIG1fQVVESU9f TVVURSB8IG1fVklERU9fQkxBQ0ssCisJCSAgdl9BVURJT19NVVRFKDApIHwgdl9WSURFT19NVVRF KDApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbm5vX2hkbWlfZW5jb2Rlcl9t b2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqX21vZGUpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRvX2lubm9faGRtaShl bmNvZGVyKTsKKworCWlubm9faGRtaV9zZXR1cChoZG1pLCBhZGpfbW9kZSk7CisKKwkvKiBTdG9y ZSB0aGUgZGlzcGxheSBtb2RlIGZvciBwbHVnaW4vRFBNUyBwb3dlcm9uIGV2ZW50cyAqLworCW1l bWNweSgmaGRtaS0+cHJldmlvdXNfbW9kZSwgYWRqX21vZGUsIHNpemVvZihoZG1pLT5wcmV2aW91 c19tb2RlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlubm9faGRtaV9lbmNvZGVyX2VuYWJsZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRv X2lubm9faGRtaShlbmNvZGVyKTsKKworCXJvY2tjaGlwX2RybV9jcnRjX21vZGVfY29uZmlnKGVu Y29kZXItPmNydGMsIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSwKKwkJCQkgICAgICBST0NLQ0hJ UF9PVVRfTU9ERV9QODg4KTsKKworCWlubm9faGRtaV9zZXRfcHdyX21vZGUoaGRtaSwgTk9STUFM KTsKK30KKworc3RhdGljIHZvaWQgaW5ub19oZG1pX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRvX2lubm9f aGRtaShlbmNvZGVyKTsKKworCWlubm9faGRtaV9zZXRfcHdyX21vZGUoaGRtaSwgTE9XRVJfUFdS KTsKK30KKworc3RhdGljIGJvb2wgaW5ub19oZG1pX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKK3sKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mg aW5ub19oZG1pX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUgICAgID0gaW5ub19o ZG1pX2VuY29kZXJfZW5hYmxlLAorCS5kaXNhYmxlICAgID0gaW5ub19oZG1pX2VuY29kZXJfZGlz YWJsZSwKKwkubW9kZV9maXh1cCA9IGlubm9faGRtaV9lbmNvZGVyX21vZGVfZml4dXAsCisJLm1v ZGVfc2V0ICAgPSBpbm5vX2hkbWlfZW5jb2Rlcl9tb2RlX3NldCwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2VuY29kZXJfZnVuY3MgaW5ub19oZG1pX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ry b3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMKK2lubm9faGRtaV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRv X2lubm9faGRtaShjb25uZWN0b3IpOworCisJcmV0dXJuIChoZG1pX3JlYWRiKGhkbWksIEhETUlf U1RBVFVTKSAmIG1fSE9UUExVRykgPworCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgaW50IGlubm9faGRtaV9j b25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ c3RydWN0IGlubm9faGRtaSAqaGRtaSA9IHRvX2lubm9faGRtaShjb25uZWN0b3IpOworCXN0cnVj dCBlZGlkICplZGlkOworCWludCByZXQgPSAwOworCisJaWYgKCFoZG1pLT5kZGMpCisJCXJldHVy biAwOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIGhkbWktPmRkYyk7CisJaWYg KGVkaWQpIHsKKwkJaGRtaS0+aGRtaV9kYXRhLnNpbmtfaXNfaGRtaSA9IGRybV9kZXRlY3RfaGRt aV9tb25pdG9yKGVkaWQpOworCQloZG1pLT5oZG1pX2RhdGEuc2lua19oYXNfYXVkaW8gPSBkcm1f ZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVf ZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitpbm5vX2hkbWlfY29ubmVjdG9yX21v ZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgICBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3Rh dGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCitpbm5vX2hkbWlfY29ubmVjdG9yX2Jlc3RfZW5jb2Rl cihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbm5vX2hkbWkg KmhkbWkgPSB0b19pbm5vX2hkbWkoY29ubmVjdG9yKTsKKworCXJldHVybiAmaGRtaS0+ZW5jb2Rl cjsKK30KKworc3RhdGljIGludAoraW5ub19oZG1pX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICAgdWludDMyX3Qg bWF4WCwgdWludDMyX3QgbWF4WSkKK3sKKwlyZXR1cm4gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzKGNvbm5lY3RvciwgMTkyMCwgMTA4MCk7Cit9CisKK3N0YXRpYyB2b2lk IGlubm9faGRtaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25u ZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3MgaW5ub19oZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gaW5ub19oZG1pX3Byb2Jl X3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGlubm9faGRtaV9jb25uZWN0b3Jf ZGV0ZWN0LAorCS5kZXN0cm95ID0gaW5ub19oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNl dCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJ LmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ry b3lfc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IGlubm9faGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBpbm5v X2hkbWlfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGlubm9faGRtaV9jb25u ZWN0b3JfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gaW5ub19oZG1pX2Nvbm5lY3Rvcl9i ZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IGlubm9faGRtaV9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgaW5ub19oZG1pICpoZG1pKQoreworCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciA9ICZoZG1pLT5lbmNvZGVyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGhkbWktPmRldjsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29mX2ZpbmRfcG9z c2libGVfY3J0Y3MoZHJtLCBkZXYtPm9mX25vZGUpOworCisJLyoKKwkgKiBJZiB3ZSBmYWlsZWQg dG8gZmluZCB0aGUgQ1JUQyhzKSB3aGljaCB0aGlzIGVuY29kZXIgaXMKKwkgKiBzdXBwb3NlZCB0 byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVjYXVzZSB0aGUgQ1JUQyBoYXMKKwkgKiBub3QgYmVl biByZWdpc3RlcmVkIHlldC4gIERlZmVyIHByb2JpbmcsIGFuZCBob3BlIHRoYXQKKwkgKiB0aGUg cmVxdWlyZWQgQ1JUQyBpcyBhZGRlZCBsYXRlci4KKwkgKi8KKwlpZiAoZW5jb2Rlci0+cG9zc2li bGVfY3J0Y3MgPT0gMCkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlkcm1fZW5jb2Rlcl9o ZWxwZXJfYWRkKGVuY29kZXIsICZpbm5vX2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCWRy bV9lbmNvZGVyX2luaXQoZHJtLCBlbmNvZGVyLCAmaW5ub19oZG1pX2VuY29kZXJfZnVuY3MsCisJ CQkgRFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKKworCWhkbWktPmNvbm5lY3Rvci5wb2xs ZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOworCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRk KCZoZG1pLT5jb25uZWN0b3IsCisJCQkJICZpbm5vX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5j cyk7CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmhkbWktPmNvbm5lY3RvciwgJmlubm9faGRt aV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCisJ ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZoZG1pLT5jb25uZWN0b3IsIGVuY29k ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbm5vX2hkbWlfaTJj X2lycShzdHJ1Y3QgaW5ub19oZG1pICpoZG1pKQoreworCXN0cnVjdCBpbm5vX2hkbWlfaTJjICpp MmMgPSBoZG1pLT5pMmM7CisJdTggc3RhdDsKKworCXN0YXQgPSBoZG1pX3JlYWRiKGhkbWksIEhE TUlfSU5URVJSVVBUX1NUQVRVUzEpOworCWlmICghKHN0YXQgJiBtX0lOVF9FRElEX1JFQURZKSkK KwkJcmV0dXJuIElSUV9OT05FOworCisJLyogQ2xlYXIgSERNSSBFRElEIGludGVycnVwdCBmbGFn ICovCisJaGRtaV93cml0ZWIoaGRtaSwgSERNSV9JTlRFUlJVUFRfU1RBVFVTMSwgbV9JTlRfRURJ RF9SRUFEWSk7CisKKwljb21wbGV0ZSgmaTJjLT5jbXApOworCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW5ub19oZG1pX2hhcmRpcnEoaW50IGlycSwgdm9p ZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbm5vX2hkbWkgKmhkbWkgPSBkZXZfaWQ7CisJaXJxcmV0 dXJuX3QgcmV0ID0gSVJRX05PTkU7CisJdTggaW50ZXJydXB0OworCisJaWYgKGhkbWktPmkyYykK KwkJcmV0ID0gaW5ub19oZG1pX2kyY19pcnEoaGRtaSk7CisKKwlpbnRlcnJ1cHQgPSBoZG1pX3Jl YWRiKGhkbWksIEhETUlfU1RBVFVTKTsKKwlpZiAoaW50ZXJydXB0ICYgbV9JTlRfSE9UUExVRykg eworCQloZG1pX21vZGIoaGRtaSwgSERNSV9TVEFUVVMsIG1fSU5UX0hPVFBMVUcsIG1fSU5UX0hP VFBMVUcpOworCQlyZXQgPSBJUlFfV0FLRV9USFJFQUQ7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGlycXJldHVybl90IGlubm9faGRtaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lk KQoreworCXN0cnVjdCBpbm5vX2hkbWkgKmhkbWkgPSBkZXZfaWQ7CisKKwlkcm1faGVscGVyX2hw ZF9pcnFfZXZlbnQoaGRtaS0+Y29ubmVjdG9yLmRldik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKK3N0YXRpYyBpbnQgaW5ub19oZG1pX2kyY19yZWFkKHN0cnVjdCBpbm5vX2hkbWkgKmhk bWksIHN0cnVjdCBpMmNfbXNnICptc2dzKQoreworCWludCBsZW5ndGggPSBtc2dzLT5sZW47CisJ dTggKmJ1ZiA9IG1zZ3MtPmJ1ZjsKKwlpbnQgcmV0OworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZoZG1pLT5pMmMtPmNtcCwgSFogLyAxMCk7CisJaWYgKCFyZXQpCisJCXJl dHVybiAtRUFHQUlOOworCisJd2hpbGUgKGxlbmd0aC0tKQorCQkqYnVmKysgPSBoZG1pX3JlYWRi KGhkbWksIEhETUlfRURJRF9GSUZPX0FERFIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgaW5ub19oZG1pX2kyY193cml0ZShzdHJ1Y3QgaW5ub19oZG1pICpoZG1pLCBzdHJ1Y3QgaTJj X21zZyAqbXNncykKK3sKKwkvKgorCSAqIFRoZSBEREMgbW9kdWxlIG9ubHkgc3VwcG9ydCByZWFk IEVESUQgbWVzc2FnZSwgc28KKwkgKiB3ZSBhc3N1bWUgdGhhdCBlYWNoIHdvcmQgd3JpdGUgdG8g dGhpcyBpMmMgYWRhcHRlcgorCSAqIHNob3VsZCBiZSB0aGUgb2Zmc2V0IG9mIEVESUQgd29yZCBh ZGRyZXNzLgorCSAqLworCWlmICgobXNncy0+bGVuICE9IDEpIHx8CisJICAgICgobXNncy0+YWRk ciAhPSBERENfQUREUikgJiYgKG1zZ3MtPmFkZHIgIT0gRERDX1NFR01FTlRfQUREUikpKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXJlaW5pdF9jb21wbGV0aW9uKCZoZG1pLT5pMmMtPmNtcCk7CisK KwlpZiAobXNncy0+YWRkciA9PSBERENfU0VHTUVOVF9BRERSKQorCQloZG1pLT5pMmMtPnNlZ21l bnRfYWRkciA9IG1zZ3MtPmJ1ZlswXTsKKwlpZiAobXNncy0+YWRkciA9PSBERENfQUREUikKKwkJ aGRtaS0+aTJjLT5kZGNfYWRkciA9IG1zZ3MtPmJ1ZlswXTsKKworCS8qIFNldCBlZGlkIGZpZm8g Zmlyc3QgYWRkciAqLworCWhkbWlfd3JpdGViKGhkbWksIEhETUlfRURJRF9GSUZPX09GRlNFVCwg MHgwMCk7CisKKwkvKiBTZXQgZWRpZCB3b3JkIGFkZHJlc3MgMHgwMC8weDgwICovCisJaGRtaV93 cml0ZWIoaGRtaSwgSERNSV9FRElEX1dPUkRfQUREUiwgaGRtaS0+aTJjLT5kZGNfYWRkcik7CisK KwkvKiBTZXQgZWRpZCBzZWdtZW50IHBvaW50ZXIgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1J X0VESURfU0VHTUVOVF9QT0lOVEVSLCBoZG1pLT5pMmMtPnNlZ21lbnRfYWRkcik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBpbm5vX2hkbWlfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFw dGVyICphZGFwLAorCQkJICAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJ c3RydWN0IGlubm9faGRtaSAqaGRtaSA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJc3RydWN0 IGlubm9faGRtaV9pMmMgKmkyYyA9IGhkbWktPmkyYzsKKwlpbnQgaSwgcmV0ID0gMDsKKworCW11 dGV4X2xvY2soJmkyYy0+bG9jayk7CisKKwkvKiBDbGVhciB0aGUgRURJRCBpbnRlcnJ1cHQgZmxh ZyBhbmQgdW5tdXRlIHRoZSBpbnRlcnJ1cHQgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0lO VEVSUlVQVF9NQVNLMSwgbV9JTlRfRURJRF9SRUFEWSk7CisJaGRtaV93cml0ZWIoaGRtaSwgSERN SV9JTlRFUlJVUFRfU1RBVFVTMSwgbV9JTlRfRURJRF9SRUFEWSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnVtOyBpKyspIHsKKwkJZGV2X2RiZyhoZG1pLT5kZXYsICJ4ZmVyOiBudW06ICVkLyVkLCBs ZW46ICVkLCBmbGFnczogJSN4XG4iLAorCQkJaSArIDEsIG51bSwgbXNnc1tpXS5sZW4sIG1zZ3Nb aV0uZmxhZ3MpOworCisJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBp bm5vX2hkbWlfaTJjX3JlYWQoaGRtaSwgJm1zZ3NbaV0pOworCQllbHNlCisJCQlyZXQgPSBpbm5v X2hkbWlfaTJjX3dyaXRlKGhkbWksICZtc2dzW2ldKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWJy ZWFrOworCX0KKworCWlmICghcmV0KQorCQlyZXQgPSBudW07CisKKwkvKiBNdXRlIEhETUkgRURJ RCBpbnRlcnJ1cHQgKi8KKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JX0lOVEVSUlVQVF9NQVNLMSwg MCk7CisKKwltdXRleF91bmxvY2soJmkyYy0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdTMyIGlubm9faGRtaV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIp Cit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpbm5vX2hkbWlfYWxnb3JpdGhtID0gewor CS5tYXN0ZXJfeGZlcgk9IGlubm9faGRtaV9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGlu bm9faGRtaV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmlubm9f aGRtaV9pMmNfYWRhcHRlcihzdHJ1Y3QgaW5ub19oZG1pICpoZG1pKQoreworCXN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcDsKKwlzdHJ1Y3QgaW5ub19oZG1pX2kyYyAqaTJjOworCWludCByZXQ7CisK KwlpMmMgPSBkZXZtX2t6YWxsb2MoaGRtaS0+ZGV2LCBzaXplb2YoKmkyYyksIEdGUF9LRVJORUwp OworCWlmICghaTJjKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW11dGV4X2luaXQo JmkyYy0+bG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZpMmMtPmNtcCk7CisKKwlhZGFwID0gJmky Yy0+YWRhcDsKKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19EREM7CisJYWRhcC0+b3duZXIgPSBU SElTX01PRFVMRTsKKwlhZGFwLT5kZXYucGFyZW50ID0gaGRtaS0+ZGV2OworCWFkYXAtPmRldi5v Zl9ub2RlID0gaGRtaS0+ZGV2LT5vZl9ub2RlOworCWFkYXAtPmFsZ28gPSAmaW5ub19oZG1pX2Fs Z29yaXRobTsKKwlzdHJsY3B5KGFkYXAtPm5hbWUsICJJbm5vIEhETUkiLCBzaXplb2YoYWRhcC0+ bmFtZSkpOworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgaGRtaSk7CisKKwlyZXQgPSBpMmNfYWRk X2FkYXB0ZXIoYWRhcCk7CisJaWYgKHJldCkgeworCQlkZXZfd2FybihoZG1pLT5kZXYsICJjYW5u b3QgYWRkICVzIEkyQyBhZGFwdGVyXG4iLCBhZGFwLT5uYW1lKTsKKwkJZGV2bV9rZnJlZShoZG1p LT5kZXYsIGkyYyk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJaGRtaS0+aTJjID0g aTJjOworCisJZGV2X2luZm8oaGRtaS0+ZGV2LCAicmVnaXN0ZXJlZCAlcyBJMkMgYnVzIGRyaXZl clxuIiwgYWRhcC0+bmFtZSk7CisKKwlyZXR1cm4gYWRhcDsKK30KKworc3RhdGljIGludCBpbm5v X2hkbWlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJ CQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxh dGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3Ry dWN0IGlubm9faGRtaSAqaGRtaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzOworCWludCBpcnE7 CisJaW50IHJldDsKKworCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGV2 ID0gZGV2OworCWhkbWktPmRybV9kZXYgPSBkcm07CisKKwlpb3JlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpb3JlcykKKwkJcmV0dXJu IC1FTlhJTzsKKworCWhkbWktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBpb3Jl cyk7CisJaWYgKElTX0VSUihoZG1pLT5yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+cmVn cyk7CisKKwloZG1pLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGhkbWktPmRldiwgInBjbGsiKTsKKwlp ZiAoSVNfRVJSKGhkbWktPnBjbGspKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiVW5hYmxlIHRv IGdldCBIRE1JIHBjbGsgY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+cGNsayk7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPnBjbGspOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihoZG1pLT5kZXYsICJDYW5ub3QgZW5hYmxlIEhETUkgcGNsayBjbG9jazogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWlubm9faGRtaV9yZXNl dChoZG1pKTsKKworCWhkbWktPmRkYyA9IGlubm9faGRtaV9pMmNfYWRhcHRlcihoZG1pKTsKKwlp ZiAoSVNfRVJSKGhkbWktPmRkYykpIHsKKwkJaGRtaS0+ZGRjID0gTlVMTDsKKwkJcmV0dXJuIFBU Ul9FUlIoaGRtaS0+ZGRjKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gSVAgY29udHJvbGxlciBoYXZl bid0IGNvbmZpZ3VyZWQgdG8gYW4gYWNjdXJhdGUgdmlkZW8KKwkgKiB0aW1pbmcsIHRoZW4gdGhl IFRNRFMgY2xvY2sgc291cmNlIHdvdWxkIGJlIHN3aXRjaGVkIHRvCisJICogUENMS19IRE1JLCBz byB3ZSBuZWVkIHRvIGluaXQgdGhlIFRNRFMgcmF0ZSB0byBQQ0xLIHJhdGUsCisJICogYW5kIHJl Y29uZmlndXJlIHRoZSBEREMgY2xvY2suCisJICovCisJaGRtaS0+dG1kc19yYXRlID0gY2xrX2dl dF9yYXRlKGhkbWktPnBjbGspOworCWlubm9faGRtaV9pMmNfaW5pdChoZG1pKTsKKworCXJldCA9 IGlubm9faGRtaV9yZWdpc3Rlcihkcm0sIGhkbWkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBoZG1pKTsKKworCS8qIFVubXV0ZSBob3RwbHVnIGlu dGVycnVwdCAqLworCWhkbWlfbW9kYihoZG1pLCBIRE1JX1NUQVRVUywgbV9NQVNLX0lOVF9IT1RQ TFVHLCB2X01BU0tfSU5UX0hPVFBMVUcoMSkpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVh ZGVkX2lycShkZXYsIGlycSwgaW5ub19oZG1pX2hhcmRpcnEsCisJCQkJCWlubm9faGRtaV9pcnEs IElSUUZfU0hBUkVELAorCQkJCQlkZXZfbmFtZShkZXYpLCBoZG1pKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGlubm9faGRtaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlu bm9faGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaGRtaS0+Y29ubmVjdG9y LmZ1bmNzLT5kZXN0cm95KCZoZG1pLT5jb25uZWN0b3IpOworCWhkbWktPmVuY29kZXIuZnVuY3Mt PmRlc3Ryb3koJmhkbWktPmVuY29kZXIpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWkt PnBjbGspOworCWkyY19wdXRfYWRhcHRlcihoZG1pLT5kZGMpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGNvbXBvbmVudF9vcHMgaW5ub19oZG1pX29wcyA9IHsKKwkuYmluZAk9IGlubm9faGRt aV9iaW5kLAorCS51bmJpbmQJPSBpbm5vX2hkbWlfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBp bm5vX2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4g Y29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmaW5ub19oZG1pX29wcyk7Cit9CisKK3N0YXRpYyBp bnQgaW5ub19oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNv bXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmlubm9faGRtaV9vcHMpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlubm9faGRtaV9kdF9pZHNbXSA9 IHsKKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzAzNi1pbm5vLWhkbWkiLAorCX0sCisJ e30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW5ub19oZG1pX2R0X2lkcyk7CisKK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlubm9faGRtaV9kcml2ZXIgPSB7CisJLnByb2Jl ICA9IGlubm9faGRtaV9wcm9iZSwKKwkucmVtb3ZlID0gaW5ub19oZG1pX3JlbW92ZSwKKwkuZHJp dmVyID0geworCQkubmFtZSA9ICJpbm5vaGRtaS1yb2NrY2hpcCIsCisJCS5vZl9tYXRjaF90YWJs ZSA9IGlubm9faGRtaV9kdF9pZHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIo aW5ub19oZG1pX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlpoZW5nIFlhbmcgPHpoZW5neWFu Z0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIllha2lyIFlhbmcgPHlra0Byb2Nr LWNoaXBzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUm9ja2NoaXAgU3BlY2lmaWMgSU5O Ty1IRE1JIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFT KCJwbGF0Zm9ybTppbm5vaGRtaS1yb2NrY2hpcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2lubm9faGRtaS5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9f aGRtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2M0MTUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmgKQEAgLTAs MCArMSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJv bmljcyBDby5MdGQKKyAqICAgIFpoZW5nIFlhbmcgPHpoZW5neWFuZ0Byb2NrLWNoaXBzLmNvbT4K KyAqICAgIFlha2lyIFlhbmcgPHlra0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3 YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2Rp ZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgX19JTk5PX0hETUlfSF9fCisjZGVmaW5lIF9fSU5OT19IRE1JX0hfXworCisjZGVm aW5lIEREQ19TRUdNRU5UX0FERFIJCTB4MzAKKworZW51bSBQV1JfTU9ERSB7CisJTk9STUFMLAor CUxPV0VSX1BXUiwKK307CisKKyNkZWZpbmUgSERNSV9TQ0xfUkFURQkJCSgxMDAqMTAwMCkKKyNk ZWZpbmUgRERDX0JVU19GUkVRX0wJCQkweDRiCisjZGVmaW5lIEREQ19CVVNfRlJFUV9ICQkJMHg0 YworCisjZGVmaW5lIEhETUlfU1lTX0NUUkwJCQkweDAwCisjZGVmaW5lIG1fUlNUX0FOQUxPRwkJ CSgxIDw8IDYpCisjZGVmaW5lIHZfUlNUX0FOQUxPRwkJCSgwIDw8IDYpCisjZGVmaW5lIHZfTk9U X1JTVF9BTkFMT0cJCSgxIDw8IDYpCisjZGVmaW5lIG1fUlNUX0RJR0lUQUwJCQkoMSA8PCA1KQor I2RlZmluZSB2X1JTVF9ESUdJVEFMCQkJKDAgPDwgNSkKKyNkZWZpbmUgdl9OT1RfUlNUX0RJR0lU QUwJCSgxIDw8IDUpCisjZGVmaW5lIG1fUkVHX0NMS19JTlYJCQkoMSA8PCA0KQorI2RlZmluZSB2 X1JFR19DTEtfTk9UX0lOVgkJKDAgPDwgNCkKKyNkZWZpbmUgdl9SRUdfQ0xLX0lOVgkJCSgxIDw8 IDQpCisjZGVmaW5lIG1fVkNMS19JTlYJCQkoMSA8PCAzKQorI2RlZmluZSB2X1ZDTEtfTk9UX0lO VgkJCSgwIDw8IDMpCisjZGVmaW5lIHZfVkNMS19JTlYJCQkoMSA8PCAzKQorI2RlZmluZSBtX1JF R19DTEtfU09VUkNFCQkoMSA8PCAyKQorI2RlZmluZSB2X1JFR19DTEtfU09VUkNFX1RNRFMJCSgw IDw8IDIpCisjZGVmaW5lIHZfUkVHX0NMS19TT1VSQ0VfU1lTCQkoMSA8PCAyKQorI2RlZmluZSBt X1BPV0VSCQkJCSgxIDw8IDEpCisjZGVmaW5lIHZfUFdSX09OCQkJKDAgPDwgMSkKKyNkZWZpbmUg dl9QV1JfT0ZGCQkJKDEgPDwgMSkKKyNkZWZpbmUgbV9JTlRfUE9MCQkJKDEgPDwgMCkKKyNkZWZp bmUgdl9JTlRfUE9MX0hJR0gJCQkxCisjZGVmaW5lIHZfSU5UX1BPTF9MT1cJCQkwCisKKyNkZWZp bmUgSERNSV9WSURFT19DT05UUkwxCQkweDAxCisjZGVmaW5lIG1fVklERU9fSU5QVVRfRk9STUFU CQkoNyA8PCAxKQorI2RlZmluZSBtX0RFX1NPVVJDRQkJCSgxIDw8IDApCisjZGVmaW5lIHZfVklE RU9fSU5QVVRfRk9STUFUKG4pCQkobiA8PCAxKQorI2RlZmluZSB2X0RFX0VYVEVSTkFMCQkJMQor I2RlZmluZSB2X0RFX0lOVEVSTkFMCQkJMAorZW51bSB7CisJVklERU9fSU5QVVRfU0RSX1JHQjQ0 NCA9IDAsCisJVklERU9fSU5QVVRfRERSX1JHQjQ0NCA9IDUsCisJVklERU9fSU5QVVRfRERSX1lD QkNSNDIyID0gNgorfTsKKworI2RlZmluZSBIRE1JX1ZJREVPX0NPTlRSTDIJCTB4MDIKKyNkZWZp bmUgbV9WSURFT19PVVRQVVRfQ09MT1IJCSgzIDw8IDYpCisjZGVmaW5lIG1fVklERU9fSU5QVVRf QklUUwkJKDMgPDwgNCkKKyNkZWZpbmUgbV9WSURFT19JTlBVVF9DU1AJCSgxIDw8IDApCisjZGVm aW5lIHZfVklERU9fT1VUUFVUX0NPTE9SKG4pCQkoKChuKSAmIDB4MykgPDwgNikKKyNkZWZpbmUg dl9WSURFT19JTlBVVF9CSVRTKG4pCQkobiA8PCA0KQorI2RlZmluZSB2X1ZJREVPX0lOUFVUX0NT UChuKQkJKG4gPDwgMCkKK2VudW0geworCVZJREVPX0lOUFVUXzEyQklUUyA9IDAsCisJVklERU9f SU5QVVRfMTBCSVRTID0gMSwKKwlWSURFT19JTlBVVF9SRVZFUlQgPSAyLAorCVZJREVPX0lOUFVU XzhCSVRTID0gMywKK307CisKKyNkZWZpbmUgSERNSV9WSURFT19DT05UUkwJCTB4MDMKKyNkZWZp bmUgbV9WSURFT19BVVRPX0NTQwkJKDEgPDwgNykKKyNkZWZpbmUgdl9WSURFT19BVVRPX0NTQyhu KQkJKG4gPDwgNykKKyNkZWZpbmUgbV9WSURFT19DMF9DMl9TV0FQCQkoMSA8PCAwKQorI2RlZmlu ZSB2X1ZJREVPX0MwX0MyX1NXQVAobikJCShuIDw8IDApCitlbnVtIHsKKwlDMF9DMl9DSEFOR0Vf RU5BQkxFID0gMCwKKwlDMF9DMl9DSEFOR0VfRElTQUJMRSA9IDEsCisJQVVUT19DU0NfRElTQUJM RSA9IDAsCisJQVVUT19DU0NfRU5BQkxFID0gMSwKK307CisKKyNkZWZpbmUgSERNSV9WSURFT19D T05UUkwzCQkweDA0CisjZGVmaW5lIG1fQ09MT1JfREVQVEhfTk9UX0lORElDQVRFRAkoMSA8PCA0 KQorI2RlZmluZSBtX1NPRgkJCQkoMSA8PCAzKQorI2RlZmluZSBtX0NPTE9SX1JBTkdFCQkJKDEg PDwgMikKKyNkZWZpbmUgbV9DU0MJCQkJKDEgPDwgMCkKKyNkZWZpbmUgdl9DT0xPUl9ERVBUSF9O T1RfSU5ESUNBVEVEKG4pCSgobikgPDwgNCkKKyNkZWZpbmUgdl9TT0ZfRU5BQkxFCQkJKDAgPDwg MykKKyNkZWZpbmUgdl9TT0ZfRElTQUJMRQkJCSgxIDw8IDMpCisjZGVmaW5lIHZfQ09MT1JfUkFO R0VfRlVMTAkJKDEgPDwgMikKKyNkZWZpbmUgdl9DT0xPUl9SQU5HRV9MSU1JVEVECQkoMCA8PCAy KQorI2RlZmluZSB2X0NTQ19FTkFCTEUJCQkxCisjZGVmaW5lIHZfQ1NDX0RJU0FCTEUJCQkwCisK KyNkZWZpbmUgSERNSV9BVl9NVVRFCQkJMHgwNQorI2RlZmluZSBtX0FWTVVURV9DTEVBUgkJCSgx IDw8IDcpCisjZGVmaW5lIG1fQVZNVVRFX0VOQUJMRQkJCSgxIDw8IDYpCisjZGVmaW5lIG1fQVVE SU9fTVVURQkJCSgxIDw8IDEpCisjZGVmaW5lIG1fVklERU9fQkxBQ0sJCQkoMSA8PCAwKQorI2Rl ZmluZSB2X0FWTVVURV9DTEVBUihuKQkJKG4gPDwgNykKKyNkZWZpbmUgdl9BVk1VVEVfRU5BQkxF KG4pCQkobiA8PCA2KQorI2RlZmluZSB2X0FVRElPX01VVEUobikJCQkobiA8PCAxKQorI2RlZmlu ZSB2X1ZJREVPX01VVEUobikJCQkobiA8PCAwKQorCisjZGVmaW5lIEhETUlfVklERU9fVElNSU5H X0NUTAkJMHgwOAorI2RlZmluZSB2X0hTWU5DX1BPTEFSSVRZKG4pCQkobiA8PCAzKQorI2RlZmlu ZSB2X1ZTWU5DX1BPTEFSSVRZKG4pCQkobiA8PCAyKQorI2RlZmluZSB2X0lORVRMQUNFKG4pCQkJ KG4gPDwgMSkKKyNkZWZpbmUgdl9FWFRFUkFOTF9WSURFTyhuKQkJKG4gPDwgMCkKKworI2RlZmlu ZSBIRE1JX1ZJREVPX0VYVF9IVE9UQUxfTAkJMHgwOQorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9I VE9UQUxfSAkJMHgwYQorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9IQkxBTktfTAkJMHgwYgorI2Rl ZmluZSBIRE1JX1ZJREVPX0VYVF9IQkxBTktfSAkJMHgwYworI2RlZmluZSBIRE1JX1ZJREVPX0VY VF9IREVMQVlfTAkJMHgwZAorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9IREVMQVlfSAkJMHgwZQor I2RlZmluZSBIRE1JX1ZJREVPX0VYVF9IRFVSQVRJT05fTAkweDBmCisjZGVmaW5lIEhETUlfVklE RU9fRVhUX0hEVVJBVElPTl9ICTB4MTAKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfVlRPVEFMX0wJ CTB4MTEKKyNkZWZpbmUgSERNSV9WSURFT19FWFRfVlRPVEFMX0gJCTB4MTIKKyNkZWZpbmUgSERN SV9WSURFT19FWFRfVkJMQU5LCQkweDEzCisjZGVmaW5lIEhETUlfVklERU9fRVhUX1ZERUxBWQkJ MHgxNAorI2RlZmluZSBIRE1JX1ZJREVPX0VYVF9WRFVSQVRJT04JMHgxNQorCisjZGVmaW5lIEhE TUlfVklERU9fQ1NDX0NPRUYJCTB4MTgKKworI2RlZmluZSBIRE1JX0FVRElPX0NUUkwxCQkweDM1 CitlbnVtIHsKKwlDVFNfU09VUkNFX0lOVEVSTkFMID0gMCwKKwlDVFNfU09VUkNFX0VYVEVSTkFM ID0gMSwKK307CisjZGVmaW5lIHZfQ1RTX1NPVVJDRShuKQkJCShuIDw8IDcpCisKK2VudW0gewor CURPV05TQU1QTEVfRElTQUJMRSA9IDAsCisJRE9XTlNBTVBMRV8xXzIgPSAxLAorCURPV05TQU1Q TEVfMV80ID0gMiwKK307CisjZGVmaW5lIHZfRE9XTl9TQU1QTEUobikJCShuIDw8IDUpCisKK2Vu dW0geworCUFVRElPX1NPVVJDRV9JSVMgPSAwLAorCUFVRElPX1NPVVJDRV9TUERJRiA9IDEsCit9 OworI2RlZmluZSB2X0FVRElPX1NPVVJDRShuKQkJKG4gPDwgMykKKworI2RlZmluZSB2X01DTEtf RU5BQkxFKG4pCQkobiA8PCAyKQorZW51bSB7CisJTUNMS18xMjhGUyA9IDAsCisJTUNMS18yNTZG UyA9IDEsCisJTUNMS18zODRGUyA9IDIsCisJTUNMS181MTJGUyA9IDMsCit9OworI2RlZmluZSB2 X01DTEtfUkFUSU8obikJCQkobikKKworI2RlZmluZSBBVURJT19TQU1QTEVfUkFURQkJMHgzNwor ZW51bSB7CisJQVVESU9fMzJLID0gMHgzLAorCUFVRElPXzQ0MUsgPSAweDAsCisJQVVESU9fNDhL ID0gMHgyLAorCUFVRElPXzg4MksgPSAweDgsCisJQVVESU9fOTZLID0gMHhhLAorCUFVRElPXzE3 NjRLID0gMHhjLAorCUFVRElPXzE5MksgPSAweGUsCit9OworCisjZGVmaW5lIEFVRElPX0kyU19N T0RFCQkJMHgzOAorZW51bSB7CisJSTJTX0NIQU5ORUxfMV8yID0gMSwKKwlJMlNfQ0hBTk5FTF8z XzQgPSAzLAorCUkyU19DSEFOTkVMXzVfNiA9IDcsCisJSTJTX0NIQU5ORUxfN184ID0gMHhmCit9 OworI2RlZmluZSB2X0kyU19DSEFOTkVMKG4pCQkoKG4pIDw8IDIpCitlbnVtIHsKKwlJMlNfU1RB TkRBUkQgPSAwLAorCUkyU19MRUZUX0pVU1RJRklFRCA9IDEsCisJSTJTX1JJR0hUX0pVU1RJRklF RCA9IDIsCit9OworI2RlZmluZSB2X0kyU19NT0RFKG4pCQkJKG4pCisKKyNkZWZpbmUgQVVESU9f STJTX01BUAkJCTB4MzkKKyNkZWZpbmUgQVVESU9fSTJTX1NXQVBTX1NQRElGCQkweDNhCisjZGVm aW5lIHZfU1BJREZfRlJFUShuKQkJCShuKQorCisjZGVmaW5lIE5fMzJLCQkJCTB4MTAwMAorI2Rl ZmluZSBOXzQ0MUsJCQkJMHgxODgwCisjZGVmaW5lIE5fODgySwkJCQkweDMxMDAKKyNkZWZpbmUg Tl8xNzY0SwkJCQkweDYyMDAKKyNkZWZpbmUgTl80OEsJCQkJMHgxODAwCisjZGVmaW5lIE5fOTZL CQkJCTB4MzAwMAorI2RlZmluZSBOXzE5MksJCQkJMHg2MDAwCisKKyNkZWZpbmUgSERNSV9BVURJ T19DSEFOTkVMX1NUQVRVUwkweDNlCisjZGVmaW5lIG1fQVVESU9fU1RBVFVTX05MUENNCQkoMSA8 PCA3KQorI2RlZmluZSBtX0FVRElPX1NUQVRVU19VU0UJCSgxIDw8IDYpCisjZGVmaW5lIG1fQVVE SU9fU1RBVFVTX0NPUFlSSUdIVAkoMSA8PCA1KQorI2RlZmluZSBtX0FVRElPX1NUQVRVU19BRERJ VElPTgkJKDMgPDwgMikKKyNkZWZpbmUgbV9BVURJT19TVEFUVVNfQ0xLX0FDQ1VSQUNZCSgyIDw8 IDApCisjZGVmaW5lIHZfQVVESU9fU1RBVFVTX05MUENNKG4pCQkoKG4gJiAxKSA8PCA3KQorI2Rl ZmluZSBBVURJT19OX0gJCQkweDNmCisjZGVmaW5lIEFVRElPX05fTQkJCTB4NDAKKyNkZWZpbmUg QVVESU9fTl9MCQkJMHg0MQorCisjZGVmaW5lIEhETUlfQVVESU9fQ1RTX0gJCTB4NDUKKyNkZWZp bmUgSERNSV9BVURJT19DVFNfTQkJMHg0NgorI2RlZmluZSBIRE1JX0FVRElPX0NUU19MCQkweDQ3 CisKKyNkZWZpbmUgSERNSV9ERENfQ0xLX0wJCQkweDRiCisjZGVmaW5lIEhETUlfRERDX0NMS19I CQkJMHg0YworCisjZGVmaW5lIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIJMHg0ZAorI2RlZmlu ZSBIRE1JX0VESURfV09SRF9BRERSCQkweDRlCisjZGVmaW5lIEhETUlfRURJRF9GSUZPX09GRlNF VAkJMHg0ZgorI2RlZmluZSBIRE1JX0VESURfRklGT19BRERSCQkweDUwCisKKyNkZWZpbmUgSERN SV9QQUNLRVRfU0VORF9NQU5VQUwJCTB4OWMKKyNkZWZpbmUgSERNSV9QQUNLRVRfU0VORF9BVVRP CQkweDlkCisjZGVmaW5lIG1fUEFDS0VUX0dDUF9FTgkJCSgxIDw8IDcpCisjZGVmaW5lIG1fUEFD S0VUX01TSV9FTgkJCSgxIDw8IDYpCisjZGVmaW5lIG1fUEFDS0VUX1NESV9FTgkJCSgxIDw8IDUp CisjZGVmaW5lIG1fUEFDS0VUX1ZTSV9FTgkJCSgxIDw8IDQpCisjZGVmaW5lIHZfUEFDS0VUX0dD UF9FTihuKQkJKChuICYgMSkgPDwgNykKKyNkZWZpbmUgdl9QQUNLRVRfTVNJX0VOKG4pCQkoKG4g JiAxKSA8PCA2KQorI2RlZmluZSB2X1BBQ0tFVF9TRElfRU4obikJCSgobiAmIDEpIDw8IDUpCisj ZGVmaW5lIHZfUEFDS0VUX1ZTSV9FTihuKQkJKChuICYgMSkgPDwgNCkKKworI2RlZmluZSBIRE1J X0NPTlRST0xfUEFDS0VUX0JVRl9JTkRFWAkweDlmCitlbnVtIHsKKwlJTkZPRlJBTUVfVlNJID0g MHgwNSwKKwlJTkZPRlJBTUVfQVZJID0gMHgwNiwKKwlJTkZPRlJBTUVfQUFJID0gMHgwOCwKK307 CisKKyNkZWZpbmUgSERNSV9DT05UUk9MX1BBQ0tFVF9BRERSCTB4YTAKKyNkZWZpbmUgSERNSV9N QVhJTVVNX0lORk9fRlJBTUVfU0laRQkweDExCitlbnVtIHsKKwlBVklfQ09MT1JfTU9ERV9SR0Ig PSAwLAorCUFWSV9DT0xPUl9NT0RFX1lDQkNSNDIyID0gMSwKKwlBVklfQ09MT1JfTU9ERV9ZQ0JD UjQ0NCA9IDIsCisJQVZJX0NPTE9SSU1FVFJZX05PX0RBVEEgPSAwLAorCisJQVZJX0NPTE9SSU1F VFJZX1NNUFRFXzE3ME0gPSAxLAorCUFWSV9DT0xPUklNRVRSWV9JVFU3MDkgPSAyLAorCUFWSV9D T0xPUklNRVRSWV9FWFRFTkRFRCA9IDMsCisKKwlBVklfQ09ERURfRlJBTUVfQVNQRUNUX05PX0RB VEEgPSAwLAorCUFWSV9DT0RFRF9GUkFNRV9BU1BFQ1RfNF8zID0gMSwKKwlBVklfQ09ERURfRlJB TUVfQVNQRUNUXzE2XzkgPSAyLAorCisJQUNUSVZFX0FTUEVDVF9SQVRFX1NBTUVfQVNfQ09ERURf RlJBTUUgPSAweDA4LAorCUFDVElWRV9BU1BFQ1RfUkFURV80XzMgPSAweDA5LAorCUFDVElWRV9B U1BFQ1RfUkFURV8xNl85ID0gMHgwQSwKKwlBQ1RJVkVfQVNQRUNUX1JBVEVfMTRfOSA9IDB4MEIs Cit9OworCisjZGVmaW5lIEhETUlfSERDUF9DVFJMCQkJMHg1MgorI2RlZmluZSBtX0hETUlfRFZJ CQkJKDEgPDwgMSkKKyNkZWZpbmUgdl9IRE1JX0RWSShuKQkJCShuIDw8IDEpCisKKyNkZWZpbmUg SERNSV9JTlRFUlJVUFRfTUFTSzEJCTB4YzAKKyNkZWZpbmUgSERNSV9JTlRFUlJVUFRfU1RBVFVT MQkJMHhjMQorI2RlZmluZQltX0lOVF9BQ1RJVkVfVlNZTkMJCSgxIDw8IDUpCisjZGVmaW5lIG1f SU5UX0VESURfUkVBRFkJCSgxIDw8IDIpCisKKyNkZWZpbmUgSERNSV9JTlRFUlJVUFRfTUFTSzIJ CTB4YzIKKyNkZWZpbmUgSERNSV9JTlRFUlJVUFRfU1RBVFVTMgkJMHhjMworI2RlZmluZSBtX0lO VF9IRENQX0VSUgkJCSgxIDw8IDcpCisjZGVmaW5lIG1fSU5UX0JLU1ZfRkxBRwkJCSgxIDw8IDYp CisjZGVmaW5lIG1fSU5UX0hEQ1BfT0sJCQkoMSA8PCA0KQorCisjZGVmaW5lIEhETUlfU1RBVFVT CQkJMHhjOAorI2RlZmluZSBtX0hPVFBMVUcJCQkoMSA8PCA3KQorI2RlZmluZSBtX01BU0tfSU5U X0hPVFBMVUcJCSgxIDw8IDUpCisjZGVmaW5lIG1fSU5UX0hPVFBMVUcJCQkoMSA8PCAxKQorI2Rl ZmluZSB2X01BU0tfSU5UX0hPVFBMVUcobikJCSgobiAmIDB4MSkgPDwgNSkKKworI2RlZmluZSBI RE1JX0NPTE9SQkFSICAgICAgICAgICAgICAgICAgIDB4YzkKKworI2RlZmluZSBIRE1JX1BIWV9T WU5DCQkJMHhjZQorI2RlZmluZSBIRE1JX1BIWV9TWVNfQ1RMCQkweGUwCisjZGVmaW5lIG1fVE1E U19DTEtfU09VUkNFCQkoMSA8PCA1KQorI2RlZmluZSB2X1RNRFNfRlJPTV9QTEwJCQkoMCA8PCA1 KQorI2RlZmluZSB2X1RNRFNfRlJPTV9HRU4JCQkoMSA8PCA1KQorI2RlZmluZSBtX1BIQVNFX0NM SwkJCSgxIDw8IDQpCisjZGVmaW5lIHZfREVGQVVMVF9QSEFTRQkJCSgwIDw8IDQpCisjZGVmaW5l IHZfU1lOQ19QSEFTRQkJCSgxIDw8IDQpCisjZGVmaW5lIG1fVE1EU19DVVJSRU5UX1BXUgkJKDEg PDwgMykKKyNkZWZpbmUgdl9UVVJOX09OX0NVUlJFTlQJCSgwIDw8IDMpCisjZGVmaW5lIHZfQ0FU X09GRl9DVVJSRU5UCQkoMSA8PCAzKQorI2RlZmluZSBtX0JBTkRHQVBfUFdSCQkJKDEgPDwgMikK KyNkZWZpbmUgdl9CQU5ER0FQX1BXUl9VUAkJKDAgPDwgMikKKyNkZWZpbmUgdl9CQU5ER0FQX1BX Ul9ET1dOCQkoMSA8PCAyKQorI2RlZmluZSBtX1BMTF9QV1IJCQkoMSA8PCAxKQorI2RlZmluZSB2 X1BMTF9QV1JfVVAJCQkoMCA8PCAxKQorI2RlZmluZSB2X1BMTF9QV1JfRE9XTgkJCSgxIDw8IDEp CisjZGVmaW5lIG1fVE1EU19DSEdfUFdSCQkJKDEgPDwgMCkKKyNkZWZpbmUgdl9UTURTX0NIR19Q V1JfVVAJCSgwIDw8IDApCisjZGVmaW5lIHZfVE1EU19DSEdfUFdSX0RPV04JCSgxIDw8IDApCisK KyNkZWZpbmUgSERNSV9QSFlfQ0hHX1BXUgkJMHhlMQorI2RlZmluZSB2X0NMS19DSEdfUFdSKG4p CQkoKG4gJiAxKSA8PCAzKQorI2RlZmluZSB2X0RBVEFfQ0hHX1BXUihuKQkJKChuICYgNykgPDwg MCkKKworI2RlZmluZSBIRE1JX1BIWV9EUklWRVIJCQkweGUyCisjZGVmaW5lIHZfQ0xLX01BSU5f RFJJVkVSKG4pCQkobiA8PCA0KQorI2RlZmluZSB2X0RBVEFfTUFJTl9EUklWRVIobikJCShuIDw8 IDApCisKKyNkZWZpbmUgSERNSV9QSFlfUFJFX0VNUEhBU0lTCQkweGUzCisjZGVmaW5lIHZfUFJF X0VNUEhBU0lTKG4pCQkoKG4gJiA3KSA8PCA0KQorI2RlZmluZSB2X0NMS19QUkVfRFJJVkVSKG4p CQkoKG4gJiAzKSA8PCAyKQorI2RlZmluZSB2X0RBVEFfUFJFX0RSSVZFUihuKQkJKChuICYgMykg PDwgMCkKKworI2RlZmluZSBIRE1JX1BIWV9GRUVEQkFDS19ESVZfUkFUSU9fTE9XCQkweGU3Cisj ZGVmaW5lIHZfRkVFREJBQ0tfRElWX0xPVyhuKQkJCShuICYgMHhmZikKKyNkZWZpbmUgSERNSV9Q SFlfRkVFREJBQ0tfRElWX1JBVElPX0hJR0gJMHhlOAorI2RlZmluZSB2X0ZFRURCQUNLX0RJVl9I SUdIKG4pCQkJKG4gJiAxKQorCisjZGVmaW5lIEhETUlfUEhZX1BSRV9ESVZfUkFUSU8JCTB4ZWQK KyNkZWZpbmUgdl9QUkVfRElWX1JBVElPKG4pCQkobiAmIDB4MWYpCisKKyNkZWZpbmUgSERNSV9D RUNfQ1RSTAkJCTB4ZDAKKyNkZWZpbmUgbV9BREpVU1RfRk9SX0hJU0VOU0UJCSgxIDw8IDYpCisj ZGVmaW5lIG1fUkVKRUNUX1JYX0JST0FEQ0FTVAkJKDEgPDwgNSkKKyNkZWZpbmUgbV9CVVNGUkVF VElNRV9FTkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIG1fUkVKRUNUX1JYCQkJKDEgPDwgMSkKKyNk ZWZpbmUgbV9TVEFSVF9UWAkJCSgxIDw8IDApCisKKyNkZWZpbmUgSERNSV9DRUNfREFUQQkJCTB4 ZDEKKyNkZWZpbmUgSERNSV9DRUNfVFhfT0ZGU0VUCQkweGQyCisjZGVmaW5lIEhETUlfQ0VDX1JY X09GRlNFVAkJMHhkMworI2RlZmluZSBIRE1JX0NFQ19DTEtfSAkJCTB4ZDQKKyNkZWZpbmUgSERN SV9DRUNfQ0xLX0wJCQkweGQ1CisjZGVmaW5lIEhETUlfQ0VDX1RYX0xFTkdUSAkJMHhkNgorI2Rl ZmluZSBIRE1JX0NFQ19SWF9MRU5HVEgJCTB4ZDcKKyNkZWZpbmUgSERNSV9DRUNfVFhfSU5UX01B U0sJCTB4ZDgKKyNkZWZpbmUgbV9UWF9ET05FCQkJKDEgPDwgMykKKyNkZWZpbmUgbV9UWF9OT0FD SwkJCSgxIDw8IDIpCisjZGVmaW5lIG1fVFhfQlJPQURDQVNUX1JFSgkJKDEgPDwgMSkKKyNkZWZp bmUgbV9UWF9CVVNOT1RGUkVFCQkJKDEgPDwgMCkKKworI2RlZmluZSBIRE1JX0NFQ19SWF9JTlRf TUFTSwkJMHhkOQorI2RlZmluZSBtX1JYX0xBX0VSUgkJCSgxIDw8IDQpCisjZGVmaW5lIG1fUlhf R0xJVENICQkJKDEgPDwgMykKKyNkZWZpbmUgbV9SWF9ET05FCQkJKDEgPDwgMCkKKworI2RlZmlu ZSBIRE1JX0NFQ19UWF9JTlQJCQkweGRhCisjZGVmaW5lIEhETUlfQ0VDX1JYX0lOVAkJCTB4ZGIK KyNkZWZpbmUgSERNSV9DRUNfQlVTRlJFRVRJTUVfTAkJMHhkYworI2RlZmluZSBIRE1JX0NFQ19C VVNGUkVFVElNRV9ICQkweGRkCisjZGVmaW5lIEhETUlfQ0VDX0xPR0lDQUREUgkJMHhkZQorCisj ZW5kaWYgLyogX19JTk5PX0hETUlfSF9fICovCi0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==