From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [RFC 10/13] drm/dp: Add link training helper Date: Wed, 12 Aug 2015 17:06:38 +0200 Message-ID: <1439392001-29637-10-git-send-email-thierry.reding@gmail.com> References: <1439392001-29637-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBCEF720A5 for ; Wed, 12 Aug 2015 08:08:08 -0700 (PDT) Received: by pawu10 with SMTP id u10so16449958paw.1 for ; Wed, 12 Aug 2015 08:08:08 -0700 (PDT) In-Reply-To: <1439392001-29637-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkFkZCBhIGhlbHBlciB0 aGF0IHdpbGwgcGVyZm9ybSBsaW5rIHRyYWluaW5nIGFzIGRlc2NyaWJlZCBpbiB0aGUKRGlzcGxh eVBvcnQgc3BlY2lmaWNhdGlvbi4KClNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVk aW5nQG52aWRpYS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyB8IDQ3 NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBpbmNsdWRlL2RybS9k cm1fZHBfaGVscGVyLmggICAgIHwgIDQ5ICsrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDUyNCBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKaW5kZXggNTQz MzQ5ZTE0NDgxLi44OTY4MjAxZWE5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwpAQCAtMjky LDYgKzI5MiwxOSBAQCBpbnQgZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cyhzdHJ1Y3QgZHJt X2RwX2F1eCAqYXV4LAogfQogRVhQT1JUX1NZTUJPTChkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3Rh dHVzKTsKIAorc3RhdGljIHZvaWQgZHJtX2RwX2xpbmtfcmVzZXQoc3RydWN0IGRybV9kcF9saW5r ICpsaW5rKQoreworCWlmICghbGluaykKKwkJcmV0dXJuOworCisJbGluay0+cmV2aXNpb24gPSAw OworCWxpbmstPmVkcCA9IDA7CisJbGluay0+cmF0ZSA9IDA7CisJbGluay0+bnVtX2xhbmVzID0g MDsKKwlsaW5rLT5jYXBhYmlsaXRpZXMgPSAwOworCWxpbmstPmF1eF9yZF9pbnRlcnZhbCA9IDA7 Cit9CisKIC8qKgogICogZHJtX2RwX2xpbmtfcHJvYmUoKSAtIHByb2JlIGEgRGlzcGxheVBvcnQg bGluayBmb3IgY2FwYWJpbGl0aWVzCiAgKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbApA QCAtMzA4LDcgKzMyMSw3IEBAIGludCBkcm1fZHBfbGlua19wcm9iZShzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCiAJdTggdmFsdWVzWzE2XSwgdmFsdWU7 CiAJaW50IGVycjsKIAotCW1lbXNldChsaW5rLCAwLCBzaXplb2YoKmxpbmspKTsKKwlkcm1fZHBf bGlua19yZXNldChsaW5rKTsKIAogCWVyciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBEUF9EUENE X1JFViwgdmFsdWVzLCBzaXplb2YodmFsdWVzKSk7CiAJaWYgKGVyciA8IDApCkBAIC00NTEsNiAr NDY0LDE0IEBAIGludCBkcm1fZHBfbGlua19jb25maWd1cmUoc3RydWN0IGRybV9kcF9hdXggKmF1 eCwgc3RydWN0IGRybV9kcF9saW5rICpsaW5rKQogCXU4IHZhbHVlc1syXSwgdmFsdWUgPSAwOwog CWludCBlcnI7CiAKKwlpZiAobGluay0+b3BzICYmIGxpbmstPm9wcy0+Y29uZmlndXJlKSB7CisJ CWVyciA9IGxpbmstPm9wcy0+Y29uZmlndXJlKGxpbmspOworCQlpZiAoZXJyIDwgMCkgeworCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gY29uZmlndXJlIERQIGxpbms6ICVkXG4iLCBlcnIpOworCQkJ cmV0dXJuIGVycjsKKwkJfQorCX0KKwogCXZhbHVlc1swXSA9IGRybV9kcF9saW5rX3JhdGVfdG9f YndfY29kZShsaW5rLT5yYXRlKTsKIAl2YWx1ZXNbMV0gPSBsaW5rLT5udW1fbGFuZXM7CiAKQEAg LTcyNywzICs3NDgsNDU2IEBAIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1f ZHBfYXV4ICphdXgpCiAJaTJjX2RlbF9hZGFwdGVyKCZhdXgtPmRkYyk7CiB9CiBFWFBPUlRfU1lN Qk9MKGRybV9kcF9hdXhfdW5yZWdpc3Rlcik7CisKKy8qKgorICogRE9DOiBMaW5rIHRyYWluaW5n CisgKgorICogVGhlc2UgZnVuY3Rpb25zIGNvbnRhaW4gY29tbW9uIGxvZ2ljIGFuZCBoZWxwZXJz IHRvIGltcGxlbWVudCBEaXNwbGF5UG9ydAorICogbGluayB0cmFpbmluZy4KKyAqLworCisvKioK KyAqIGRybV9kcF9saW5rX3RyYWluX2luaXQoKSAtIGluaXRpYWxpemUgRGlzcGxheVBvcnQgbGlu ayB0cmFpbmluZyBzdGF0ZQorICogQHRyYWluOiBEaXNwbGF5UG9ydCBsaW5rIHRyYWluaW5nIHN0 YXRlCisgKi8KK3ZvaWQgZHJtX2RwX2xpbmtfdHJhaW5faW5pdChzdHJ1Y3QgZHJtX2RwX2xpbmtf dHJhaW4gKnRyYWluKQoreworCXN0cnVjdCBkcm1fZHBfbGlua190cmFpbl9zZXQgKnJlcXVlc3Qg PSAmdHJhaW4tPnJlcXVlc3Q7CisJc3RydWN0IGRybV9kcF9saW5rX3RyYWluX3NldCAqYWRqdXN0 ID0gJnRyYWluLT5hZGp1c3Q7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg NDsgaSsrKSB7CisJCXJlcXVlc3QtPnZvbHRhZ2Vfc3dpbmdbaV0gPSAwOworCQlhZGp1c3QtPnZv bHRhZ2Vfc3dpbmdbaV0gPSAwOworCisJCXJlcXVlc3QtPnByZV9lbXBoYXNpc1tpXSA9IDA7CisJ CWFkanVzdC0+cHJlX2VtcGhhc2lzW2ldID0gMDsKKworCQlyZXF1ZXN0LT5wb3N0X2N1cnNvcltp XSA9IDA7CisJCWFkanVzdC0+cG9zdF9jdXJzb3JbaV0gPSAwOworCX0KKworCXRyYWluLT5wYXR0 ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFOworCXRyYWluLT5jbG9ja19yZWNvdmVy ZWQgPSBmYWxzZTsKKwl0cmFpbi0+Y2hhbm5lbF9lcXVhbGl6ZWQgPSBmYWxzZTsKK30KKworc3Rh dGljIGJvb2wgZHJtX2RwX2xpbmtfdHJhaW5fdmFsaWQoY29uc3Qgc3RydWN0IGRybV9kcF9saW5r X3RyYWluICp0cmFpbikKK3sKKwlyZXR1cm4gdHJhaW4tPmNsb2NrX3JlY292ZXJlZCAmJiB0cmFp bi0+Y2hhbm5lbF9lcXVhbGl6ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2RwX2xpbmtfYXBwbHlf dHJhaW5pbmcoc3RydWN0IGRybV9kcF9saW5rICpsaW5rKQoreworCXN0cnVjdCBkcm1fZHBfbGlu a190cmFpbl9zZXQgKnJlcXVlc3QgPSAmbGluay0+dHJhaW4ucmVxdWVzdDsKKwl1bnNpZ25lZCBp bnQgbGFuZXMgPSBsaW5rLT5udW1fbGFuZXMsICp2cywgKnBlLCAqcGMsIGk7CisJc3RydWN0IGRy bV9kcF9hdXggKmF1eCA9IGxpbmstPmF1eDsKKwl1OCB2YWx1ZXNbNF0sIHBhdHRlcm4gPSAwOwor CWludCBlcnI7CisKKwllcnIgPSBsaW5rLT5vcHMtPmFwcGx5X3RyYWluaW5nKGxpbmspOworCWlm IChlcnIgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFwcGx5IGxpbmsgdHJhaW5pbmc6 ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXZzID0gcmVxdWVzdC0+dm9sdGFn ZV9zd2luZzsKKwlwZSA9IHJlcXVlc3QtPnByZV9lbXBoYXNpczsKKwlwYyA9IHJlcXVlc3QtPnBv c3RfY3Vyc29yOworCisJLyogd3JpdGUgY3VycmVudGx5IHNlbGVjdGVkIHZvbHRhZ2Utc3dpbmcg YW5kIHByZS1lbXBoYXNpcyBsZXZlbHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGFuZXM7IGkrKykK KwkJdmFsdWVzW2ldID0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTCh2c1tpXSkgfAorCQkJ ICAgIERQX1RSQUlOX1BSRV9FTVBIQVNJU19MRVZFTChwZVtpXSk7CisKKwllcnIgPSBkcm1fZHBf ZHBjZF93cml0ZShhdXgsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCwgdmFsdWVzLCBsYW5lcyk7CisJ aWYgKGVyciA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHRyYWluaW5nIHBhcmFt ZXRlcnM6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHdyaXRlIGN1cnJl bnRseSBzZWxlY3RlZCBwb3N0LWN1cnNvciBsZXZlbCAoaWYgc3VwcG9ydGVkKSAqLworCWlmIChs aW5rLT5yZXZpc2lvbiA+PSAweDEyICYmIGxpbmstPnJhdGUgPT0gNTQwMDAwKSB7CisJCXZhbHVl c1swXSA9IHZhbHVlc1sxXSA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGxhbmVzOyBpKyspCisJ CQl2YWx1ZXNbaSAvIDJdIHw9IERQX0xBTkVfUE9TVF9DVVJTT1IoaSwgcGNbaV0pOworCisJCWVy ciA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eCwgRFBfVFJBSU5JTkdfTEFORTBfMV9TRVQyLCB2YWx1 ZXMsCisJCQkJCURJVl9ST1VORF9VUChsYW5lcywgMikpOworCQlpZiAoZXJyIDwgMCkgeworCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHBvc3QtY3Vyc29yOiAlZFxuIiwgZXJyKTsKKwkJCXJl dHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiB3cml0ZSBsaW5rIHBhdHRlcm4gKi8KKwlpZiAobGlu ay0+dHJhaW4ucGF0dGVybiAhPSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpCisJCXBhdHRl cm4gfD0gRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEU7CisKKwlwYXR0ZXJuIHw9IGxpbmstPnRy YWluLnBhdHRlcm47CisKKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZWIoYXV4LCBEUF9UUkFJTklO R19QQVRURVJOX1NFVCwgcGF0dGVybik7CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gc2V0IHRyYWluaW5nIHBhdHRlcm46ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJy OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcm1fZHBfbGlua190cmFpbl93 YWl0KHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykKK3sKKwl1bnNpZ25lZCBsb25nIG1pbiA9IDA7 CisKKwlpZiAobGluay0+YXV4X3JkX2ludGVydmFsID09IDApIHsKKwkJc3dpdGNoIChsaW5rLT50 cmFpbi5wYXR0ZXJuKSB7CisJCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl8xOgorCQkJbWluID0g MTAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOXzI6CisJCWNhc2Ug RFBfVFJBSU5JTkdfUEFUVEVSTl8zOgorCQkJbWluID0gNDAwOworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJbWluID0gbGluay0+YXV4X3JkX2lu dGVydmFsOworCX0KKworCWlmIChtaW4gPiAwKQorCQl1c2xlZXBfcmFuZ2UobWluLCAyICogbWlu KTsKK30KKworc3RhdGljIHZvaWQgZHJtX2RwX2xpbmtfZ2V0X2FkanVzdG1lbnRzKHN0cnVjdCBk cm1fZHBfbGluayAqbGluaywKKwkJCQkJdTggc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQor eworCXN0cnVjdCBkcm1fZHBfbGlua190cmFpbl9zZXQgKmFkanVzdCA9ICZsaW5rLT50cmFpbi5h ZGp1c3Q7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGluay0+bnVtX2xh bmVzOyBpKyspIHsKKwkJYWRqdXN0LT52b2x0YWdlX3N3aW5nW2ldID0KKwkJCWRybV9kcF9nZXRf YWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShzdGF0dXMsIGkpID4+CisJCQkJRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19TSElGVDsKKworCQlhZGp1c3QtPnByZV9lbXBoYXNpc1tpXSA9CisJCQlkcm1fZHBf Z2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhzdGF0dXMsIGkpID4+CisJCQkJRFBfVFJB SU5fUFJFX0VNUEhBU0lTX1NISUZUOworCisJCWFkanVzdC0+cG9zdF9jdXJzb3JbaV0gPQorCQkJ ZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wb3N0X2N1cnNvcihzdGF0dXMsIGkpOworCX0KK30K Kworc3RhdGljIHZvaWQgZHJtX2RwX2xpbmtfdHJhaW5fYWRqdXN0KHN0cnVjdCBkcm1fZHBfbGlu a190cmFpbiAqdHJhaW4pCit7CisJc3RydWN0IGRybV9kcF9saW5rX3RyYWluX3NldCAqcmVxdWVz dCA9ICZ0cmFpbi0+cmVxdWVzdDsKKwlzdHJ1Y3QgZHJtX2RwX2xpbmtfdHJhaW5fc2V0ICphZGp1 c3QgPSAmdHJhaW4tPmFkanVzdDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspCisJCWlmIChyZXF1ZXN0LT52b2x0YWdlX3N3aW5nW2ldICE9IGFkanVzdC0+dm9s dGFnZV9zd2luZ1tpXSkKKwkJCXJlcXVlc3QtPnZvbHRhZ2Vfc3dpbmdbaV0gPSBhZGp1c3QtPnZv bHRhZ2Vfc3dpbmdbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlpZiAocmVxdWVz dC0+cHJlX2VtcGhhc2lzW2ldICE9IGFkanVzdC0+cHJlX2VtcGhhc2lzW2ldKQorCQkJcmVxdWVz dC0+cHJlX2VtcGhhc2lzW2ldID0gYWRqdXN0LT5wcmVfZW1waGFzaXNbaV07CisKKwlmb3IgKGkg PSAwOyBpIDwgNDsgaSsrKQorCQlpZiAocmVxdWVzdC0+cG9zdF9jdXJzb3JbaV0gIT0gYWRqdXN0 LT5wb3N0X2N1cnNvcltpXSkKKwkJCXJlcXVlc3QtPnBvc3RfY3Vyc29yW2ldID0gYWRqdXN0LT5w b3N0X2N1cnNvcltpXTsKK30KKworc3RhdGljIGludCBkcm1fZHBfbGlua19yZWNvdmVyX2Nsb2Nr KHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykKK3sKKwl1OCBzdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV07CisJaW50IGVycjsKKworCWVyciA9IGRybV9kcF9saW5rX2FwcGx5X3RyYWluaW5nKGxp bmspOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZHJtX2RwX2xpbmtfdHJhaW5f d2FpdChsaW5rKTsKKworCWVyciA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMobGluay0+ YXV4LCBzdGF0dXMpOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJl YWQgbGluayBzdGF0dXM6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgh ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bnVtX2xhbmVzKSkKKwkJZHJt X2RwX2xpbmtfZ2V0X2FkanVzdG1lbnRzKGxpbmssIHN0YXR1cyk7CisJZWxzZQorCQlsaW5rLT50 cmFpbi5jbG9ja19yZWNvdmVyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgZHJtX2RwX2xpbmtfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGRybV9kcF9saW5rICpsaW5rKQor eworCXVuc2lnbmVkIGludCByZXBlYXQ7CisJaW50IGVycjsKKworCS8qIHN0YXJ0IGNsb2NrIHJl Y292ZXJ5IHVzaW5nIHRyYWluaW5nIHBhdHRlcm4gMSAqLworCWxpbmstPnRyYWluLnBhdHRlcm4g PSBEUF9UUkFJTklOR19QQVRURVJOXzE7CisKKwlmb3IgKHJlcGVhdCA9IDE7IHJlcGVhdCA8IDU7 IHJlcGVhdCsrKSB7CisJCWVyciA9IGRybV9kcF9saW5rX3JlY292ZXJfY2xvY2sobGluayk7CisJ CWlmIChlcnIgPCAwKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWNvdmVyIGNsb2NrOiAl ZFxuIiwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlkcm1fZHBfbGlua190cmFpbl9h ZGp1c3QoJmxpbmstPnRyYWluKTsKKworCQlpZiAobGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVk KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2RwX2xp bmtfZXF1YWxpemVfY2hhbm5lbChzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCit7CisJc3RydWN0 IGRybV9kcF9hdXggKmF1eCA9IGxpbmstPmF1eDsKKwl1OCBzdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV07CisJaW50IGVycjsKKworCWVyciA9IGRybV9kcF9saW5rX2FwcGx5X3RyYWluaW5nKGxp bmspOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZHJtX2RwX2xpbmtfdHJhaW5f d2FpdChsaW5rKTsKKworCWVyciA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoYXV4LCBz dGF0dXMpOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGlu ayBzdGF0dXM6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghZHJtX2Rw X2Nsb2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bnVtX2xhbmVzKSkgeworCQlEUk1fRVJS T1IoImNsb2NrIHJlY292ZXJ5IGxvc3Qgd2hpbGUgZXF1YWxpemluZyBjaGFubmVsXG4iKTsKKwkJ bGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVkID0gZmFsc2U7CisJCXJldHVybiAwOworCX0KKwor CWlmICghZHJtX2RwX2NoYW5uZWxfZXFfb2soc3RhdHVzLCBsaW5rLT5udW1fbGFuZXMpKQorCQlk cm1fZHBfbGlua19nZXRfYWRqdXN0bWVudHMobGluaywgc3RhdHVzKTsKKwllbHNlCisJCWxpbmst PnRyYWluLmNoYW5uZWxfZXF1YWxpemVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGRybV9kcF9saW5rX2NoYW5uZWxfZXF1YWxpemF0aW9uKHN0cnVjdCBkcm1fZHBfbGlu ayAqbGluaykKK3sKKwl1bnNpZ25lZCBpbnQgcmVwZWF0OworCWludCBlcnI7CisKKwkvKiBzdGFy dCBjaGFubmVsIGVxdWFsaXphdGlvbiB1c2luZyBwYXR0ZXJuIDIgb3IgMyAqLworCWlmIChsaW5r LT5jYXBhYmlsaXRpZXMgJiBEUF9MSU5LX0NBUF9UUFMzKQorCQlsaW5rLT50cmFpbi5wYXR0ZXJu ID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8zOworCWVsc2UKKwkJbGluay0+dHJhaW4ucGF0dGVybiA9 IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKKworCWZvciAocmVwZWF0ID0gMTsgcmVwZWF0IDwgNTsg cmVwZWF0KyspIHsKKwkJZXJyID0gZHJtX2RwX2xpbmtfZXF1YWxpemVfY2hhbm5lbChsaW5rKTsK KwkJaWYgKGVyciA8IDApIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVxdWFsaXplIGNoYW5u ZWw6ICVkXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWRybV9kcF9saW5rX3Ry YWluX2FkanVzdCgmbGluay0+dHJhaW4pOworCisJCWlmIChsaW5rLT50cmFpbi5jaGFubmVsX2Vx dWFsaXplZCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRy bV9kcF9saW5rX2Rvd25ncmFkZShzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCit7CisJc3dpdGNo IChsaW5rLT5yYXRlKSB7CisJY2FzZSAxNjIwMDA6CisJCXJldHVybiAtRUlOVkFMOworCisJY2Fz ZSAyNzAwMDA6CisJCWxpbmstPnJhdGUgPSAxNjIwMDA7CisJCWJyZWFrOworCisJY2FzZSA1NDAw MDA6CisJCWxpbmstPnJhdGUgPSAyNzAwMDA7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBkcm1fZHBfbGlua190cmFpbl9kaXNhYmxlKHN0cnVjdCBkcm1f ZHBfbGluayAqbGluaykKK3sKKwlpbnQgZXJyOworCisJbGluay0+dHJhaW4ucGF0dGVybiA9IERQ X1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRTsKKworCWVyciA9IGRybV9kcF9saW5rX2FwcGx5X3Ry YWluaW5nKGxpbmspOworCWlmIChlcnIgPCAwKQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNh YmxlIGxpbmsgdHJhaW5pbmc6ICVkXG4iLCBlcnIpOworfQorCitzdGF0aWMgaW50IGRybV9kcF9s aW5rX3RyYWluX2Z1bGwoc3RydWN0IGRybV9kcF9saW5rICpsaW5rKQoreworCWludCBlcnI7CisK K3JldHJ5OgorCURSTV9ERUJVR19LTVMoImZ1bGwtdHJhaW5pbmcgbGluazogJXUgbGFuZSVzIGF0 ICV1IE1IelxuIiwKKwkJICAgICAgbGluay0+bnVtX2xhbmVzLCAobGluay0+bnVtX2xhbmVzID4g MSkgPyAicyIgOiAiIiwKKwkJICAgICAgbGluay0+cmF0ZSAvIDEwMCk7CisKKwllcnIgPSBkcm1f ZHBfbGlua19jb25maWd1cmUobGluay0+YXV4LCBsaW5rKTsKKwlpZiAoZXJyIDwgMCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBjb25maWd1cmUgRFAgbGluazogJWRcbiIsIGVycik7CisJCXJl dHVybiBlcnI7CisJfQorCisJZXJyID0gZHJtX2RwX2xpbmtfY2xvY2tfcmVjb3ZlcnkobGluayk7 CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0VSUk9SKCJjbG9jayByZWNvdmVyeSBmYWlsZWQ6ICVk XG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWxpbmstPnRyYWluLmNsb2NrX3Jl Y292ZXJlZCkgeworCQlEUk1fRVJST1IoImNsb2NrIHJlY292ZXJ5IGZhaWxlZCwgZG93bmdyYWRp bmcgbGlua1xuIik7CisKKwkJZXJyID0gZHJtX2RwX2xpbmtfZG93bmdyYWRlKGxpbmspOworCQlp ZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWdvdG8gcmV0cnk7CisJfQorCisJRFJNX0RF QlVHX0tNUygiY2xvY2sgcmVjb3Zlcnkgc3VjY2VlZGVkXG4iKTsKKworCWVyciA9IGRybV9kcF9s aW5rX2NoYW5uZWxfZXF1YWxpemF0aW9uKGxpbmspOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9F UlJPUigiY2hhbm5lbCBlcXVhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBv dXQ7CisJfQorCisJaWYgKCFsaW5rLT50cmFpbi5jaGFubmVsX2VxdWFsaXplZCkgeworCQlEUk1f RVJST1IoImNoYW5uZWwgZXF1YWxpemF0aW9uIGZhaWxlZCwgZG93bmdyYWRpbmcgbGlua1xuIik7 CisKKwkJZXJyID0gZHJtX2RwX2xpbmtfZG93bmdyYWRlKGxpbmspOworCQlpZiAoZXJyIDwgMCkK KwkJCWdvdG8gb3V0OworCisJCWdvdG8gcmV0cnk7CisJfQorCisJRFJNX0RFQlVHX0tNUygiY2hh bm5lbCBlcXVhbGl6YXRpb24gc3VjY2VlZGVkXG4iKTsKKworb3V0OgorCWRybV9kcF9saW5rX3Ry YWluX2Rpc2FibGUobGluayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkcm1fZHBf bGlua190cmFpbl9mYXN0KHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykKK3sKKwl1OCBzdGF0dXNb RFBfTElOS19TVEFUVVNfU0laRV07CisJaW50IGVycjsKKworCURSTV9ERUJVR19LTVMoImZhc3Qt dHJhaW5pbmcgbGluazogJXUgbGFuZSVzIGF0ICV1IE1IelxuIiwKKwkJICAgICAgbGluay0+bnVt X2xhbmVzLCAobGluay0+bnVtX2xhbmVzID4gMSkgPyAicyIgOiAiIiwKKwkJICAgICAgbGluay0+ cmF0ZSAvIDEwMCk7CisKKwllcnIgPSBkcm1fZHBfbGlua19jb25maWd1cmUobGluay0+YXV4LCBs aW5rKTsKKwlpZiAoZXJyIDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb25maWd1cmUg RFAgbGluazogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogdHJhbnNtaXQg dHJhaW5pbmcgcGF0dGVybiAxIGZvciA1MDAgbWljcm9zZWNvbmRzICovCisJbGluay0+dHJhaW4u cGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMTsKKworCWVyciA9IGRybV9kcF9saW5rX2Fw cGx5X3RyYWluaW5nKGxpbmspOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCXVzbGVl cF9yYW5nZSg1MDAsIDEwMDApOworCisJLyogdHJhbnNtaXQgdHJhaW5pbmcgcGF0dGVybiAyIG9y IDMgZm9yIDUwMCBtaWNyb3NlY29uZHMgKi8KKwlpZiAobGluay0+Y2FwYWJpbGl0aWVzICYgRFBf TElOS19DQVBfVFBTMykKKwkJbGluay0+dHJhaW4ucGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRF Uk5fMzsKKwllbHNlCisJCWxpbmstPnRyYWluLnBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJO XzI7CisKKwllcnIgPSBkcm1fZHBfbGlua19hcHBseV90cmFpbmluZyhsaW5rKTsKKwlpZiAoZXJy IDwgMCkKKwkJZ290byBvdXQ7CisKKwl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKKworCWVyciA9 IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMobGluay0+YXV4LCBzdGF0dXMpOworCWlmIChl cnIgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXG4i LCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWRybV9kcF9jbG9ja19yZWNvdmVyeV9v ayhzdGF0dXMsIGxpbmstPm51bV9sYW5lcykpIHsKKwkJRFJNX0VSUk9SKCJjbG9jayByZWNvdmVy eSBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlPOworCX0KKworCWlmICghZHJtX2RwX2NoYW5uZWxf ZXFfb2soc3RhdHVzLCBsaW5rLT5udW1fbGFuZXMpKSB7CisJCURSTV9FUlJPUigiY2hhbm5lbCBl cXVhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwl9CisKK291dDoKKwlkcm1f ZHBfbGlua190cmFpbl9kaXNhYmxlKGxpbmspOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICog ZHJtX2RwX2xpbmtfdHJhaW4oKSAtIHBlcmZvcm0gRGlzcGxheVBvcnQgbGluayB0cmFpbmluZwor ICogQGxpbms6IGEgRFAgbGluayBvYmplY3QKKyAqCisgKiBVc2VzIHRoZSBjb250ZXh0IHN0b3Jl ZCBpbiB0aGUgRFAgbGluayBvYmplY3QgdG8gcGVyZm9ybSBsaW5rIHRyYWluaW5nLiBJdAorICog aXMgZXhwZWN0ZWQgdGhhdCBkcml2ZXJzIHdpbGwgY2FsbCBkcm1fZHBfbGlua19wcm9iZSgpIHRv IG9idGFpbiB0aGUgbGluaworICogY2FwYWJpbGl0aWVzIGJlZm9yZSBwZXJmb3JtaW5nIGxpbmsg dHJhaW5pbmcuCisgKgorICogSWYgdGhlIHNpbmsgc3VwcG9ydHMgZmFzdCBsaW5rIHRyYWluaW5n IChubyBBVVggQ0ggaGFuZHNoYWtlKSBhbmQgdmFsaWQKKyAqIHRyYWluaW5nIHNldHRpbmdzIGFy ZSBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcGVyZm9ybSBmYXN0CisgKiBs aW5rIHRyYWluaW5nIGFuZCBmYWxsIGJhY2sgdG8gZnVsbCBsaW5rIHRyYWluaW5nIG9uIGZhaWx1 cmUuCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2RwX2xpbmtfdHJhaW4oc3RydWN0IGRybV9kcF9s aW5rICpsaW5rKQoreworCWludCBlcnI7CisKKwlpZiAobGluay0+Y2FwYWJpbGl0aWVzICYgRFBf TElOS19DQVBfRkFTVF9UUkFJTklORykgeworCQlpZiAoZHJtX2RwX2xpbmtfdHJhaW5fdmFsaWQo JmxpbmstPnRyYWluKSkgeworCQkJZXJyID0gZHJtX2RwX2xpbmtfdHJhaW5fZmFzdChsaW5rKTsK KwkJCWlmIChlcnIgPCAwKQorCQkJCURSTV9FUlJPUigiZmFzdCBsaW5rIHRyYWluaW5nIGZhaWxl ZDogJWRcbiIsCisJCQkJCSAgZXJyKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNl IHsKKwkJCURSTV9ERUJVR19LTVMoInRyYWluaW5nIHBhcmFtZXRlcnMgbm90IGF2YWlsYWJsZVxu Iik7CisJCX0KKwl9IGVsc2UgeworCQlEUk1fREVCVUdfS01TKCJmYXN0IGxpbmsgdHJhaW5pbmcg bm90IHN1cHBvcnRlZFxuIik7CisJfQorCisJZXJyID0gZHJtX2RwX2xpbmtfdHJhaW5fZnVsbChs aW5rKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0VSUk9SKCJmdWxsIGxpbmsgdHJhaW5pbmcgZmFp bGVkOiAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9k cF9saW5rX3RyYWluKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCBi L2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAppbmRleCA2MDAzNDdmOGNkZDQuLmQwNDFiYjAw ZDZhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCisrKyBiL2luY2x1 ZGUvZHJtL2RybV9kcF9oZWxwZXIuaApAQCAtMjY1LDEyICsyNjUsMTQgQEAKICMgZGVmaW5lIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSAoMSA8PCAwKQogIyBkZWZpbmUgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8yICgyIDw8IDApCiAjIGRlZmluZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzMgKDMgPDwgMCkKKyMgZGVmaW5lIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUwoeCkgKCh4KSA8PCAwKQogCiAjIGRlZmluZSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFT SwkgICAgKDMgPDwgMykKICMgZGVmaW5lIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAJCSgwIDw8 IDMpCiAjIGRlZmluZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xCQkoMSA8PCAzKQogIyBkZWZp bmUgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMgkJKDIgPDwgMykKICMgZGVmaW5lIERQX1RSQUlO X1BSRV9FTVBIX0xFVkVMXzMJCSgzIDw8IDMpCisjIGRlZmluZSBEUF9UUkFJTl9QUkVfRU1QSEFT SVNfTEVWRUwoeCkJCSgoeCkgPDwgMykKIAogIyBkZWZpbmUgRFBfVFJBSU5fUFJFX0VNUEhBU0lT X1NISUZUCSAgICAzCiAjIGRlZmluZSBEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQg ICgxIDw8IDUpCkBAIC0zMDgsNiArMzEwLDcgQEAKICMgZGVmaW5lIERQX0xBTkUwMl9NQVhfUE9T VF9DVVJTT1IyX1JFQUNIRUQgKDEgPDwgMikKICMgZGVmaW5lIERQX0xBTkUxM19QT1NUX0NVUlNP UjJfU0VUX01BU0sgICAgKDMgPDwgNCkKICMgZGVmaW5lIERQX0xBTkUxM19NQVhfUE9TVF9DVVJT T1IyX1JFQUNIRUQgKDEgPDwgNikKKyMgZGVmaW5lIERQX0xBTkVfUE9TVF9DVVJTT1IoaSwgeCkJ ICAgICgoKHgpICYgMHgzKSA8PCAoKChpKSAmIDEpIDw8IDIpKQogCiAjZGVmaW5lIERQX01TVE1f Q1RSTAkJCSAgICAweDExMSAgIC8qIDEuMiAqLwogIyBkZWZpbmUgRFBfTVNUX0VOCQkJICAgICgx IDw8IDApCkBAIC03NTEsNiArNzU0LDQ1IEBAIHN0YXRpYyBpbmxpbmUgc3NpemVfdCBkcm1fZHBf ZHBjZF93cml0ZWIoc3RydWN0IGRybV9kcF9hdXggKmF1eCwKIGludCBkcm1fZHBfZHBjZF9yZWFk X2xpbmtfc3RhdHVzKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsCiAJCQkJIHU4IHN0YXR1c1tEUF9M SU5LX1NUQVRVU19TSVpFXSk7CiAKKy8qKgorICogc3RydWN0IGRybV9kcF9saW5rX3RyYWluX3Nl dCAtIGxpbmsgdHJhaW5pbmcgc2V0dGluZ3MKKyAqIEB2b2x0YWdlX3N3aW5nOiBwZXItbGFuZSB2 b2x0YWdlIHN3aW5nCisgKiBAcHJlX2VtcGhhc2lzOiBwZXItbGFuZSBwcmUtZW1waGFzaXMKKyAq IEBwb3N0X2N1cnNvcjogcGVyLWxhbmUgcG9zdC1jdXJzb3IKKyAqLworc3RydWN0IGRybV9kcF9s aW5rX3RyYWluX3NldCB7CisJdW5zaWduZWQgaW50IHZvbHRhZ2Vfc3dpbmdbNF07CisJdW5zaWdu ZWQgaW50IHByZV9lbXBoYXNpc1s0XTsKKwl1bnNpZ25lZCBpbnQgcG9zdF9jdXJzb3JbNF07Cit9 OworCisvKioKKyAqIHN0cnVjdCBkcm1fZHBfbGlua190cmFpbiAtIGxpbmsgdHJhaW5pbmcgc3Rh dGUgaW5mb3JtYXRpb24KKyAqIEByZXF1ZXN0OiBjdXJyZW50bHkgcmVxdWVzdGVkIHNldHRpbmdz CisgKiBAYWRqdXN0OiBhZGp1c3RtZW50cyByZXF1ZXN0ZWQgYnkgc2luaworICogQHBhdHRlcm46 IGN1cnJlbnRseSByZXF1ZXN0ZWQgdHJhaW5pbmcgcGF0dGVybgorICogQGNsb2NrX3JlY292ZXJl ZDogZmxhZyB0byB0cmFjayBpZiBjbG9jayByZWNvdmVyeSBoYXMgY29tcGxldGVkCisgKiBAY2hh bm5lbF9lcXVhbGl6ZWQ6IGZsYWcgdG8gdHJhY2sgaWYgY2hhbm5lbCBlcXVhbGl6YXRpb24gaGFz IGNvbXBsZXRlZAorICovCitzdHJ1Y3QgZHJtX2RwX2xpbmtfdHJhaW4geworCXN0cnVjdCBkcm1f ZHBfbGlua190cmFpbl9zZXQgcmVxdWVzdDsKKwlzdHJ1Y3QgZHJtX2RwX2xpbmtfdHJhaW5fc2V0 IGFkanVzdDsKKworCXVuc2lnbmVkIGludCBwYXR0ZXJuOworCisJYm9vbCBjbG9ja19yZWNvdmVy ZWQ7CisJYm9vbCBjaGFubmVsX2VxdWFsaXplZDsKK307CisKK3ZvaWQgZHJtX2RwX2xpbmtfdHJh aW5faW5pdChzdHJ1Y3QgZHJtX2RwX2xpbmtfdHJhaW4gKnRyYWluKTsKKworc3RydWN0IGRybV9k cF9saW5rOworCitzdHJ1Y3QgZHJtX2RwX2xpbmtfb3BzIHsKKwlpbnQgKCphcHBseV90cmFpbmlu Zykoc3RydWN0IGRybV9kcF9saW5rICpsaW5rKTsKKwlpbnQgKCpjb25maWd1cmUpKHN0cnVjdCBk cm1fZHBfbGluayAqbGluayk7Cit9OworCiAvKgogICogRGlzcGxheVBvcnQgbGluawogICovCkBA IC03NjcsNiArODA5LDExIEBAIHN0cnVjdCBkcm1fZHBfbGluayB7CiAJdW5zaWduZWQgaW50IG51 bV9sYW5lczsKIAl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKIAl1bnNpZ25lZCBsb25nIGF1 eF9yZF9pbnRlcnZhbDsKKworCWNvbnN0IHN0cnVjdCBkcm1fZHBfbGlua19vcHMgKm9wczsKKwlz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4OworCisJc3RydWN0IGRybV9kcF9saW5rX3RyYWluIHRyYWlu OwogfTsKIAogaW50IGRybV9kcF9saW5rX3Byb2JlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0 cnVjdCBkcm1fZHBfbGluayAqbGluayk7CkBAIC03NzQsNiArODIxLDggQEAgaW50IGRybV9kcF9s aW5rX3Bvd2VyX3VwKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfbGluayAq bGluayk7CiBpbnQgZHJtX2RwX2xpbmtfcG93ZXJfZG93bihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4 LCBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspOwogaW50IGRybV9kcF9saW5rX2NvbmZpZ3VyZShz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspOwogCitpbnQg ZHJtX2RwX2xpbmtfdHJhaW4oc3RydWN0IGRybV9kcF9saW5rICpsaW5rKTsKKwogaW50IGRybV9k cF9hdXhfcmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7CiB2b2lkIGRybV9kcF9hdXhf dW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKIAotLSAKMi40LjUKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==