From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH] drm/i915: Use the existing pages when retrying to DMA map Date: Mon, 9 Jan 2017 13:04:55 +0000 Message-ID: <20170109130455.GU19067@nuc-i3427.alporthouse.com> References: <1482241367-17465-1-git-send-email-tvrtko.ursulin@linux.intel.com> <93c46f91-06f3-db32-4356-1c86a6becbc9@linux.intel.com> <20170109122839.GT19067@nuc-i3427.alporthouse.com> <4d42662b-4dd5-1809-4961-50b3c665ee49@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id E9EC46E246 for ; Mon, 9 Jan 2017 13:05:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: <4d42662b-4dd5-1809-4961-50b3c665ee49@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: Tvrtko Ursulin Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKYW4gMDksIDIwMTcgYXQgMTI6NDA6MDdQTSArMDAwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gCj4gT24gMDkvMDEvMjAxNyAxMjoyOCwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+ID5P biBNb24sIEphbiAwOSwgMjAxNyBhdCAxMjoyMzozN1BNICswMDAwLCBUdnJ0a28gVXJzdWxpbiB3 cm90ZToKPiA+Pgo+ID4+SGksCj4gPj4KPiA+Pk9uIDIwLzEyLzIwMTYgMTM6NDIsIFR2cnRrbyBV cnN1bGluIHdyb3RlOgo+ID4+PkZyb206IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+Cj4gPj4+Cj4gPj4+UmF0aGVyIHRoYW4gZnJlZWluZyBhbmQgcmUtYWxsb2NhdGlu ZyB0aGUgcGFnZXMgd2hlbiBETUEgbWFwcGluZwo+ID4+PmluIGxhcmdlIGNodW5rcyBmYWlscywg d2UgY2FuIGp1c3QgcmVidWlsZCB0aGUgc2cgdGFibGUgd2l0aCBubwo+ID4+PmNvYWxlc2Npbmcu Cj4gPj4+Cj4gPj4+QWxzbyBjaGFuZ2UgYmFjayB0aGUgcGFnZSBjb3VudGVyIHRvIHVuc2lnbmVk IGludCBiZWNhdXNlIHRoYXQKPiA+Pj5pcyB3aGF0IHRoZSBzZyBBUEkgc3VwcG9ydHMuCj4gPj4+ Cj4gPj4+U2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KPiA+Pj5DYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4g Pj4+LS0tCj4gPj4+T25seSBjb21waWxlIHRlc3RlZCEKPiA+Pj4tLS0KPiA+Pj5kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLQo+ID4+PjEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAxMCBkZWxl dGlvbnMoLSkKPiA+Pj4KPiA+Pj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiA+Pj5pbmRleCA1Mjc1 ZjYyNDhjZTMuLmU3M2Y5ZjVhNWQyMyAxMDA2NDQKPiA+Pj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jCj4gPj4+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u Ywo+ID4+PkBAIC0yMzQwLDEyICsyMzQwLDM2IEBAIHN0YXRpYyB2b2lkIGk5MTVfc2dfdHJpbShz dHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4gPj4+CSpvcmlnX3N0ID0gbmV3X3N0Owo+ID4+Pn0K PiA+Pj4KPiA+Pj4rc3RhdGljIHZvaWQgaTkxNV9zZ191bmNvYWxlc2NlKHN0cnVjdCBzZ190YWJs ZSAqb3JpZ19zdCwgdW5zaWduZWQgbG9uZyBuZW50cykKPiA+Pj4rewo+ID4+PisJc3RydWN0IHNn X3RhYmxlIG5ld19zdDsKPiA+Pj4rCXN0cnVjdCBzY2F0dGVybGlzdCAqbmV3X3NnOwo+ID4+PisJ c3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ID4+PisJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gPj4+ Kwo+ID4+PisJaWYgKHNnX2FsbG9jX3RhYmxlKCZuZXdfc3QsIG5lbnRzLCBHRlBfS0VSTkVMKSkK PiA+Pj4rCQlyZXR1cm47Cj4gPj4+Kwo+ID4+PisJbmV3X3NnID0gbmV3X3N0LnNnbDsKPiA+Pj4r CWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBvcmlnX3N0KSB7Cj4gPj4+KwkJc2df c2V0X3BhZ2UobmV3X3NnLCBwYWdlLCBQQUdFX1NJWkUsIDApOwo+ID4+PisJCS8qIGNhbGxlZCBi ZWZvcmUgYmVpbmcgRE1BIG1hcHBlZCwgbm8gbmVlZCB0byBjb3B5IHNnLT5kbWFfKiAqLwo+ID4+ PisJCW5ld19zZyA9IHNnX25leHQobmV3X3NnKTsKPiA+Pj4rCX0KPiA+Pj4rCj4gPj4+KwlHRU1f QlVHX09OKG5ld19zZyk7IC8qIFNob3VsZCB3YWxrIGV4YWN0bHkgbmVudHMgYW5kIGhpdCB0aGUg ZW5kICovCj4gPj4+Kwo+ID4+PisJc2dfZnJlZV90YWJsZShvcmlnX3N0KTsKPiA+Pj4rCj4gPj4+ Kwkqb3JpZ19zdCA9IG5ld19zdDsKPiA+Pj4rfQo+ID4+PisKPiA+Pj5zdGF0aWMgc3RydWN0IHNn X3RhYmxlICoKPiA+Pj5pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ID4+PnsKPiA+Pj4Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiA+Pj4tCWNvbnN0IHVuc2lnbmVk IGxvbmcgcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOwo+ID4+Pi0JdW5z aWduZWQgbG9uZyBpOwo+ID4+PisJY29uc3QgdW5zaWduZWQgaW50IHBhZ2VfY291bnQgPSBvYmot PmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKPiA+Pj4rCXVuc2lnbmVkIGludCBpOwo+ID4+PglzdHJ1 Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKPiA+Pj4Jc3RydWN0IHNnX3RhYmxlICpzdDsKPiA+ Pj4Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiA+Pj5AQCAtMjM3MSw3ICsyMzk1LDYgQEAgaTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPiA+Pj4JaWYgKHN0ID09IE5VTEwpCj4gPj4+CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiA+Pj4KPiA+Pj4tcmVidWlsZF9zdDoKPiA+Pj4JaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCBwYWdl X2NvdW50LCBHRlBfS0VSTkVMKSkgewo+ID4+PgkJa2ZyZWUoc3QpOwo+ID4+PgkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cj4gPj4+QEAgLTI0MjksNiArMjQ1Miw3IEBAIGk5MTVfZ2VtX29iamVj dF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPj4+CS8q IFRyaW0gdW51c2VkIHNnIGVudHJpZXMgdG8gYXZvaWQgd2FzdGluZyBtZW1vcnkuICovCj4gPj4+ CWk5MTVfc2dfdHJpbShzdCk7Cj4gPj4+Cj4gPj4+K3ByZXBhcmVfZ3R0Ogo+ID4+PglyZXQgPSBp OTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKPiA+Pj4JaWYgKHJldCkgewo+ID4+ PgkJLyogRE1BIHJlbWFwcGluZyBmYWlsZWQ/IE9uZSBwb3NzaWJsZSBjYXVzZSBpcyB0aGF0Cj4g Pj4+QEAgLTI0MzYsMTYgKzI0NjAsMTIgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiA+Pj4JCSAqIGZvciBQQUdFX1NJWkUg Y2h1bmtzIGluc3RlYWQgbWF5IGJlIGhlbHBmdWwuCj4gPj4+CQkgKi8KPiA+Pj4JCWlmIChtYXhf c2VnbWVudCA+IFBBR0VfU0laRSkgewo+ID4+Pi0JCQlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBz Z3RfaXRlciwgc3QpCj4gPj4+LQkJCQlwdXRfcGFnZShwYWdlKTsKPiA+Pj4tCQkJc2dfZnJlZV90 YWJsZShzdCk7Cj4gPj4+LQo+ID4+PisJCQlpOTE1X3NnX3VuY29hbGVzY2Uoc3QsIHBhZ2VfY291 bnQpOwo+ID4+PgkJCW1heF9zZWdtZW50ID0gUEFHRV9TSVpFOwo+ID4+Pi0JCQlnb3RvIHJlYnVp bGRfc3Q7Cj4gPj4+KwkJCWdvdG8gcHJlcGFyZV9ndHQ7Cj4gPj4+CQl9IGVsc2Ugewo+ID4+PgkJ CWRldl93YXJuKCZkZXZfcHJpdi0+ZHJtLnBkZXYtPmRldiwKPiA+Pj4tCQkJCSAiRmFpbGVkIHRv IERNQSByZW1hcCAlbHUgcGFnZXNcbiIsCj4gPj4+LQkJCQkgcGFnZV9jb3VudCk7Cj4gPj4+KwkJ CQkgIkZhaWxlZCB0byBETUEgcmVtYXAgJXUgcGFnZXNcbiIsIHBhZ2VfY291bnQpOwo+ID4+PgkJ CWdvdG8gZXJyX3BhZ2VzOwo+ID4+PgkJfQo+ID4+Pgl9Cj4gPj4+Cj4gPj4KPiA+PkFyZSB5b3Ug c3RpbGwgYWdhaW5zdCB0aGlzPyBBcyBhIHJlbWluZGVyIGl0IHNhdmVzIGEKPiA+PnB1dF9wYWdl L2FsbG9jYXRlIHBhZ2UtZnJvbS1zaG1lbWZzIGN5Y2xlIG9uIGRtYSBtYXBwaW5nIGZhaWx1cmVz Lgo+ID4KPiA+SSBzdGlsbCByZWdhcmQgaXQgYXMgaW5jb21wbGV0ZS4gV2h5IGJvdGhlciBzYXZp bmcgdGhhdCB0cmlwIGFuZCBub3QgdGhlCj4gPmFjdHVhbCBwYWdlIGFsbG9jYXRpb24gaXRzZWxm Lgo+IAo+IFBhZ2UgYWxsb2NhdGlvbiBpcyBleGFjdGx5IHdoYXQgaXQgYXZvaWRzIHJlLWRvaW5n IT8KCkl0IGlzIG5vdC4gVGhlIHNobWVtZnMgcGFnZXMgYXJlIG5vdCBiZWluZyBmcmVlZCBub3Ig cmVhbGxvY2F0ZWQsIGp1c3QKdGhlaXIgdXNlIGNvdW50IGJlaW5nIG1hbmlwdWxhdGVkLgogCj4g WW91IG1lYW50IHNnX2FsbG9jX3RhYmxlIG1heWJlPyBXZSBjb3VsZCBtb3ZlIHRoZSB0cmltIHRv IGJlIGxhc3QKPiBhbmQgZG8gdGhlIHVuY29hbGVzY2UgaW4gcGxhY2UgYnV0IGl0IHdvdWxkIGJl IHNvIG11Y2ggbW9yZSBjb21wbGV4Cj4gdGhhdCBJIGFtIG5vdCBzdXJlIGl0IGlzIHdvcnRoIGl0 IGZvciB0aGlzIGVkZ2UgY2FzZS4KCk9ubHkgdGhlIHNnX3RhYmxlIGlzIGJlaW5nIHJlYWxsb2Nh dGVkIGFuZCBkb2luZyBhY3R1YWwga2ZyZWUva21hbGxvYy4KIAo+IFRoZSBwYXRjaCBhYm92ZSB3 YXMgZmFzdCBhbmQgc2ltcGxlIGltcHJvdmVtZW50IHRvIHRoZSBkbWEgcmVtYXBwaW5nCj4gcmV0 cnkgeW91IGFkZGVkLgoKSSBkaWRuJ3QgdmFsdWUgaXQgYXMgYmVpbmcgYSBzaWduaWZpY2FudCBp bXByb3ZlbWVudCBhbmQgdGhvdWdodCB5b3UKaGF2ZSBhIG1vcmUgY29tcGxldGUgc29sdXRpb24g aW4gbWluZC4KCkZvciBzdGFydGVycyB3ZSBjYW4gcmVkdWNlIHRoZSBkdXBsaWNhdGlvbiBoZXJl IHdpdGgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBlZDNjZDFhNWY5YmIuLjFiZmVjODEx ZjliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0yMTk5LDIwICsyMTk5LDEyIEBAIHZv aWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogICAgICAgIGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCAwLCAobG9m Zl90KS0xKTsKIH0KIAotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0 KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpCitzdGF0aWMgdm9pZCBmcmVlX3NnX3BhZ2Vz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKIHsKICAgICAgICBzdHJ1Y3Qgc2d0X2l0ZXIgc2d0 X2l0ZXI7CiAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLSAgICAgICBfX2k5MTVfZ2VtX29i amVjdF9yZWxlYXNlX3NobWVtKG9iaiwgcGFnZXMsIHRydWUpOwotCi0gICAgICAgaTkxNV9nZW1f Z3R0X2ZpbmlzaF9wYWdlcyhvYmosIHBhZ2VzKTsKLQotICAgICAgIGlmIChpOTE1X2dlbV9vYmpl Y3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKQotICAgICAgICAgICAgICAgaTkxNV9nZW1fb2Jq ZWN0X3NhdmVfYml0XzE3X3N3aXp6bGUob2JqLCBwYWdlcyk7Ci0KICAgICAgICBmb3JfZWFjaF9z Z3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKICAgICAgICAgICAgICAgIGlmIChvYmot Pm1tLmRpcnR5KQogICAgICAgICAgICAgICAgICAgICAgICBzZXRfcGFnZV9kaXJ0eShwYWdlKTsK QEAgLTIyMjIsOSArMjIxNCwyMyBAQCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAgICAgICAgICAgICAgICBwdXRfcGFnZShw YWdlKTsKICAgICAgICB9CisgICAgICAgc2dfZnJlZV90YWJsZShwYWdlcyk7CisKICAgICAgICBv YmotPm1tLmRpcnR5ID0gZmFsc2U7Cit9CiAKLSAgICAgICBzZ19mcmVlX3RhYmxlKHBhZ2VzKTsK K3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2dfdGFibGUgKnBhZ2VzKQoreworICAgICAgIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2ht ZW0ob2JqLCBwYWdlcywgdHJ1ZSk7CisKKyAgICAgICBpOTE1X2dlbV9ndHRfZmluaXNoX3BhZ2Vz KG9iaiwgcGFnZXMpOworCisgICAgICAgaWYgKGk5MTVfZ2VtX29iamVjdF9uZWVkc19iaXQxN19z d2l6emxlKG9iaikpCisgICAgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rfc2F2ZV9iaXRfMTdf c3dpenpsZShvYmosIHBhZ2VzKTsKKworICAgICAgIGZyZWVfc2dfcGFnZXMob2JqLCBwYWdlcyk7 CiAgICAgICAga2ZyZWUocGFnZXMpOwogfQogCkBAIC0yMzIyLDcgKzIzMjgsNiBAQCBpOTE1X2dl bV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQog ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogICAgICAgIHN0cnVjdCBzZ190 YWJsZSAqc3Q7CiAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLSAgICAgICBzdHJ1Y3Qg c2d0X2l0ZXIgc2d0X2l0ZXI7CiAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7CiAgICAgICAgdW5z aWduZWQgbG9uZyBsYXN0X3BmbiA9IDA7ICAgICAvKiBzdXBwcmVzcyBnY2Mgd2FybmluZyAqLwog ICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2VnbWVudDsKQEAgLTI0MDksMTAgKzI0MTQsNyBAQCBp OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQogICAgICAgICAgICAgICAgICogZm9yIFBBR0VfU0laRSBjaHVua3MgaW5zdGVhZCBtYXkg YmUgaGVscGZ1bC4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgaWYgKG1heF9z ZWdtZW50ID4gUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGZvcl9lYWNoX3Nn dF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgc2dfZnJlZV90YWJsZShz dCk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9zZ19wYWdlcyhvYmosIHN0KTsKICAg ICAgICAgICAgICAgICAgICAgICAgbWF4X3NlZ21lbnQgPSBQQUdFX1NJWkU7CiAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gcmVidWlsZF9zdDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBA IC0yNDMxLDkgKzI0MzMsNyBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogZXJyX3NnOgogICAgICAgIHNnX21hcmtfZW5kKHNn KTsKIGVycl9wYWdlczoKLSAgICAgICBmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwg c3QpCi0gICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICBzZ19mcmVlX3RhYmxl KHN0KTsKKyAgICAgICBmcmVlX3NnX3BhZ2VzKG9iaiwgc3QpOwogICAgICAgIGtmcmVlKHN0KTsK IAogICAgICAgIC8qIHNobWVtZnMgZmlyc3QgY2hlY2tzIGlmIHRoZXJlIGlzIGVub3VnaCBtZW1v cnkgdG8gYWxsb2NhdGUgdGhlIHBhZ2UKCgotLSAKQ2hyaXMgV2lsc29uLCBJbnRlbCBPcGVuIFNv dXJjZSBUZWNobm9sb2d5IENlbnRyZQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK