From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH v4 3/6] drm/i915/guc: refactor doorbell management code Date: Tue, 12 Apr 2016 08:30:58 +0100 Message-ID: <570CA432.5060807@intel.com> References: <1460049678-21918-1-git-send-email-david.s.gordon@intel.com> <1460049678-21918-4-git-send-email-david.s.gordon@intel.com> <5706D093.3060402@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 085A16E645 for ; Tue, 12 Apr 2016 07:31:08 +0000 (UTC) In-Reply-To: <5706D093.3060402@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Yu Dai Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDcvMDQvMTYgMjI6MjYsIFl1IERhaSB3cm90ZToKPgo+IE9uIDA0LzA3LzIwMTYgMTA6MjEg QU0sIERhdmUgR29yZG9uIHdyb3RlOgo+PiBEdXJpbmcgYSBoaWJlcm5hdGUvcmVzdW1lIGN5Y2xl LCB0aGUgZHJpdmVyLCB0aGUgR3VDLCBhbmQgdGhlIGRvb3JiZWxsCj4+IGhhcmR3YXJlIGNhbiBl bmQgdXAgaW4gaW5jb25zaXN0ZW50IHN0YXRlcy4gVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlCj4+ IGRyaXZlcidzIGhhbmRsaW5nIGFuZCB0cmFja2luZyBvZiBkb29yYmVsbHMsIGluIHByZXBhcmF0 aW9uIGZvciBhIGxhdGVyCj4+IG9uZSB3aGljaCB3aWxsIHJlc29sdmUgdGhlIGlzc3VlLgo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+ PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgfCA4 OAo+PiArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPj4gICAxIGZpbGUgY2hhbmdlZCwg NTMgaW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPj4gaW5kZXggMjE3MTc1OS4uMmZjNjlmMSAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+PiBA QCAtMTc1LDggKzE3NSw0OCBAQCBzdGF0aWMgaW50IGhvc3QyZ3VjX3NhbXBsZV9mb3JjZXdha2Uo c3RydWN0Cj4+IGludGVsX2d1YyAqZ3VjLAo+PiAgICAqIGNsaWVudCBvYmplY3Qgd2hpY2ggY29u dGFpbnMgdGhlIHBhZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIGRvb3JiZWxsCj4+ICAgICovCj4+ICtz dGF0aWMgaW50IGd1Y191cGRhdGVfZG9vcmJlbGxfaWQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAq Y2xpZW50LAo+PiArICAgICAgICAgICAgICAgICAgc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpk b29yYmVsbCwKPj4gKyAgICAgICAgICAgICAgICAgIHUxNiBuZXdfaWQpCj4+ICt7Cj4+ICsgICAg c3RydWN0IHNnX3RhYmxlICpzZyA9IGNsaWVudC0+Z3VjLT5jdHhfcG9vbF9vYmotPnBhZ2VzOwo+ PiArICAgIHZvaWQgKmRvb3JiZWxsX2JpdG1hcCA9IGNsaWVudC0+Z3VjLT5kb29yYmVsbF9iaXRt YXA7Cj4+ICsgICAgc3RydWN0IGd1Y19jb250ZXh0X2Rlc2MgZGVzYzsKPj4gKyAgICBzaXplX3Qg bGVuOwo+PiArCj4+ICsgICAgaWYgKGNsaWVudC0+ZG9vcmJlbGxfaWQgIT0gR1VDX0lOVkFMSURf RE9PUkJFTExfSUQgJiYKPj4gKyAgICAgICAgdGVzdF9iaXQoY2xpZW50LT5kb29yYmVsbF9pZCwg ZG9vcmJlbGxfYml0bWFwKSkgewo+PiArICAgICAgICAvKiBEZWFjdGl2YXRlIHRoZSBvbGQgZG9v cmJlbGwgKi8KPj4gKyAgICAgICAgZG9vcmJlbGwtPmRiX3N0YXR1cyA9IEdVQ19ET09SQkVMTF9E SVNBQkxFRDsKPj4gKyAgICAgICAgKHZvaWQpaG9zdDJndWNfcmVsZWFzZV9kb29yYmVsbChjbGll bnQtPmd1YywgY2xpZW50KTsKPj4gKyAgICAgICAgY2xlYXJfYml0KGNsaWVudC0+ZG9vcmJlbGxf aWQsIGRvb3JiZWxsX2JpdG1hcCk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogVXBkYXRlIHRo ZSBHdUMncyBpZGVhIG9mIHRoZSBkb29yYmVsbCBJRCAqLwo+PiArICAgIGxlbiA9IHNnX3Bjb3B5 X3RvX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2YoZGVzYyksCj4+ICsg ICAgICAgICAgICAgICAgIHNpemVvZihkZXNjKSAqIGNsaWVudC0+Y3R4X2luZGV4KTsKPj4gKyAg ICBpZiAobGVuICE9IHNpemVvZihkZXNjKSkKPj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4+ ICsgICAgZGVzYy5kYl9pZCA9IG5ld19pZDsKPj4gKyAgICBsZW4gPSBzZ19wY29weV9mcm9tX2J1 ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2YoZGVzYyksCj4+ICsgICAgICAg ICAgICAgICAgIHNpemVvZihkZXNjKSAqIGNsaWVudC0+Y3R4X2luZGV4KTsKPj4gKyAgICBpZiAo bGVuICE9IHNpemVvZihkZXNjKSkKPj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4+ICsKPgo+ IFdlIG1heSBjYWNoZSB0aGUgdm1hcCBvZiBjb250ZXh0IHBvb2wgZm9yIGl0cyBsaWZlIGN5Y2xl IHRvIGF2b2lkIHRoZXNlCj4gY29waWVzLiBUaGF0IGlzIHdoeSBhIGdlbmVyaWMgdm1hcCBoZWxw ZXIgZnVuY3Rpb24gaXMgcmVhbGx5IG5pY2UgdG8gaGF2ZS4KPgo+IEFsZXgKClllcywgSSdtIGhv cGluZyB3ZSdsbCBtYWtlIHNvbWUgcHJvZ3Jlc3Mgd2l0aCB0aGF0IG5vdyB0aGF0IENocmlzIGhh cyAKbWVyZ2VkIHNvbWUgbmV3IHZtYXAgY29kZS4KCk1lYW53aGlsZSBjYW4geW91IHBsZWFzZSBy ZXZpZXcgYWxsIG9mIHRoZSBwYXRjaGVzIGluIHRoaXMgc2VyaWVzPwpUaGFua3MsCi5EYXZlLgoK Pj4gKyAgICBjbGllbnQtPmRvb3JiZWxsX2lkID0gbmV3X2lkOwo+PiArICAgIGlmIChuZXdfaWQg PT0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQpCj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArCj4+ ICsgICAgLyogQWN0aXZhdGUgdGhlIG5ldyBkb29yYmVsbCAqLwo+PiArICAgIHNldF9iaXQoY2xp ZW50LT5kb29yYmVsbF9pZCwgZG9vcmJlbGxfYml0bWFwKTsKPj4gKyAgICBkb29yYmVsbC0+ZGJf c3RhdHVzID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7Cj4+ICsgICAgZG9vcmJlbGwtPmNvb2tpZSA9 IDA7Cj4+ICsgICAgcmV0dXJuIGhvc3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGNsaWVudC0+Z3Vj LCBjbGllbnQpOwo+PiArfQo+PiArCj4+ICAgc3RhdGljIHZvaWQgZ3VjX2luaXRfZG9vcmJlbGwo c3RydWN0IGludGVsX2d1YyAqZ3VjLAo+PiAtICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVf Z3VjX2NsaWVudCAqY2xpZW50KQo+PiArICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVfZ3Vj X2NsaWVudCAqY2xpZW50LAo+PiArICAgICAgICAgICAgICAgICAgdWludDE2X3QgZGJfaWQpCj4+ ICAgewo+PiAgICAgICBzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxsOwo+PiAgICAg ICB2b2lkICpiYXNlOwo+PiBAQCAtMTg0LDggKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19pbml0 X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPj4gICAgICAgYmFzZSA9IGttYXBfYXRv bWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjbGllbnQtPmNsaWVudF9vYmosCj4+IDApKTsK Pj4gICAgICAgZG9vcmJlbGwgPSBiYXNlICsgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7Cj4+IC0g ICAgZG9vcmJlbGwtPmRiX3N0YXR1cyA9IDE7Cj4+IC0gICAgZG9vcmJlbGwtPmNvb2tpZSA9IDA7 Cj4+ICsgICAgZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChjbGllbnQsIGRvb3JiZWxsLCBkYl9pZCk7 Cj4+ICAgICAgIGt1bm1hcF9hdG9taWMoYmFzZSk7Cj4+ICAgfQo+PiBAQCAtMTkzLDI3ICsyMzIs MTYgQEAgc3RhdGljIHZvaWQgZ3VjX2luaXRfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1Ywo+PiAq Z3VjLAo+PiAgIHN0YXRpYyB2b2lkIGd1Y19kaXNhYmxlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9n dWMgKmd1YywKPj4gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNs aWVudCkKPj4gICB7Cj4+IC0gICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g Z3VjX3RvX2k5MTUoZ3VjKTsKPj4gICAgICAgc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29y YmVsbDsKPj4gICAgICAgdm9pZCAqYmFzZTsKPj4gLSAgICBpOTE1X3JlZ190IGRyYnJlZyA9IEdF TjhfRFJCUkVHTChjbGllbnQtPmRvb3JiZWxsX2lkKTsKPj4gLSAgICBpbnQgdmFsdWU7Cj4+ICAg ICAgIGJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY2xpZW50LT5j bGllbnRfb2JqLAo+PiAwKSk7Cj4+ICAgICAgIGRvb3JiZWxsID0gYmFzZSArIGNsaWVudC0+ZG9v cmJlbGxfb2Zmc2V0Owo+PiAtICAgIGRvb3JiZWxsLT5kYl9zdGF0dXMgPSAwOwo+PiArICAgIGd1 Y191cGRhdGVfZG9vcmJlbGxfaWQoY2xpZW50LCBkb29yYmVsbCwgR1VDX0lOVkFMSURfRE9PUkJF TExfSUQpOwo+PiAgICAgICBrdW5tYXBfYXRvbWljKGJhc2UpOwo+PiAtICAgIEk5MTVfV1JJVEUo ZHJicmVnLCBJOTE1X1JFQUQoZHJicmVnKSAmIH5HRU44X0RSQl9WQUxJRCk7Cj4+IC0KPj4gLSAg ICB2YWx1ZSA9IEk5MTVfUkVBRChkcmJyZWcpOwo+PiAtICAgIFdBUk5fT04oKHZhbHVlICYgR0VO OF9EUkJfVkFMSUQpICE9IDApOwo+PiAtCj4+IC0gICAgSTkxNV9XUklURShHRU44X0RSQlJFR1Uo Y2xpZW50LT5kb29yYmVsbF9pZCksIDApOwo+PiAtICAgIEk5MTVfV1JJVEUoZHJicmVnLCAwKTsK Pj4gLQo+PiAgICAgICAvKiBYWFg6IHdhaXQgZm9yIGFueSBpbnRlcnJ1cHRzICovCj4+ICAgICAg IC8qIFhYWDogd2FpdCBmb3Igd29ya3F1ZXVlIHRvIGRyYWluICovCj4+ICAgfQo+PiBAQCAtMjYw LDcgKzI4OCw3IEBAIHN0YXRpYyB1aW50MTZfdCBhc3NpZ25fZG9vcmJlbGwoc3RydWN0IGludGVs X2d1Ywo+PiAqZ3VjLCB1aW50MzJfdCBwcmlvcml0eSkKPj4gICAgICAgaWYgKGlkID09IGVuZCkK Pj4gICAgICAgICAgIGlkID0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQ7Cj4+ICAgICAgIGVsc2UK Pj4gLSAgICAgICAgYml0bWFwX3NldChndWMtPmRvb3JiZWxsX2JpdG1hcCwgaWQsIDEpOwo+PiAr ICAgICAgICBzZXRfYml0KGlkLCBndWMtPmRvb3JiZWxsX2JpdG1hcCk7Cj4+ICAgICAgIERSTV9E RUJVR19EUklWRVIoImFzc2lnbmVkICVzIHByaW9yaXR5IGRvb3JiZWxsIGlkIDB4JXhcbiIsCj4+ ICAgICAgICAgICAgICAgaGlfcHJpID8gImhpZ2giIDogIm5vcm1hbCIsIGlkKTsKPj4gQEAgLTI2 OCwxMSArMjk2LDYgQEAgc3RhdGljIHVpbnQxNl90IGFzc2lnbl9kb29yYmVsbChzdHJ1Y3QgaW50 ZWxfZ3VjCj4+ICpndWMsIHVpbnQzMl90IHByaW9yaXR5KQo+PiAgICAgICByZXR1cm4gaWQ7Cj4+ ICAgfQo+PiAtc3RhdGljIHZvaWQgcmVsZWFzZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMsIHVpbnQxNl90IGlkKQo+PiAtewo+PiAtICAgIGJpdG1hcF9jbGVhcihndWMtPmRvb3JiZWxs X2JpdG1hcCwgaWQsIDEpOwo+PiAtfQo+PiAtCj4+ICAgLyoKPj4gICAgKiBJbml0aWFsaXNlIHRo ZSBwcm9jZXNzIGRlc2NyaXB0b3Igc2hhcmVkIHdpdGggdGhlIEd1QyBmaXJtd2FyZS4KPj4gICAg Ki8KPj4gQEAgLTY2NywxNSArNjkwLDcgQEAgc3RhdGljIHZvaWQgZ3VjX2NsaWVudF9mcmVlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICAgICAgIGlmICghY2xpZW50KQo+PiAgICAgICAgICAg cmV0dXJuOwo+PiAtICAgIGlmIChjbGllbnQtPmRvb3JiZWxsX2lkICE9IEdVQ19JTlZBTElEX0RP T1JCRUxMX0lEKSB7Cj4+IC0gICAgICAgIC8qCj4+IC0gICAgICAgICAqIEZpcnN0IGRpc2FibGUg dGhlIGRvb3JiZWxsLCB0aGVuIHRlbGwgdGhlIEd1QyB3ZSd2ZQo+PiAtICAgICAgICAgKiBmaW5p c2hlZCB3aXRoIGl0LCBmaW5hbGx5IGRlYWxsb2NhdGUgaXQgaW4gb3VyIGJpdG1hcAo+PiAtICAg ICAgICAgKi8KPj4gLSAgICAgICAgZ3VjX2Rpc2FibGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ PiAtICAgICAgICBob3N0Mmd1Y19yZWxlYXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50KTsKPj4gLSAg ICAgICAgcmVsZWFzZV9kb29yYmVsbChndWMsIGNsaWVudC0+ZG9vcmJlbGxfaWQpOwo+PiAtICAg IH0KPj4gKyAgICBndWNfZGlzYWJsZV9kb29yYmVsbChndWMsIGNsaWVudCk7Cj4+ICAgICAgIC8q Cj4+ICAgICAgICAqIFhYWDogd2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIHN1Ym1pc3Npb25zIGJl Zm9yZSBmcmVlaW5nIG1lbW9yeS4KPj4gQEAgLTcxMiw2ICs3MjcsNyBAQCBzdGF0aWMgc3RydWN0 IGk5MTVfZ3VjX2NsaWVudAo+PiAqZ3VjX2NsaWVudF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+PiAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+PiAgICAgICBzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYtPmd1 YzsKPj4gICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPj4gKyAgICB1aW50 MTZfdCBkYl9pZDsKPj4gICAgICAgY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdG UF9LRVJORUwpOwo+PiAgICAgICBpZiAoIWNsaWVudCkKPj4gQEAgLTc1MCwyMiArNzY2LDI0IEBA IHN0YXRpYyBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50Cj4+ICpndWNfY2xpZW50X2FsbG9jKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4+ICAgICAgIGVsc2UKPj4gICAgICAgICAgIGNsaWVudC0+cHJv Y19kZXNjX29mZnNldCA9IChHVUNfREJfU0laRSAvIDIpOwo+PiAtICAgIGNsaWVudC0+ZG9vcmJl bGxfaWQgPSBhc3NpZ25fZG9vcmJlbGwoZ3VjLCBjbGllbnQtPnByaW9yaXR5KTsKPj4gLSAgICBp ZiAoY2xpZW50LT5kb29yYmVsbF9pZCA9PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCkKPj4gKyAg ICBkYl9pZCA9IGFzc2lnbl9kb29yYmVsbChndWMsIGNsaWVudC0+cHJpb3JpdHkpOwo+PiArICAg IGlmIChkYl9pZCA9PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCkKPj4gICAgICAgICAgIC8qIFhY WDogZXZpY3QgYSBkb29yYmVsbCBpbnN0ZWFkICovCj4+ICAgICAgICAgICBnb3RvIGVycjsKPj4g ICAgICAgZ3VjX2luaXRfcHJvY19kZXNjKGd1YywgY2xpZW50KTsKPj4gICAgICAgZ3VjX2luaXRf Y3R4X2Rlc2MoZ3VjLCBjbGllbnQpOwo+PiAtICAgIGd1Y19pbml0X2Rvb3JiZWxsKGd1YywgY2xp ZW50KTsKPj4gKyAgICBndWNfaW5pdF9kb29yYmVsbChndWMsIGNsaWVudCwgZGJfaWQpOwo+PiAg ICAgICAvKiBYWFg6IEFueSBjYWNoZSBmbHVzaGVzIG5lZWRlZD8gR2VuZXJhbCBkb21haW4gbWdt dCBjYWxscz8gKi8KPj4gICAgICAgaWYgKGhvc3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1Yywg Y2xpZW50KSkKPj4gICAgICAgICAgIGdvdG8gZXJyOwo+PiAtICAgIERSTV9ERUJVR19EUklWRVIo Im5ldyBwcmlvcml0eSAldSBjbGllbnQgJXA6IGN0eF9pbmRleCAldSBkYl9pZAo+PiAldVxuIiwK Pj4gLSAgICAgICAgcHJpb3JpdHksIGNsaWVudCwgY2xpZW50LT5jdHhfaW5kZXgsIGNsaWVudC0+ ZG9vcmJlbGxfaWQpOwo+PiArICAgIERSTV9ERUJVR19EUklWRVIoIm5ldyBwcmlvcml0eSAldSBj bGllbnQgJXA6IGN0eF9pbmRleCAldVxuIiwKPj4gKyAgICAgICAgcHJpb3JpdHksIGNsaWVudCwg Y2xpZW50LT5jdHhfaW5kZXgpOwo+PiArICAgIERSTV9ERUJVR19EUklWRVIoImRvb3JiZWxsIGlk ICV1LCBjYWNoZWxpbmUgb2Zmc2V0IDB4JXhcbiIsCj4+ICsgICAgICAgIGNsaWVudC0+ZG9vcmJl bGxfaWQsIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0KTsKPj4gICAgICAgcmV0dXJuIGNsaWVudDsK PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==