From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH 4/5] drm/i915: Implement color management on bdw/skl/bxt/kbl Date: Fri, 19 Feb 2016 15:39:21 +0000 Message-ID: <1455896362-27819-5-git-send-email-lionel.g.landwerlin@intel.com> References: <1455896362-27819-1-git-send-email-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1455896362-27819-1-git-send-email-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Kumar@freedesktop.org, kausalmalladi@gmail.com, kiran.s.kumar@intel.com List-Id: dri-devel@lists.freedesktop.org UGF0Y2ggYmFzZWQgb24gYSBwcmV2aW91cyBzZXJpZXMgYnkgU2hhc2hhbmsgU2hhcm1hLgoKdjI6 IERvIG5vdCByZWFkIEdBTU1BX01PREUgcmVnaXN0ZXIgdG8gZmlndXJlIHdoYXQgbW9kZSB3ZSdy ZSBpbgoKdjM6IFByb2dyYW0gUFJFQ19QQUxfR0NfTUFYIHRvIGNsYW1wIHBpeGVsIHZhbHVlcyA+ IDEuMAoKICAgIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0aGUgQnJvYWRjYXN0IFJHQiBwcm9w ZXJ0eSBpcyBhZmZlY3RlZCBieSBDVE0KCnY0OiBVcGRhdGUgY29udHJpYnV0b3JzCgp2NTogUmVm YWN0b3IgZGVnYW1tYS9nYW1tYSBMVVRzIGxvYWQgaW50byBhIHNpbmdsZSBmdW5jdGlvbgoKU2ln bmVkLW9mZi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgpT aWduZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRl bC5jb20+ClNpZ25lZC1vZmYtYnk6IEt1bWFyLCBLaXJhbiBTIDxraXJhbi5zLmt1bWFyQGludGVs LmNvbT4KU2lnbmVkLW9mZi1ieTogS2F1c2FsIE1hbGxhZGkgPGthdXNhbG1hbGxhZGlAZ21haWwu Y29tPgotLS0KIERvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCAgICAgICB8ICAgNiArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgIHwgIDI0ICsrLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmggICAgICB8ICAyMiArKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Nv bG9yLmMgICB8IDM1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDIyICsrLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jICAgfCAgIDggKwogOCBmaWxlcyBjaGFuZ2VkLCAzODQgaW5zZXJ0aW9ucygrKSwg NjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50 bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCmluZGV4IDE2OTJjNGQuLjQzMGU5 OWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAorKysgYi9Eb2N1 bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwKQEAgLTIxNTMsNyArMjE1MywxMSBAQCB2b2lkIGlu dGVsX2NydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJPHRkIHZhbGlnbj0idG9wIiA+ RU5VTTwvdGQ+CiAJPHRkIHZhbGlnbj0idG9wIiA+eyAiQXV0b21hdGljIiwgIkZ1bGwiLCAiTGlt aXRlZCAxNjoyMzUiIH08L3RkPgogCTx0ZCB2YWxpZ249InRvcCIgPkNvbm5lY3RvcjwvdGQ+Ci0J PHRkIHZhbGlnbj0idG9wIiA+VEJEPC90ZD4KKwk8dGQgdmFsaWduPSJ0b3AiID5XaGVuIHRoaXMg cHJvcGVydHkgaXMgc2V0IHRvIExpbWl0ZWQgMTY6MjM1CisJCWFuZCBDVE0gaXMgc2V0LCB0aGUg aGFyZHdhcmUgd2lsbCBiZSBwcm9ncmFtbWVkIHdpdGggdGhlCisJCXJlc3VsdCBvZiB0aGUgbXVs dGlwbGljYXRpb24gb2YgQ1RNIGJ5IHRoZSBsaW1pdGVkIHJhbmdlCisJCW1hdHJpeCB0byBlbnN1 cmUgdGhlIHBpeGVscyBub3JtYWx5IGluIHRoZSByYW5nZSAwLi4xLjAgYXJlCisJCXJlbWFwcGVk IHRvIHRoZSByYW5nZSAxNi8yNTUuLjIzNS8yNTUuPC90ZD4KIAk8L3RyPgogCTx0cj4KIAk8dGQg dmFsaWduPSJ0b3AiID7igJxhdWRpb+KAnTwvdGQ+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCAyMGU4MjAwLi4zODA3YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTY2LDYgKzY2 LDkgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKICNkZWZpbmUgSVZCX0NVUlNP Ul9PRkZTRVRTIFwKIAkuY3Vyc29yX29mZnNldHMgPSB7IENVUlNPUl9BX09GRlNFVCwgSVZCX0NV UlNPUl9CX09GRlNFVCwgSVZCX0NVUlNPUl9DX09GRlNFVCB9CiAKKyNkZWZpbmUgQkRXX0NPTE9S UyBcCisJLmNvbG9yID0geyAuZGVnYW1tYV9sdXRfc2l6ZSA9IDUxMiwgLmdhbW1hX2x1dF9zaXpl ID0gNTEyIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9p ODMwX2luZm8gPSB7CiAJLmdlbiA9IDIsIC5pc19tb2JpbGUgPSAxLCAuY3Vyc29yX25lZWRzX3Bo eXNpY2FsID0gMSwgLm51bV9waXBlcyA9IDIsCiAJLmhhc19vdmVybGF5ID0gMSwgLm92ZXJsYXlf bmVlZHNfcGh5c2ljYWwgPSAxLApAQCAtMjg4LDI0ICsyOTEsMjggQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9oYXN3ZWxsX21faW5mbyA9IHsKIAkuaXNfbW9i aWxlID0gMSwKIH07CiAKKyNkZWZpbmUgQkRXX0ZFQVRVUkVTIFwKKwlIU1dfRkVBVFVSRVMsIFwK KwlCRFdfQ09MT1JTCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50 ZWxfYnJvYWR3ZWxsX2RfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAog CS5nZW4gPSA4LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBp bnRlbF9icm9hZHdlbGxfbV9pbmZvID0gewotCUhTV19GRUFUVVJFUywKKwlCRFdfRkVBVFVSRVMs CiAJLmdlbiA9IDgsIC5pc19tb2JpbGUgPSAxLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9icm9hZHdlbGxfZ3QzZF9pbmZvID0gewotCUhTV19GRUFU VVJFUywKKwlCRFdfRkVBVFVSRVMsCiAJLmdlbiA9IDgsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9S SU5HIHwgQlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9Owog CiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9n dDNtX2luZm8gPSB7Ci0JSFNXX0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuZ2VuID0gOCwg LmlzX21vYmlsZSA9IDEsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBC TFRfUklORyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9OwpAQCAtMzIxLDEzICszMjgsMTMg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9jaGVycnl2aWV3 X2luZm8gPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGlu dGVsX3NreWxha2VfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5p c19za3lsYWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMs CisJQkRXX0ZFQVRVUkVTLAogCS5pc19za3lsYWtlID0gMSwKIAkuZ2VuID0gOSwKIAkucmluZ19t YXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJT RDJfUklORywKQEAgLTM0NSwxNyArMzUyLDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf ZGV2aWNlX2luZm8gaW50ZWxfYnJveHRvbl9pbmZvID0gewogCS5oYXNfZmJjID0gMSwKIAlHRU5f REVGQVVMVF9QSVBFT0ZGU0VUUywKIAlJVkJfQ1VSU09SX09GRlNFVFMsCisJQkRXX0NPTE9SUywK IH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxh a2VfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5pc19wcmVsaW1p bmFyeSA9IDEsCiAJLmlzX2thYnlsYWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfZ3QzX2luZm8gPSB7 Ci0JSFNXX0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuaXNfcHJlbGltaW5hcnkgPSAxLAog CS5pc19rYWJ5bGFrZSA9IDEsCiAJLmdlbiA9IDksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRl eCA2NjM0YzA5Li43NjI3YTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTY2MCw2ICs2 NjAsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyB7CiAJLyogZGlzcGxheSBjbG9j ayBpbmNyZWFzZS9kZWNyZWFzZSAqLwogCS8qIHBsbCBjbG9jayBpbmNyZWFzZS9kZWNyZWFzZSAq LwogCisJdm9pZCAoKmxvYWRfY3NjX21hdHJpeCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAl2 b2lkICgqbG9hZF9sdXRzKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogfTsKIApAQCAtODA4LDYg KzgwOSwxMSBAQCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gewogCXU4IGhhc19zbGljZV9wZzox OwogCXU4IGhhc19zdWJzbGljZV9wZzoxOwogCXU4IGhhc19ldV9wZzoxOworCisJc3RydWN0IGNv bG9yX2x1dHMgeworCQl1MTYgZGVnYW1tYV9sdXRfc2l6ZTsKKwkJdTE2IGdhbW1hX2x1dF9zaXpl OworCX0gY29sb3I7CiB9OwogCiAjdW5kZWYgREVGSU5FX0ZMQUcKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCmluZGV4IDM3NzQ4NzAuLjhjZTc2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAt NzY1MCw2ICs3NjUwLDI4IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBQ SVBFX0NTQ19QT1NUT0ZGX01FKHBpcGUpCV9NTUlPX1BJUEUocGlwZSwgX1BJUEVfQV9DU0NfUE9T VE9GRl9NRSwgX1BJUEVfQl9DU0NfUE9TVE9GRl9NRSkKICNkZWZpbmUgUElQRV9DU0NfUE9TVE9G Rl9MTyhwaXBlKQlfTU1JT19QSVBFKHBpcGUsIF9QSVBFX0FfQ1NDX1BPU1RPRkZfTE8sIF9QSVBF X0JfQ1NDX1BPU1RPRkZfTE8pCiAKKy8qIHBpcGUgZGVnYW1tYS9nYW1tYSBMVVRzIG9uIElWQisg Ki8KKyNkZWZpbmUgX1BBTF9QUkVDX0lOREVYX0EJMHg0QTQwMAorI2RlZmluZSBfUEFMX1BSRUNf SU5ERVhfQgkweDRBQzAwCisjZGVmaW5lIF9QQUxfUFJFQ19JTkRFWF9DCTB4NEI0MDAKKyNkZWZp bmUgICBQQUxfUFJFQ18xMF8xMl9CSVQJCSgwIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX1NQ TElUX01PREUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UCSgx IDw8IDE1KQorI2RlZmluZSBfUEFMX1BSRUNfREFUQV9BCTB4NEE0MDQKKyNkZWZpbmUgX1BBTF9Q UkVDX0RBVEFfQgkweDRBQzA0CisjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0MJMHg0QjQwNAorI2Rl ZmluZSBfUEFMX1BSRUNfR0NfTUFYX0EJMHg0QTQxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFY X0IJMHg0QUMxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0MJMHg0QjQxMAorI2RlZmluZSBf UEFMX1BSRUNfRVhUX0dDX01BWF9BCTB4NEE0MjAKKyNkZWZpbmUgX1BBTF9QUkVDX0VYVF9HQ19N QVhfQgkweDRBQzIwCisjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0MJMHg0QjQyMAorCisj ZGVmaW5lIFBSRUNfUEFMX0lOREVYKHBpcGUpCQlfTU1JT19QSVBFKHBpcGUsIF9QQUxfUFJFQ19J TkRFWF9BLCBfUEFMX1BSRUNfSU5ERVhfQikKKyNkZWZpbmUgUFJFQ19QQUxfREFUQShwaXBlKQkJ X01NSU9fUElQRShwaXBlLCBfUEFMX1BSRUNfREFUQV9BLCBfUEFMX1BSRUNfREFUQV9CKQorI2Rl ZmluZSBQUkVDX1BBTF9HQ19NQVgocGlwZSwgaSkJX01NSU8oX1BJUEUocGlwZSwgX1BBTF9QUkVD X0dDX01BWF9BLCBfUEFMX1BSRUNfR0NfTUFYX0IpICsgKGkpICogNCkKKyNkZWZpbmUgUFJFQ19Q QUxfRVhUX0dDX01BWChwaXBlLCBpKQlfTU1JTyhfUElQRShwaXBlLCBfUEFMX1BSRUNfRVhUX0dD X01BWF9BLCBfUEFMX1BSRUNfRVhUX0dDX01BWF9CKSArIChpKSAqIDQpCisKIC8qIE1JUEkgRFNJ IHJlZ2lzdGVycyAqLwogCiAjZGVmaW5lIF9NSVBJX1BPUlQocG9ydCwgYSwgYykJX1BPUlQzKHBv cnQsIGEsIDAsIGMpCS8qIHBvcnRzIEEgYW5kIEMgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2NvbG9yLmMKaW5kZXggYmEyN2NlMi4uMTVkODZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfY29sb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9j b2xvci5jCkBAIC0yNCw0NCArMjQsMTcyIEBACiAKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAor I2RlZmluZSBDVE1fQ09FRkZfU0lHTgkoMVVMTCA8PCA2MykKKworI2RlZmluZSBDVE1fQ09FRkZf MV8wCSgxVUxMIDw8IDMyKQorI2RlZmluZSBDVE1fQ09FRkZfMl8wCShDVE1fQ09FRkZfMV8wIDw8 IDEpCisjZGVmaW5lIENUTV9DT0VGRl80XzAJKENUTV9DT0VGRl8yXzAgPDwgMSkKKyNkZWZpbmUg Q1RNX0NPRUZGXzBfNQkoQ1RNX0NPRUZGXzFfMCA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8y NQkoQ1RNX0NPRUZGXzBfNSA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8xMjUJKENUTV9DT0VG Rl8wXzI1ID4+IDEpCisKKyNkZWZpbmUgQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgKCgyMzVVTEwg LSAxNlVMTCkgKiBDVE1fQ09FRkZfMV8wIC8gMjU1KQorCisjZGVmaW5lIENUTV9DT0VGRl9ORUdB VElWRShjb2VmZikJKCgoY29lZmYpICYgQ1RNX0NPRUZGX1NJR04pICE9IDApCisjZGVmaW5lIENU TV9DT0VGRl9BQlMoY29lZmYpCQkoKGNvZWZmKSAmIChDVE1fQ09FRkZfU0lHTiAtIDEpKQorCisj ZGVmaW5lIExFR0FDWV9MVVRfTEVOR1RICQkoc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAq IDI1NikKKwogLyoKLSAqIFNldCB1cCB0aGUgcGlwZSBDU0MgdW5pdC4KKyAqIEV4dHJhY3QgdGhl IENTQyBjb2VmZmljaWVudCBmcm9tIGEgQ1RNIGNvZWZmaWNpZW50IChpbiBVMzIuMzIgZml4ZWQg cG9pbnQKKyAqIGZvcm1hdCkuIFRoaXMgbWFjcm8gdGFrZXMgdGhlIGNvZWZmaWNpZW50IHdlIHdh bnQgdHJhbnNmb3JtZWQgYW5kIHRoZQorICogbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cy4KICAq Ci0gKiBDdXJyZW50bHkgb25seSBmdWxsIHJhbmdlIFJHQiB0byBsaW1pdGVkIHJhbmdlIFJHQiBj b252ZXJzaW9uCi0gKiBpcyBzdXBwb3J0ZWQsIGJ1dCBldmVudHVhbGx5IHRoaXMgc2hvdWxkIGhh bmRsZSB2YXJpb3VzCi0gKiBSR0I8LT5ZQ2JDciBzY2VuYXJpb3MgYXMgd2VsbC4KKyAqIFdlIG9u bHkgaGF2ZSBhIDkgYml0cyBwcmVjaXNpb24gd2luZG93IHdoaWNoIHNsaWRlcyBkZXBlbmRpbmcg b24gdGhlIHZhbHVlCisgKiBvZiB0aGUgQ1RNIGNvZWZmaWNpZW50IGFuZCB3ZSB3cml0ZSB0aGUg dmFsdWUgZnJvbSBiaXQgMy4gV2UgYWxzbyByb3VuZCB0aGUKKyAqIHZhbHVlLgogICovCisjZGVm aW5lIEk5WFhfQ1NDX0NPRUZGX0ZQKGNvZWZmLCBmYml0cykJXAorCShjbGFtcF92YWwoKChjb2Vm ZikgPj4gKDMyIC0gKGZiaXRzKSAtIDMpKSArIDQsIDAsIDB4ZmZmKSAmIDB4ZmY4KQorCisjZGVm aW5lIEk5WFhfQ1NDX0NPRUZGX0xJTUlURURfUkFOR0UJXAorCUk5WFhfQ1NDX0NPRUZGX0ZQKENU TV9DT0VGRl9MSU1JVEVEX1JBTkdFLCA5KQorI2RlZmluZSBJOVhYX0NTQ19DT0VGRl8xXzAJCVwK KwkoKDcgPDwgMTIpIHwgSTlYWF9DU0NfQ09FRkZfRlAoQ1RNX0NPRUZGXzFfMCwgOCkpCisKK3N0 YXRpYyBib29sIGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUpCit7CisJcmV0dXJuICFzdGF0ZS0+ZGVnYW1tYV9sdXQgJiYKKwkJIXN0YXRlLT5jdG0gJiYK KwkJc3RhdGUtPmdhbW1hX2x1dCAmJgorCQlzdGF0ZS0+Z2FtbWFfbHV0LT5sZW5ndGggPT0gTEVH QUNZX0xVVF9MRU5HVEg7Cit9CisKKy8qCisgKiBXaGVuIHVzaW5nIGxpbWl0ZWQgcmFuZ2UsIG11 bHRpcGx5IHRoZSBtYXRyaXggZ2l2ZW4gYnkgdXNlcnNwYWNlIGJ5CisgKiB0aGUgbWF0cml4IHRo YXQgd2Ugd291bGQgdXNlIGZvciB0aGUgbGltaXRlZCByYW5nZS4gV2UgZG8gdGhlCisgKiBtdWx0 aXBsaWNhdGlvbiBpbiBVMi4zMCBmb3JtYXQuCisgKi8KK3N0YXRpYyB2b2lkIGN0bV9tdWx0X2J5 X2xpbWl0ZWQodWludDY0X3QgKnJlc3VsdCwgaW50NjRfdCAqaW5wdXQpCit7CisJaW50IGksIGo7 CisJdWludDY0X3QgbGltaXRlZF9jb2VmZnNbOV0gPSB7IENUTV9DT0VGRl9MSU1JVEVEX1JBTkdF LCAwLCAwLAorCQkJCSAgICAgICAwLCBDVE1fQ09FRkZfTElNSVRFRF9SQU5HRSwgMCwKKwkJCQkg ICAgICAgMCwgMCwgQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgfTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGxpbWl0ZWRfY29lZmZzKTsgaSsrKSB7CisJCWludCBjb2x1bW4gPSBpICUg Mywgcm93ID0gaSAvIDM7CisJCWludCBuZWdhdGl2ZSA9IDA7CisKKwkJaW5wdXRbaV0gPSAwOwor CQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJCQlpbnQ2NF90IHVzZXJfY29lZmYgPSBpbnB1 dFtqICogMyArIGNvbHVtbl07CisJCQl1aW50NjRfdCBsaW1pdGVkX2NvZWZmID0KKwkJCQlsaW1p dGVkX2NvZWZmc1tyb3cgKiAzICsgal0gPj4gMjsKKwkJCXVpbnQ2NF90IGFic19jb2VmZiA9CisJ CQkJY2xhbXBfdmFsKENUTV9DT0VGRl9BQlModXNlcl9jb2VmZiksCisJCQkJCSAgMCwKKwkJCQkJ ICBDVE1fQ09FRkZfNF8wIC0gMSkgPj4gMjsKKworCQkJaWYgKENUTV9DT0VGRl9ORUdBVElWRSh1 c2VyX2NvZWZmKSkKKwkJCQluZWdhdGl2ZSA9ICFuZWdhdGl2ZTsKKwkJCXJlc3VsdFtpXSArPSBs aW1pdGVkX2NvZWZmICogYWJzX2NvZWZmOworCQl9CisKKwkJcmVzdWx0W2ldID4+PSAyNzsKKwkJ aWYgKG5lZ2F0aXZlKQorCQkJcmVzdWx0W2ldIHw9IENUTV9DT0VGRl9TSUdOOworCX0KK30KKwor LyogU2V0IHVwIHRoZSBwaXBlIENTQyB1bml0LiAqLwogc3RhdGljIHZvaWQgaTl4eF9sb2FkX2Nz Y19tYXRyaXgoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gY3J0 Yy0+c3RhdGU7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Yyk7Ci0JaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCXVpbnQxNl90IGNvZWZmID0g MHg3ODAwOyAvKiAxLjAgKi8KKwlpbnQgaSwgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJdWlu dDE2X3QgY29lZmZzWzldID0geyAwLCB9OwogCi0JLyoKLQkgKiBUT0RPOiBDaGVjayB3aGF0IGtp bmQgb2YgdmFsdWVzIGFjdHVhbGx5IGNvbWUgb3V0IG9mIHRoZSBwaXBlCi0JICogd2l0aCB0aGVz ZSBjb2VmZi9wb3N0b2ZmIHZhbHVlcyBhbmQgYWRqdXN0IHRvIGdldCB0aGUgYmVzdAotCSAqIGFj Y3VyYWN5LiBQZXJoYXBzIHdlIGV2ZW4gbmVlZCB0byB0YWtlIHRoZSBicGMgdmFsdWUgaW50bwot CSAqIGNvbnNpZGVyYXRpb24uCi0JICovCisJaWYgKGNydGNfc3RhdGUtPmN0bSkgeworCQlzdHJ1 Y3QgZHJtX2NvbG9yX2N0bSAqY3RtID0KKwkJCShzdHJ1Y3QgZHJtX2NvbG9yX2N0bSAqKWNydGNf c3RhdGUtPmN0bS0+ZGF0YTsKKwkJdWludDY0X3QgaW5wdXRbOV0gPSB7IDAsIH07CiAKLQlpZiAo aW50ZWxfY3J0Yy0+Y29uZmlnLT5saW1pdGVkX2NvbG9yX3JhbmdlKQotCQljb2VmZiA9ICgoMjM1 IC0gMTYpICogKDEgPDwgMTIpIC8gMjU1KSAmIDB4ZmY4OyAvKiAwLnh4eC4uLiAqLworCQlpZiAo aW50ZWxfY3J0Yy0+Y29uZmlnLT5saW1pdGVkX2NvbG9yX3JhbmdlKQorCQkJY3RtX211bHRfYnlf bGltaXRlZChpbnB1dCwgY3RtLT5tYXRyaXgpOworCQllbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGlucHV0KTsgaSsrKQorCQkJCWlucHV0W2ldID0gY3RtLT5tYXRyaXhbaV07 CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGZpeGVkIHBvaW50IFMzMS4zMiBpbnB1dCB0byBm b3JtYXQgc3VwcG9ydGVkIGJ5IHRoZQorCQkgKiBoYXJkd2FyZS4KKwkJICovCisJCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZmcyk7IGkrKykgeworCQkJdWludDY0X3QgYWJzX2NvZWZm ID0gKCgxVUxMIDw8IDYzKSAtIDEpICYgaW5wdXRbaV07CisKKwkJCS8qCisJCQkgKiBDbGFtcCBp bnB1dCB2YWx1ZSB0byBtaW4vbWF4IHN1cHBvcnRlZCBieQorCQkJICogaGFyZHdhcmUuCisJCQkg Ki8KKwkJCWFic19jb2VmZiA9IGNsYW1wX3ZhbChhYnNfY29lZmYsIDAsIENUTV9DT0VGRl80XzAg LSAxKTsKKworCQkJLyogc2lnbiBiaXQgKi8KKwkJCWlmIChDVE1fQ09FRkZfTkVHQVRJVkUoaW5w dXRbaV0pKQorCQkJCWNvZWZmc1tpXSB8PSAxIDw8IDE1OworCisJCQlpZiAoYWJzX2NvZWZmIDwg Q1RNX0NPRUZGXzBfMTI1KQorCQkJCWNvZWZmc1tpXSB8PSAoMyA8PCAxMikgfAorCQkJCQlJOVhY X0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDEyKTsKKwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENU TV9DT0VGRl8wXzI1KQorCQkJCWNvZWZmc1tpXSB8PSAoMiA8PCAxMikgfAorCQkJCQlJOVhYX0NT Q19DT0VGRl9GUChhYnNfY29lZmYsIDExKTsKKwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9D T0VGRl8wXzUpCisJCQkJY29lZmZzW2ldIHw9ICgxIDw8IDEyKSB8CisJCQkJCUk5WFhfQ1NDX0NP RUZGX0ZQKGFic19jb2VmZiwgMTApOworCQkJZWxzZSBpZiAoYWJzX2NvZWZmIDwgQ1RNX0NPRUZG XzFfMCkKKwkJCQljb2VmZnNbaV0gfD0gSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZmLCA5KTsK KwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9DT0VGRl8yXzApCisJCQkJY29lZmZzW2ldIHw9 ICg3IDw8IDEyKSB8CisJCQkJCUk5WFhfQ1NDX0NPRUZGX0ZQKGFic19jb2VmZiwgOCk7CisJCQll bHNlCisJCQkJY29lZmZzW2ldIHw9ICg2IDw8IDEyKSB8CisJCQkJCUk5WFhfQ1NDX0NPRUZGX0ZQ KGFic19jb2VmZiwgNyk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBMb2FkIGFuIGlkZW50 aWZ5IG1hdHJpeCBpZiBubyBjb2VmZmljaWVudHMgYXJlIHByb3ZpZGVkLgorCQkgKgorCQkgKiBU T0RPOiBDaGVjayB3aGF0IGtpbmQgb2YgdmFsdWVzIGFjdHVhbGx5IGNvbWUgb3V0IG9mIHRoZQor CQkgKiBwaXBlIHdpdGggdGhlc2UgY29lZmYvcG9zdG9mZiB2YWx1ZXMgYW5kIGFkanVzdCB0byBn ZXQgdGhlCisJCSAqIGJlc3QgYWNjdXJhY3kuIFBlcmhhcHMgd2UgZXZlbiBuZWVkIHRvIHRha2Ug dGhlIGJwYyB2YWx1ZQorCQkgKiBpbnRvIGNvbnNpZGVyYXRpb24uCisJCSAqLworCQlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5saW1pdGVkX2Nv bG9yX3JhbmdlKQorCQkJCWNvZWZmc1tpICogMyArIGldID0KKwkJCQkJSTlYWF9DU0NfQ09FRkZf TElNSVRFRF9SQU5HRTsKKwkJCWVsc2UKKwkJCQljb2VmZnNbaSAqIDMgKyBpXSA9IEk5WFhfQ1ND X0NPRUZGXzFfMDsKKwkJfQorCX0KIAogCS8qCiAJICogR1kvR1UgYW5kIFJZL1JVIHNob3VsZCBi ZSB0aGUgb3RoZXIgd2F5IGFyb3VuZCBhY2NvcmRpbmcKIAkgKiB0byBCU3BlYywgYnV0IHJlYWxp dHkgZG9lc24ndCBhZ3JlZS4gSnVzdCBzZXQgdGhlbSB1cCBpbgogCSAqIGEgd2F5IHRoYXQgcmVz dWx0cyBpbiB0aGUgY29ycmVjdCBwaWN0dXJlLgogCSAqLwotCUk5MTVfV1JJVEUoUElQRV9DU0Nf Q09FRkZfUllfR1kocGlwZSksIGNvZWZmIDw8IDE2KTsKLQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NP RUZGX0JZKHBpcGUpLCAwKTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JZX0dZKHBpcGUp LCBjb2VmZnNbMF0gPDwgMTYgfCBjb2VmZnNbMV0pOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfQlkocGlwZSksIGNvZWZmc1syXSA8PCAxNik7CiAKLQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NP RUZGX1JVX0dVKHBpcGUpLCBjb2VmZik7Ci0JSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9CVShw aXBlKSwgMCk7CisJSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9SVV9HVShwaXBlKSwgY29lZmZz WzNdIDw8IDE2IHwgY29lZmZzWzRdKTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JVKHBp cGUpLCBjb2VmZnNbNV0gPDwgMTYpOwogCi0JSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9SVl9H VihwaXBlKSwgMCk7Ci0JSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9CVihwaXBlKSwgY29lZmYg PDwgMTYpOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09FRkZfUlZfR1YocGlwZSksIGNvZWZmc1s2 XSA8PCAxNiB8IGNvZWZmc1s3XSk7CisJSTkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9CVihwaXBl KSwgY29lZmZzWzhdIDw8IDE2KTsKIAogCUk5MTVfV1JJVEUoUElQRV9DU0NfUFJFT0ZGX0hJKHBp cGUpLCAwKTsKIAlJOTE1X1dSSVRFKFBJUEVfQ1NDX1BSRU9GRl9NRShwaXBlKSwgMCk7CkBAIC05 MCwxNiArMjE4LDIwIEBAIHN0YXRpYyB2b2lkIGk5eHhfbG9hZF9jc2NfbWF0cml4KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIAogdm9pZCBpbnRlbF9jb2xvcl9zZXRfY3NjKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIHsKLQlpOXh4X2xvYWRfY3NjX21hdHJpeChjcnRjKTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9jc2Nf bWF0cml4KQorCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2NzY19tYXRyaXgoY3J0Yyk7CiB9CiAK LS8qIExvYWRzIHRoZSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRoZSBDUlRDIHdpdGggdGhlIHBy ZXBhcmVkIHZhbHVlcy4gKi8KKy8qIExvYWRzIHRoZSBsZWdhY3kgcGFsZXR0ZS9nYW1tYSB1bml0 IGZvciB0aGUgQ1JUQy4gKi8KIHN0YXRpYyB2b2lkIGk5eHhfbG9hZF9sdXRzKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUgPSBjcnRjLT5zdGF0ZTsKIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQllbnVtIHBpcGUgcGlwZSA9 IGludGVsX2NydGMtPnBpcGU7CisJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMp LT5waXBlOwogCWludCBpOwogCiAJaWYgKEhBU19HTUNIX0RJU1BMQVkoZGV2KSkgewpAQCAtMTA5 LDE4ICsyNDEsMzMgQEAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dHMoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogCQkJYXNzZXJ0X3BsbF9lbmFibGVkKGRldl9wcml2LCBwaXBlKTsKIAl9CiAKLQlm b3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJdWludDMyX3Qgd29yZCA9IChpbnRlbF9jcnRj LT5sdXRfcltpXSA8PCAxNikgfAotCQkJKGludGVsX2NydGMtPmx1dF9nW2ldIDw8IDgpIHwKLQkJ CWludGVsX2NydGMtPmx1dF9iW2ldOwotCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQotCQkJ STkxNV9XUklURShQQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKLQkJZWxzZQotCQkJSTkxNV9XUklU RShMR0NfUEFMRVRURShwaXBlLCBpKSwgd29yZCk7CisJaWYgKHN0YXRlLT5nYW1tYV9sdXQpIHsK KwkJc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dCA9CisJCQkoc3RydWN0IGRybV9jb2xvcl9sdXQg Kikgc3RhdGUtPmdhbW1hX2x1dC0+ZGF0YTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7 CisJCQl1aW50MzJfdCB3b3JkID0KKwkJCQkoZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5y ZWQsIDgpIDw8IDE2KSB8CisJCQkJKGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4s IDgpIDw8IDgpIHwKKwkJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDgpOwor CisJCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQorCQkJCUk5MTVfV1JJVEUoUEFMRVRURShw aXBlLCBpKSwgd29yZCk7CisJCQllbHNlCisJCQkJSTkxNV9XUklURShMR0NfUEFMRVRURShwaXBl LCBpKSwgd29yZCk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp IHsKKwkJCXVpbnQzMl90IHdvcmQgPSAoaSA8PCAxNikgfCAoaSA8PCA4KSB8IGk7CisKKwkJCWlm IChIQVNfR01DSF9ESVNQTEFZKGRldikpCisJCQkJSTkxNV9XUklURShQQUxFVFRFKHBpcGUsIGkp LCB3b3JkKTsKKwkJCWVsc2UKKwkJCQlJOTE1X1dSSVRFKExHQ19QQUxFVFRFKHBpcGUsIGkpLCB3 b3JkKTsKKwkJfQogCX0KIH0KIAotLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1hIHVu aXQgZm9yIHRoZSBDUlRDIG9uIEhhc3dlbGwrLiAqLworLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxl dHRlL2dhbW1hIHVuaXQgZm9yIHRoZSBDUlRDIG9uIEhhc3dlbGwuICovCiBzdGF0aWMgdm9pZCBo YXN3ZWxsX2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTE0OSw2ICsyOTYsODkgQEAgc3RhdGljIHZvaWQg aGFzd2VsbF9sb2FkX2x1dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQloc3dfZW5hYmxlX2lw cyhpbnRlbF9jcnRjKTsKIH0KIAorLyogTG9hZHMgdGhlIHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3Ig dGhlIENSVEMgb24gQnJvYWR3ZWxsKy4gKi8KK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9sb2FkX2x1 dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj cnRjLT5kZXY7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0 ZShzdGF0ZSk7CisJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwor CXVpbnQzMl90IGksIGx1dF9zaXplID0gSU5URUxfSU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1 dF9zaXplOworCisJaWYgKGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0YXRlKSkgeworCQloYXN3ZWxs X2xvYWRfbHV0cyhjcnRjKTsKKwkJcmV0dXJuOworCX0KKworCUk5MTVfV1JJVEUoUFJFQ19QQUxf SU5ERVgocGlwZSksCisJCSAgIFBBTF9QUkVDX1NQTElUX01PREUgfCBQQUxfUFJFQ19BVVRPX0lO Q1JFTUVOVCk7CisKKwlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29s b3JfbHV0ICpsdXQgPQorCQkJKHN0cnVjdCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5kZWdhbW1h X2x1dC0+ZGF0YTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJdWlu dDMyX3Qgd29yZCA9CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTApIDw8 IDIwIHwKKwkJCWRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4sIDEwKSA8PCAxMCB8 CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDEwKTsKKworCQkJSTkxNV9X UklURShQUkVDX1BBTF9EQVRBKHBpcGUpLCB3b3JkKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAo aSA9IDA7IGkgPCBsdXRfc2l6ZTsgaSsrKSB7CisJCQl1aW50MzJfdCB2ID0gKGkgKiAoKDEgPDwg MTApIC0gMSkpIC8gKGx1dF9zaXplIC0gMSk7CisKKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFU QShwaXBlKSwKKwkJCQkgICAodiA8PCAyMCkgfCAodiA8PCAxMCkgfCB2KTsKKwkJfQorCX0KKwor CWlmIChzdGF0ZS0+Z2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPQor CQkJKHN0cnVjdCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5nYW1tYV9sdXQtPmRhdGE7CisKKwkJ Zm9yIChpID0gMDsgaSA8IGx1dF9zaXplOyBpKyspIHsKKwkJCXVpbnQzMl90IHdvcmQgPQorCQkJ KGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0ucmVkLCAxMCkgPDwgMjApIHwKKwkJCShkcm1f Y29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmdyZWVuLCAxMCkgPDwgMTApIHwKKwkJCWRybV9jb2xv cl9sdXRfZXh0cmFjdChsdXRbaV0uYmx1ZSwgMTApOworCisJCQlJOTE1X1dSSVRFKFBSRUNfUEFM X0RBVEEocGlwZSksIHdvcmQpOworCQl9CisKKwkJLyogUHJvZ3JhbSB0aGUgbWF4IHJlZ2lzdGVy IHRvIGNsYW1wIHZhbHVlcyA+IDEuMC4gKi8KKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgo cGlwZSwgMCksCisJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTYpKTsK KwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMSksCisJCQkgICBkcm1fY29sb3Jf bHV0X2V4dHJhY3QobHV0W2ldLmdyZWVuLCAxNikpOworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dD X01BWChwaXBlLCAyKSwKKwkJCSAgIGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uYmx1ZSwg MTYpKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJ dWludDMyX3QgdiA9IChpICogKCgxIDw8IDEwKSAtIDEpKSAvIChsdXRfc2l6ZSAtIDEpOworCisJ CQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlwZSksCisJCQkJICAgKHYgPDwgMjApIHwgKHYg PDwgMTApIHwgdik7CisJCX0KKworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAw KSwgKDEgPDwgMTYpIC0gMSk7CisJCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDEp LCAoMSA8PCAxNikgLSAxKTsKKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiks ICgxIDw8IDE2KSAtIDEpOworCX0KKworCWludGVsX3N0YXRlLT5nYW1tYV9tb2RlID0gR0FNTUFf TU9ERV9NT0RFX1NQTElUOworCUk5MTVfV1JJVEUoR0FNTUFfTU9ERShwaXBlKSwgR0FNTUFfTU9E RV9NT0RFX1NQTElUKTsKKwlQT1NUSU5HX1JFQUQoR0FNTUFfTU9ERShwaXBlKSk7CisKKwkvKgor CSAqIFJlc2V0IHRoZSBpbmRleCwgb3RoZXJ3aXNlIGl0IHByZXZlbnRzIHRoZSBsZWdhY3kgcGFs ZXR0ZSB0byBiZQorCSAqIHdyaXR0ZW4gcHJvcGVybHkuCisJICovCisJSTkxNV9XUklURShQUkVD X1BBTF9JTkRFWChwaXBlKSwgMCk7Cit9CisKIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ ZGV2OwpAQCAtMTYxLDM4ICszOTEsNjEgQEAgdm9pZCBpbnRlbF9jb2xvcl9sb2FkX2x1dHMoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQogCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyhjcnRjKTsK IH0KIAotdm9pZCBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCi0JCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHN0 YXJ0LCB1aW50MzJfdCBzaXplKQoraW50IGludGVsX2NvbG9yX2NoZWNrKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKKwkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewot CWludCBlbmQgPSAoc3RhcnQgKyBzaXplID4gMjU2KSA/IDI1NiA6IHN0YXJ0ICsgc2l6ZSwgaTsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzaXplX3QgZ2FtbWFfbGVuZ3Ro LCBkZWdhbW1hX2xlbmd0aDsKIAotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJ aW50ZWxfY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gODsKLQkJaW50ZWxfY3J0Yy0+bHV0X2db aV0gPSBncmVlbltpXSA+PiA4OwotCQlpbnRlbF9jcnRjLT5sdXRfYltpXSA9IGJsdWVbaV0gPj4g ODsKLQl9CisJZGVnYW1tYV9sZW5ndGggPSBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFf bHV0X3NpemUgKgorCQlzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpOworCWdhbW1hX2xlbmd0 aCA9IElOVEVMX0lORk8oZGV2KS0+Y29sb3IuZ2FtbWFfbHV0X3NpemUgKgorCQlzaXplb2Yoc3Ry dWN0IGRybV9jb2xvcl9sdXQpOworCisJLyoKKwkgKiBXZSBhbGxvdyBib3RoIGRlZ2FtbWEgJiBn YW1tYSBsdXRzIGF0IHRoZSByaWdodCBzaXplIG9yCisJICogTlVMTC4KKwkgKi8KKwlpZiAoKCFj cnRjX3N0YXRlLT5kZWdhbW1hX2x1dCB8fAorCSAgICAgY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQt Pmxlbmd0aCA9PSBkZWdhbW1hX2xlbmd0aCkgJiYKKwkgICAgKCFjcnRjX3N0YXRlLT5nYW1tYV9s dXQgfHwKKwkgICAgIGNydGNfc3RhdGUtPmdhbW1hX2x1dC0+bGVuZ3RoID09IGdhbW1hX2xlbmd0 aCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBhbHNvIGFsbG93IG5vIGRlZ2FtbWEgbHV0 IGFuZCBhIGdhbW1hIGx1dCBhdCB0aGUgbGVnYWN5CisJICogc2l6ZSAoMjU2IGVudHJpZXMpLgor CSAqLworCWlmICghY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQgJiYKKwkgICAgY3J0Y19zdGF0ZS0+ Z2FtbWFfbHV0ICYmCisJICAgIGNydGNfc3RhdGUtPmdhbW1hX2x1dC0+bGVuZ3RoID09IExFR0FD WV9MVVRfTEVOR1RIKQorCQlyZXR1cm4gMDsKIAotCWludGVsX2NvbG9yX2xvYWRfbHV0cyhjcnRj KTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogdm9pZCBpbnRlbF9jb2xvcl9pbml0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owog CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0J c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWlu dCBpOwogCiAJZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShjcnRjLCAyNTYpOwotCWZvciAo aSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlpbnRlbF9jcnRjLT5sdXRfcltpXSA9IGk7Ci0JCWlu dGVsX2NydGMtPmx1dF9nW2ldID0gaTsKLQkJaW50ZWxfY3J0Yy0+bHV0X2JbaV0gPSBpOwotCX0K IAotCWlmIChJU19IQVNXRUxMKGRldikgfHwKLQkgICAgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49 IDggJiYgIUlTX0NIRVJSWVZJRVcoZGV2KSkpCisJaWYgKElTX0hBU1dFTEwoZGV2KSkgeworCQlk ZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2NzY19tYXRyaXggPSBpOXh4X2xvYWRfY3NjX21hdHJpeDsK IAkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9sdXRzID0gaGFzd2VsbF9sb2FkX2x1dHM7Ci0JZWxz ZQorCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikgfHwgSVNfU0tZTEFLRShkZXYpIHx8CisJ CSAgIElTX0JST1hUT04oZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSB7CisJCWRldl9wcml2LT5k aXNwbGF5LmxvYWRfY3NjX21hdHJpeCA9IGk5eHhfbG9hZF9jc2NfbWF0cml4OworCQlkZXZfcHJp di0+ZGlzcGxheS5sb2FkX2x1dHMgPSBicm9hZHdlbGxfbG9hZF9sdXRzOworCX0gZWxzZSB7CiAJ CWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGk5eHhfbG9hZF9sdXRzOworCX0KKworCS8q IEVuYWJsZSBjb2xvciBtYW5hZ2VtZW50IHN1cHBvcnQgd2hlbiB3ZSBoYXZlIGRlZ2FtbWEgJiBn YW1tYSBMVVRzLiAqLworCWlmIChJTlRFTF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3Np emUgIT0gMCAmJgorCSAgICBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmdhbW1hX2x1dF9zaXplICE9 IDApCisJCWRybV9oZWxwZXJfY3J0Y19lbmFibGVfY29sb3JfbWdtdChjcnRjLAorCQkJCQlJTlRF TF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3NpemUsCisJCQkJCUlOVEVMX0lORk8oZGV2 KS0+Y29sb3IuZ2FtbWFfbHV0X3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jCmluZGV4IGFjYmIxZDkuLjFhYWZlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKQEAgLTExODQ2LDYgKzExODQ2LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19hdG9t aWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJcmV0dXJuIHJldDsKIAl9CiAKKwlp ZiAoY3J0Y19zdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkKSB7CisJCXJldCA9IGludGVsX2NvbG9y X2NoZWNrKGNydGMsIGNydGNfc3RhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9 CisKIAlyZXQgPSAwOwogCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX3BpcGVfd20pIHsK IAkJcmV0ID0gZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKGludGVsX2NydGMsIHN0 YXRlKTsKQEAgLTExODY3LDcgKzExODczLDYgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKIAkubW9kZV9zZXRfYmFz ZV9hdG9taWMgPSBpbnRlbF9waXBlX3NldF9iYXNlX2F0b21pYywKLQkubG9hZF9sdXQgPSBpbnRl bF9jb2xvcl9sb2FkX2x1dHMsCiAJLmF0b21pY19iZWdpbiA9IGludGVsX2JlZ2luX2NydGNfY29t bWl0LAogCS5hdG9taWNfZmx1c2ggPSBpbnRlbF9maW5pc2hfY3J0Y19jb21taXQsCiAJLmF0b21p Y19jaGVjayA9IGludGVsX2NydGNfYXRvbWljX2NoZWNrLApAQCAtMTMzOTgsNiArMTM0MDMsMTgg QEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQlod19jaGVjayA9IHRydWU7CiAJCX0KIAorCQlpZiAoIW1vZGVzZXQgJiYKKwkJICAgIGNy dGMtPnN0YXRlLT5hY3RpdmUgJiYKKwkJICAgIGNydGMtPnN0YXRlLT5jb2xvcl9tZ210X2NoYW5n ZWQpIHsKKwkJCS8qCisJCQkgKiBPbmx5IHVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHdoZW4gbm90 IGRvaW5nCisJCQkgKiBhIG1vZGVzZXQgYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkKKwkJCSAqIGNy dGNfZW5hYmxlIGFscmVhZHkuCisJCQkgKi8KKwkJCWludGVsX2NvbG9yX3NldF9jc2MoY3J0Yyk7 CisJCQlpbnRlbF9jb2xvcl9sb2FkX2x1dHMoY3J0Yyk7CisJCX0KKwogCQlpZiAoIW1vZGVzZXQp CiAJCQlpbnRlbF9wcmVfcGxhbmVfdXBkYXRlKHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSkpOwogCkBAIC0xMzQ4Nyw4ICsxMzUwNCw5IEBAIG91dDoKICN1bmRlZiBmb3JfZWFjaF9pbnRl bF9jcnRjX21hc2tlZAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVs X2NydGNfZnVuY3MgPSB7Ci0JLmdhbW1hX3NldCA9IGludGVsX2NvbG9yX2xlZ2FjeV9nYW1tYV9z ZXQsCisJLmdhbW1hX3NldCA9IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQsCiAJ LnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5zZXRfcHJvcGVy dHkgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3NldF9wcm9wZXJ0eSwKIAkuZGVzdHJveSA9IGlu dGVsX2NydGNfZGVzdHJveSwKIAkucGFnZV9mbGlwID0gaW50ZWxfY3J0Y19wYWdlX2ZsaXAsCiAJ LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggOTc0MmQ1Yi4uMzA4MmRiZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmgKQEAgLTE2MjQsOSArMTYyNCw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3M7CiAKIC8qIGlu dGVsX2NvbG9yLmMgKi8KIHZvaWQgaW50ZWxfY29sb3JfaW5pdChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOworaW50IGludGVsX2NvbG9yX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CiB2b2lkIGludGVsX2NvbG9yX3NldF9jc2Moc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yyk7Ci12b2lkIGludGVsX2NvbG9yX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRy bV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKLQkJCQkgIHUxNiAqYmx1ZSwgdWlu dDMyX3Qgc3RhcnQsIHVpbnQzMl90IHNpemUpOwogCiAjZW5kaWYgLyogX19JTlRFTF9EUlZfSF9f ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRleCA5N2E5MWU2Li43NzdmOThjIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTM3OSw2ICszNzksNyBAQCByZXRyeToK IAkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAkJc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyOwogCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICpuZXdfY3J0YzsKKwkJc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CiAKIAkJZmJfY29ubiA9IGZiX2hlbHBlci0+Y29u bmVjdG9yX2luZm9baV07CiAJCWNvbm5lY3RvciA9IGZiX2Nvbm4tPmNvbm5lY3RvcjsKQEAgLTQy MCw2ICs0MjEsMTMgQEAgcmV0cnk6CiAKIAkJbnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCsrOwogCisJ CWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNvbm5lY3Rvci0+c3RhdGUtPmNydGMpOworCQlm b3IgKGogPSAwOyBqIDwgMjU2OyBqKyspIHsKKwkJCWludGVsX2NydGMtPmx1dF9yW2pdID0gajsK KwkJCWludGVsX2NydGMtPmx1dF9nW2pdID0gajsKKwkJCWludGVsX2NydGMtPmx1dF9iW2pdID0g ajsKKwkJfQorCiAJCW5ld19jcnRjID0gaW50ZWxfZmJfaGVscGVyX2NydGMoZmJfaGVscGVyLCBj b25uZWN0b3ItPnN0YXRlLT5jcnRjKTsKIAogCQkvKgotLSAKMi43LjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=