From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id ECE28209831CF for ; Fri, 13 Jul 2018 22:00:24 -0700 (PDT) Subject: [PATCH v6 10/13] mm, memory_failure: Teach memory_failure() about dev_pagemap pages From: Dan Williams Date: Fri, 13 Jul 2018 21:50:21 -0700 Message-ID: <153154382187.34503.3838107575957710423.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <153154376846.34503.15480221419473501643.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153154376846.34503.15480221419473501643.stgit@dwillia2-desk3.amr.corp.intel.com> MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: linux-nvdimm@lists.01.org Cc: Jan Kara , linux-kernel@vger.kernel.org, Matthew Wilcox , linux-mm@kvack.org, =?utf-8?b?SsOpcsO0bWU=?= Glisse , linux-fsdevel@vger.kernel.org, Naoya Horiguchi , Christoph Hellwig List-ID: ICAgIG1jZTogVW5jb3JyZWN0ZWQgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluIHVzZXItYWNjZXNz IGF0IGFmMzQyMTQyMDAKICAgIHsxfVtIYXJkd2FyZSBFcnJvcl06IEl0IGhhcyBiZWVuIGNvcnJl Y3RlZCBieSBoL3cgYW5kIHJlcXVpcmVzIG5vIGZ1cnRoZXIgYWN0aW9uCiAgICBtY2U6IFtIYXJk d2FyZSBFcnJvcl06IE1hY2hpbmUgY2hlY2sgZXZlbnRzIGxvZ2dlZAogICAgezF9W0hhcmR3YXJl IEVycm9yXTogZXZlbnQgc2V2ZXJpdHk6IGNvcnJlY3RlZAogICAgTWVtb3J5IGZhaWx1cmU6IDB4 YWYzNDIxNDogcmVzZXJ2ZWQga2VybmVsIHBhZ2Ugc3RpbGwgcmVmZXJlbmNlZCBieSAxIHVzZXJz CiAgICBbLi5dCiAgICBNZW1vcnkgZmFpbHVyZTogMHhhZjM0MjE0OiByZWNvdmVyeSBhY3Rpb24g Zm9yIHJlc2VydmVkIGtlcm5lbCBwYWdlOiBGYWlsZWQKICAgIG1jZTogTWVtb3J5IGVycm9yIG5v dCByZWNvdmVyZWQKCkluIGNvbnRyYXN0IHRvIHR5cGljYWwgbWVtb3J5LCBkZXZfcGFnZW1hcCBw YWdlcyBtYXkgYmUgZGF4IG1hcHBlZC4gV2l0aApkYXggdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkg dG8gbWFwIGluIGFub3RoZXIgcGFnZSBkeW5hbWljYWxseSBzaW5jZSBkYXgKZXN0YWJsaXNoZXMg MToxIHBoeXNpY2FsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgYXNzb2NpYXRpb25zLiBBbHNvCmRl dl9wYWdlbWFwIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBOVkRJTU0gLyBwZXJzaXN0ZW50IG1lbW9y eSBkZXZpY2VzIGNhbgppbnRlcm5hbCByZW1hcC9yZXBhaXIgYWRkcmVzc2VzIHdpdGggcG9pc29u LiBXaGlsZSBtZW1vcnlfZmFpbHVyZSgpCmFzc3VtZXMgdGhhdCBpdCBjYW4gZGlzY2FyZCB0eXBp Y2FsIHBvaXNvbmVkIHBhZ2VzIGFuZCBrZWVwIHRoZW0KdW5tYXBwZWQgaW5kZWZpbml0ZWx5LCBk ZXZfcGFnZW1hcCBwYWdlcyBtYXkgYmUgcmV0dXJuZWQgdG8gc2VydmljZQphZnRlciB0aGUgZXJy b3IgaXMgY2xlYXJlZC4KClRlYWNoIG1lbW9yeV9mYWlsdXJlKCkgdG8gZGV0ZWN0IGFuZCBoYW5k bGUgTUVNT1JZX0RFVklDRV9IT1NUCmRldl9wYWdlbWFwIHBhZ2VzIHRoYXQgaGF2ZSBwb2lzb24g Y29uc3VtZWQgYnkgdXNlcnNwYWNlLiBNYXJrIHRoZQptZW1vcnkgYXMgVUMgaW5zdGVhZCBvZiB1 bm1hcHBpbmcgaXQgY29tcGxldGVseSB0byBhbGxvdyBvbmdvaW5nIGFjY2Vzcwp2aWEgdGhlIGRl dmljZSBkcml2ZXIgKG5kX3BtZW0pLiBMYXRlciwgbmRfcG1lbSB3aWxsIGdyb3cgc3VwcG9ydCBm b3IKbWFya2luZyB0aGUgcGFnZSBiYWNrIHRvIFdCIHdoZW4gdGhlIGVycm9yIGlzIGNsZWFyZWQu CgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hA bHN0LmRlPgpDYzogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CkNjOiBNYXR0 aGV3IFdpbGNveCA8d2lsbHlAaW5mcmFkZWFkLm9yZz4KQ2M6IE5hb3lhIEhvcmlndWNoaSA8bi1o b3JpZ3VjaGlAYWguanAubmVjLmNvbT4KQ2M6IFJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVyQGxp bnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFt c0BpbnRlbC5jb20+Ci0tLQogaW5jbHVkZS9saW51eC9tbS5oICB8ICAgIDEgCiBtbS9tZW1vcnkt ZmFpbHVyZS5jIHwgIDEyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9t bS5oCmluZGV4IGEwZmJiOWZmZTM4MC4uMzc0ZTVlOTI4NGY3IDEwMDY0NAotLS0gYS9pbmNsdWRl L2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNzI1LDYgKzI3MjUsNyBA QCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgewogCU1GX01TR19UUlVOQ0FURURfTFJVLAogCU1G X01TR19CVUREWSwKIAlNRl9NU0dfQlVERFlfMk5ELAorCU1GX01TR19EQVgsCiAJTUZfTVNHX1VO S05PV04sCiB9OwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5 LWZhaWx1cmUuYwppbmRleCA4YTgxNjgwZDAwZGQuLmVmZmFhN2M3YTFhNCAxMDA2NDQKLS0tIGEv bW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NSw2ICs1 NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9y eV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CisjaW5jbHVkZSA8bGlu dXgvbWVtcmVtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxpbnV4 L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCkBAIC0yNjMsNiArMjY0LDQwIEBA IHZvaWQgc2hha2VfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgaW50IGFjY2VzcykKIH0KIEVYUE9SVF9T WU1CT0xfR1BMKHNoYWtlX3BhZ2UpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZXZfcGFnZW1h cF9tYXBwaW5nX3NpemUoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZt YSk7CisJcGdkX3QgKnBnZDsKKwlwNGRfdCAqcDRkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBt ZDsKKwlwdGVfdCAqcHRlOworCisJcGdkID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNz KTsKKwlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQorCQlyZXR1cm4gMDsKKwlwNGQgPSBwNGRfb2Zm c2V0KHBnZCwgYWRkcmVzcyk7CisJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKKwkJcmV0dXJuIDA7 CisJcHVkID0gcHVkX29mZnNldChwNGQsIGFkZHJlc3MpOworCWlmICghcHVkX3ByZXNlbnQoKnB1 ZCkpCisJCXJldHVybiAwOworCWlmIChwdWRfZGV2bWFwKCpwdWQpKQorCQlyZXR1cm4gUFVEX1NJ WkU7CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOworCWlmICghcG1kX3ByZXNlbnQo KnBtZCkpCisJCXJldHVybiAwOworCWlmIChwbWRfZGV2bWFwKCpwbWQpKQorCQlyZXR1cm4gUE1E X1NJWkU7CisJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKKwlpZiAoIXB0ZV9w cmVzZW50KCpwdGUpKQorCQlyZXR1cm4gMDsKKwlpZiAocHRlX2Rldm1hcCgqcHRlKSkKKwkJcmV0 dXJuIFBBR0VfU0laRTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEZhaWx1cmUgaGFuZGxpbmc6 IGlmIHdlIGNhbid0IGZpbmQgb3IgY2FuJ3Qga2lsbCBhIHByb2Nlc3MgdGhlcmUncwogICogbm90 IG11Y2ggd2UgY2FuIGRvLglXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgaWdub3JlIG90aGVy d2lzZS4KQEAgLTI5Miw3ICszMjcsMTAgQEAgc3RhdGljIHZvaWQgYWRkX3RvX2tpbGwoc3RydWN0 IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwYWdlICpwLAogCX0KIAl0ay0+YWRkciA9IHBhZ2Vf YWRkcmVzc19pbl92bWEocCwgdm1hKTsKIAl0ay0+YWRkcl92YWxpZCA9IDE7Ci0JdGstPnNpemVf c2hpZnQgPSBjb21wb3VuZF9vcmRlcihjb21wb3VuZF9oZWFkKHApKSArIFBBR0VfU0hJRlQ7CisJ aWYgKGlzX3pvbmVfZGV2aWNlX3BhZ2UocCkpCisJCXRrLT5zaXplX3NoaWZ0ID0gaWxvZzIoZGV2 X3BhZ2VtYXBfbWFwcGluZ19zaXplKHAsIHZtYSkpOworCWVsc2UKKwkJdGstPnNpemVfc2hpZnQg PSBjb21wb3VuZF9vcmRlcihjb21wb3VuZF9oZWFkKHApKSArIFBBR0VfU0hJRlQ7CiAKIAkvKgog CSAqIEluIHRoZW9yeSB3ZSBkb24ndCBoYXZlIHRvIGtpbGwgd2hlbiB0aGUgcGFnZSB3YXMKQEAg LTMwMCw3ICszMzgsNyBAQCBzdGF0aWMgdm9pZCBhZGRfdG9fa2lsbChzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRzaywgc3RydWN0IHBhZ2UgKnAsCiAJICogbGlrZWx5IHZlcnkgcmFyZSBraWxsIGFueXdh eXMganVzdCBvdXQgb2YgcGFyYW5vaWEsIGJ1dCB1c2UKIAkgKiBhIFNJR0tJTEwgYmVjYXVzZSB0 aGUgZXJyb3IgaXMgbm90IGNvbnRhaW5lZCBhbnltb3JlLgogCSAqLwotCWlmICh0ay0+YWRkciA9 PSAtRUZBVUxUKSB7CisJaWYgKHRrLT5hZGRyID09IC1FRkFVTFQgfHwgdGstPnNpemVfc2hpZnQg PT0gMCkgewogCQlwcl9pbmZvKCJNZW1vcnkgZmFpbHVyZTogVW5hYmxlIHRvIGZpbmQgdXNlciBz cGFjZSBhZGRyZXNzICVseCBpbiAlc1xuIiwKIAkJCXBhZ2VfdG9fcGZuKHApLCB0c2stPmNvbW0p OwogCQl0ay0+YWRkcl92YWxpZCA9IDA7CkBAIC01MTQsNiArNTUyLDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCBhY3Rpb25fcGFnZV90eXBlc1tdID0gewogCVtNRl9NU0dfVFJVTkNBVEVE X0xSVV0JCT0gImFscmVhZHkgdHJ1bmNhdGVkIExSVSBwYWdlIiwKIAlbTUZfTVNHX0JVRERZXQkJ CT0gImZyZWUgYnVkZHkgcGFnZSIsCiAJW01GX01TR19CVUREWV8yTkRdCQk9ICJmcmVlIGJ1ZGR5 IHBhZ2UgKDJuZCB0cnkpIiwKKwlbTUZfTVNHX0RBWF0JCQk9ICJkYXggcGFnZSIsCiAJW01GX01T R19VTktOT1dOXQkJPSAidW5rbm93biBwYWdlIiwKIH07CiAKQEAgLTExMTEsNiArMTE1MCw4MyBA QCBzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGlu dCBmbGFncykKIAlyZXR1cm4gcmVzOwogfQogCitzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rl dl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsCisJCXN0cnVjdCBkZXZfcGFn ZW1hcCAqcGdtYXApCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwor CWNvbnN0IGJvb2wgdW5tYXBfc3VjY2VzcyA9IHRydWU7CisJdW5zaWduZWQgbG9uZyBzaXplID0g MDsKKwlzdHJ1Y3QgdG9fa2lsbCAqdGs7CisJTElTVF9IRUFEKHRva2lsbCk7CisJaW50IHJjID0g LUVCVVNZOworCWxvZmZfdCBzdGFydDsKKworCS8qCisJICogUHJldmVudCB0aGUgaW5vZGUgZnJv bSBiZWluZyBmcmVlZCB3aGlsZSB3ZSBhcmUgaW50ZXJyb2dhdGluZworCSAqIHRoZSBhZGRyZXNz X3NwYWNlLCB0eXBpY2FsbHkgdGhpcyB3b3VsZCBiZSBoYW5kbGVkIGJ5CisJICogbG9ja19wYWdl KCksIGJ1dCBkYXggcGFnZXMgZG8gbm90IHVzZSB0aGUgcGFnZSBsb2NrLiBUaGlzCisJICogYWxz byBwcmV2ZW50cyBjaGFuZ2VzIHRvIHRoZSBtYXBwaW5nIG9mIHRoaXMgcGZuIHVudGlsCisJICog cG9pc29uIHNpZ25hbGluZyBpcyBjb21wbGV0ZS4KKwkgKi8KKwlpZiAoIWRheF9sb2NrX21hcHBp bmdfZW50cnkocGFnZSkpCisJCWdvdG8gb3V0OworCisJaWYgKGh3cG9pc29uX2ZpbHRlcihwYWdl KSkgeworCQlyYyA9IDA7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXN3aXRjaCAocGdtYXAtPnR5 cGUpIHsKKwljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKKwljYXNlIE1FTU9SWV9ERVZJQ0Vf UFVCTElDOgorCQkvKgorCQkgKiBUT0RPOiBIYW5kbGUgSE1NIHBhZ2VzIHdoaWNoIG1heSBuZWVk IGNvb3JkaW5hdGlvbgorCQkgKiB3aXRoIGRldmljZS1zaWRlIG1lbW9yeS4KKwkJICovCisJCWdv dG8gdW5sb2NrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogVXNlIHRoaXMg ZmxhZyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRheCBwYWdlIGhhcyBiZWVuCisJICogcmVt YXBwZWQgVUMgdG8gcHJldmVudCBzcGVjdWxhdGl2ZSBjb25zdW1wdGlvbiBvZiBwb2lzb24uCisJ ICovCisJU2V0UGFnZUhXUG9pc29uKHBhZ2UpOworCisJLyoKKwkgKiBVbmxpa2UgU3lzdGVtLVJB TSB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSB0byBzd2FwIGluIGEKKwkgKiBkaWZmZXJlbnQgcGh5 c2ljYWwgcGFnZSBhdCBhIGdpdmVuIHZpcnR1YWwgYWRkcmVzcywgc28gYWxsCisJICogdXNlcnNw YWNlIGNvbnN1bXB0aW9uIG9mIFpPTkVfREVWSUNFIG1lbW9yeSBuZWNlc3NpdGF0ZXMKKwkgKiBT SUdCVVMgKGkuZS4gTUZfTVVTVF9LSUxMKQorCSAqLworCWZsYWdzIHw9IE1GX0FDVElPTl9SRVFV SVJFRCB8IE1GX01VU1RfS0lMTDsKKwljb2xsZWN0X3Byb2NzKHBhZ2UsICZ0b2tpbGwsIGZsYWdz ICYgTUZfQUNUSU9OX1JFUVVJUkVEKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGssICZ0b2tp bGwsIG5kKQorCQlpZiAodGstPnNpemVfc2hpZnQpCisJCQlzaXplID0gbWF4KHNpemUsIDFVTCA8 PCB0ay0+c2l6ZV9zaGlmdCk7CisJaWYgKHNpemUpIHsKKwkJLyoKKwkJICogVW5tYXAgdGhlIGxh cmdlc3QgbWFwcGluZyB0byBhdm9pZCBicmVha2luZyB1cAorCQkgKiBkZXZpY2UtZGF4IG1hcHBp bmdzIHdoaWNoIGFyZSBjb25zdGFudCBzaXplLiBUaGUKKwkJICogYWN0dWFsIHNpemUgb2YgdGhl IG1hcHBpbmcgYmVpbmcgdG9ybiBkb3duIGlzCisJCSAqIGNvbW11bmljYXRlZCBpbiBzaWdpbmZv LCBzZWUga2lsbF9wcm9jKCkKKwkJICovCisJCXN0YXJ0ID0gKHBhZ2UtPmluZGV4IDw8IFBBR0Vf U0hJRlQpICYgfihzaXplIC0gMSk7CisJCXVubWFwX21hcHBpbmdfcmFuZ2UocGFnZS0+bWFwcGlu Zywgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgMCk7CisJfQorCWtpbGxfcHJvY3MoJnRva2lsbCwgZmxh Z3MgJiBNRl9NVVNUX0tJTEwsICF1bm1hcF9zdWNjZXNzLCBwZm4sIGZsYWdzKTsKKwlyYyA9IDA7 Cit1bmxvY2s6CisJZGF4X3VubG9ja19tYXBwaW5nX2VudHJ5KHBhZ2UpOworb3V0OgorCS8qIGRy b3AgcGdtYXAgcmVmIGFjcXVpcmVkIGluIGNhbGxlciAqLworCXB1dF9kZXZfcGFnZW1hcChwZ21h cCk7CisJYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZf UkVDT1ZFUkVEKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qKgogICogbWVtb3J5X2ZhaWx1cmUgLSBI YW5kbGUgbWVtb3J5IGZhaWx1cmUgb2YgYSBwYWdlLgogICogQHBmbjogUGFnZSBOdW1iZXIgb2Yg dGhlIGNvcnJ1cHRlZCBwYWdlCkBAIC0xMTMzLDYgKzEyNDksNyBAQCBpbnQgbWVtb3J5X2ZhaWx1 cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAlzdHJ1Y3QgcGFnZSAqcDsKIAlzdHJ1 Y3QgcGFnZSAqaHBhZ2U7CiAJc3RydWN0IHBhZ2UgKm9yaWdfaGVhZDsKKwlzdHJ1Y3QgZGV2X3Bh Z2VtYXAgKnBnbWFwOwogCWludCByZXM7CiAJdW5zaWduZWQgbG9uZyBwYWdlX2ZsYWdzOwogCkBA IC0xMTQ1LDYgKzEyNjIsMTAgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZu LCBpbnQgZmxhZ3MpCiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJcGdtYXAgPSBnZXRfZGV2X3Bh Z2VtYXAocGZuLCBOVUxMKTsKKwlpZiAocGdtYXApCisJCXJldHVybiBtZW1vcnlfZmFpbHVyZV9k ZXZfcGFnZW1hcChwZm4sIGZsYWdzLCBwZ21hcCk7CisKIAlwID0gcGZuX3RvX3BhZ2UocGZuKTsK IAlpZiAoUGFnZUh1Z2UocCkpCiAJCXJldHVybiBtZW1vcnlfZmFpbHVyZV9odWdldGxiKHBmbiwg ZmxhZ3MpOwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXgtbnZkaW1tIG1haWxpbmcgbGlzdApMaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCmh0dHBz Oi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZkaW1tCg==