From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 17/21] drm/i915: Track the wakeref used to initialise display power domains Date: Fri, 11 Jan 2019 15:09:17 +0200 Message-ID: <87wonbz6gy.fsf@gaia.fi.intel.com> References: <20190110101152.15651-1-chris@chris-wilson.co.uk> <20190110101152.15651-18-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D91E6F6DE for ; Fri, 11 Jan 2019 13:10:59 +0000 (UTC) In-Reply-To: <20190110101152.15651-18-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Jani Nikula List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gT24gbW9k dWxlIGxvYWQgYW5kIHVubG9hZCwgd2UgZ3JhYiB0aGUgUE9XRVJfRE9NQUlOX0lOSVQgcG93ZXJ3 ZWxscyBhbmQKPiB0cmFuc2ZlciB0aGVtIHRvIHRoZSBydW50aW1lLXBtIGNvZGUuIFdlIGNhbiB1 c2Ugb3VyIHdha2VyZWYgdHJhY2tpbmcgdG8KPiB2ZXJpZnkgdGhhdCB0aGUgd2FrZXJlZiBpcyBp bmRlZWQgcGFzc2VkIGZyb20gaW5pdCB0byBlbmFibGUsIGFuZAo+IGRpc2FibGUgdG8gZmluaTsg YW5kIGFjcm9zcyBzdXNwZW5kLgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRl bC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICB8 ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAgMiAr Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyB8IDE1MSArKysrKysr KysrKysrLS0tLS0tLS0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCA2 OCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXgg YjdkY2FjZjJhNWQzLi45NjcxN2EyM2IzMmYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYwo+IEBAIC0yNjk5LDYgKzI2OTksOSBAQCBzdGF0aWMgaW50IGk5MTVfcnVudGltZV9w bV9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAlpZiAoIUhBU19S VU5USU1FX1BNKGRldl9wcml2KSkKPiAgCQlzZXFfcHV0cyhtLCAiUnVudGltZSBwb3dlciBtYW5h Z2VtZW50IG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICAKPiArCXNlcV9wcmludGYobSwgIlJ1bnRpbWUg cG93ZXIgbWFuYWdlbWVudDogJXNcbiIsCj4gKwkJICAgZW5hYmxlZGRpc2FibGVkKCFkZXZfcHJp di0+cG93ZXJfZG9tYWlucy53YWtlcmVmKSk7Cj4gKwo+ICAJc2VxX3ByaW50ZihtLCAiR1BVIGlk bGU6ICVzIChlcG9jaCAldSlcbiIsCj4gIAkJICAgeWVzbm8oIWRldl9wcml2LT5ndC5hd2FrZSks IGRldl9wcml2LT5ndC5lcG9jaCk7Cj4gIAlzZXFfcHJpbnRmKG0sICJJUlFzIGRpc2FibGVkOiAl c1xuIiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA0NGMxYjIxZmViYmEuLjI1OWI5 MWI2MmZmMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC04MjIsNiArODIyLDgg QEAgc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyB7Cj4gIAlib29sIGRpc3BsYXlfY29yZV9zdXNw ZW5kZWQ7Cj4gIAlpbnQgcG93ZXJfd2VsbF9jb3VudDsKPiAgCj4gKwlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKPiArCj4gIAlzdHJ1Y3QgbXV0ZXggbG9jazsKPiAgCWludCBkb21haW5fdXNlX2Nv dW50W1BPV0VSX0RPTUFJTl9OVU1dOwo+ICAJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJf d2VsbHM7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVf cG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwo+IGluZGV4IGZk MmZjMTBkZDFlNC4uOGQzOGYzZTdmYWQxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3J1bnRpbWVfcG0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3J1bnRpbWVfcG0uYwo+IEBAIC00MDA5LDcgKzQwMDksNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9w b3dlcl9kb21haW5zX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwo+ICAKPiAgLyoqCj4gICAqIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odyAtIGluaXRp YWxpemUgaGFyZHdhcmUgcG93ZXIgZG9tYWluIHN0YXRlCj4gLSAqIEBkZXZfcHJpdjogaTkxNSBk ZXZpY2UgaW5zdGFuY2UKPiArICogQGk5MTU6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAqIEBy ZXN1bWU6IENhbGxlZCBmcm9tIHJlc3VtZSBjb2RlIHBhdGhzIG9yIG5vdAo+ICAgKgo+ICAgKiBU aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZSBwb3dlciBkb21haW4gc3RhdGUg YW5kIGVuYWJsZXMgYWxsCj4gQEAgLTQwMjMsMzAgKzQwMjMsMzEgQEAgc3RhdGljIHZvaWQgaW50 ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAgICogaW50ZWxfcG93ZXJfZG9tYWluc19lbmFibGUoKSkgYW5kIG11c3QgYmUg cGFpcmVkIHdpdGgKPiAgICogaW50ZWxfcG93ZXJfZG9tYWluc19maW5pX2h3KCkuCj4gICAqLwo+ IC12b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIGJvb2wgcmVzdW1lKQo+ICt2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5p dF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCByZXN1bWUpCj4gIHsKPiAt CXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBv d2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5z ID0gJmk5MTUtPnBvd2VyX2RvbWFpbnM7Cj4gIAo+ICAJcG93ZXJfZG9tYWlucy0+aW5pdGlhbGl6 aW5nID0gdHJ1ZTsKPiAgCj4gLQlpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikpIHsKPiAtCQlpY2xf ZGlzcGxheV9jb3JlX2luaXQoZGV2X3ByaXYsIHJlc3VtZSk7Cj4gLQl9IGVsc2UgaWYgKElTX0NB Tk5PTkxBS0UoZGV2X3ByaXYpKSB7Cj4gLQkJY25sX2Rpc3BsYXlfY29yZV9pbml0KGRldl9wcml2 LCByZXN1bWUpOwo+IC0JfSBlbHNlIGlmIChJU19HRU45X0JDKGRldl9wcml2KSkgewo+IC0JCXNr bF9kaXNwbGF5X2NvcmVfaW5pdChkZXZfcHJpdiwgcmVzdW1lKTsKPiAtCX0gZWxzZSBpZiAoSVNf R0VOOV9MUChkZXZfcHJpdikpIHsKPiAtCQlieHRfZGlzcGxheV9jb3JlX2luaXQoZGV2X3ByaXYs IHJlc3VtZSk7Cj4gLQl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwlp ZiAoSVNfSUNFTEFLRShpOTE1KSkgewo+ICsJCWljbF9kaXNwbGF5X2NvcmVfaW5pdChpOTE1LCBy ZXN1bWUpOwo+ICsJfSBlbHNlIGlmIChJU19DQU5OT05MQUtFKGk5MTUpKSB7Cj4gKwkJY25sX2Rp c3BsYXlfY29yZV9pbml0KGk5MTUsIHJlc3VtZSk7Cj4gKwl9IGVsc2UgaWYgKElTX0dFTjlfQkMo aTkxNSkpIHsKPiArCQlza2xfZGlzcGxheV9jb3JlX2luaXQoaTkxNSwgcmVzdW1lKTsKPiArCX0g ZWxzZSBpZiAoSVNfR0VOOV9MUChpOTE1KSkgewo+ICsJCWJ4dF9kaXNwbGF5X2NvcmVfaW5pdChp OTE1LCByZXN1bWUpOwo+ICsJfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKSB7Cj4gIAkJ bXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gLQkJY2h2X3BoeV9jb250cm9sX2lu aXQoZGV2X3ByaXYpOwo+ICsJCWNodl9waHlfY29udHJvbF9pbml0KGk5MTUpOwo+ICAJCW11dGV4 X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpKSB7Cj4gKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpIHsKPiAg CQltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiAtCQl2bHZfY21ubGFuZV93YShk ZXZfcHJpdik7Cj4gKwkJdmx2X2NtbmxhbmVfd2EoaTkxNSk7Cj4gIAkJbXV0ZXhfdW5sb2NrKCZw b3dlcl9kb21haW5zLT5sb2NrKTsKPiAtCX0gZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2 KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDcpCj4gLQkJaW50ZWxfcGNoX3Jlc2V0X2hhbmRz aGFrZShkZXZfcHJpdiwgIUhBU19QQ0hfTk9QKGRldl9wcml2KSk7Cj4gKwl9IGVsc2UgaWYgKElT X0lWWUJSSURHRShpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gNykgewo+ICsJCWludGVsX3Bj aF9yZXNldF9oYW5kc2hha2UoaTkxNSwgIUhBU19QQ0hfTk9QKGk5MTUpKTsKPiArCX0KPiAgCj4g IAkvKgo+ICAJICogS2VlcCBhbGwgcG93ZXIgd2VsbHMgZW5hYmxlZCBmb3IgYW55IGRlcGVuZGVu dCBIVyBhY2Nlc3MgZHVyaW5nCj4gQEAgLTQwNTQsMTggKzQwNTUsMjAgQEAgdm9pZCBpbnRlbF9w b3dlcl9kb21haW5zX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBi b29sIHJlc3VtZSkKPiAgCSAqIHJlc291cmNlcyBwb3dlcmVkIHVudGlsIGRpc3BsYXkgSFcgcmVh ZG91dCBpcyBjb21wbGV0ZS4gV2UgZHJvcAo+ICAJICogdGhpcyByZWZlcmVuY2UgaW4gaW50ZWxf cG93ZXJfZG9tYWluc19lbmFibGUoKS4KPiAgCSAqLwo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9n ZXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9JTklUKTsKPiArCXBvd2VyX2RvbWFpbnMtPndha2Vy ZWYgPQo+ICsJCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBPV0VSX0RPTUFJTl9JTklU KTsKPiArCj4gIAkvKiBEaXNhYmxlIHBvd2VyIHN1cHBvcnQgaWYgdGhlIHVzZXIgYXNrZWQgc28u ICovCj4gIAlpZiAoIWk5MTVfbW9kcGFyYW1zLmRpc2FibGVfcG93ZXJfd2VsbCkKPiAtCQlpbnRl bF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0lOSVQpOwoKRm9yIHRo ZSB1bmluaXRpYXRlZCwgdGhlIGNvbW1lbnQgdnMgdGhlIGNvbmRpdGlvbmFsIGRpZCByYWlzZQpo ZWFydCByYXRlLgoKUmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGlu dXguaW50ZWwuY29tPgoKCj4gLQlpbnRlbF9wb3dlcl9kb21haW5zX3N5bmNfaHcoZGV2X3ByaXYp Owo+ICsJCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBPV0VSX0RPTUFJTl9JTklUKTsK PiArCWludGVsX3Bvd2VyX2RvbWFpbnNfc3luY19odyhpOTE1KTsKPiAgCj4gIAlwb3dlcl9kb21h aW5zLT5pbml0aWFsaXppbmcgPSBmYWxzZTsKPiAgfQo+ICAKPiAgLyoqCj4gICAqIGludGVsX3Bv d2VyX2RvbWFpbnNfZmluaV9odyAtIGRlaW5pdGlhbGl6ZSBodyBwb3dlciBkb21haW4gc3RhdGUK PiAtICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+ICsgKiBAaTkxNTogaTkxNSBk ZXZpY2UgaW5zdGFuY2UKPiAgICoKPiAgICogRGUtaW5pdGlhbGl6ZXMgdGhlIGRpc3BsYXkgcG93 ZXIgZG9tYWluIEhXIHN0YXRlLiBJdCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUKPiAgICogZGV2aWNl IHN0YXlzIHBvd2VyZWQgdXAgc28gdGhhdCB0aGUgZHJpdmVyIGNhbiBiZSByZWxvYWRlZC4KPiBA QCAtNDA3NCwyMSArNDA3NywyNCBAQCB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgcmVzdW1lKQo+ICAgKiBpbnRl bF9wb3dlcl9kb21haW5zX2Rpc2FibGUoKSkgYW5kIG11c3QgYmUgcGFpcmVkIHdpdGgKPiAgICog aW50ZWxfcG93ZXJfZG9tYWluc19pbml0X2h3KCkuCj4gICAqLwo+IC12b2lkIGludGVsX3Bvd2Vy X2RvbWFpbnNfZmluaV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3Zv aWQgaW50ZWxfcG93ZXJfZG9tYWluc19maW5pX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICB7Cj4gLQkvKiBLZWVwIHRoZSBwb3dlciB3ZWxsIGVuYWJsZWQsIGJ1dCBjYW5jZWwg aXRzIHJwbSB3YWtlcmVmLiAqLwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXRfdW5jaGVja2VkKGRl dl9wcml2KTsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmIF9fbWF5YmVfdW51c2VkID0KPiAr CQlmZXRjaF9hbmRfemVybygmaTkxNS0+cG93ZXJfZG9tYWlucy53YWtlcmVmKTsKPiAgCj4gIAkv KiBSZW1vdmUgdGhlIHJlZmNvdW50IHdlIHRvb2sgdG8ga2VlcCBwb3dlciB3ZWxsIHN1cHBvcnQg ZGlzYWJsZWQuICovCj4gIAlpZiAoIWk5MTVfbW9kcGFyYW1zLmRpc2FibGVfcG93ZXJfd2VsbCkK PiAtCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF91bmNoZWNrZWQoZGV2X3ByaXYsIFBPV0VSX0RP TUFJTl9JTklUKTsKPiArCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dF91bmNoZWNrZWQoaTkxNSwg UE9XRVJfRE9NQUlOX0lOSVQpOwo+ICsKPiArCWludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0 YXRlKGk5MTUpOwo+ICAKPiAtCWludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKGRldl9w cml2KTsKPiArCS8qIEtlZXAgdGhlIHBvd2VyIHdlbGwgZW5hYmxlZCwgYnV0IGNhbmNlbCBpdHMg cnBtIHdha2VyZWYuICovCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsK PiAgfQo+ICAKPiAgLyoqCj4gICAqIGludGVsX3Bvd2VyX2RvbWFpbnNfZW5hYmxlIC0gZW5hYmxl IHRvZ2dsaW5nIG9mIGRpc3BsYXkgcG93ZXIgd2VsbHMKPiAtICogQGRldl9wcml2OiBpOTE1IGRl dmljZSBpbnN0YW5jZQo+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2UgaW5zdGFuY2UKPiAgICoKPiAg ICogRW5hYmxlIHRoZSBvbmRlbWFuZCBlbmFibGluZy9kaXNhYmxpbmcgb2YgdGhlIGRpc3BsYXkg cG93ZXIgd2VsbHMuIE5vdGUgdGhhdAo+ICAgKiBwb3dlciB3ZWxscyBub3QgYmVsb25naW5nIHRv IFBPV0VSX0RPTUFJTl9JTklUIGFyZSBhbGxvd2VkIHRvIGJlIHRvZ2dsZWQKPiBAQCAtNDA5OCwz MCArNDEwNCwzNiBAQCB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZmluaV9odyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAqIG9mIGRpc3BsYXkgSFcgcmVhZG91dCAod2hp Y2ggd2lsbCBhY3F1aXJlIHRoZSBwb3dlciByZWZlcmVuY2VzIHJlZmxlY3RpbmcKPiAgICogdGhl IGN1cnJlbnQgSFcgc3RhdGUpLgo+ICAgKi8KPiAtdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX2Vu YWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3ZvaWQgaW50ZWxfcG93 ZXJfZG9tYWluc19lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAt CWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X3VuY2hlY2tlZChkZXZfcHJpdiwgUE9XRVJfRE9NQUlO X0lOSVQpOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWYgX19tYXliZV91bnVzZWQgPQo+ICsJ CWZldGNoX2FuZF96ZXJvKCZpOTE1LT5wb3dlcl9kb21haW5zLndha2VyZWYpOwo+ICAKPiAtCWlu dGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKGRldl9wcml2KTsKPiArCWludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0KGk5MTUsIFBPV0VSX0RPTUFJTl9JTklULCB3YWtlcmVmKTsKPiArCWludGVs X3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKGk5MTUpOwo+ICB9Cj4gIAo+ICAvKioKPiAgICog aW50ZWxfcG93ZXJfZG9tYWluc19kaXNhYmxlIC0gZGlzYWJsZSB0b2dnbGluZyBvZiBkaXNwbGF5 IHBvd2VyIHdlbGxzCj4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5zdGFuY2UKPiArICog QGk5MTU6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAqCj4gICAqIERpc2FibGUgdGhlIG9uZGVt YW5kIGVuYWJsaW5nL2Rpc2FibGluZyBvZiB0aGUgZGlzcGxheSBwb3dlciB3ZWxscy4gU2VlCj4g ICAqIGludGVsX3Bvd2VyX2RvbWFpbnNfZW5hYmxlKCkgZm9yIHdoaWNoIHBvd2VyIHdlbGxzIHRo aXMgY2FsbCBjb250cm9scy4KPiAgICovCj4gLXZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc19kaXNh YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArdm9pZCBpbnRlbF9wb3dl cl9kb21haW5zX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAt CWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5JVCk7Cj4g KwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmk5MTUtPnBvd2Vy X2RvbWFpbnM7Cj4gIAo+IC0JaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoZGV2X3By aXYpOwo+ICsJV0FSTl9PTihwb3dlcl9kb21haW5zLT53YWtlcmVmKTsKPiArCXBvd2VyX2RvbWFp bnMtPndha2VyZWYgPQo+ICsJCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBPV0VSX0RP TUFJTl9JTklUKTsKPiArCj4gKwlpbnRlbF9wb3dlcl9kb21haW5zX3ZlcmlmeV9zdGF0ZShpOTE1 KTsKPiAgfQo+ICAKPiAgLyoqCj4gICAqIGludGVsX3Bvd2VyX2RvbWFpbnNfc3VzcGVuZCAtIHN1 c3BlbmQgcG93ZXIgZG9tYWluIHN0YXRlCj4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5z dGFuY2UKPiArICogQGk5MTU6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAqIEBzdXNwZW5kX21v ZGU6IHNwZWNpZmllcyB0aGUgdGFyZ2V0IHN1c3BlbmQgc3RhdGUgKGlkbGUsIG1lbSwgaGliZXJu YXRpb24pCj4gICAqCj4gICAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGhhcmR3YXJlIHBv d2VyIGRvbWFpbiBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcKPiBAQCAtNDEzMCwxMiArNDE0MiwxNCBA QCB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gICAqIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggcG93ZXIgZG9tYWlucyBh bHJlYWR5IGRpc2FibGVkIChhZnRlciBhIGNhbGwgdG8KPiAgICogaW50ZWxfcG93ZXJfZG9tYWlu c19kaXNhYmxlKCkpIGFuZCBwYWlyZWQgd2l0aCBpbnRlbF9wb3dlcl9kb21haW5zX3Jlc3VtZSgp Lgo+ICAgKi8KPiAtdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3N1c3BlbmQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICt2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfc3VzcGVu ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgCQkJCSBlbnVtIGk5MTVfZHJtX3N1 c3BlbmRfbW9kZSBzdXNwZW5kX21vZGUpCj4gIHsKPiAtCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFp bnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3Qg aTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmk5MTUtPnBvd2VyX2RvbWFpbnM7 Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZiBfX21heWJlX3VudXNlZCA9Cj4gKwkJZmV0Y2hf YW5kX3plcm8oJnBvd2VyX2RvbWFpbnMtPndha2VyZWYpOwo+ICAKPiAtCWludGVsX2Rpc3BsYXlf cG93ZXJfcHV0X3VuY2hlY2tlZChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0lOSVQpOwo+ICsJaW50 ZWxfZGlzcGxheV9wb3dlcl9wdXQoaTkxNSwgUE9XRVJfRE9NQUlOX0lOSVQsIHdha2VyZWYpOwo+ ICAKPiAgCS8qCj4gIAkgKiBJbiBjYXNlIG9mIHN1c3BlbmQtdG8taWRsZSAoYWthIFMwaXgpIG9u IGEgRE1DIHBsYXRmb3JtIHdpdGhvdXQgREM5Cj4gQEAgLTQxNDQsMTAgKzQxNTgsMTAgQEAgdm9p ZCBpbnRlbF9wb3dlcl9kb21haW5zX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJICogcmVzb3VyY2VzIGFzIHJlcXVpcmVkIGFuZCBhbHNvIGVuYWJsZSBkZWVw ZXIgc3lzdGVtIHBvd2VyIHN0YXRlcwo+ICAJICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGlmIHRo ZSBmaXJtd2FyZSB3YXMgaW5hY3RpdmUuCj4gIAkgKi8KPiAtCWlmICghKGRldl9wcml2LT5jc3Iu YWxsb3dlZF9kY19tYXNrICYgRENfU1RBVEVfRU5fREM5KSAmJgo+ICsJaWYgKCEoaTkxNS0+Y3Ny LmFsbG93ZWRfZGNfbWFzayAmIERDX1NUQVRFX0VOX0RDOSkgJiYKPiAgCSAgICBzdXNwZW5kX21v ZGUgPT0gSTkxNV9EUk1fU1VTUEVORF9JRExFICYmCj4gLQkgICAgZGV2X3ByaXYtPmNzci5kbWNf cGF5bG9hZCAhPSBOVUxMKSB7Cj4gLQkJaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUo ZGV2X3ByaXYpOwo+ICsJICAgIGk5MTUtPmNzci5kbWNfcGF5bG9hZCkgewo+ICsJCWludGVsX3Bv d2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKGk5MTUpOwo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4g QEAgLTQxNTYsMjUgKzQxNzAsMjUgQEAgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3N1c3BlbmQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJICogcG93ZXIgd2VsbHMgaWYg cG93ZXIgZG9tYWlucyBtdXN0IGJlIGRlaW5pdGlhbGl6ZWQgZm9yIHN1c3BlbmQuCj4gIAkgKi8K PiAgCWlmICghaTkxNV9tb2RwYXJhbXMuZGlzYWJsZV9wb3dlcl93ZWxsKSB7Cj4gLQkJaW50ZWxf ZGlzcGxheV9wb3dlcl9wdXRfdW5jaGVja2VkKGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5JVCk7 Cj4gLQkJaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoZGV2X3ByaXYpOwo+ICsJCWlu dGVsX2Rpc3BsYXlfcG93ZXJfcHV0X3VuY2hlY2tlZChpOTE1LCBQT1dFUl9ET01BSU5fSU5JVCk7 Cj4gKwkJaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoaTkxNSk7Cj4gIAl9Cj4gIAo+ IC0JaWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQo+IC0JCWljbF9kaXNwbGF5X2NvcmVfdW5pbml0 KGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQo+IC0JCWNu bF9kaXNwbGF5X2NvcmVfdW5pbml0KGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElTX0dFTjlfQkMo ZGV2X3ByaXYpKQo+IC0JCXNrbF9kaXNwbGF5X2NvcmVfdW5pbml0KGRldl9wcml2KTsKPiAtCWVs c2UgaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+IC0JCWJ4dF9kaXNwbGF5X2NvcmVfdW5pbml0 KGRldl9wcml2KTsKPiArCWlmIChJU19JQ0VMQUtFKGk5MTUpKQo+ICsJCWljbF9kaXNwbGF5X2Nv cmVfdW5pbml0KGk5MTUpOwo+ICsJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShpOTE1KSkKPiArCQlj bmxfZGlzcGxheV9jb3JlX3VuaW5pdChpOTE1KTsKPiArCWVsc2UgaWYgKElTX0dFTjlfQkMoaTkx NSkpCj4gKwkJc2tsX2Rpc3BsYXlfY29yZV91bmluaXQoaTkxNSk7Cj4gKwllbHNlIGlmIChJU19H RU45X0xQKGk5MTUpKQo+ICsJCWJ4dF9kaXNwbGF5X2NvcmVfdW5pbml0KGk5MTUpOwo+ICAKPiAg CXBvd2VyX2RvbWFpbnMtPmRpc3BsYXlfY29yZV9zdXNwZW5kZWQgPSB0cnVlOwo+ICB9Cj4gIAo+ ICAvKioKPiAgICogaW50ZWxfcG93ZXJfZG9tYWluc19yZXN1bWUgLSByZXN1bWUgcG93ZXIgZG9t YWluIHN0YXRlCj4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5zdGFuY2UKPiArICogQGk5 MTU6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAqCj4gICAqIFRoaXMgZnVuY3Rpb24gcmVzdW1l IHRoZSBoYXJkd2FyZSBwb3dlciBkb21haW4gc3RhdGUgZHVyaW5nIHN5c3RlbSByZXN1bWUuCj4g ICAqCj4gQEAgLTQxODIsMjggKzQxOTYsMzAgQEAgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3N1 c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgKiBpbnRlbF9wb3dl cl9kb21haW5zX2VuYWJsZSgpKSBhbmQgbXVzdCBiZSBwYWlyZWQgd2l0aAo+ICAgKiBpbnRlbF9w b3dlcl9kb21haW5zX3N1c3BlbmQoKS4KPiAgICovCj4gLXZvaWQgaW50ZWxfcG93ZXJfZG9tYWlu c19yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt2b2lkIGludGVs X3Bvd2VyX2RvbWFpbnNfcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICB7 Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2 LT5wb3dlcl9kb21haW5zOwo+ICsJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9t YWlucyA9ICZpOTE1LT5wb3dlcl9kb21haW5zOwo+ICAKPiAgCWlmIChwb3dlcl9kb21haW5zLT5k aXNwbGF5X2NvcmVfc3VzcGVuZGVkKSB7Cj4gLQkJaW50ZWxfcG93ZXJfZG9tYWluc19pbml0X2h3 KGRldl9wcml2LCB0cnVlKTsKPiArCQlpbnRlbF9wb3dlcl9kb21haW5zX2luaXRfaHcoaTkxNSwg dHJ1ZSk7Cj4gIAkJcG93ZXJfZG9tYWlucy0+ZGlzcGxheV9jb3JlX3N1c3BlbmRlZCA9IGZhbHNl Owo+ICAJfSBlbHNlIHsKPiAtCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9X RVJfRE9NQUlOX0lOSVQpOwo+ICsJCVdBUk5fT04ocG93ZXJfZG9tYWlucy0+d2FrZXJlZik7Cj4g KwkJcG93ZXJfZG9tYWlucy0+d2FrZXJlZiA9Cj4gKwkJCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0 KGk5MTUsIFBPV0VSX0RPTUFJTl9JTklUKTsKPiAgCX0KPiAgCj4gLQlpbnRlbF9wb3dlcl9kb21h aW5zX3ZlcmlmeV9zdGF0ZShkZXZfcHJpdik7Cj4gKwlpbnRlbF9wb3dlcl9kb21haW5zX3Zlcmlm eV9zdGF0ZShpOTE1KTsKPiAgfQo+ICAKPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0RFQlVHX1JVTlRJTUVfUE0pCj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5z X2R1bXBfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2 b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZHVtcF9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5z ID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+ICsJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlu cyAqcG93ZXJfZG9tYWlucyA9ICZpOTE1LT5wb3dlcl9kb21haW5zOwo+ICAJc3RydWN0IGk5MTVf cG93ZXJfd2VsbCAqcG93ZXJfd2VsbDsKPiAgCj4gLQlmb3JfZWFjaF9wb3dlcl93ZWxsKGRldl9w cml2LCBwb3dlcl93ZWxsKSB7Cj4gKwlmb3JfZWFjaF9wb3dlcl93ZWxsKGk5MTUsIHBvd2VyX3dl bGwpIHsKPiAgCQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbjsKPiAgCj4g IAkJRFJNX0RFQlVHX0RSSVZFUigiJS0yNXMgJWRcbiIsCj4gQEAgLTQyMTgsNyArNDIzNCw3IEBA IHN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZHVtcF9pbmZvKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgCj4gIC8qKgo+ICAgKiBpbnRlbF9wb3dlcl9kb21haW5z X3ZlcmlmeV9zdGF0ZSAtIHZlcmlmeSB0aGUgSFcvU1cgc3RhdGUgZm9yIGFsbCBwb3dlciB3ZWxs cwo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gKyAqIEBpOTE1OiBpOTE1 IGRldmljZSBpbnN0YW5jZQo+ICAgKgo+ICAgKiBWZXJpZnkgaWYgdGhlIHJlZmVyZW5jZSBjb3Vu dCBvZiBlYWNoIHBvd2VyIHdlbGwgbWF0Y2hlcyBpdHMgSFcgZW5hYmxlZAo+ICAgKiBzdGF0ZSBh bmQgdGhlIHRvdGFsIHJlZmNvdW50IG9mIHRoZSBkb21haW5zIGl0IGJlbG9uZ3MgdG8uIFRoaXMg bXVzdCBiZQo+IEBAIC00MjI2LDIyICs0MjQyLDIxIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bvd2Vy X2RvbWFpbnNfZHVtcF9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAg ICogYWNxdWlyaW5nIHJlZmVyZW5jZSBjb3VudHMgZm9yIGFueSBwb3dlciB3ZWxscyBpbiB1c2Ug YW5kIGRpc2FibGluZyB0aGUKPiAgICogb25lcyBsZWZ0IG9uIGJ5IEJJT1MgYnV0IG5vdCByZXF1 aXJlZCBieSBhbnkgYWN0aXZlIG91dHB1dC4KPiAgICovCj4gLXN0YXRpYyB2b2lkIGludGVsX3Bv d2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArc3RhdGljIHZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAtCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFp bnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3Qg aTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmk5MTUtPnBvd2VyX2RvbWFpbnM7 Cj4gIAlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICAJYm9vbCBkdW1wX2Rv bWFpbl9pbmZvOwo+ICAKPiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+ICAK PiAgCWR1bXBfZG9tYWluX2luZm8gPSBmYWxzZTsKPiAtCWZvcl9lYWNoX3Bvd2VyX3dlbGwoZGV2 X3ByaXYsIHBvd2VyX3dlbGwpIHsKPiArCWZvcl9lYWNoX3Bvd2VyX3dlbGwoaTkxNSwgcG93ZXJf d2VsbCkgewo+ICAJCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwo+ICAJ CWludCBkb21haW5zX2NvdW50Owo+ICAJCWJvb2wgZW5hYmxlZDsKPiAgCj4gLQkJZW5hYmxlZCA9 IHBvd2VyX3dlbGwtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZChkZXZfcHJpdiwKPiAtCQkJCQkJCSAg ICBwb3dlcl93ZWxsKTsKPiArCQllbmFibGVkID0gcG93ZXJfd2VsbC0+ZGVzYy0+b3BzLT5pc19l bmFibGVkKGk5MTUsIHBvd2VyX3dlbGwpOwo+ICAJCWlmICgocG93ZXJfd2VsbC0+Y291bnQgfHwg cG93ZXJfd2VsbC0+ZGVzYy0+YWx3YXlzX29uKSAhPQo+ICAJCSAgICBlbmFibGVkKQo+ICAJCQlE Uk1fRVJST1IoInBvd2VyIHdlbGwgJXMgc3RhdGUgbWlzbWF0Y2ggKHJlZmNvdW50ICVkL2VuYWJs ZWQgJWQpIiwKPiBAQCAtNDI2NSw3ICs0MjgwLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG93ZXJf ZG9tYWluc192ZXJpZnlfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICAJCXN0YXRpYyBib29sIGR1bXBlZDsKPiAgCj4gIAkJaWYgKCFkdW1wZWQpIHsKPiAtCQkJaW50 ZWxfcG93ZXJfZG9tYWluc19kdW1wX2luZm8oZGV2X3ByaXYpOwo+ICsJCQlpbnRlbF9wb3dlcl9k b21haW5zX2R1bXBfaW5mbyhpOTE1KTsKPiAgCQkJZHVtcGVkID0gdHJ1ZTsKPiAgCQl9Cj4gIAl9 Cj4gQEAgLTQyNzUsNyArNDI5MCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNf dmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCj4gICNl bHNlCj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3ZlcmlmeV9zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bv d2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICB7Cj4gIH0KPiAgCj4gLS0gCj4gMi4yMC4xCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=