From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Date: Thu, 25 Jul 2019 14:39:34 +0000 Subject: Re: [PATCH v1 1/1] backlight: drop EARLY_EVENT_BLANK support Message-Id: <20190725143934.GH15868@phenom.ffwll.local> List-Id: References: <20190725143224.GB31803@ravnborg.org> In-Reply-To: <20190725143224.GB31803@ravnborg.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Sam Ravnborg Cc: Daniel Thompson , Bartlomiej Zolnierkiewicz , Daniel Vetter , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, =?utf-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , Gerd Hoffmann , Jingoo Han , Lee Jones , Peter Rosin On Thu, Jul 25, 2019 at 04:32:24PM +0200, Sam Ravnborg wrote: > There was no users left - so drop the code to support EARLY_FB_BLANK. > This patch removes the support in backlight, > and drop the notifier in fbmem. > > That EARLY_FB_BLANK is not used can be verified that no driver set any of: > > lcd_ops.early_set_power() > lcd_ops.r_early_set_power() > > Noticed while browsing backlight code for other reasons. Ah I didn't grep hard enough, I didn't realize that no one sets the lcd_ops->(r_)early_set_power hooks. Nice find! Reviewed-by: Daniel Vetter > Signed-off-by: Sam Ravnborg > Cc: Lee Jones > Cc: Daniel Thompson > Cc: Jingoo Han > Cc: Bartlomiej Zolnierkiewicz > Cc: Daniel Vetter > Cc: Sam Ravnborg > Cc: Maarten Lankhorst > Cc: "Michał Mirosław" > Cc: Peter Rosin > Cc: Gerd Hoffmann > Cc: dri-devel@lists.freedesktop.org > Cc: linux-fbdev@vger.kernel.org > --- > > Build tested with various architectures, configs. > > Lee, Daniel - OK to commit to drm-misc-next where fbdev stuff is > maintained today? backlight is separate from fbdev in Lee's own tree, not in drm-misc. I think at least. -Daniel > > Patch needs ack from Bartlomiej first of course. > > Sam > > drivers/video/backlight/lcd.c | 8 -------- > drivers/video/fbdev/core/fbmem.c | 12 +----------- > include/linux/fb.h | 4 ---- > include/linux/lcd.h | 10 ---------- > 4 files changed, 1 insertion(+), 33 deletions(-) > > diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c > index d6b653aa4ee9..78b033358625 100644 > --- a/drivers/video/backlight/lcd.c > +++ b/drivers/video/backlight/lcd.c > @@ -39,14 +39,6 @@ static int fb_notifier_callback(struct notifier_block *self, > if (event = FB_EVENT_BLANK) { > if (ld->ops->set_power) > ld->ops->set_power(ld, *(int *)evdata->data); > - } else if (event = FB_EARLY_EVENT_BLANK) { > - if (ld->ops->early_set_power) > - ld->ops->early_set_power(ld, > - *(int *)evdata->data); > - } else if (event = FB_R_EARLY_EVENT_BLANK) { > - if (ld->ops->r_early_set_power) > - ld->ops->r_early_set_power(ld, > - *(int *)evdata->data); > } else { > if (ld->ops->set_mode) > ld->ops->set_mode(ld, evdata->data); > diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c > index 00fe0efeaee9..e6a1c805064f 100644 > --- a/drivers/video/fbdev/core/fbmem.c > +++ b/drivers/video/fbdev/core/fbmem.c > @@ -1058,7 +1058,7 @@ int > fb_blank(struct fb_info *info, int blank) > { > struct fb_event event; > - int ret = -EINVAL, early_ret; > + int ret = -EINVAL; > > if (blank > FB_BLANK_POWERDOWN) > blank = FB_BLANK_POWERDOWN; > @@ -1066,21 +1066,11 @@ fb_blank(struct fb_info *info, int blank) > event.info = info; > event.data = ␣ > > - early_ret = fb_notifier_call_chain(FB_EARLY_EVENT_BLANK, &event); > - > if (info->fbops->fb_blank) > ret = info->fbops->fb_blank(blank, info); > > if (!ret) > fb_notifier_call_chain(FB_EVENT_BLANK, &event); > - else { > - /* > - * if fb_blank is failed then revert effects of > - * the early blank event. > - */ > - if (!early_ret) > - fb_notifier_call_chain(FB_R_EARLY_EVENT_BLANK, &event); > - } > > return ret; > } > diff --git a/include/linux/fb.h b/include/linux/fb.h > index 50948e519897..756706b666a1 100644 > --- a/include/linux/fb.h > +++ b/include/linux/fb.h > @@ -135,10 +135,6 @@ struct fb_cursor_user { > > /* A display blank is requested */ > #define FB_EVENT_BLANK 0x09 > -/* A hardware display blank early change occurred */ > -#define FB_EARLY_EVENT_BLANK 0x10 > -/* A hardware display blank revert early change occurred */ > -#define FB_R_EARLY_EVENT_BLANK 0x11 > > struct fb_event { > struct fb_info *info; > diff --git a/include/linux/lcd.h b/include/linux/lcd.h > index 851eee8fff25..238fb1dfed98 100644 > --- a/include/linux/lcd.h > +++ b/include/linux/lcd.h > @@ -41,16 +41,6 @@ struct lcd_ops { > /* Get the LCD panel power status (0: full on, 1..3: controller > power on, flat panel power off, 4: full off), see FB_BLANK_XXX */ > int (*get_power)(struct lcd_device *); > - /* > - * Enable or disable power to the LCD(0: on; 4: off, see FB_BLANK_XXX) > - * and this callback would be called proir to fb driver's callback. > - * > - * P.S. note that if early_set_power is not NULL then early fb notifier > - * would be registered. > - */ > - int (*early_set_power)(struct lcd_device *, int power); > - /* revert the effects of the early blank event. */ > - int (*r_early_set_power)(struct lcd_device *, int power); > /* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */ > int (*set_power)(struct lcd_device *, int power); > /* Get the current contrast setting (0-max_contrast) */ > -- > 2.20.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v1 1/1] backlight: drop EARLY_EVENT_BLANK support Date: Thu, 25 Jul 2019 16:39:34 +0200 Message-ID: <20190725143934.GH15868@phenom.ffwll.local> References: <20190725143224.GB31803@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE0726E6FD for ; Thu, 25 Jul 2019 14:39:39 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id w20so50432002edd.2 for ; Thu, 25 Jul 2019 07:39:39 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190725143224.GB31803@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sam Ravnborg Cc: Daniel Thompson , Bartlomiej Zolnierkiewicz , Daniel Vetter , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, =?utf-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , Gerd Hoffmann , Jingoo Han , Lee Jones , Peter Rosin List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdWwgMjUsIDIwMTkgYXQgMDQ6MzI6MjRQTSArMDIwMCwgU2FtIFJhdm5ib3JnIHdy b3RlOgo+IFRoZXJlIHdhcyBubyB1c2VycyBsZWZ0IC0gc28gZHJvcCB0aGUgY29kZSB0byBzdXBw b3J0IEVBUkxZX0ZCX0JMQU5LLgo+IFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgc3VwcG9ydCBpbiBi YWNrbGlnaHQsCj4gYW5kIGRyb3AgdGhlIG5vdGlmaWVyIGluIGZibWVtLgo+IAo+IFRoYXQgRUFS TFlfRkJfQkxBTksgaXMgbm90IHVzZWQgY2FuIGJlIHZlcmlmaWVkIHRoYXQgbm8gZHJpdmVyIHNl dCBhbnkgb2Y6Cj4gCj4gICAgIGxjZF9vcHMuZWFybHlfc2V0X3Bvd2VyKCkKPiAgICAgbGNkX29w cy5yX2Vhcmx5X3NldF9wb3dlcigpCj4gCj4gTm90aWNlZCB3aGlsZSBicm93c2luZyBiYWNrbGln aHQgY29kZSBmb3Igb3RoZXIgcmVhc29ucy4KCkFoIEkgZGlkbid0IGdyZXAgaGFyZCBlbm91Z2gs IEkgZGlkbid0IHJlYWxpemUgdGhhdCBubyBvbmUgc2V0cyB0aGUKbGNkX29wcy0+KHJfKWVhcmx5 X3NldF9wb3dlciBob29rcy4gTmljZSBmaW5kIQoKUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cgo+IFNpZ25lZC1vZmYtYnk6IFNhbSBSYXZuYm9yZyA8 c2FtQHJhdm5ib3JnLm9yZz4KPiBDYzogTGVlIEpvbmVzIDxsZWUuam9uZXNAbGluYXJvLm9yZz4K PiBDYzogRGFuaWVsIFRob21wc29uIDxkYW5pZWwudGhvbXBzb25AbGluYXJvLm9yZz4KPiBDYzog SmluZ29vIEhhbiA8amluZ29vaGFuMUBnbWFpbC5jb20+Cj4gQ2M6IEJhcnRsb21pZWogWm9sbmll cmtpZXdpY3ogPGIuem9sbmllcmtpZUBzYW1zdW5nLmNvbT4KPiBDYzogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcu b3JnPgo+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50 ZWwuY29tPgo+IENjOiAiTWljaGHFgiBNaXJvc8WCYXciIDxtaXJxLWxpbnV4QHJlcmUucW1xbS5w bD4KPiBDYzogUGV0ZXIgUm9zaW4gPHBlZGFAYXhlbnRpYS5zZT4KPiBDYzogR2VyZCBIb2ZmbWFu biA8a3JheGVsQHJlZGhhdC5jb20+Cj4gQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBDYzogbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCj4gLS0tCj4gCj4gQnVpbGQgdGVz dGVkIHdpdGggdmFyaW91cyBhcmNoaXRlY3R1cmVzLCBjb25maWdzLgo+IAo+IExlZSwgRGFuaWVs IC0gT0sgdG8gY29tbWl0IHRvIGRybS1taXNjLW5leHQgd2hlcmUgZmJkZXYgc3R1ZmYgaXMKPiBt YWludGFpbmVkIHRvZGF5PwoKYmFja2xpZ2h0IGlzIHNlcGFyYXRlIGZyb20gZmJkZXYgaW4gTGVl J3Mgb3duIHRyZWUsIG5vdCBpbiBkcm0tbWlzYy4gSQp0aGluayBhdCBsZWFzdC4KLURhbmllbAoK PiAKPiBQYXRjaCBuZWVkcyBhY2sgZnJvbSBCYXJ0bG9taWVqIGZpcnN0IG9mIGNvdXJzZS4KPiAK PiAJU2FtCj4gCj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jICAgIHwgIDggLS0tLS0t LS0KPiAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZibWVtLmMgfCAxMiArLS0tLS0tLS0tLS0K PiAgaW5jbHVkZS9saW51eC9mYi5oICAgICAgICAgICAgICAgfCAgNCAtLS0tCj4gIGluY2x1ZGUv bGludXgvbGNkLmggICAgICAgICAgICAgIHwgMTAgLS0tLS0tLS0tLQo+ICA0IGZpbGVzIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAzMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2Qu Ywo+IGluZGV4IGQ2YjY1M2FhNGVlOS4uNzhiMDMzMzU4NjI1IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv bGNkLmMKPiBAQCAtMzksMTQgKzM5LDYgQEAgc3RhdGljIGludCBmYl9ub3RpZmllcl9jYWxsYmFj ayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCj4gIAkJaWYgKGV2ZW50ID09IEZCX0VWRU5U X0JMQU5LKSB7Cj4gIAkJCWlmIChsZC0+b3BzLT5zZXRfcG93ZXIpCj4gIAkJCQlsZC0+b3BzLT5z ZXRfcG93ZXIobGQsICooaW50ICopZXZkYXRhLT5kYXRhKTsKPiAtCQl9IGVsc2UgaWYgKGV2ZW50 ID09IEZCX0VBUkxZX0VWRU5UX0JMQU5LKSB7Cj4gLQkJCWlmIChsZC0+b3BzLT5lYXJseV9zZXRf cG93ZXIpCj4gLQkJCQlsZC0+b3BzLT5lYXJseV9zZXRfcG93ZXIobGQsCj4gLQkJCQkJCSooaW50 ICopZXZkYXRhLT5kYXRhKTsKPiAtCQl9IGVsc2UgaWYgKGV2ZW50ID09IEZCX1JfRUFSTFlfRVZF TlRfQkxBTkspIHsKPiAtCQkJaWYgKGxkLT5vcHMtPnJfZWFybHlfc2V0X3Bvd2VyKQo+IC0JCQkJ bGQtPm9wcy0+cl9lYXJseV9zZXRfcG93ZXIobGQsCj4gLQkJCQkJCSooaW50ICopZXZkYXRhLT5k YXRhKTsKPiAgCQl9IGVsc2Ugewo+ICAJCQlpZiAobGQtPm9wcy0+c2V0X21vZGUpCj4gIAkJCQls ZC0+b3BzLT5zZXRfbW9kZShsZCwgZXZkYXRhLT5kYXRhKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy92aWRlby9mYmRldi9jb3JlL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJt ZW0uYwo+IGluZGV4IDAwZmUwZWZlYWVlOS4uZTZhMWM4MDUwNjRmIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1lbS5jCj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRl di9jb3JlL2ZibWVtLmMKPiBAQCAtMTA1OCw3ICsxMDU4LDcgQEAgaW50Cj4gIGZiX2JsYW5rKHN0 cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgYmxhbmspCj4gIHsJCj4gIAlzdHJ1Y3QgZmJfZXZlbnQg ZXZlbnQ7Cj4gLQlpbnQgcmV0ID0gLUVJTlZBTCwgZWFybHlfcmV0Owo+ICsJaW50IHJldCA9IC1F SU5WQUw7Cj4gIAo+ICAgCWlmIChibGFuayA+IEZCX0JMQU5LX1BPV0VSRE9XTikKPiAgIAkJYmxh bmsgPSBGQl9CTEFOS19QT1dFUkRPV047Cj4gQEAgLTEwNjYsMjEgKzEwNjYsMTEgQEAgZmJfYmxh bmsoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBibGFuaykKPiAgCWV2ZW50LmluZm8gPSBpbmZv Owo+ICAJZXZlbnQuZGF0YSA9ICZibGFuazsKPiAgCj4gLQllYXJseV9yZXQgPSBmYl9ub3RpZmll cl9jYWxsX2NoYWluKEZCX0VBUkxZX0VWRU5UX0JMQU5LLCAmZXZlbnQpOwo+IC0KPiAgCWlmIChp bmZvLT5mYm9wcy0+ZmJfYmxhbmspCj4gICAJCXJldCA9IGluZm8tPmZib3BzLT5mYl9ibGFuayhi bGFuaywgaW5mbyk7Cj4gIAo+ICAJaWYgKCFyZXQpCj4gIAkJZmJfbm90aWZpZXJfY2FsbF9jaGFp bihGQl9FVkVOVF9CTEFOSywgJmV2ZW50KTsKPiAtCWVsc2Ugewo+IC0JCS8qCj4gLQkJICogaWYg ZmJfYmxhbmsgaXMgZmFpbGVkIHRoZW4gcmV2ZXJ0IGVmZmVjdHMgb2YKPiAtCQkgKiB0aGUgZWFy bHkgYmxhbmsgZXZlbnQuCj4gLQkJICovCj4gLQkJaWYgKCFlYXJseV9yZXQpCj4gLQkJCWZiX25v dGlmaWVyX2NhbGxfY2hhaW4oRkJfUl9FQVJMWV9FVkVOVF9CTEFOSywgJmV2ZW50KTsKPiAtCX0K PiAgCj4gICAJcmV0dXJuIHJldDsKPiAgfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zi LmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKPiBpbmRleCA1MDk0OGU1MTk4OTcuLjc1NjcwNmI2NjZh MSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4 L2ZiLmgKPiBAQCAtMTM1LDEwICsxMzUsNiBAQCBzdHJ1Y3QgZmJfY3Vyc29yX3VzZXIgewo+ICAK PiAgLyogICAgICBBIGRpc3BsYXkgYmxhbmsgaXMgcmVxdWVzdGVkICAgICAgICovCj4gICNkZWZp bmUgRkJfRVZFTlRfQkxBTksgICAgICAgICAgICAgICAgICAweDA5Cj4gLS8qICAgICAgQSBoYXJk d2FyZSBkaXNwbGF5IGJsYW5rIGVhcmx5IGNoYW5nZSBvY2N1cnJlZCAqLwo+IC0jZGVmaW5lIEZC X0VBUkxZX0VWRU5UX0JMQU5LCQkweDEwCj4gLS8qICAgICAgQSBoYXJkd2FyZSBkaXNwbGF5IGJs YW5rIHJldmVydCBlYXJseSBjaGFuZ2Ugb2NjdXJyZWQgKi8KPiAtI2RlZmluZSBGQl9SX0VBUkxZ X0VWRU5UX0JMQU5LCQkweDExCj4gIAo+ICBzdHJ1Y3QgZmJfZXZlbnQgewo+ICAJc3RydWN0IGZi X2luZm8gKmluZm87Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGNkLmggYi9pbmNsdWRl L2xpbnV4L2xjZC5oCj4gaW5kZXggODUxZWVlOGZmZjI1Li4yMzhmYjFkZmVkOTggMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9saW51eC9sY2QuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvbGNkLmgKPiBA QCAtNDEsMTYgKzQxLDYgQEAgc3RydWN0IGxjZF9vcHMgewo+ICAJLyogR2V0IHRoZSBMQ0QgcGFu ZWwgcG93ZXIgc3RhdHVzICgwOiBmdWxsIG9uLCAxLi4zOiBjb250cm9sbGVyCj4gIAkgICBwb3dl ciBvbiwgZmxhdCBwYW5lbCBwb3dlciBvZmYsIDQ6IGZ1bGwgb2ZmKSwgc2VlIEZCX0JMQU5LX1hY WCAqLwo+ICAJaW50ICgqZ2V0X3Bvd2VyKShzdHJ1Y3QgbGNkX2RldmljZSAqKTsKPiAtCS8qCj4g LQkgKiBFbmFibGUgb3IgZGlzYWJsZSBwb3dlciB0byB0aGUgTENEKDA6IG9uOyA0OiBvZmYsIHNl ZSBGQl9CTEFOS19YWFgpCj4gLQkgKiBhbmQgdGhpcyBjYWxsYmFjayB3b3VsZCBiZSBjYWxsZWQg cHJvaXIgdG8gZmIgZHJpdmVyJ3MgY2FsbGJhY2suCj4gLQkgKgo+IC0JICogUC5TLiBub3RlIHRo YXQgaWYgZWFybHlfc2V0X3Bvd2VyIGlzIG5vdCBOVUxMIHRoZW4gZWFybHkgZmIgbm90aWZpZXIK PiAtCSAqCXdvdWxkIGJlIHJlZ2lzdGVyZWQuCj4gLQkgKi8KPiAtCWludCAoKmVhcmx5X3NldF9w b3dlcikoc3RydWN0IGxjZF9kZXZpY2UgKiwgaW50IHBvd2VyKTsKPiAtCS8qIHJldmVydCB0aGUg ZWZmZWN0cyBvZiB0aGUgZWFybHkgYmxhbmsgZXZlbnQuICovCj4gLQlpbnQgKCpyX2Vhcmx5X3Nl dF9wb3dlcikoc3RydWN0IGxjZF9kZXZpY2UgKiwgaW50IHBvd2VyKTsKPiAgCS8qIEVuYWJsZSBv ciBkaXNhYmxlIHBvd2VyIHRvIHRoZSBMQ0QgKDA6IG9uOyA0OiBvZmYsIHNlZSBGQl9CTEFOS19Y WFgpICovCj4gIAlpbnQgKCpzZXRfcG93ZXIpKHN0cnVjdCBsY2RfZGV2aWNlICosIGludCBwb3dl cik7Cj4gIAkvKiBHZXQgdGhlIGN1cnJlbnQgY29udHJhc3Qgc2V0dGluZyAoMC1tYXhfY29udHJh c3QpICovCj4gLS0gCj4gMi4yMC4xCj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdp bmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs