From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 4/5] drm/i915: Make updating pipe without modeset atomic. Date: Thu, 27 Aug 2015 17:33:19 +0300 Message-ID: <20150827143319.GG5176@intel.com> References: <1440683046-27110-1-git-send-email-maarten.lankhorst@linux.intel.com> <1440683046-27110-5-git-send-email-maarten.lankhorst@linux.intel.com> <20150827135821.GE5176@intel.com> <55DF1976.9010007@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 273D68A582 for ; Thu, 27 Aug 2015 07:33:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: <55DF1976.9010007@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBBdWcgMjcsIDIwMTUgYXQgMDQ6MDY6NDZQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT3AgMjctMDgtMTUgb20gMTU6NTggc2NocmVlZiBWaWxsZSBTeXJqw6Rsw6Q6 Cj4gPiBPbiBUaHUsIEF1ZyAyNywgMjAxNSBhdCAwMzo0NDowNVBNICswMjAwLCBNYWFydGVuIExh bmtob3JzdCB3cm90ZToKPiA+PiBJbnN0ZWFkIG9mIGRvaW5nIGEgaGFjayBkdXJpbmcgcHJpbWFy eSBwbGFuZSBjb21taXQgdGhlIHN0YXRlCj4gPj4gaXMgdXBkYXRlZCBkdXJpbmcgYXRvbWljIGV2 YXNpb24uIEl0IGhhbmRsZXMgZGlmZmVyZW5jZXMgaW4KPiA+PiBwaXBlIHNpemUgYW5kIHRoZSBw YW5lbCBmaXR0ZXIuCj4gPj4KPiA+PiBUaGlzIGlzIGNvbnRpbnVpbmcgb24gdG9wIG9mIERhbmll bCdzIHdvcmsgdG8gbWFrZSBmYXN0ZXIKPiA+PiBtb2Rlc2V0cyBhdG9taWMsIGFuZCBub3QgeWV0 IGVuYWJsZWQgYnkgZGVmYXVsdC4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFu a2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPj4gLS0tCj4gPj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jICB8ICAgMiArLQo+ID4+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAxMTAgKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0KPiA+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2Lmgg ICAgIHwgICAyICsKPiA+PiAgMyBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA0MiBk ZWxldGlvbnMoLSkKPiA+Pgo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jCj4gPj4g aW5kZXggOTMzNmU4MDMwOTgwLi44Mjg3YjgxMjg3YTAgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9hdG9taWMuYwo+ID4+IEBAIC05OCw4ICs5OCw4IEBAIGludGVsX2NydGNfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+PiAgCQlyZXR1cm4gTlVMTDsK PiA+PiAgCj4gPj4gIAlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNy dGMsICZjcnRjX3N0YXRlLT5iYXNlKTsKPiA+PiAtCj4gPj4gIAljcnRjX3N0YXRlLT5iYXNlLmNy dGMgPSBjcnRjOwo+ID4+ICsJY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUgPSBmYWxzZTsKPiA+PiAg Cj4gPj4gIAlyZXR1cm4gJmNydGNfc3RhdGUtPmJhc2U7Cj4gPj4gIH0KPiA+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPj4gaW5kZXggN2I1ZGZlMmY3YjJkLi5kMzg3NGE2OGNk YjkgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPj4gQEAg LTEwOCw2ICsxMDgsOSBAQCBzdGF0aWMgdm9pZCBza2xfaW5pdF9zY2FsZXJzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcgo+ID4+ICAJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ID4+ICBzdGF0aWMgaW50IGk5eHhfZ2V0X3Jl ZmNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+PiAgCQkJ ICAgaW50IG51bV9jb25uZWN0b3JzKTsKPiA+PiArc3RhdGljIHZvaWQgc2t5bGFrZV9wZml0X2Vu YWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4gPj4gK3N0YXRpYyB2b2lkIGlyb25sYWtl X3BmaXRfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywgYm9vbCBmb3JjZSk7Cj4gPj4g K3N0YXRpYyB2b2lkIGlyb25sYWtlX3BmaXRfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KTsKPiA+PiAgc3RhdGljIHZvaWQgaW50ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiA+PiAgCj4gPj4gIHR5cGVkZWYgc3RydWN0IHsKPiA+PiBAQCAt MzMwNSwxNCArMzMwOCwyMCBAQCBzdGF0aWMgYm9vbCBpbnRlbF9jcnRjX2hhc19wZW5kaW5nX2Zs aXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4+ICAJcmV0dXJuIHBlbmRpbmc7Cj4gPj4gIH0K PiA+PiAgCj4gPj4gLXN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9waXBlX3NpemUoc3RydWN0IGlu dGVsX2NydGMgKmNydGMpCj4gPj4gK3N0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9waXBlX2NvbmZp ZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+PiArCQkJCSAgICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4+IC0JY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGU7Cj4gPj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcgPQo+ID4+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0 ZSk7Cj4gPj4gIAo+ID4+IC0JaWYgKCFpOTE1LmZhc3Rib290KQo+ID4+IC0JCXJldHVybjsKPiA+ PiArCS8qIGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9sZWdhY3lfbW9kZXNldF9zdGF0ZSBtaWdo dCBub3QgYmUgY2FsbGVkLiAqLwo+ID4+ICsJY3J0Yy0+YmFzZS5tb2RlID0gY3J0Yy0+YmFzZS5z dGF0ZS0+bW9kZTsKPiA+PiArCj4gPj4gKwlEUk1fREVCVUdfS01TKCJVcGRhdGluZyBwaXBlIHNp emUgJWl4JWkgLT4gJWl4JWlcbiIsCj4gPj4gKwkJICAgICAgb2xkX2NydGNfc3RhdGUtPnBpcGVf c3JjX3csIG9sZF9jcnRjX3N0YXRlLT5waXBlX3NyY19oLAo+ID4+ICsJCSAgICAgIHBpcGVfY29u ZmlnLT5waXBlX3NyY193LCBwaXBlX2NvbmZpZy0+cGlwZV9zcmNfaCk7Cj4gPj4gIAo+ID4+ICAJ aWYgKEhBU19EREkoZGV2KSkKPiA+PiAgCQlpbnRlbF9zZXRfcGlwZV9jc2MoJmNydGMtPmJhc2Up Owo+ID4+IEBAIC0zMzI0LDI3ICszMzMzLDI2IEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9w aXBlX3NpemUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gPj4gIAkgKiBmYXN0Ym9vdCBjYXNl LCB3ZSdsbCBmbGlwLCBidXQgaWYgd2UgZG9uJ3QgdXBkYXRlIHRoZSBwaXBlc3JjIGFuZAo+ID4+ ICAJICogcGZpdCBzdGF0ZSwgd2UnbGwgZW5kIHVwIHdpdGggYSBiaWcgZmIgc2Nhbm5lZCBvdXQg aW50byB0aGUgd3JvbmcKPiA+PiAgCSAqIHNpemVkIHN1cmZhY2UuCj4gPj4gLQkgKgo+ID4+IC0J ICogVG8gZml4IHRoaXMgcHJvcGVybHksIHdlIG5lZWQgdG8gaG9pc3QgdGhlIGNoZWNrcyB1cCBp bnRvCj4gPj4gLQkgKiBjb21wdXRlX21vZGVfY2hhbmdlcyAob3IgYWJvdmUpLCBjaGVjayB0aGUg YWN0dWFsIHBmaXQgc3RhdGUgYW5kCj4gPj4gLQkgKiB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBhbGxv d3MgcGZpdCBkaXNhYmxlIHdpdGggcGlwZSBhY3RpdmUsIGFuZCBvbmx5Cj4gPj4gLQkgKiB0aGVu IHVwZGF0ZSB0aGUgcGlwZXNyYyBhbmQgcGZpdCBzdGF0ZSwgZXZlbiBvbiB0aGUgZmxpcCBwYXRo Lgo+ID4+ICAJICovCj4gPj4gIAo+ID4+IC0JYWRqdXN0ZWRfbW9kZSA9ICZjcnRjLT5jb25maWct PmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiA+PiAtCj4gPj4gIAlJOTE1X1dSSVRFKFBJUEVTUkMoY3J0 Yy0+cGlwZSksCj4gPj4gLQkJICAgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkg PDwgMTYpIHwKPiA+PiAtCQkgICAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpKTsK PiA+PiAtCWlmICghY3J0Yy0+Y29uZmlnLT5wY2hfcGZpdC5lbmFibGVkICYmCj4gPj4gLQkgICAg KGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpIHx8Cj4gPj4gLQkg ICAgIGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0VEUCkpKSB7Cj4gPj4g LQkJSTkxNV9XUklURShQRl9DVEwoY3J0Yy0+cGlwZSksIDApOwo+ID4+IC0JCUk5MTVfV1JJVEUo UEZfV0lOX1BPUyhjcnRjLT5waXBlKSwgMCk7Cj4gPj4gLQkJSTkxNV9XUklURShQRl9XSU5fU1oo Y3J0Yy0+cGlwZSksIDApOwo+ID4+ICsJCSAgICgocGlwZV9jb25maWctPnBpcGVfc3JjX3cgLSAx KSA8PCAxNikgfAo+ID4+ICsJCSAgIChwaXBlX2NvbmZpZy0+cGlwZV9zcmNfaCAtIDEpKTsKPiA+ PiArCj4gPj4gKwkvKiBvbiBza3lsYWtlIHRoaXMgaXMgZG9uZSBieSBkZXRhY2hpbmcgc2NhbGVy cyAqLwo+ID4+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDkpIHsKPiA+PiArCQlza2xf ZGV0YWNoX3NjYWxlcnMoY3J0Yyk7Cj4gPj4gKwo+ID4+ICsJCWlmIChwaXBlX2NvbmZpZy0+cGNo X3BmaXQuZW5hYmxlZCkKPiA+PiArCQkJc2t5bGFrZV9wZml0X2VuYWJsZShjcnRjKTsKPiA+PiAr CX0KPiA+PiArCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOSAmJgo+ID4+ICsJICAg ICAgICAgSEFTX1BDSF9TUExJVChkZXYpKSB7Cj4gPj4gKwkJaWYgKHBpcGVfY29uZmlnLT5wY2hf cGZpdC5lbmFibGVkKQo+ID4+ICsJCQlpcm9ubGFrZV9wZml0X2VuYWJsZShjcnRjKTsKPiA+PiAr CQllbHNlIGlmIChvbGRfY3J0Y19zdGF0ZS0+cGNoX3BmaXQuZW5hYmxlZCkKPiA+PiArCQkJaXJv bmxha2VfcGZpdF9kaXNhYmxlKGNydGMsIHRydWUpOwo+ID4+ICAJfQo+ID4+IC0JY3J0Yy0+Y29u ZmlnLT5waXBlX3NyY193ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKPiA+PiAtCWNy dGMtPmNvbmZpZy0+cGlwZV9zcmNfaCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXk7Cj4g Pj4gIH0KPiA+PiAgCj4gPj4gIHN0YXRpYyB2b2lkIGludGVsX2ZkaV9ub3JtYWxfdHJhaW4oc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4+IEBAIC01MDAzLDcgKzUwMTEsNyBAQCBzdGF0aWMgdm9p ZCBoYXN3ZWxsX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+PiAgCX0KPiA+ PiAgfQo+ID4+ICAKPiA+PiAtc3RhdGljIHZvaWQgaXJvbmxha2VfcGZpdF9kaXNhYmxlKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKQo+ID4+ICtzdGF0aWMgdm9pZCBpcm9ubGFrZV9wZml0X2Rpc2Fi bGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsIGJvb2wgZm9yY2UpCj4gPj4gIHsKPiA+PiAgCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiA+PiAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4gQEAgLTUwMTEs NyArNTAxOSw3IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3BmaXRfZGlzYWJsZShzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YykKPiA+PiAgCj4gPj4gIAkvKiBUbyBhdm9pZCB1cHNldHRpbmcgdGhlIHBv d2VyIHdlbGwgb24gaGFzd2VsbCBvbmx5IGRpc2FibGUgdGhlIHBmaXQgaWYKPiA+PiAgCSAqIGl0 J3MgaW4gdXNlLiBUaGUgaHcgc3RhdGUgY29kZSB3aWxsIG1ha2Ugc3VyZSB3ZSBnZXQgdGhpcyBy aWdodC4gKi8KPiA+PiAtCWlmIChjcnRjLT5jb25maWctPnBjaF9wZml0LmVuYWJsZWQpIHsKPiA+ PiArCWlmIChmb3JjZSB8fCBjcnRjLT5jb25maWctPnBjaF9wZml0LmVuYWJsZWQpIHsKPiA+PiAg CQlJOTE1X1dSSVRFKFBGX0NUTChwaXBlKSwgMCk7Cj4gPj4gIAkJSTkxNV9XUklURShQRl9XSU5f UE9TKHBpcGUpLCAwKTsKPiA+PiAgCQlJOTE1X1dSSVRFKFBGX1dJTl9TWihwaXBlKSwgMCk7Cj4g Pj4gQEAgLTUwMzgsNyArNTA0Niw3IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX2NydGNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPj4gIAo+ID4+ICAJaW50ZWxfZGlzYWJsZV9waXBl KGludGVsX2NydGMpOwo+ID4+ICAKPiA+PiAtCWlyb25sYWtlX3BmaXRfZGlzYWJsZShpbnRlbF9j cnRjKTsKPiA+PiArCWlyb25sYWtlX3BmaXRfZGlzYWJsZShpbnRlbF9jcnRjLCBmYWxzZSk7Cj4g Pj4gIAo+ID4+ICAJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+aGFzX3BjaF9lbmNvZGVyKQo+ID4+ ICAJCWlyb25sYWtlX2ZkaV9kaXNhYmxlKGNydGMpOwo+ID4+IEBAIC01MTAxLDcgKzUxMDksNyBA QCBzdGF0aWMgdm9pZCBoYXN3ZWxsX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gPj4gIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gOSkKPiA+PiAgCQlza3lsYWtlX3Nj YWxlcl9kaXNhYmxlKGludGVsX2NydGMpOwo+ID4+ICAJZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPCA5KQo+ID4+IC0JCWlyb25sYWtlX3BmaXRfZGlzYWJsZShpbnRlbF9jcnRjKTsKPiA+ PiArCQlpcm9ubGFrZV9wZml0X2Rpc2FibGUoaW50ZWxfY3J0YywgZmFsc2UpOwo+ID4+ICAJZWxz ZQo+ID4+ICAJCU1JU1NJTkdfQ0FTRShJTlRFTF9JTkZPKGRldiktPmdlbik7Cj4gPj4gIAo+ID4+ IEBAIC0xMjI0Niw3ICsxMjI1NCw2IEBAIHN0YXRpYyBib29sIGludGVsX2Z1enp5X2Nsb2NrX2No ZWNrKGludCBjbG9jazEsIGludCBjbG9jazIpCj4gPj4gIAkJCSAgICBiYXNlLmhlYWQpIFwKPiA+ PiAgCQlpZiAobWFzayAmICgxIDw8KGludGVsX2NydGMpLT5waXBlKSkKPiA+PiAgCj4gPj4gLQo+ ID4+ICBzdGF0aWMgYm9vbAo+ID4+ICBpbnRlbF9jb21wYXJlX21fbih1bnNpZ25lZCBpbnQgbSwg dW5zaWduZWQgaW50IG4sCj4gPj4gIAkJICB1bnNpZ25lZCBpbnQgbTIsIHVuc2lnbmVkIGludCBu MiwKPiA+PiBAQCAtMTI0NjcsOCArMTI0NzQsMTYgQEAgaW50ZWxfcGlwZV9jb25maWdfY29tcGFy ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4+ICAJCQkJICAgICAgRFJNX01PREVfRkxBR19O VlNZTkMpOwo+ID4+ICAJfQo+ID4+ICAKPiA+PiAtCVBJUEVfQ09ORl9DSEVDS19JKHBpcGVfc3Jj X3cpOwo+ID4+IC0JUElQRV9DT05GX0NIRUNLX0kocGlwZV9zcmNfaCk7Cj4gPj4gKwlpZiAoIWFk anVzdCkgewo+ID4+ICsJCVBJUEVfQ09ORl9DSEVDS19JKHBpcGVfc3JjX3cpOwo+ID4+ICsJCVBJ UEVfQ09ORl9DSEVDS19JKHBpcGVfc3JjX2gpOwo+ID4+ICsKPiA+PiArCQlQSVBFX0NPTkZfQ0hF Q0tfSShwY2hfcGZpdC5lbmFibGVkKTsKPiA+PiArCQlpZiAoY3VycmVudF9jb25maWctPnBjaF9w Zml0LmVuYWJsZWQpIHsKPiA+PiArCQkJUElQRV9DT05GX0NIRUNLX0kocGNoX3BmaXQucG9zKTsK PiA+PiArCQkJUElQRV9DT05GX0NIRUNLX0kocGNoX3BmaXQuc2l6ZSk7Cj4gPj4gKwkJfQo+ID4+ ICsJfQo+ID4gV2hhdCdzIHRoaXMgaGFjayBub3c/IEFyZW4ndCB5b3UgY29tcHV0aW5nIHRoZSBj b3JyZWN0IGNvbmZpZyBvciB3aHkgZG8KPiA+IHlvdSBuZWVkIHRvIHNraXAgdGhlIHN0YXRlIGNo ZWNrPwo+ID4KPiBUaGlzIGlzIG5vdCBhIGhhY2sgYnV0IGludGVudGlvbmFsLiBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB3aXRoIGFkanVzdD10cnVlIHdoZW4gY29tcGFyaW5nIHRoZSBzdGF0ZQo+ IHRvIHNlZSBpZiBhIGZ1bGwgYmxvd24gbW9kZXNldCBpcyBuZWVkZWQgb3Igbm90LiBCZWNhdXNl ICBpbnRlbF91cGRhdGVfcGlwZV9jb25maWcgY2FuIG1vZGlmeQo+IHBjaF9wZml0IGFuZCBwaXBl X3NyYyogdGhlcmUncyBubyBuZWVkIHRvIGNvbnNpZGVyIGl0IHdoZW4gZG9pbmcgYSBtb2Rlc2V0 Lgo+IAo+IEJ1dCB5b3UgZG8gbmVlZCB0aGUgdHJ1ZSB2YWx1ZXMsIG9yIGludGVsX3VwZGF0ZV9w aXBlX2NvbmZpZyB3aWxsIGRvIHRoZSB3cm9uZyB0aGluZy4KCkFoLiBJIGRpZG4ndCByZWFsaXpl IHdlJ2QgZ2l2ZW4gaXQgYSBkdWFsIHB1cnBvc2UuIERvZXMgbWFrZSBzb21lIHNlbnNlCnRob3Vn aCB0byBhdm9pZCBoYXZpbmcgd3JpdGUgc2ltaWxhciB0ZXN0cyB0d2ljZS4KCi0tIApWaWxsZSBT eXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==