From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 10/13] drm/i915: Rearrange i915_scheduler.c Date: Tue, 7 May 2019 13:06:40 +0100 Message-ID: <2ce4a4c1-ebbc-1de5-7289-bc46d0062007@linux.intel.com> References: <20190503115225.30831-1-chris@chris-wilson.co.uk> <20190503115225.30831-10-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E048E6E7B8 for ; Tue, 7 May 2019 12:06:42 +0000 (UTC) In-Reply-To: <20190503115225.30831-10-chris@chris-wilson.co.uk> Content-Language: en-US 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 List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAzLzA1LzIwMTkgMTI6NTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBUbyBhdm9pZCBwdWxs aW5nIGluIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBpbiB0aGUgbmV4dCBwYXRjaCwgbW92ZSB0aGUK PiBpOTE1X3NjaGVkX25vZGUgaGFuZGxpbmcgdG8gYWZ0ZXIgdGhlIG1haW4gZGZzIG9mIHRoZSBz Y2hlZHVsZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxl ci5jIHwgMjEwICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tCj4gICAxIGZpbGUgY2hhbmdlZCwg MTA1IGluc2VydGlvbnMoKyksIDEwNSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfc2NoZWR1bGVyLmMKPiBpbmRleCBmYWRmMGNkOWM3NWEuLjRhOTVjZjIyMDFhNyAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwo+IEBAIC0zNSwxMDkgKzM1LDYg QEAgc3RhdGljIGlubGluZSBib29sIG5vZGVfc2lnbmFsZWQoY29uc3Qgc3RydWN0IGk5MTVfc2No ZWRfbm9kZSAqbm9kZSkKPiAgIAlyZXR1cm4gaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChub2RlX3Rv X3JlcXVlc3Qobm9kZSkpOwo+ICAgfQo+ICAgCj4gLXZvaWQgaTkxNV9zY2hlZF9ub2RlX2luaXQo c3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkKPiAtewo+IC0JSU5JVF9MSVNUX0hFQUQoJm5v ZGUtPnNpZ25hbGVyc19saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZub2RlLT53YWl0ZXJzX2xp c3QpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmxpbmspOwo+IC0Jbm9kZS0+YXR0ci5wcmlv cml0eSA9IEk5MTVfUFJJT1JJVFlfSU5WQUxJRDsKPiAtCW5vZGUtPnNlbWFwaG9yZXMgPSAwOwo+ IC0Jbm9kZS0+ZmxhZ3MgPSAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGk5MTVfZGVwZW5k ZW5jeSAqCj4gLWk5MTVfZGVwZW5kZW5jeV9hbGxvYyh2b2lkKQo+IC17Cj4gLQlyZXR1cm4ga21l bV9jYWNoZV9hbGxvYyhnbG9iYWwuc2xhYl9kZXBlbmRlbmNpZXMsIEdGUF9LRVJORUwpOwo+IC19 Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pOTE1X2RlcGVuZGVuY3lfZnJlZShzdHJ1Y3QgaTkxNV9k ZXBlbmRlbmN5ICpkZXApCj4gLXsKPiAtCWttZW1fY2FjaGVfZnJlZShnbG9iYWwuc2xhYl9kZXBl bmRlbmNpZXMsIGRlcCk7Cj4gLX0KPiAtCj4gLWJvb2wgX19pOTE1X3NjaGVkX25vZGVfYWRkX2Rl cGVuZGVuY3koc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwKPiAtCQkJCSAgICAgIHN0cnVj dCBpOTE1X3NjaGVkX25vZGUgKnNpZ25hbCwKPiAtCQkJCSAgICAgIHN0cnVjdCBpOTE1X2RlcGVu ZGVuY3kgKmRlcCwKPiAtCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gLXsKPiAtCWJv b2wgcmV0ID0gZmFsc2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVfbG9jayk7Cj4g LQo+IC0JaWYgKCFub2RlX3NpZ25hbGVkKHNpZ25hbCkpIHsKPiAtCQlJTklUX0xJU1RfSEVBRCgm ZGVwLT5kZnNfbGluayk7Cj4gLQkJbGlzdF9hZGQoJmRlcC0+d2FpdF9saW5rLCAmc2lnbmFsLT53 YWl0ZXJzX2xpc3QpOwo+IC0JCWxpc3RfYWRkKCZkZXAtPnNpZ25hbF9saW5rLCAmbm9kZS0+c2ln bmFsZXJzX2xpc3QpOwo+IC0JCWRlcC0+c2lnbmFsZXIgPSBzaWduYWw7Cj4gLQkJZGVwLT5mbGFn cyA9IGZsYWdzOwo+IC0KPiAtCQkvKiBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgYW55b25lIG9uIHRo aXMgY2hhaW4gaGFzIGEgc2VtYXBob3JlICovCj4gLQkJaWYgKHNpZ25hbC0+ZmxhZ3MgJiBJOTE1 X1NDSEVEX0hBU19TRU1BUEhPUkVfQ0hBSU4gJiYKPiAtCQkgICAgIW5vZGVfc3RhcnRlZChzaWdu YWwpKQo+IC0JCQlub2RlLT5mbGFncyB8PSBJOTE1X1NDSEVEX0hBU19TRU1BUEhPUkVfQ0hBSU47 Cj4gLQo+IC0JCXJldCA9IHRydWU7Cj4gLQl9Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZzY2hl ZHVsZV9sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1pbnQgaTkxNV9zY2hl ZF9ub2RlX2FkZF9kZXBlbmRlbmN5KHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUsCj4gLQkJ CQkgICBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpzaWduYWwpCj4gLXsKPiAtCXN0cnVjdCBpOTE1 X2RlcGVuZGVuY3kgKmRlcDsKPiAtCj4gLQlkZXAgPSBpOTE1X2RlcGVuZGVuY3lfYWxsb2MoKTsK PiAtCWlmICghZGVwKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCWlmICghX19pOTE1X3Nj aGVkX25vZGVfYWRkX2RlcGVuZGVuY3kobm9kZSwgc2lnbmFsLCBkZXAsCj4gLQkJCQkJICAgICAg STkxNV9ERVBFTkRFTkNZX0FMTE9DKSkKPiAtCQlpOTE1X2RlcGVuZGVuY3lfZnJlZShkZXApOwo+ IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC12b2lkIGk5MTVfc2NoZWRfbm9kZV9maW5pKHN0 cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X2RlcGVuZGVu Y3kgKmRlcCwgKnRtcDsKPiAtCj4gLQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZub2RlLT5saW5r KSk7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVfbG9jayk7Cj4gLQo+IC0JLyoKPiAt CSAqIEV2ZXJ5b25lIHdlIGRlcGVuZGVkIHVwb24gKHRoZSBmZW5jZXMgd2Ugd2FpdCB0byBiZSBz aWduYWxlZCkKPiAtCSAqIHNob3VsZCByZXRpcmUgYmVmb3JlIHVzIGFuZCByZW1vdmUgdGhlbXNl bHZlcyBmcm9tIG91ciBsaXN0Lgo+IC0JICogSG93ZXZlciwgcmV0aXJlbWVudCBpcyBydW4gaW5k ZXBlbmRlbnRseSBvbiBlYWNoIHRpbWVsaW5lIGFuZAo+IC0JICogc28gd2UgbWF5IGJlIGNhbGxl ZCBvdXQtb2Ytb3JkZXIuCj4gLQkgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXAs IHRtcCwgJm5vZGUtPnNpZ25hbGVyc19saXN0LCBzaWduYWxfbGluaykgewo+IC0JCUdFTV9CVUdf T04oIW5vZGVfc2lnbmFsZWQoZGVwLT5zaWduYWxlcikpOwo+IC0JCUdFTV9CVUdfT04oIWxpc3Rf ZW1wdHkoJmRlcC0+ZGZzX2xpbmspKTsKPiAtCj4gLQkJbGlzdF9kZWwoJmRlcC0+d2FpdF9saW5r KTsKPiAtCQlpZiAoZGVwLT5mbGFncyAmIEk5MTVfREVQRU5ERU5DWV9BTExPQykKPiAtCQkJaTkx NV9kZXBlbmRlbmN5X2ZyZWUoZGVwKTsKPiAtCX0KPiAtCj4gLQkvKiBSZW1vdmUgb3Vyc2VsdmVz IGZyb20gZXZlcnlvbmUgd2hvIGRlcGVuZHMgdXBvbiB1cyAqLwo+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGRlcCwgdG1wLCAmbm9kZS0+d2FpdGVyc19saXN0LCB3YWl0X2xpbmspIHsKPiAt CQlHRU1fQlVHX09OKGRlcC0+c2lnbmFsZXIgIT0gbm9kZSk7Cj4gLQkJR0VNX0JVR19PTighbGlz dF9lbXB0eSgmZGVwLT5kZnNfbGluaykpOwo+IC0KPiAtCQlsaXN0X2RlbCgmZGVwLT5zaWduYWxf bGluayk7Cj4gLQkJaWYgKGRlcC0+ZmxhZ3MgJiBJOTE1X0RFUEVOREVOQ1lfQUxMT0MpCj4gLQkJ CWk5MTVfZGVwZW5kZW5jeV9mcmVlKGRlcCk7Cj4gLQl9Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJx KCZzY2hlZHVsZV9sb2NrKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVf cHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKPiAgIHsKPiAgIAlyZXR1 cm4gcmJfZW50cnkocmIsIHN0cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiBAQCAtMjM5LDYg KzEzNiwxMSBAQCBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIGludCBwcmlvKQo+ICAgCXJldHVybiAmcC0+cmVxdWVzdHNbaWR4XTsKPiAg IH0KPiAgIAo+ICt2b2lkIF9faTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3ByaW9saXN0 ICpwKQo+ICt7Cj4gKwlrbWVtX2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfcHJpb3JpdGllcywgcCk7 Cj4gK30KPiArCj4gICBzdHJ1Y3Qgc2NoZWRfY2FjaGUgewo+ICAgCXN0cnVjdCBsaXN0X2hlYWQg KnByaW9saXN0Owo+ICAgfTsKPiBAQCAtNDQzLDkgKzM0NSwxMDcgQEAgdm9pZCBpOTE1X3NjaGVk dWxlX2J1bXBfcHJpb3JpdHkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBi dW1wKQo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlX2xvY2ssIGZsYWdzKTsK PiAgIH0KPiAgIAo+IC12b2lkIF9faTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3ByaW9s aXN0ICpwKQo+ICt2b2lkIGk5MTVfc2NoZWRfbm9kZV9pbml0KHN0cnVjdCBpOTE1X3NjaGVkX25v ZGUgKm5vZGUpCj4gICB7Cj4gLQlrbWVtX2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfcHJpb3JpdGll cywgcCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmbm9kZS0+c2lnbmFsZXJzX2xpc3QpOwo+ICsJSU5J VF9MSVNUX0hFQUQoJm5vZGUtPndhaXRlcnNfbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmbm9k ZS0+bGluayk7Cj4gKwlub2RlLT5hdHRyLnByaW9yaXR5ID0gSTkxNV9QUklPUklUWV9JTlZBTElE Owo+ICsJbm9kZS0+c2VtYXBob3JlcyA9IDA7Cj4gKwlub2RlLT5mbGFncyA9IDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5ICoKPiAraTkxNV9kZXBlbmRlbmN5X2Fs bG9jKHZvaWQpCj4gK3sKPiArCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGdsb2JhbC5zbGFiX2Rl cGVuZGVuY2llcywgR0ZQX0tFUk5FTCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2k5MTVf ZGVwZW5kZW5jeV9mcmVlKHN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcCkKPiArewo+ICsJa21l bV9jYWNoZV9mcmVlKGdsb2JhbC5zbGFiX2RlcGVuZGVuY2llcywgZGVwKTsKPiArfQo+ICsKPiAr Ym9vbCBfX2k5MTVfc2NoZWRfbm9kZV9hZGRfZGVwZW5kZW5jeShzdHJ1Y3QgaTkxNV9zY2hlZF9u b2RlICpub2RlLAo+ICsJCQkJICAgICAgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqc2lnbmFsLAo+ ICsJCQkJICAgICAgc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwLAo+ICsJCQkJICAgICAgdW5z aWduZWQgbG9uZyBmbGFncykKPiArewo+ICsJYm9vbCByZXQgPSBmYWxzZTsKPiArCj4gKwlzcGlu X2xvY2tfaXJxKCZzY2hlZHVsZV9sb2NrKTsKPiArCj4gKwlpZiAoIW5vZGVfc2lnbmFsZWQoc2ln bmFsKSkgewo+ICsJCUlOSVRfTElTVF9IRUFEKCZkZXAtPmRmc19saW5rKTsKPiArCQlsaXN0X2Fk ZCgmZGVwLT53YWl0X2xpbmssICZzaWduYWwtPndhaXRlcnNfbGlzdCk7Cj4gKwkJbGlzdF9hZGQo JmRlcC0+c2lnbmFsX2xpbmssICZub2RlLT5zaWduYWxlcnNfbGlzdCk7Cj4gKwkJZGVwLT5zaWdu YWxlciA9IHNpZ25hbDsKPiArCQlkZXAtPmZsYWdzID0gZmxhZ3M7Cj4gKwo+ICsJCS8qIEtlZXAg dHJhY2sgb2Ygd2hldGhlciBhbnlvbmUgb24gdGhpcyBjaGFpbiBoYXMgYSBzZW1hcGhvcmUgKi8K PiArCQlpZiAoc2lnbmFsLT5mbGFncyAmIEk5MTVfU0NIRURfSEFTX1NFTUFQSE9SRV9DSEFJTiAm Jgo+ICsJCSAgICAhbm9kZV9zdGFydGVkKHNpZ25hbCkpCj4gKwkJCW5vZGUtPmZsYWdzIHw9IEk5 MTVfU0NIRURfSEFTX1NFTUFQSE9SRV9DSEFJTjsKPiArCj4gKwkJcmV0ID0gdHJ1ZTsKPiArCX0K PiArCj4gKwlzcGluX3VubG9ja19pcnEoJnNjaGVkdWxlX2xvY2spOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK2ludCBpOTE1X3NjaGVkX25vZGVfYWRkX2RlcGVuZGVuY3koc3RydWN0 IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwKPiArCQkJCSAgIHN0cnVjdCBpOTE1X3NjaGVkX25vZGUg KnNpZ25hbCkKPiArewo+ICsJc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwOwo+ICsKPiArCWRl cCA9IGk5MTVfZGVwZW5kZW5jeV9hbGxvYygpOwo+ICsJaWYgKCFkZXApCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJaWYgKCFfX2k5MTVfc2NoZWRfbm9kZV9hZGRfZGVwZW5kZW5jeShub2Rl LCBzaWduYWwsIGRlcCwKPiArCQkJCQkgICAgICBJOTE1X0RFUEVOREVOQ1lfQUxMT0MpKQo+ICsJ CWk5MTVfZGVwZW5kZW5jeV9mcmVlKGRlcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3ZvaWQgaTkxNV9zY2hlZF9ub2RlX2Zpbmkoc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkK PiArewo+ICsJc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwLCAqdG1wOwo+ICsKPiArCUdFTV9C VUdfT04oIWxpc3RfZW1wdHkoJm5vZGUtPmxpbmspKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZz Y2hlZHVsZV9sb2NrKTsKPiArCj4gKwkvKgo+ICsJICogRXZlcnlvbmUgd2UgZGVwZW5kZWQgdXBv biAodGhlIGZlbmNlcyB3ZSB3YWl0IHRvIGJlIHNpZ25hbGVkKQo+ICsJICogc2hvdWxkIHJldGly ZSBiZWZvcmUgdXMgYW5kIHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gb3VyIGxpc3QuCj4gKwkgKiBI b3dldmVyLCByZXRpcmVtZW50IGlzIHJ1biBpbmRlcGVuZGVudGx5IG9uIGVhY2ggdGltZWxpbmUg YW5kCj4gKwkgKiBzbyB3ZSBtYXkgYmUgY2FsbGVkIG91dC1vZi1vcmRlci4KPiArCSAqLwo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlcCwgdG1wLCAmbm9kZS0+c2lnbmFsZXJzX2xpc3Qs IHNpZ25hbF9saW5rKSB7Cj4gKwkJR0VNX0JVR19PTighbm9kZV9zaWduYWxlZChkZXAtPnNpZ25h bGVyKSk7Cj4gKwkJR0VNX0JVR19PTighbGlzdF9lbXB0eSgmZGVwLT5kZnNfbGluaykpOwo+ICsK PiArCQlsaXN0X2RlbCgmZGVwLT53YWl0X2xpbmspOwo+ICsJCWlmIChkZXAtPmZsYWdzICYgSTkx NV9ERVBFTkRFTkNZX0FMTE9DKQo+ICsJCQlpOTE1X2RlcGVuZGVuY3lfZnJlZShkZXApOwo+ICsJ fQo+ICsKPiArCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSBldmVyeW9uZSB3aG8gZGVwZW5kcyB1 cG9uIHVzICovCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVwLCB0bXAsICZub2RlLT53 YWl0ZXJzX2xpc3QsIHdhaXRfbGluaykgewo+ICsJCUdFTV9CVUdfT04oZGVwLT5zaWduYWxlciAh PSBub2RlKTsKPiArCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZkZXAtPmRmc19saW5rKSk7Cj4g Kwo+ICsJCWxpc3RfZGVsKCZkZXAtPnNpZ25hbF9saW5rKTsKPiArCQlpZiAoZGVwLT5mbGFncyAm IEk5MTVfREVQRU5ERU5DWV9BTExPQykKPiArCQkJaTkxNV9kZXBlbmRlbmN5X2ZyZWUoZGVwKTsK PiArCX0KPiArCj4gKwlzcGluX3VubG9ja19pcnEoJnNjaGVkdWxlX2xvY2spOwo+ICAgfQo+ICAg Cj4gICBzdGF0aWMgdm9pZCBpOTE1X2dsb2JhbF9zY2hlZHVsZXJfc2hyaW5rKHZvaWQpCj4gCgpS ZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClJl Z2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4