From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v2 2/4] drm/dp_mst: Start tracking per-port VCPI allocations Date: Fri, 26 Oct 2018 16:35:47 -0400 Message-ID: <20181026203549.1796-3-lyude@redhat.com> References: <20181026203549.1796-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181026203549.1796-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org VGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRpbmcgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIGluCmRy bV9kcF9tc3RfdG9wb2xvZ3kuYzoKCgkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51 bV9zbG90cyB0byB1cGRhdGUKCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUg cG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVu cGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKCSAqIHBlci1wb3J0IHNs b3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKCSAq IGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVs ZWFzZS4KCSAqLwoKVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlz OiBmb3JjaW5nIHRoZSBkcml2ZXIgdG8KdHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3Vn aG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlzCmVycm9yIHByb25lLCBiZWNhdXNlIGl0IG1l YW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2l0aCB0aGUKb3JkZXIgdGhhdCBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZApkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cygpIGFyZSBjYWxsZWQgaW4gaW4gb3JkZXIgdG8gZW5zdXJlCmlkZW1wb3RlbmN5 LiBDdXJyZW50bHkgdGhlIG9ubHkgZHJpdmVyIGFjdHVhbGx5IHVzaW5nIHRoZXNlIGhlbHBlcnMs Cmk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVsdGlwbGUgLT5iZXN0X2Vu Y29kZXIoKSBjaGVja3MKd2l0aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBu b3QgYmUgaWRlbXBvdGVudCBhbmQgd291bGQKb3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21l dGhpbmcgSSBsZWFybmVkIHRyeWluZyB0byBpbXBsZW1lbnQKZmFsbGJhY2sgcmV0cmFpbmluZyBp biBNU1QuCgpTbzogc2ltcGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBhbmQgdGVhY2ggZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoKQphbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSB0byB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyBmb3IKZWFjaCBwb3J0LiBUaGlzIGFs bG93cyB1cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQpvbiB0 aGUgZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQg dG8gZG8gYW55CmtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24n dCBuZWVkIGl0IGZvciBpdCdzIG93bgppbnRlcm5hbCBzdGF0ZS4KCkFkZGl0aW9uYWxseTsgdGhp cyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNoCm11c3Qg YmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNrcyBmb3Ig dGhlIG5ldwpWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCgpBbHNvOiB1cGRh dGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhlc2UK L211c3QvIGJlIGNhbGxlZCBieSAvYWxsLyBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4K CkNoYW5nZXMgc2luY2UgdjE6CiAtIERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9taWNf Y2hlY2soKSBmb3IgcHJpdmF0ZSBvYmplY3RzIGhvb2ssCiAgIGp1c3QgZ2l2ZSBkcml2ZXJzIGEg ZnVuY3Rpb24gdG8gY2FsbCB0aGVtc2VsdmVzCgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxs eXVkZUByZWRoYXQuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5j aD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMTkwICsrKysr KysrKysrKysrKysrKysrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMgIHwgICA4ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDMx ICsrKy0tCiBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDExICstCiA0 IGZpbGVzIGNoYW5nZWQsIDE5MiBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwppbmRleCA4YzNjZmFjNDM3ZjQuLmRjZmFiNzUz NjkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCkBAIC0yNjE0LDIxICsy NjE0LDMzIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1nciwKIH0KIAogLyoqCi0gKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9z bG90cygpIC0gRmluZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlIHN0YXRlCisgKiBkcm1fZHBf YXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIFZDUEkgc2xvdHMgdG8gdGhl IHN0YXRlCiAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKICAqIEBtZ3I6IE1TVCB0b3Bv bG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAogICogQHBvcnQ6IHBvcnQgdG8gZmluZCB2Y3BpIHNs b3RzIGZvcgogICogQHBibjogYmFuZHdpZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQQk4K ICAqCisgKiBBbGxvY2F0ZXMgVkNQSSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2 aW91cyBWQ1BJIGFsbG9jYXRpb25zIGl0CisgKiBtYXkgaGF2ZSBoYWQuIEFueSBhdG9taWMgZHJp dmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbgorICogaW4gdGhl aXIgYXRvbWljX2NoZWNrKCkgaGFuZGxlcnMgdG8gY2hhbmdlIHRoZSBjdXJyZW50IFZDUEkgYWxs b2NhdGlvbiBmb3IKKyAqIHRoZSBuZXcgc3RhdGUuIEFmdGVyIHRoZSAtPmF0b21pY19jaGVjaygp IGhvb2tzIG9mIHRoZSBkcml2ZXIgYW5kIGFsbCBvdGhlcgorICogbW9kZSBvYmplY3RzIGluIHRo ZSBzdGF0ZSBoYXZlIGJlZW4gY2FsbGVkLCBEUk0gd2lsbCBjaGVjayB0aGUgZmluYWwgVkNQSQor ICogYWxsb2NhdGlvbnMgdG8gZW5zdXJlIHRoYXQgdGhleSB3aWxsIGZpdCBpbnRvIHRoZSBhdmFp bGFibGUgYmFuZHdpZHRoIG9uCisgKiB0aGUgdG9wb2xvZ3kuCisgKgorICogU2VlIGFsc286IGRy bV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKKyAqCiAgKiBSRVRVUk5TOgotICogVG90 YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0IG9yIGVy cm9yCisgKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVkIGZvciB0aGlz IHBvcnQsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2Vy IGV4aXN0cwogICovCiBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsCiAJCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQog ewogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsKLQlp bnQgcmVxX3Nsb3RzOworCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3Bp ID0gTlVMTDsKKwlpbnQgcHJldl9zbG90cywgcmVxX3Nsb3RzLCByZXQ7CiAKIAl0b3BvbG9neV9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKIAlp ZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKQEAgLTI2MzcsMjAgKzI2NDksNDEgQEAgaW50IGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKIAlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKIAlp ZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXFfc2xvdHMgPSBESVZfUk9V TkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwotCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVx PSVkLCBhdmFpbD0lZFxuIiwKLQkJCXJlcV9zbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Ns b3RzKTsKIAotCWlmIChyZXFfc2xvdHMgPiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpIHsK LQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkvKiBGaW5kIHRo ZSBjdXJyZW50IGFsbG9jYXRpb24gZm9yIHRoaXMgcG9ydCwgaWYgYW55ICovCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJaWYgKHBv cy0+cG9ydCA9PSBwb3J0KSB7CisJCQl2Y3BpID0gcG9zOworCQkJcHJldl9zbG90cyA9IHZjcGkt PnZjcGk7CisJCQlicmVhazsKKwkJfQogCX0KKwlpZiAoIXZjcGkpCisJCXByZXZfc2xvdHMgPSAw OworCisJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KTsKKworCURS TV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAl ZFxuIiwKKwkJICAgICAgcG9ydC0+Y29ubmVjdG9yLT5iYXNlLmlkLCBwb3J0LT5jb25uZWN0b3It Pm5hbWUsIHBvcnQsCisJCSAgICAgIHByZXZfc2xvdHMsIHJlcV9zbG90cyk7CisKKwkvKiBBZGQg dGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSAqLworCWlmICghdmNwaSkgeworCQl2Y3Bp ID0ga3phbGxvYyhzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2Y3BpKSB7CisJ CQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KIAotCXRvcG9sb2d5X3N0YXRlLT5h dmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Ci0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBhdmFp bD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7CisJCXZjcGktPnBvcnQgPSBwb3J0 OworCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnRvcG9sb2d5X3N0YXRlLT52Y3Bpcyk7CisJfQor CXZjcGktPnZjcGkgPSByZXFfc2xvdHM7CiAKKwlyZXQgPSByZXFfc2xvdHM7CitvdXQ6CiAJZHJt X2RwX3B1dF9wb3J0KHBvcnQpOwotCXJldHVybiByZXFfc2xvdHM7CisJcmV0dXJuIHJldDsKIH0K IEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwogCkBAIC0yNjU4 LDMyICsyNjkxLDQ2IEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMpOwogICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIFJlbGVhc2UgYWxs b2NhdGVkIHZjcGkgc2xvdHMKICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQogICogQG1n cjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Ci0gKiBAc2xvdHM6IG51bWJlciBv ZiB2Y3BpIHNsb3RzIHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90cyB0 aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRoZSBhdG9taWMKKyAqIHN0YXRl LiBBbnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVu Y3Rpb24gaW4KKyAqIHRoZWlyIGNvbm5lY3RvcidzIGF0b21pY19jaGVjaygpIGhhbmRsZXIgd2hl biB0aGUgY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyCisgKiBoYXZlIFZDUEkgYWxsb2NhdGVkIChl LmcuIGJlY2F1c2UgaXQncyBDUlRDIHdhcyByZW1vdmVkKS4KKyAqCisgKiBJdCBpcyBPSyB0byBj YWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwg aW4KKyAqIHdoaWNoIGNhc2UgaXQgd2lsbCBqdXN0IGFtb3VudCB0byBhIG5vLW9wLgorICoKKyAq IFNlZSBhbHNvOiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCiAgKgogICogUkVUVVJO UzoKLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZS0+YXZhaWxfc2xvdHMgb3IKLSAqIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqIDAgaWYg YWxsIHNsb3RzIGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBiYWNrIHRvCisgKiAmZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQogICov CiBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLAogCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3IsCi0JCQkJICAgICBpbnQgc2xvdHMpCisJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0KQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9z dGF0ZTsKKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdG1wLCAqcG9zOwogCiAJdG9w b2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsIG1n cik7CiAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCiAJCXJldHVybiBQVFJfRVJSKHRvcG9s b2d5X3N0YXRlKTsKIAotCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3Rz IHRvIHVwZGF0ZQotCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBt YXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKLQkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdn ZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5IHRyYWNraW5nCi0JICogcGVyLXBvcnQgc2xvdCBh bGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgotCSAqIGRl cGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFz ZS4KLQkgKi8KLQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgKz0gc2xvdHM7Ci0JRFJNX0RF QlVHX0tNUygidmNwaSBzbG90cyByZWxlYXNlZD0lZCwgYXZhaWw9JWRcbiIsCi0JCQlzbG90cywg dG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo cG9zLCB0bXAsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJaWYgKHBvcy0+cG9y dCA9PSBwb3J0KSB7CisJCQlsaXN0X2RlbCgmcG9zLT5uZXh0KTsKKwkJCURSTV9ERUJVR19LTVMo IltNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAwXG4iLAorCQkJCSAgICAgIHBvcnQsIHBvcy0+dmNw aSk7CiAKKwkJCWtmcmVlKHBvcyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIElmIG5v IGFsbG9jYXRpb24gd2FzIGZvdW5kLCBhbGwgdGhhdCBtZWFucyBpcyB0aGF0IHRoZSBwb3J0IHdh cworCSAqIGRlc3Ryb3llZCBzaW5jZSB0aGUgbGFzdCBhdG9taWMgY29tbWl0LiBUaGF0J3MgT0sh CisJICovCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKTsKQEAgLTMxMTIsMTUgKzMxNTksNTAgQEAgc3RhdGljIHZvaWQgZHJtX2Rw X2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogc3RhdGlj IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqCiBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZShz dHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCiB7Ci0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0 ZSwgKm9sZF9zdGF0ZSA9CisJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShvYmotPnN0YXRlKTsK KwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IG9sZF9zdGF0ZS0+bWdyOwor CXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9j YXRpb24gKnBvcywgKnZjcGk7CiAKLQlzdGF0ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9m KCpzdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwg R0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlfX2RybV9hdG9t aWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7 CiAKKwlzdGF0ZS0+bWdyID0gbWdyOworCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMpOwor CisJLyogQ29weSBvdmVyIHRoZSBWQ1BJIGFsbG9jYXRpb25zIGZvciBwb3J0cyB0aGF0IHN0aWxs IGV4aXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlzLCBu ZXh0KSB7CisJCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcy0+ cG9ydCk7CisJCWlmICghcG9ydCkgeworCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVw XSBpcyBnb25lLCB2Y3BpICVkIC0+IDBcbiIsCisJCQkJCSBwb3MtPnBvcnQsIHBvcy0+dmNwaSk7 CisJCQljb250aW51ZTsKKwkJfQorCisJCXZjcGkgPSBremFsbG9jKHNpemVvZigqdmNwaSksIEdG UF9LRVJORUwpOworCQlpZiAoIXZjcGkpIHsKKwkJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKKwkJ CWdvdG8gZmFpbF9hbGxvYzsKKwkJfQorCisJCXZjcGktPnBvcnQgPSBwb3J0OworCQl2Y3BpLT52 Y3BpID0gcG9zLT52Y3BpOworCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnN0YXRlLT52Y3Bpcyk7 CisJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKKwl9CisKIAlyZXR1cm4gJnN0YXRlLT5iYXNlOwor CitmYWlsX2FsbG9jOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0 ZS0+dmNwaXMsIG5leHQpCisJCWtmcmVlKHBvcyk7CisJa2ZyZWUoc3RhdGUpOworCisJcmV0dXJu IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3Qg ZHJtX3ByaXZhdGVfb2JqICpvYmosCkBAIC0zMTI4LDE0ICszMjEwLDYwIEBAIHN0YXRpYyB2b2lk IGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmosCiB7 CiAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9CiAJCXRvX2Rw X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSk7CisJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRp b24gKnBvcywgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJm1z dF9zdGF0ZS0+dmNwaXMsIG5leHQpCisJCWtmcmVlKHBvcyk7CiAKIAlrZnJlZShtc3Rfc3RhdGUp OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9z dGF0ZV9mdW5jcyA9IHsKKy8qKgorICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0 aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUIHRvcG9sb2d5IGluIGFuCisgKiBhdG9taWMgdXBk YXRlIGlzIHZhbGlkCisgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5ldyAmc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUKKyAqCisgKiBDaGVja3MgdGhlIGdpdmVuIHRvcG9sb2d5IHN0 YXRlIGZvciBhbiBhdG9taWMgdXBkYXRlIHRvIGVuc3VyZSB0aGF0IGl0J3MKKyAqIHZhbGlkLiBU aGlzIGluY2x1ZGVzIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRv IHN1cHBvcnQKKyAqIHRoZSBuZXcgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUgYXRvbWljIHVwZGF0 ZS4KKyAqCisgKiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBNU1QgbXVzdCBtYWtl IHN1cmUgdG8gY2FsbCB0aGlzIGFmdGVyCisgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBz dGF0ZSBpbiB0aGVpciAtPmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6 CisgKgorICogMCBpZiB0aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2Rl IG90aGVyd2lzZS4KKyAqLworaW50IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1nciA9IHN0YXRlLT5tZ3I7CisJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRp b24gKnBvczsKKwlpbnQgYXZhaWxfc2xvdHMgPSA2MzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnko cG9zLCAmc3RhdGUtPnZjcGlzLCBuZXh0KSB7CisJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9S VDolcF0gcmVxdWlyZXMgJWQgdmNwaSBzbG90c1xuIiwKKwkJCQkgcG9zLT5wb3J0LCBwb3MtPnZj cGkpOworCisJCWF2YWlsX3Nsb3RzIC09IHBvcy0+dmNwaTsKKwkJaWYgKGF2YWlsX3Nsb3RzIDwg MCkgeworCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBub3QgZW5vdWdoIHZjcGkg c2xvdHMgaW4gc3RhdGUgJXAgKGF2YWlsPSVkKVxuIiwKKwkJCQkJIHBvcy0+cG9ydCwgc3RhdGUs CisJCQkJCSBhdmFpbF9zbG90cyArIHBvcy0+dmNwaSk7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJ fQorCX0KKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgdmNwaSBhdmFp bD0lZCB1c2VkPSVkXG4iLAorCQkJIG1nciwgc3RhdGUsIGF2YWlsX3Nsb3RzLCA2MyAtIGF2YWls X3Nsb3RzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21p Y19jaGVjayk7CisKK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBkcm1fZHBf bXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzID0gewogCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g ZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUsCiAJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2RwX21zdF9kZXN0cm95X3N0YXRlLAogfTsKK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZV9mdW5jcyk7CiAKIC8qKgogICogZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5 X3N0YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlCkBAIC0zMjEzLDEzICszMzQxLDExIEBAIGlu dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1zdF9zdGF0ZS0+bWdyID0gbWdyOwot Ci0JLyogbWF4LiB0aW1lIHNsb3RzIC0gb25lIHNsb3QgZm9yIE1UUCBoZWFkZXIgKi8KLQltc3Rf c3RhdGUtPmF2YWlsX3Nsb3RzID0gNjM7CisJSU5JVF9MSVNUX0hFQUQoJm1zdF9zdGF0ZS0+dmNw aXMpOwogCiAJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KCZtZ3ItPmJhc2UsCiAJCQkJICAg ICZtc3Rfc3RhdGUtPmJhc2UsCi0JCQkJICAgICZtc3Rfc3RhdGVfZnVuY3MpOworCQkJCSAgICAm ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBmZTA0NWFiYjY0NzIuLmY2NmFmMTQ2NTY4 NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTI0ODQsNiArMTI0ODQs OCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRv bWljX3N0YXRlKHN0YXRlKTsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKmNydGNfc3RhdGU7CisJc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3I7CisJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUg Km1zdF9zdGF0ZTsKIAlpbnQgcmV0LCBpOwogCWJvb2wgYW55X21zID0gZmFsc2U7CiAKQEAgLTEy NTM0LDYgKzEyNTM2LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgICJbbW9kZXNldF0iIDogIltmYXN0c2V0XSIpOwog CX0KIAorCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG1zdF9zdGF0 ZSwgaSkgeworCQlyZXQgPSBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhtc3Rfc3RhdGUpOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlpZiAoYW55X21zKSB7CiAJCXJldCA9IGlu dGVsX21vZGVzZXRfY2hlY2tzKHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHBfbXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3Qu YwppbmRleCA4YjcxZDY0ZWJkOWQuLmFhZjkwNDczOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHBfbXN0LmMKQEAgLTExNCwyOCArMTE0LDMxIEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBfbXN0 X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKIAlzdHJ1Y3QgZHJtX2NydGMgKm9s ZF9jcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQlpbnQgc2xvdHMs IHJldCA9IDA7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0KKwkJ dG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3IgPQorCQkmaW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydC0+bXN0X21ncjsKKwlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0gaW50ZWxfY29ubmVjdG9yLT5wb3J0OworCWlu dCByZXQgPSAwOwogCiAJb2xkX2Nvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY29ubmVj dG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwogCW9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUt PmNydGM7CiAJaWYgKCFvbGRfY3J0YykKIAkJcmV0dXJuIHJldDsKIAotCWNydGNfc3RhdGUgPSBk cm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwotCXNsb3RzID0g dG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1OwotCWlmIChkcm1fYXRv bWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90cyA+IDApIHsKLQkJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Ci0JCXN0cnVjdCBkcm1fZW5jb2RlciAq b2xkX2VuY29kZXI7CisJLyogRnJlZSBWQ1BJLCBzaW5jZSBjb21wdXRlX2NvbmZpZygpIHdvbid0 IGJlIHJ1biAqLworCWlmICghbmV3X2Nvbm5fc3RhdGUtPmNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0Yyk7CiAKLQkJb2xk X2VuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwotCQltZ3IgPSAmZW5jX3Rv X21zdChvbGRfZW5jb2RlciktPnByaW1hcnktPmRwLm1zdF9tZ3I7Ci0KLQkJcmV0ID0gZHJtX2Rw X2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgc2xvdHMpOwotCQlpZiAocmV0 KQotCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHJlbGVhc2luZyAlZCB2Y3BpIHNsb3RzOiVkXG4i LCBzbG90cywgcmV0KTsKLQkJZWxzZQotCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRl KS0+ZHBfbV9uLnR1ID0gMDsKKwkJcmV0ID0gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoc3RhdGUsIG1nciwgcG9ydCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERUJVR19LTVMoImZh aWxlZCByZWxlYXNpbmcgdmNwaSBzbG90czogJWRcbiIsCisJCQkJICAgICAgcmV0KTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9u LnR1ID0gMDsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaApp bmRleCAzZmFjZWI2NmY1Y2IuLjBhYTdkMzY1ODAxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0v ZHJtX2RwX21zdF9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5o CkBAIC00MDYsOSArNDA2LDE1IEBAIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCB7CiAKICNkZWZpbmUg dG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKIAorc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRp b24geworCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7CisJaW50IHZjcGk7CisJc3RydWN0 IGxpc3RfaGVhZCBuZXh0OworfTsKKwogc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUg ewogCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwotCWludCBhdmFpbF9zbG90czsKKwlz dHJ1Y3QgbGlzdF9oZWFkIHZjcGlzOwogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyOwogfTsKIApAQCAtNjI0LDkgKzYzMCwxMCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3Zj cGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJCSAgc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7CiBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNl X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJCSAgICAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCi0JCQkJICAgICBpbnQgc2xvdHMpOwor CQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7CiBpbnQgZHJtX2RwX3NlbmRf cG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKIAkJ CQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91cCk7CitpbnQgZHJt X2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0 YXRlKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzOwogCi0tIAoyLjE3LjIKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5v dXZlYXVAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vbm91dmVhdQo=