From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id oBEMx4T1152843 for ; Tue, 14 Dec 2010 16:59:05 -0600 Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 735831450E7D for ; Tue, 14 Dec 2010 15:00:54 -0800 (PST) Received: from mail.internode.on.net (bld-mail16.adl2.internode.on.net [150.101.137.101]) by cuda.sgi.com with ESMTP id MBkEiicwiM7oDnHc for ; Tue, 14 Dec 2010 15:00:54 -0800 (PST) Date: Wed, 15 Dec 2010 10:00:47 +1100 From: Dave Chinner Subject: Re: [PATCH 2/3] xfs: convert inode cache lookups to use RCU locking Message-ID: <20101214230047.GC16267@dastard> References: <1292203957-15819-1-git-send-email-david@fromorbit.com> <1292203957-15819-3-git-send-email-david@fromorbit.com> <20101214211801.GH2161@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20101214211801.GH2161@linux.vnet.ibm.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: xfs-bounces@oss.sgi.com Errors-To: xfs-bounces@oss.sgi.com To: "Paul E. McKenney" Cc: eric.dumazet@gmail.com, xfs@oss.sgi.com T24gVHVlLCBEZWMgMTQsIDIwMTAgYXQgMDE6MTg6MDFQTSAtMDgwMCwgUGF1bCBFLiBNY0tlbm5l eSB3cm90ZToKPiBPbiBNb24sIERlYyAxMywgMjAxMCBhdCAxMjozMjozNlBNICsxMTAwLCBEYXZl IENoaW5uZXIgd3JvdGU6Cj4gPiBGcm9tOiBEYXZlIENoaW5uZXIgPGRjaGlubmVyQHJlZGhhdC5j b20+Cj4gPiAKPiA+IFdpdGggZGVsYXllZCBsb2dnaW5nIGdyZWF0bHkgaW5jcmVhc2luZyB0aGUg c3VzdGFpbmVkIHBhcmFsbGVsaXNtIG9mIGlub2RlCj4gPiBvcGVyYXRpb25zLCB0aGUgaW5vZGUg Y2FjaGUgbG9ja2luZyBpcyBzaG93aW5nIHNpZ25pZmljYW50IHJlYWQgdnMgd3JpdGUKPiA+IGNv bnRlbnRpb24gd2hlbiBpbm9kZSByZWNsYWltIHJ1bnMgYXQgdGhlIHNhbWUgdGltZSBhcyBsb29r dXBzLiBUaGVyZSBpcwo+ID4gYWxzbyBhIGxvdCBtb3JlIHdyaXRlIGxvY2sgYWNxdWlzdGlvbnMg dGhhbiB0aGVyZSBhcmUgcmVhZCBsb2NrcyAoNDoxIHJhdGlvKQo+ID4gc28gdGhlIHJlYWQgbG9j a2luZyBpcyBub3QgcmVhbGx5IGJ1eWluZyB1cyBtdWNoIGluIHRoZSB3YXkgb2YgcGFyYWxsZWxp c20uCj4gPiAKPiA+IFRvIGF2b2lkIHRoZSByZWFkIHZzIHdyaXRlIGNvbnRlbnRpb24sIGNoYW5n ZSB0aGUgY2FjaGUgdG8gdXNlIFJDVSBsb2NraW5nIG9uCj4gPiB0aGUgcmVhZCBzaWRlLiBUbyBh dm9pZCBuZWVkaW5nIHRvIFJDVSBmcmVlIGV2ZXJ5IHNpbmdsZSBpbm9kZSwgdXNlIHRoZSBidWls dAo+ID4gaW4gc2xhYiBSQ1UgZnJlZWluZyBtZWNoYW5pc20uIFRoaXMgcmVxdWlyZXMgdXMgdG8g YmUgYWJsZSB0byBkZXRlY3QgbG9va3VwcyBvZgo+ID4gZnJlZWQgaW5vZGVzLCBzbyBlbtGVdXJl IHRoYXQgZXZlciBmcmVlZCBpbm9kZSBoYXMgYW4gaW5vZGUgbnVtYmVyIG9mIHplcm8gYW5kCj4g PiB0aGUgWEZTX0lSRUNMQUlNIGZsYWcgc2V0LiBXZSBhbHJlYWR5IGNoZWNrIHRoZSBYRlNfSVJF Q0xBSU0gZmxhZyBpbiBjYWNoZSBoaXQKPiA+IGxvb2t1cCBwYXRoLCBidXQgYWxzbyBhZGQgYSBj aGVjayBmb3IgYSB6ZXJvIGlub2RlIG51bWJlciBhcyB3ZWxsLgo+ID4gCj4gPiBXZSBjYW50aGVu IGNvbnZlcnQgYWxsIHRoZSByZWFkIGxvY2tpbmcgbG9ja3VwcyB0byB1c2UgUkNVIHJlYWQgc2lk ZSBsb2NraW5nCj4gPiBhbmQgaGVuY2UgcmVtb3ZlIGFsbCByZWFkIHNpZGUgbG9ja2luZy4KPiAK PiBPSywgc28gdGhlIHhmc19pbm9kZSB1c2VzIHN0cmFpZ2h0IFJDVSwgYW5kIHRoZXJlIGZvcmUg Y2Fubm90IGJlIGZyZWVkIGFuZAo+IGltbWVkaWF0ZWx5IHJlYWxsb2NhdGVkLCB3aGlsZSB0aGUg aW5vZGUgaXRzZWxmIHVzZXMgU0xBQl9ERVNUUk9ZX0JZX1JDVSwKPiB3aGljaCBkb2VzIGFsbG93 IHRoZSBpbm9kZSB0byBiZSBmcmVlZCBhbmQgaW1tZWRpYXRlbHkgcmVhbGxvY2F0ZWQsCj4gY29y cmVjdD8KCk5vLCB0aGUgc3RydWN0IGlub2RlIGlzIGVtYmVkZGVkIGluIHRoZSBzdHJ1Y3QgeGZz X2lub2RlLCBzbyB0aGV5CmhhdmUgdGhlIHNhbWUgbGlmZWN5Y2xlLiBpLmUuIHdlIGRvbid0IHNl cGFyYXRlbHkgYWxsb2NhdGUgYW5kIGZyZWUKdGhlIHN0cnVjdCBpbm9kZS4gU28gaXQgaXMgYWxs IHVzaW5nIHN0cmFpZ2h0IFJDVS4KCj4gU29tZSBxdWVzdGlvbnMgYW5kIGNvbW1lbnRzIGJlbG93 Lgo+IAo+IAkJCQkJCQlUaGFueCwgUGF1bAo+IAo+ID4gU2lnbmVkLW9mZi1ieTogRGF2ZSBDaGlu bmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IEFsZXggRWxkZXIgPGFl bGRlckBzZ2kuY29tPgo+ID4gLS0tCj4gPiAgZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIHwg ICAyNyArKysrKysrKysrKysrKysrLS0tLS0KPiA+ICBmcy94ZnMveGZzX2lnZXQuYyAgICAgICAg ICAgfCAgIDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4gPiAg ZnMveGZzL3hmc19pbm9kZS5jICAgICAgICAgIHwgICA1MiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA5OCBpbnNlcnRpb25z KCspLCAzMSBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0y LjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwo+ID4gaW5kZXggYWZi MGQ3Yy4uNWVlMDJkNyAxMDA2NDQKPiA+IC0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMu Ywo+ID4gKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCj4gPiBAQCAtNTMsMTQgKzUz LDIwIEBAIHhmc19pbm9kZV9hZ193YWxrX2dyYWIoCj4gPiAgewo+ID4gIAlzdHJ1Y3QgaW5vZGUJ CSppbm9kZSA9IFZGU19JKGlwKTsKPiA+IAo+ID4gKwkvKiBjaGVjayBmb3Igc3RhbGUgUkNVIGZy ZWVkIGlub2RlICovCj4gPiArCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Cj4gPiArCWlm ICghaXAtPmlfaW5vKQo+ID4gKwkJZ290byBvdXRfdW5sb2NrX25vZW50Owo+ID4gKwo+ID4gKwkv KiBhdm9pZCBuZXcgb3IgcmVjbGFpbWFibGUgaW5vZGVzLiBMZWF2ZSBmb3IgcmVjbGFpbSBjb2Rl IHRvIGZsdXNoICovCj4gPiArCWlmIChfX3hmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lORVcgfCBY RlNfSVJFQ0xBSU1BQkxFIHwgWEZTX0lSRUNMQUlNKSkKPiA+ICsJCWdvdG8gb3V0X3VubG9ja19u b2VudDsKPiA+ICsJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwo+ID4gKwo+IAo+IE9L LCB0aGlzIHdvcmtzIGJlY2F1c2UgdGhlIHhmc19pbm9kZSBjYW5ub3QgYmUgZnJlZWQgYW5kIHJl YWxsb2NhdGVkICh3aGljaAo+IHRoZSBSQ1UgY2hhbmdlIHNob3VsZCBlbmZvcmNlKS4gIEl0IGlz IG5vdCBjbGVhciB0byBtZSB0aGF0IHRoZSBhYm92ZQo+IHdvdWxkIHdvcmsgaWYgdXNpbmcgdGhl IFNMQUJfREVTVFJPWV9CWV9SQ1UgYXBwcm9hY2gsIGF0IGxlYXN0IG5vdCB1bmxlc3MKPiBzb21l IGhpZ2hlci1sZXZlbCBjaGVja3MgY2FuIHJlbGlhYmx5IGNhdGNoIGFuIGlub2RlIGNoYW5naW5n IGlkZW50aXR5Cj4gZHVlIHRvIHF1aWNrIGZyZWUgYW5kIHJlYWxsb2NhdGlvbi4KCkluIHRoaXMg Y2FzZSwgSSBkb24ndCBiZWxpZXZlIGl0IG1hdHRlcnMgaWYgdGhlIGlub2RlIGhhcyBjaGFuZ2Vk CmlkZW50aXR5IC0gd2UgYXJlIHdhbGtpbmcgZm9yIHdyaXRlYmFjaywgc28gaWYgd2UgZ2V0IGEg cmVhbGxvY2F0ZWQKaW5vZGUgd2UnbGwgd3JpdGUgaXQgYmFjayBpZiBpdCBpcyBkaXJ0eS4gSWYg aXQgaGFzIG5vdCBiZWVuCnJlYWxsb2NhdGVkIG9yIHN0aWxsIGJlaW5nIGluaXRpYWxpc2VkLCB0 aGUgIWlwLT5pX2lubyBhbmQKWEZTX0lORVd8WEZTX0lSRUNMQUlNIGNoZWNrcyBhcmUgc3VmZmlj aWVudCB0byBhdm9pZCB1c2luZyB0aGUgaW5vZGUuCgpJIHByb2JhYmx5IHNob3VsZCBhZGQgYSBj b21tZW50IHRvIHRoaXMgZWZmZWN0LCB5ZXM/Cgo+IEFsc28sIGFsbCBjYWxscyB0byB4ZnNfaW5v ZGVfYWdfd2Fsa19ncmFiKCkgbXVzdCBiZSBpbiBSQ1UgcmVhZC1zaWRlCj4gY3JpdGljYWwgc2Vj dGlvbnMuLi4gIEkgc3VnZ2VzdCBhIGRlYnVnIGNoZWNrIGZvciByY3VfcmVhZF9sb2NrX2hlbGQo KSB0bwo+IGNhdGNoIGFueSBjYWxsIHBhdGhzIHRoYXQgbWlnaHQgaGF2ZSBzbGlwcGVkIHRocm91 Z2guIAoKWWVzLCBnb29kIGlkZWEuCgo+IEF0IGZpcnN0IGdsYW5jZSwKPiBpdCBhcHBlYXJzIHRo YXQgUkNVIGlzIHJlcGxhY2luZyBzb21lIG9mIC0+cGFnX2ljaV9sb2NrLCBidXQgSSBjb3VsZAo+ IGVhc2lseSBiZSBtaXN0YWtlbi4KCkNvcnJlY3QsIGl0IGlzIHJlcGxhY2luZyB0aGUgcmVhZCBz aWRlIG9mIHRoZSAtPnBhZ19pY2lfbG9jay4KCj4gPiBAQCAtNjM5LDYgKzY0OSw5IEBAIHhmc19y ZWNsYWltX2lub2RlX2dyYWIoCj4gPiAgCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAo+ID4gIAlpbnQJ CQlmbGFncykKPiA+ICB7Cj4gPiArCS8qIGNoZWNrIGZvciBzdGFsZSBSQ1UgZnJlZWQgaW5vZGUg Ki8KPiA+ICsJaWYgKCFpcC0+aV9pbm8pCj4gPiArCQlyZXR1cm4gMTsKPiAKPiBEb2VzIHRoaXMg bWVhbiB0aGF0IHdlIG5lZWQgdG8gYmUgdW5kZXIgcmN1X3JlYWRfbG9jaygpIGhlcmU/ICBJZiBu b3QsCj4gaG93IGRvIHdlIGtlZXAgdGhlIGlub2RlIGZyb20gcmVhbGx5IGJlaW5nIGZyZWVkIG91 dCBmcm9tIHVuZGVyIHVzPwoKSG1tbSwgSSB0aGluayBJJ3ZlIG1pc21lcmdlZCBhIHBhdGNoIHNv bWV3aGVyZSBhbG9uZyB0aGUgbGluZS4gSW4KdGhpcyBwYXRjaCB0aGUgcmVjbGFpbSB0cmVlIHdh bGsgaXMgdW5kZXIgdGhlIC0+cGFnX2ljaV9sb2NrKCksIHdoZW4KaW4gZmFjdCBpdCBzaG91bGQg YmUgdW5kZXIgdGhlIHJjdV9yZWFkX2xvY2soKS4gR29vZCBjYXRjaCwgUGF1bC4KCkFzIGl0IGlz LCBiZWluZyB1bmRlciB0aGUgLT5wYWdfaWNpX2xvY2sgbWVhbnMgdGhhdCB0aGUgdHJlZSBpcwpj b25zaXN0ZW50IGFuZCB3ZSB3b24ndCBiZSBzZWVpbmcgUkNVIGZyZWVkIGlub2RlcyBpbiB0aGUg d2Fsay4KSGVuY2UgdGhlIGNvZGUgaXMgZnVuY3Rpb25pbmcgY29ycmVjdGx5LCBqdXN0IG5vdCBh cyB3YXNzcyBpbnRlbmRlZC4KCj4gKEFnYWluLCBpZiB3ZSBkbyBuZWVkIHRvIGJlIHVuZGVyIHJj dV9yZWFkX2xvY2soKSwgSSBoaWdobHkgcmVjb21tZW5kCj4gYSBkZWJ1ZyBjaGVjayBmb3IgcmN1 X3JlYWRfbG9ja19oZWxkKCkuKQoKWXVwLCB3aGljaCB3b3VsZCBoYXZlIGNhdWdodCB0aGUgbWVy Z2Ugc2NyZXd1cC4uLgoKLi4uLgo+ID4gCj4gPiArCS8qCj4gPiArCSAqIGNoZWNrIGZvciByZS11 c2Ugb2YgYW4gaW5vZGUgd2l0aGluIGFuIFJDVSBncmFjZSBwZXJpb2QgZHVlIHRvIHRoZQo+ID4g KwkgKiByYWRpeCB0cmVlIG5vZGVzIG5vdCBiZWluZyB1cGRhdGVkIHlldC4gV2UgbW9uaXRvciBm b3IgdGhpcyBieQo+ID4gKwkgKiBzZXR0aW5nIHRoZSBpbm9kZSBudW1iZXIgdG8gemVybyBiZWZv cmUgZnJlZWluZyB0aGUgaW5vZGUgc3RydWN0dXJlLgo+ID4gKwkgKiBJZiB0aGUgaW5vZGUgaGFz IGJlZW4gcmVhbGxvY2F0ZWQgYW5kIHNldCB1cCwgdGhlbiB0aGUgaW5vZGUgbnVtYmVyCj4gPiAr CSAqIHdpbGwgbm90IG1hdGNoLCBzbyBjaGVjayBmb3IgdGhhdCwgdG9vLgo+ID4gKwkgKi8KPiA+ ICAJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKPiA+ICsJaWYgKGlwLT5pX2lubyAhPSBp bm8pIHsKPiA+ICsJCXRyYWNlX3hmc19pZ2V0X3NraXAoaXApOwo+ID4gKwkJWEZTX1NUQVRTX0lO Qyh4c19pZ19mcmVjeWNsZSk7Cj4gPiArCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7 Cj4gPiArCQlyY3VfcmVhZF91bmxvY2soKTsKPiA+ICsJCS8qIEV4cGlyZSB0aGUgZ3JhY2UgcGVy aW9kIHNvIHdlIGRvbid0IHRyaXAgb3ZlciBpdCBhZ2Fpbi4gKi8KPiA+ICsJCXN5bmNocm9uaXpl X3JjdSgpOwo+IAo+IEhtbW0uLi4gIEludGVyZXN0aW5nLiAgV291bGRuJ3QgdGhlIGZhY3QgdGhh dCB3ZSBhY3F1aXJlZCB0aGUgc2FtZSBsb2NrCj4gdGhhdCB3YXMgaGVsZCBhZnRlciByZW1vdmlu ZyB0aGUgaW5vZGUgZ3VhcmFudGVlIHRoYXQgYW4gaW1tZWRpYXRlIHJldHJ5Cj4gd291bGQgbWFu YWdlIG5vdCB0byBmaW5kIHRoaXMgc2FtZSBpbm9kZSBhZ2Fpbj8KClRoYXQgaXMgd2hhdCBJJ20g bm90IHN1cmUgb2YuIEkgd2FzIG1vcmUgd29ycmllZCBhYm91dCByZXNvbHZpbmcgdGhlCmNvbnRl bnRzIG9mIHRoZSByYWRpeCB0cmVlIG5vZGVzLCBub3Qgc28gbXVjaCB0aGUgaW5vZGUgaXRzZWxm LiBJZiBhCm5ldyB0cmF2ZXJzYWwgd2lsbCByZXNvbHZlIHRoZSB0cmVlIGNvcnJlY3RseSAod2hp Y2ggaXMgd2hhdCB5b3UgYXJlCmltcGx5aW5nKSwgdGhlbiBzeW5jaHJvbml6ZV9yY3UoKSBpcyBu b3QgbmVlZGVkLi4uLgoKPiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgdGhlbiByZWFkZXJzIGZp bmRpbmcgaXQgYWdhaW4gd2lsbCBub3QgYmUKPiBwcm90ZWN0ZWQgYnkgdGhlIFJDVSBncmFjZSBw ZXJpb2QsIHJpZ2h0Pwo+IAo+IEluIHNob3J0LCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoZSBz eW5jaHJvbml6ZV9yY3UoKSBpcyBuZWVkZWQuCj4gSWYgaXQgaXMgc29tZWhvdyBoZWxwaW5nLCB0 aGF0IHNvdW5kcyB0byBtZSBsaWtlIGl0IGlzIGNvdmVyaW5nIHVwCj4gYSByZWFsIGJ1ZyB0aGF0 IHNob3VsZCBiZSBmaXhlZCBzZXBhcmF0ZWx5LgoKSXQgaXNuJ3QgY292ZXJpbmcgdXAgYSBidWcs IGl0IHdhcyBtb3JlIHRyeWluZ3QgbyBiZSBjb25zaXN0ZW50IHdpdGgKdGhlIHJlc3Qgb2YgdGhl IHhmc19pbm9kZSBsb29rdXAgZmFpbHVyZXMgLSB3ZSBiYWNrIG9mZiBhbmQgdHJ5CmFnYWluIGxh dGVyLiBJZiB0aGF0IGlzIHVubmVjZXNzYXJ5IHJlc29sdmUgdGhlIFJDVSBsb29rdXAgcmFjZSwK dGhlbiBpdCBjYW4gYmUgZHJvcHBlZC4KCj4gPiBAQCAtMzk3LDcgKzQyMyw3IEBAIHhmc19pZ2V0 KAo+ID4gIAl4ZnNfYWdpbm9fdAlhZ2lubzsKPiA+IAo+ID4gIAkvKiByZWplY3QgaW5vZGUgbnVt YmVycyBvdXRzaWRlIGV4aXN0aW5nIEFHcyAqLwo+ID4gLQlpZiAoWEZTX0lOT19UT19BR05PKG1w LCBpbm8pID49IG1wLT5tX3NiLnNiX2FnY291bnQpCj4gPiArCWlmICghaW5vIHx8IFhGU19JTk9f VE9fQUdOTyhtcCwgaW5vKSA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQo+IAo+IEZvciB0aGUgYWJv dmUgY2hlY2sgdG8gYmUgc2FmZSwgZG9uJ3Qgd2UgbmVlZCB0byBhbHJlYWR5IGJlIGluIGFuCj4g UkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPyAgT3IgaXMgc29tZXRoaW5nIGVsc2UgcHJv dGVjdGluZyB1cz8KCiJpbm8iIGlzIHRoZSBpbm9kZSBudW1iZXIgdXNlZCBhcyB0aGUgbG9va3Vw IGtleSB0byBmaW5kIHRoZSBzdHJ1Y3QKeGZzX2lub2RlLiBUaGlzIGlzIGVuc3VyaW5nIHdlIGRv bid0IHRyeSB0byBsb29rIHVwIGFuIGlub2RlIG51bWJlcgpvZiB6ZXJvIGdpdmVuIGl0J3MgbmV3 IHNwZWNpYWwgbWVhbmluZyBhcyBhIGZyZWVkIGlub2RlLiBIZW5jZSBpdApjYW4gYmUgc2FmZWx5 IHZhbGlkYXRlZCBvdXRzaWRlIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25pCmFz IGl0IGlzIGEgY29uc3RhbnQuCgpUaGFua3MgZm9yIHRoZSByZXZpZXcsIFBhdWwuIEknbGwgZml4 IHVwIHRoZSBpc3N1ZXMgeW91J3ZlIHBvaW50ZWQKb3V0IGFuZCByZXRlc3QuCgpDaGVlcnMsCgpE YXZlLgotLSAKRGF2ZSBDaGlubmVyCmRhdmlkQGZyb21vcmJpdC5jb20KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnhmcyBtYWlsaW5nIGxpc3QKeGZzQG9z cy5zZ2kuY29tCmh0dHA6Ly9vc3Muc2dpLmNvbS9tYWlsbWFuL2xpc3RpbmZvL3hmcwo=