From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: Use of copy_from_user in msm_gem_submit.c while holding a spin_lock Date: Thu, 18 Aug 2016 10:36:51 +0200 Message-ID: <20160818083651.GY6232@phenom.ffwll.local> References: <57B44D2E.2030301@oracle.com> <20160817170827.GC2356@ZenIV.linux.org.uk> <20160817191534.GF2356@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: David Airlie , linux-arm-msm , Linux Kernel Mailing List , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , Julia Lawall , Al Viro , Daniel Vetter , Vaishali Thakkar , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gV2VkLCBBdWcgMTcsIDIwMTYgYXQgMDU6Mjk6MzFQTSAtMDQwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IE9uIFdlZCwgQXVnIDE3LCAyMDE2IGF0IDM6MTUgUE0sIEFsIFZpcm8gPHZpcm9AemVuaXYu bGludXgub3JnLnVrPiB3cm90ZToKPiA+IE9uIFdlZCwgQXVnIDE3LCAyMDE2IGF0IDAyOjQ5OjMy UE0gLTA0MDAsIFJvYiBDbGFyayB3cm90ZToKPiA+PiBJZiB0aGVyZSBpcyBhIGNvcHlfZnJvbV91 c2VyKCkgdmFyaWFudCB0aGF0IHdpbGwgcmV0dXJuIGFuIGVycm9yCj4gPj4gaW5zdGVhZCBvZiBi bG9ja2luZywgSSB0aGluayB0aGF0IGlzIHJlYWxseSB3aGF0IEkgd2FudCBzbyBJIGNhbgo+ID4+ IGltcGxlbWVudCBhIHNsb3ctcGF0aCB0aGF0IGRyb3BzIHRoZSBzcGluLWxvY2sgdGVtcG9yYXJp bHkuCj4gPgo+ID4gKnNocnVnKgo+ID4KPiA+IHBhZ2VmYXVsdF9kaXNhYmxlKCkvcGFnZWZhdWx0 X2VuYWJsZSgpIGFyZSB0aGVyZSBmb3IgcHVycG9zZSwgc28ncwo+ID4gX19jb3B5X2Zyb21fdXNl cl9pbmF0b21pYygpLi4uICBKdXN0IHJlbWVtYmVyIHRoYXQgX19jb3B5X2Zyb21fdXNlcl9pbmF0 b21pYygpCj4gPiBkb2VzIG5vdCBjaGVjayBpZiB0aGUgYWRkcmVzc2VzIGFyZSB1c2VybGFuZCBv bmVzIChpLmUuIHRoZSBjYWxsZXIgbmVlZHMKPiA+IHRvIGNoZWNrIGFjY2Vzc19vaygpIGl0c2Vs ZikgYW5kIGl0IGlzICpOT1QqIGd1YXJhbnRlZWQgdG8gemVybyB3aGF0IGl0Cj4gPiBoYWRuJ3Qg Y29waWVkIG92ZXIuICBDdXJyZW50bHkgaXQgZG9lcyB6ZXJvIHRhaWwgb24gc29tZSwgYnV0IG5v dCBhbGwKPiA+IGFyY2hpdGVjdHVyZXM7IGNvbWUgbmV4dCBjeWNsZSBpdCBhbmQgaXQgd2lsbCBu b3QgZG8gdGhhdCB6ZXJvaW5nIG9uIGFueQo+ID4gb2YgdGhvc2UuCj4gCj4gT2ssIHRoaXMgaXMg d2hhdCBJIGNhbWUgdXAgd2l0aC4uIGxldCBtZSBrbm93IHdoYXQgeW91IHRoaW5rLiAgVGhlCj4g Zmlyc3QgaHVuayB3YXMganVzdCB0byBzZWUgdGhlIHByb2JsZW0gaW4gdGhlIGZpcnN0IHBsYWNl IChubyBpZGVhIGlmCj4gb3RoZXIgcGxhY2VzIG9uIGFybSB3b3VsZCBoYXZlIHByb2JsZW1zIHcv IHRoYXQgaHVuayBzbyBpdCB3b3VsZG4ndCBiZQo+IHBhcnQgb2YgbXkgZml4K2NjLXN0YWJsZSBw YXRjaC4uIGJ1dCBpdCBzZWVtcyBsaWtlIEkgZ29vZCBpZGVhLCBJCj4gd291bGQgaGF2ZSBkaXNj b3ZlcmVkIHRoaXMgaXNzdWUgbXVjaCBzb29uZXIgaWYgd2UgaGFkIGl0KQo+IAo+IC0tLS0tLQo+ IGRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2FybS9p bmNsdWRlL2FzbS91YWNjZXNzLmgKPiBpbmRleCAzNWM5ZGI4Li5jZTJlMTgyIDEwMDY0NAo+IC0t LSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAo+ICsrKyBiL2FyY2gvYXJtL2luY2x1 ZGUvYXNtL3VhY2Nlc3MuaAo+IEBAIC01NDIsNiArNTQyLDcgQEAgX19jbGVhcl91c2VyKHZvaWQg X191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pCj4gCj4gIHN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCj4gY29uc3Qgdm9p ZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKPiAgewo+ICsgICAgbWlnaHRfZmF1bHQo KTsKPiAgICAgIGlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQo+ICAgICAgICAg IG4gPSBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKPiAgICAgIGVsc2UgLyogc2VjdXJp dHkgaG9sZSAtIHBsdWcgaXQgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZ2VtX3N1Ym1pdC5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc3VibWl0LmMK PiBpbmRleCA1Y2Q0ZTliLi4zY2NhMDEzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2dlbV9zdWJtaXQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9z dWJtaXQuYwo+IEBAIC02Niw2ICs2NiwxNCBAQCB2b2lkIG1zbV9nZW1fc3VibWl0X2ZyZWUoc3Ry dWN0IG1zbV9nZW1fc3VibWl0ICpzdWJtaXQpCj4gICAgICBrZnJlZShzdWJtaXQpOwo+ICB9Cj4g Cj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKPiArY29weV9mcm9t X3VzZXJfaW5hdG9taWModm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25l ZCBsb25nIG4pCj4gK3sKPiArICAgIGlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4p KQo+ICsgICAgICAgIHJldHVybiBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHRvLCBmcm9tLCBu KTsKPiArICAgIHJldHVybiAtRUZBVUxUOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHN1Ym1pdF9s b29rdXBfb2JqZWN0cyhzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKPiAgICAgICAgICBz dHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0ICphcmdzLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4g IHsKPiBAQCAtNzMsNiArODEsNyBAQCBzdGF0aWMgaW50IHN1Ym1pdF9sb29rdXBfb2JqZWN0cyhz dHJ1Y3QKPiBtc21fZ2VtX3N1Ym1pdCAqc3VibWl0LAo+ICAgICAgaW50IHJldCA9IDA7Cj4gCj4g ICAgICBzcGluX2xvY2soJmZpbGUtPnRhYmxlX2xvY2spOwo+ICsgICAgcGFnZWZhdWx0X2Rpc2Fi bGUoKTsKCkhtLCBJIHRob3VnaHQgd2l0aCBzcGlubG9ja3MgdGhpcyBpc24ndCBuZWVkZWQgLi4u IHdlIGhhdmUgdGhhdCBpbiBzb21lCmZhc3RwYXRocyB0byBhdm9pZCBsb2NraW5nIGludmVyc2lv biBpbiBpOTE1X2dlbV9leGVjYnVmLmMsIGJ1dCB0aGF0J3MKYmVjYXVzZSBhIG11dGV4IGNyaXRp Y2FsIHNlY3Rpb24gY2FuIHN0aWxsIHNsZWVwLgoKPiAKPiAgICAgIGZvciAoaSA9IDA7IGkgPCBh cmdzLT5ucl9ib3M7IGkrKykgewo+ICAgICAgICAgIHN0cnVjdCBkcm1fbXNtX2dlbV9zdWJtaXRf Ym8gc3VibWl0X2JvOwo+IEBAIC04NiwxMCArOTUsMTUgQEAgc3RhdGljIGludCBzdWJtaXRfbG9v a3VwX29iamVjdHMoc3RydWN0Cj4gbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKPiAgICAgICAgICAg Ki8KPiAgICAgICAgICBzdWJtaXQtPmJvc1tpXS5mbGFncyA9IDA7Cj4gCj4gLSAgICAgICAgcmV0 ID0gY29weV9mcm9tX3VzZXIoJnN1Ym1pdF9ibywgdXNlcnB0ciwgc2l6ZW9mKHN1Ym1pdF9ibykp Owo+IC0gICAgICAgIGlmIChyZXQpIHsKPiAtICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPiAt ICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ICsgICAgICAgIHJldCA9IGNvcHlfZnJvbV91 c2VyX2luYXRvbWljKCZzdWJtaXRfYm8sIHVzZXJwdHIsIHNpemVvZihzdWJtaXRfYm8pKTsKPiAr ICAgICAgICBpZiAodW5saWtlbHkocmV0KSkgewo+ICsgICAgICAgICAgICBwYWdlZmF1bHRfZW5h YmxlKCk7Cj4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZmaWxlLT50YWJsZV9sb2NrKTsKPiAr ICAgICAgICAgICAgcmV0ID0gY29weV9mcm9tX3VzZXIoJnN1Ym1pdF9ibywgdXNlcnB0ciwgc2l6 ZW9mKHN1Ym1pdF9ibykpOwo+ICsgICAgICAgICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKyAgICAgICAgICAgIHNwaW5fbG9jaygmZmlsZS0+dGFibGVf bG9jayk7Cj4gKyAgICAgICAgICAgIHBhZ2VmYXVsdF9kaXNhYmxlKCk7Cj4gICAgICAgICAgfQo+ IAo+ICAgICAgICAgIGlmIChzdWJtaXRfYm8uZmxhZ3MgJiB+TVNNX1NVQk1JVF9CT19GTEFHUykg ewo+IEBAIC0xMzAsNiArMTQ0LDcgQEAgc3RhdGljIGludCBzdWJtaXRfbG9va3VwX29iamVjdHMo c3RydWN0Cj4gbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKPiAKPiAgb3V0X3VubG9jazoKPiAgICAg IHN1Ym1pdC0+bnJfYm9zID0gaTsKPiArICAgIHBhZ2VmYXVsdF9lbmFibGUoKTsKPiAgICAgIHNw aW5fdW5sb2NrKCZmaWxlLT50YWJsZV9sb2NrKTsKPiAKPiAgICAgIHJldHVybiByZXQ7Cj4gLS0t LS0tCj4gCj4gZGFudmV0IHN1Z2dlc3RlZCB0aGUgZG91YmxlcGx1cy1zdXBlci1ldmlsIHZhcmlh bnQgb2YgdGhlIHRlc3QKPiBwcm9ncmFtLCB1c2luZyBhbiB1bmZhdWx0ZWQgYnV0IG1tYXAnZCBn ZW0gYm8gcGFzc2VkIGluIHRvIHN1Ym1pdAo+IGlvY3RsIGZvciB0aGUgYm8ncyB0YWJsZSwgd2hp Y2ggaGFzIHRoZSBhZGRpdGlvbmFsIGZ1biBvZiB3YW50aW5nIHRvCj4gYWNxdWlyZSB0aGUgYWxy ZWFkeSBoZWxkIHN0cnVjdF9tdXRleCBpbiBtc21fZ2VtX2ZhdWx0KCkuICBXaGljaAo+IG5lZWRl ZCB0aGUgZnVydGhlciBmaXg6Cj4gCj4gLS0tLS0tCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKPiBpbmRl eCA2Y2Q0YWY0Li40NTAyZTRiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKPiBAQCAtMjAxLDYg KzIwMSwxMyBAQCBpbnQgbXNtX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwK PiBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiAgICAgIHBnb2ZmX3QgcGdvZmY7Cj4gICAgICBpbnQg cmV0Owo+IAo+ICsgICAgLyogSSB0aGluayB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB1c2Vy c3BhY2UgdHJpZXMgdG8gcGFzcyBhCj4gKyAgICAgKiBtbWFwJ2QgYnV0IHVuZmF1bHRlZCBnZW0g Ym8gdmFkZHIgaW50byBzdWJtaXQgaW9jdGwsIHRyaWdnZXJpbmcKPiArICAgICAqIGEgcGFnZSBm YXVsdCB3aGlsZSBzdHJ1Y3RfbXV0ZXggaXMgYWxyZWFkeSBoZWxkCj4gKyAgICAgKi8KPiArICAg IGlmIChtdXRleF9pc19sb2NrZWRfYnkoJmRldi0+c3RydWN0X211dGV4LCBjdXJyZW50KSkKPiAr ICAgICAgICByZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwoKVGhpcyBpcyBhbiBvayAod2VsbCBzdGls bCBob3JyaWJsZSkgaGV1cmlzdGljcyBmb3IgdGhlIHNocmlua2VyLCBidXQgZm9yCmNvcnJlY3Ru ZXNzIGl0IGtpbmRhIGRvZXNuJ3QgY3V0IGl0LiBXaGF0IHlvdSBuZWVkIHRvIGRvIGluc3RlYWQg aXMgZHJvcAphbGwgdGhlIGxvY2tzLCBjb3B5IHJlbG9jYXRpb25zIGludG8gYSB0ZW1wIG1lbW9y eSBhcmVhIGFuZCB0aGVuIHByb2NlZWQKaW4gdGhlIG1zbSBjb21tYW5kIHN1Ym1pc3Npb24gcGF0 aCBhYm92ZS4KCkFsc28gcmVlbnRyYW50IG11dGV4ZXMgYXJlIGV2aWwgOy0pCi1EYW5pZWwKCgo+ ICsKPiAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBwYXJhbGxlbCB1cGRhdGUgb24gYSBmYXVs dCwgbm9yIG1vdmUgb3IgcmVtb3ZlCj4gICAgICAgKiBzb21ldGhpbmcgZnJvbSBiZW5lYXRoIG91 ciBmZWV0Cj4gICAgICAgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f Z2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uaAo+IGluZGV4IGIyZjEzY2YuLjE2 MGI2MzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uaAo+IEBAIC0xMjIsNCArMTIyLDE4IEBAIHN0 cnVjdCBtc21fZ2VtX3N1Ym1pdCB7Cj4gICAgICB9IGJvc1swXTsKPiAgfTsKPiAKPiArc3RhdGlj IGlubGluZSBib29sIG11dGV4X2lzX2xvY2tlZF9ieShzdHJ1Y3QgbXV0ZXggKm11dGV4LAo+ICsg ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKPiArewo+ICsgICAgaWYgKCFtdXRleF9p c19sb2NrZWQobXV0ZXgpKQo+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyNpZiBkZWZp bmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX01VVEVYRVMpCj4gKyAgICBy ZXR1cm4gbXV0ZXgtPm93bmVyID09IHRhc2s7Cj4gKyNlbHNlCj4gKyAgICAvKiBTaW5jZSBVUCBt YXkgYmUgcHJlLWVtcHRlZCwgd2UgY2Fubm90IGFzc3VtZSB0aGF0IHdlIG93biB0aGUgbG9jayAq Lwo+ICsgICAgcmV0dXJuIGZhbHNlOwo+ICsjZW5kaWYKPiArfQo+ICsKPiAgI2VuZGlmIC8qIF9f TVNNX0dFTV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2Vt X3Nocmlua2VyLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jCj4g aW5kZXggMjgzZDI4NC4uMzk0MjliYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9nZW1fc2hyaW5rZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9z aHJpbmtlci5jCj4gQEAgLTE4LDE5ICsxOCw2IEBACj4gICNpbmNsdWRlICJtc21fZHJ2LmgiCj4g ICNpbmNsdWRlICJtc21fZ2VtLmgiCj4gCj4gLXN0YXRpYyBib29sIG11dGV4X2lzX2xvY2tlZF9i eShzdHJ1Y3QgbXV0ZXggKm11dGV4LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCj4gLXsKPiAt ICAgIGlmICghbXV0ZXhfaXNfbG9ja2VkKG11dGV4KSkKPiAtICAgICAgICByZXR1cm4gZmFsc2U7 Cj4gLQo+IC0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19N VVRFWEVTKQo+IC0gICAgcmV0dXJuIG11dGV4LT5vd25lciA9PSB0YXNrOwo+IC0jZWxzZQo+IC0g ICAgLyogU2luY2UgVVAgbWF5IGJlIHByZS1lbXB0ZWQsIHdlIGNhbm5vdCBhc3N1bWUgdGhhdCB3 ZSBvd24gdGhlIGxvY2sgKi8KPiAtICAgIHJldHVybiBmYWxzZTsKPiAtI2VuZGlmCj4gLX0KPiAt Cj4gIHN0YXRpYyBib29sIG1zbV9nZW1fc2hyaW5rZXJfbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBib29sICp1bmxvY2spCj4gIHsKPiAgICAgIGlmICghbXV0ZXhfdHJ5bG9jaygmZGV2LT5z dHJ1Y3RfbXV0ZXgpKSB7Cj4gLS0tLS0tCj4gCj4gQW5kIHllcywgSSBrbm93IG11dGV4X2lzX2xv Y2tlZF9ieSgpIGlzIG5vdCBzdXBlci1hd2Vzb21lLi4gZm9yIHRoZQo+IHNocmlua2VyIEkgcGxh biB0byBnZXQgcmlkIG9mIHRoaXMgd2l0aCBmaW5lciBncmFpbmVkIGxvY2tpbmcsCj4gYWx0aG91 Z2ggSSdtIG5vdCBzdXJlIHRoYXQgdG90YWxseSBoZWxwcyB3aXRoIHRoZQo+IGRvdWJsZXBsdXMt ZXZpbC11c2Vyc3BhY2UgdnMgc3VibWl0IGlvY3RsIGNhc2UuLiB3aGljaCBJIHRoaW5rIGNvdWxk Cj4gc3RpbGwgY2F1c2UgbWlzY2hpZWYgYnkgcGFzc2luZyBhbiB1bmZhdWx0ZWQgYm8gaW4gdGhl IGJvcyB0YWJsZSwKPiB3aGljaCBpcyBwcm9jZXNzZWQgKGFuZCB3aXRoIGEgZmluZXItZ3JhaW5l ZCBsb2NrIHNjaGVtZSwgbG9ja2VkKQo+IGZpcnN0LCBhbmQgdGhlbiB1c2luZyBpdCdzIHZhZGRy IGZvciB0aGUgY21kcyB0YWJsZSAod2hlcmUgaXQgd291bGQgYmUKPiBmYXVsdGVkIGFmdGVyIGFs cmVhZHkgbG9ja2VkKS4uICBwZXJoYXBzIEkgY2FuIGp1c3QgZGlzYWxsb3cgYSBnZW0gYm8KPiB0 byBiZSB1c2VkIGZvciBlaXRoZXIgYm9zIG9yIGNtZHMgdGFibGUgaW4gdGhlIHN1Ym1pdCBpb2N0 bCAoc2luY2UKPiB0aGVyZSBpcyBubyBsZWdpdCByZWFzb24gdG8gYWxsb3cgdGhhdCkKPiAKPiBO b3RlIHRoYXQgdGhlcmUgaXMgYWN0dWFsbHkgbm8gaGFyZHdhcmUgd2l0aCB0aGlzIGdwdSB3aGlj aCBpcyBub24tU01QCj4gc28gSSBkb24ndCBtaW5kIGtjb25maWcgdG8gJ2RlcGVuZHMgb24gU01Q JywgYXQgbGVhc3QgZm9yIGEgc2hvcnQtdGVybQo+IHNvbHV0aW9uLiAgSSB0aGluayBhbnkgb3Ro ZXIgc29sdXRpb24gaXNuJ3QgZ29pbmcgdG8gYmUgc29tZXRoaW5nIHRoYXQKPiBjYW5kaWRhdGUg Zm9yIHN0YWJsZS4KPiAKPiBCUiwKPiAtUgoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxp c3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=