From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH v2 1/3] drm/i915/guc: keep GuC objects mapped in kernel Date: Tue, 19 Apr 2016 13:23:58 +0100 Message-ID: <5716235E.2060808@intel.com> References: <5710D3AF.3000004@linux.intel.com> <1460974509-22616-1-git-send-email-david.s.gordon@intel.com> <20160418102509.GA18964@nuc-i3427.alporthouse.com> <5714C4EB.4090509@intel.com> <20160418113756.GC18964@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 45ACF6E755 for ; Tue, 19 Apr 2016 12:24:00 +0000 (UTC) In-Reply-To: <20160418113756.GC18964@nuc-i3427.alporthouse.com> 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 T24gMTgvMDQvMTYgMTI6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBNb24sIEFwciAxOCwg MjAxNiBhdCAxMjoyODo0M1BNICswMTAwLCBEYXZlIEdvcmRvbiB3cm90ZToKPj4gT24gMTgvMDQv MTYgMTE6MjUsIENocmlzIFdpbHNvbiB3cm90ZToKPj4+IE9uIE1vbiwgQXByIDE4LCAyMDE2IGF0 IDExOjE1OjA3QU0gKzAxMDAsIERhdmUgR29yZG9uIHdyb3RlOgo+Pj4+IFdpdGggdGhlIG5ldyBp OTE1X2dlbV9vYmpfcGluX21hcCgpIGludGVyZmFjZSwgaXQgbWFrZXMgc2Vuc2UgdG8ga2VlcAo+ Pj4+IEd1QyBvYmplY3RzICh3aGljaCBhcmUgYWx3YXlzIHBpbm5lZCBpbiBtZW1vcnkgYW5kIGlu IHRoZSBHR1RUIGFueXdheSkKPj4+PiBtYXBwZWQgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZSwg cmF0aGVyIHRoYW4gbWFwcGluZyBhbmQgdW5tYXBwaW5nIHRoZW0KPj4+PiBvbiBlYWNoIGFjY2Vz cy4KPj4+Pgo+Pj4+IFRoaXMgcHJlbGltaW5hcnkgcGF0Y2ggc2V0cyB1cCB0aGUgcGluLWFuZC1t YXAgZm9yIGFsbCBHdUMtc3BlY2lmaWMKPj4+PiBvYmplY3RzLCBhbmQgdXBkYXRlcyB0aGUgdmFy aW91cyBzZXR1cC9zaHV0ZG93biBmdW5jdGlvbnMgdG8gdXNlIHRoZXNlCj4+Pj4gbG9uZy10ZXJt IG1hcHBpbmdzIHJhdGhlciB0aGFuIGRvaW5nIHRoZWlyIG93biBrbWFwX2F0b21pYygpIGNhbGxz Lgo+Pj4+Cj4+Pj4gdjI6Cj4+Pj4gICAgICBJbnZlbnQgJiB1c2UgYWNjZXNzb3IgZnVuY3Rpb24g aTkxNV9vYmplY3RfbWFwcGVkX2FkZHJlc3MoKSByYXRoZXIKPj4+PiAgICAgIHRoYW4gYWNjZXNz aW5nIG9iai0+bWFwcGluZyBkaXJlY3RseSAoVHZydGtvIFVyc3VsaW4pCj4+Pj4gICAgICBVc2Ug SVNfRVJSKCkgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIE5VTEwgKFR2cnRrbyBVcnN1bGluKQo+ Pj4+ICAgICAgQWRkZWQgYmlnIGNvbW1lbnQgYWJvdXQgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAm IHVzYWdlIG9mIHRoZSBHRU0KPj4+PiAgICAgIG9iamVjdCB0aGF0IGl0IGRlc2NyaWJlcwo+Pj4+ Cj4+Pj4gQ2M6IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+Pj4gU2lnbmVkLW9mZi1ieTog QWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBHb3Jk b24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KPj4+PiAtLS0KPj4+PiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICB8IDEyICsrKysrKysrKysKPj4+PiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyB8IDM4ICsrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmggICAgICAgICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKwo+Pj4+ICAgMyBmaWxlcyBjaGFu Z2VkLCA1MCBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+Pj4+IGluZGV4IDg1MTAyYWQuLjQzOWYxNDkgMTAwNjQ0Cj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+PiBAQCAtMzAyNSw2ICszMDI1LDE4IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPj4+PiAgIHZvaWQgKl9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3Rf cGluX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPj4+Pgo+Pj4+ICAgLyoq Cj4+Pj4gKyAqIGk5MTVfb2JqZWN0X21hcHBlZF9hZGRyZXNzIC0gYWRkcmVzcyBhdCB3aGljaCBh IEdFTSBvYmplY3QgaXMgbWFwcGVkCj4+Pj4gKyAqIEBvYmogLSB0aGUgb2JqZWN0IChwcmVzdW1h Ymx5IGFscmVhZHkgbWFwcGVkIGludG8ga2VybmVsIGFkZHJlc3Mgc3BhY2UpCj4+Pj4gKyAqCj4+ Pj4gKyAqIFJldHVybnMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggYW4gb2JqZWN0IGhhcyBiZWVuIG1h cHBlZCBieSBhIGNhbGwgdG8KPj4+PiArICogaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoKSBhYm92 ZSwgb3IgTlVMTCBpZiBub3QgY3VycmVudGx5IG1hcHBlZCBhbmQgcGlubmVkCj4+Pj4gKyAqLwo+ Pj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgKmk5MTVfb2JqZWN0X21hcHBlZF9hZGRyZXNzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+Pj4gK3sKPj4+PiArICAgICAgIHJldHVybiBv YmotPnBhZ2VzX3Bpbl9jb3VudCA9PSAwID8gTlVMTCA6IG9iai0+bWFwcGluZzsKPj4+PiArfQo+ Pj4KPj4+IE5vLgo+Pgo+PiBUaGUga2VybmVsIGFkZHJlc3MgYXQgd2hpY2ggYW4gb2JqZWN0IGlz IHBpbm5lZCBpcyBqdXN0IGFzIG11Y2ggYQo+PiBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IGFzIGl0 cyBHR1RUIGFkZHJlc3MsIHNvIHNob3VsZCBoYXZlIGEgc2ltaWxhcgo+PiBmdW5jdGlvbiBmb3Ig cmV0cmlldmluZyBpdC4KPgo+IEFuIG9iamVjdCBkb2Vzbid0IGhhdmUgYSBHR1RULCBhIHZtYSBk b2VzLiBUaGUgb2JqZWN0IGhhcyB2bWEuIFRvIHVzZQo+IHRoZSB2bWEsIHlvdSBtdXN0IHBpbiBp dC4KCldlbGwgeW91IG9idmlvdXNseSBoYXZlIGEgdmVyeSBkaWZmZXJlbnQgdXNhZ2UgbW9kZWwg aW4gbWluZC4gVGhlIEd1QyAKb2JqZWN0IGxpZmVjeWNsZSBpczoKCiAgICBndWNfb2JqOjpjcmVh dGUoKQogICAgewogICAgICAgYWxsb2NhdGUKICAgICAgIGdldC1wYWdlcy1pbnRvLVJBTQogICAg ICAgcGluLXBhZ2VzLWluLVJBTQogICAgICAgcGluLXRvLWd0dAogICAgICAga21hcAogICAgfQoK ICAgIH5ndWNfb2JqKCkKICAgIHsKICAgICAgIHVuZG8gYWxsIHRoZSBhYm92ZQogICAgfQoKICAg IGd1Y19vYmo6OmRvX3N0dWZmKCkKICAgIHsKICAgICAgIGFkZHIgPSBzZWxmLm1hcHBlZF9hZGRy ZXNzKCkKICAgICAgIC4uLiAvLyB1c2UgKmFkZHIKICAgIH0KCndoZXJlIGFsbCB0aGUgY29kZSBy ZWxpZXMgb24gdGhlIGNvbnN0cnVjdG9yIGhhdmluZyBzZXQgdXAgYWxsIG1hcHBpbmdzIApvbmNl IGFuZCBmb3IgYWxsOyB3aGVyZWFzIGl0IGxvb2tzIGxpa2UgeW91J3JlIHRoaW5raW5nOgoKICAg IGRvX3N0dWZmKGdlbV9vYmopCiAgICB7CiAgICAgICBhZGRyID0gcGluLWFuZC1tYXAoZ2VtX29i aik7CiAgICAgICAuLi4gLy8gdXNlICphZGRyCiAgICAgICB1bnBpbi1hbmQtbWFwKGdlbV9vYmop CiAgICB9Cgp3aGVyZSBlYWNoIHVzZXIgb2YgYSBtYXBwaW5nIGRvZXNuJ3Qga25vdyBhYm91dCBh bnkgb3RoZXJzIHRoYXQgbWlnaHQgCmV4aXN0LCBhbmQgdGhlcmVmb3JlIGhhcyB0byBtYW5hZ2Ug cGluY291bnRpbmcuCgpUaGlzIGxvY2FsLWtub3dsZWRnZS1vbmx5IG1vZGVsIG1pZ2h0IGJlIG1v cmUgbmF0dXJhbCBpZiB0aGUgZnVuY3Rpb24gCndlcmUgY2FsbGVkIHNvbWV0aGluZyBsaWtlIGk5 MTVfZ2VtX29iamVjdF9tYXBwaW5nX2NyZWF0ZSgpIGFuZCByZXR1cm5lZCAKYW4gYmxvYiByZXBy ZXNlbnRpbmcgYSBiaW5kaW5nIGJldHdlZW4gYSBHRU0gb2JqZWN0IGFuZCBhbiBhZGRyZXNzIHNw YWNlIAotLSBpbiBvdGhlciB3b3JkcywgYSBWTUEgd2hlcmUgdGhlICJhZGRyZXNzIHNwYWNlIiB3 b3VsZCBiZSAia2VybmVsIiAKcmF0aGVyIHRoYW4gR0dUVCBvciBQUEdUVCAoYW5kIHRoZSB1bm1h cCBmdW5jdGlvbiB3b3VsZCB0YWtlIHRoZSAKcmV0dXJuZWQgYmxvYiwgbm90IHRoZSBHRU0gb2Jq ZWN0LCBhcyB0aGUgdGhpbmctdG8tYmUtdW5tYWRlKS4gVGhlbiB3ZSAKY291bGQgaGF2ZSBwYXJ0 aWFsIG1hcHBpbmdzLCBhbmQgbWFwcGluZ3Mgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcyAKKGUu Zy4gY2FjaGluZykgY29leGlzdGluZy4KCkJ1dCB0aGUgY3VycmVudCBwaW4tYW5kLW1hcCBpbXBs ZW1lbnRzICp0aGUqIG1hcHBpbmcgYXMgYSBzaW5nbGV0b24gCnByb3BlcnR5IG9mIGEgR0VNIG9i amVjdCwgc28gaXQgbG9va3MgZmFyIG1vcmUgbmF0dXJhbCB0byBzZXQgaXQgdXAgb25jZSAKYW5k IHRoZW4gZXhwZWN0IHRvIHJlYWQgaXRzIHVuY2hhbmdlZCB2YWx1ZSBhdCBhbnkgdGltZSB0aGVy ZWFmdGVyLCAKdW50aWwgdGhlIG1hcHBpbmcgaXMgZmluYWxseSBkZXN0cm95ZWQgYWxvbmcgd2l0 aCB0aGUgb2JqZWN0LgoKPj4gVGhlIHBhZ2VzX3Bpbl9jb3VudCBjaGVjayBpcyB0aGVyZSBiZWNh dXNlIG9uY2UgdGhhdCBnb2VzIHRvIHplcm8sCj4+IHRoZSBvYmplY3QgZG9lc24ndCBsb2dpY2Fs bHkgL2hhdmUvIGEgbWVtb3J5IGFkZHJlc3MsIGV2ZW4gaWYKPj4gJ21hcHBpbmcnIGlzIHN0aWxs IHNldC4KPj4KPj4gT3Igd2FzIGl0IGp1c3QgdGhlIG5hbWUgeW91IG9iamVjdGVkIHRvPwo+Cj4g TmFtZSBhbmQgZnVuY3Rpb24uIG9iai0+bWFwcGluZyBpcyB0aWVkIGludG8gdGhlIHNoaW5rZXIg d2hpY2ggY2FuIGFuZAo+IHdpbGwgcnVuIGF0IGFueSB0aW1lLCBzdGVhbGluZyBhbGwgbG9ja3Mu IFVzaW5nIG9iai0+bWFwcGluZyB3aGljaAo+IGhvbGRpbmcgYW4gYWN0dWFsIHBhZ2UgcmVmZXJl bmNlIGZvciB5b3Vyc2VsZiBpcyBicm9rZW4uCgpBbGwgR3VDIG9iamVjdHMgYXJlIHBlcm1hbmVu dGx5IHBpbm5lZCBpbiBSQU0gYW5kIEdHVFQsIGFuZCBoZW5jZSBpbW11bmUgCnRvIHRoZSBzaHJp bmtlci4gSWYgdGhlIHNocmlua2VyIGRvZXMgdG91Y2ggdGhlbSwgdGhlIEd1QyB3aWxsIGJyZWFr LgoKPj4+PiBAQCAtNjQ5LDYgKzYzOSw5IEBAIHN0YXRpYyB2b2lkIGdlbV9yZWxlYXNlX2d1Y19v Ymooc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+PiAgIAlpZiAoaTkxNV9nZW1f b2JqX2lzX3Bpbm5lZChvYmopKQo+Pj4+ICAgCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihv YmopOwo+Pj4+Cj4+Pj4gKwlpZiAoaTkxNV9vYmplY3RfbWFwcGVkX2FkZHJlc3Mob2JqKSkKPj4+ PiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7Cj4+Pgo+Pj4gRWg/IElmIHlvdSBh cmVuJ3QgdHJhY2tpbmcgeW91ciBwaW4sIHlvdSBjYW4ndCBqdXN0IHJhbmRvbWx5IGZyZWUKPj4+ IHNvbWVvbmUgZWxzZXMuCj4+Cj4+IFRoZSBHdUMgY29kZSBleGNsdXNpdmVseSBvd25zIHRoaXMg b2JqZWN0LCBzbyBpdCBjYW4ndCBiZSAic29tZW9uZQo+PiBlbHNlJ3MiLiBUaGUgcGFnZXNfcGlu IGNvdW50IGhlcmUgd2lsbCBhbHdheXMgYmUgMSAoYXQgcHJlc2VudCkuCj4+IFRoaXMgd2FzIHRv IGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB3ZSBhbHJlYWR5IGNob3NlIHRvCj4+IHJl bGVhc2UgdGhlIHBpbi1hbmQtbWFwIHdoaWxlIGxlYXZpbmcgdGhlIG9iamVjdCBpbiB0aGUgR0dU VCwgaW4KPj4gd2hpY2ggY2FzZSB0aGUgcGFnZXNfcGluX2NvdW50IHdpbGwgYmUgMC4gKFdlIGRv bid0IGRvIHRoaXMsIGF0Cj4+IHByZXNlbnQsIGJ1dCBzZWUgYmVsb3cpLgo+Cj4gVGhhdCBpcyBi YWQganVzdGlmaWNhdGlvbiBmb3IgYWRkaW5nIHVuc2FmZSBjb2RlLgoKTk9UIHVuc2FmZSwgYmVj YXVzZSB0aGUgR3VDIGNvZGUgaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZXNlIAoqcHJp dmF0ZSogb2JqZWN0cy4gQXMgSSBzYWlkLCBubyBjb2RlIG91dHNpZGUgdGhpcyBmaWxlIHdpbGwg ZXZlciBhY2Nlc3MgCnRoZXNlIG9iamVjdHMuIEFuZCB0aGUgY29kZSBhYm92ZSBpcyB0aGUgZGVz dHJ1Y3Rvciwgc28gaXQgd291bGQgYmUgYSAKcmVhbGx5IGJhZCBpZGVhIGZvciBhbnlvbmUgZWxz ZSB0byBoYXZlIGEgcGluLWFuZC1tYXBwaW5nIG9mIHRoZSBvYmplY3QgCmF0IHRoaXMgcG9pbnQu Cgo+Pj4+ICAgCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+Pj4+ICAg fQo+Pj4+Cj4+Pj4gQEAgLTcyOSw2ICs3MjIsOCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqZ3VjX2NsaWVudF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4+ICAgCQln b3RvIGVycjsKPj4+Pgo+Pj4+ICAgCWNsaWVudC0+Y2xpZW50X29iaiA9IG9iajsKPj4+PiArCWNs aWVudC0+Y2xpZW50X2Jhc2UgPSBpOTE1X29iamVjdF9tYXBwZWRfYWRkcmVzcyhvYmopOwo+Pj4+ ICsJV0FSTl9PTighY2xpZW50LT5jbGllbnRfYmFzZSk7Cj4+Pj4gICAJY2xpZW50LT53cV9vZmZz ZXQgPSBHVUNfREJfU0laRTsKPj4+PiAgIAljbGllbnQtPndxX3NpemUgPSBHVUNfV1FfU0laRTsK Pj4+Pgo+Pj4+IEBAIC04NDEsNyArODM2LDYgQEAgc3RhdGljIHZvaWQgZ3VjX2NyZWF0ZV9hZHMo c3RydWN0IGludGVsX2d1YyAqZ3VjKQo+Pj4+ICAgCXN0cnVjdCBndWNfcG9saWNpZXMgKnBvbGlj aWVzOwo+Pj4+ICAgCXN0cnVjdCBndWNfbW1pb19yZWdfc3RhdGUgKnJlZ19zdGF0ZTsKPj4+PiAg IAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+Pj4gLQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKPj4+PiAgIAl1MzIgc2l6ZTsKPj4+Pgo+Pj4+ICAgCS8qIFRoZSBhZHMgb2JqIGluY2x1ZGVz IHRoZSBzdHJ1Y3QgaXRzZWxmIGFuZCBidWZmZXJzIHBhc3NlZCB0byBHdUMgKi8KPj4+PiBAQCAt ODU3LDkgKzg1MSw3IEBAIHN0YXRpYyB2b2lkIGd1Y19jcmVhdGVfYWRzKHN0cnVjdCBpbnRlbF9n dWMgKmd1YykKPj4+Pgo+Pj4+ICAgCQlndWMtPmFkc19vYmogPSBvYmo7Cj4+Pj4gICAJfQo+Pj4+ IC0KPj4+PiAtCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLCAwKTsKPj4+PiAt CWFkcyA9IGttYXAocGFnZSk7Cj4+Pj4gKwlhZHMgPSBpOTE1X29iamVjdF9tYXBwZWRfYWRkcmVz cyhvYmopOwo+Pj4KPj4+IFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgYWtub3dsZWdlIHRoYXQgeW91 IGFyZSB1c2luZyB0aGUgbWVtb3J5IHRyYWNrZWQKPj4+IGJ5IHRoZSBvYmplY3Qgb3RoZXJ3aXNl IGl0ICp3aWxsKiBiZSByZW1vdmVkIGJ5IHRoZSBzaHJpbmtlci4KPj4+IFNvIHdoYXQgaXMgd3Jv bmcgd2l0aCB1c2luZyBpOTE1X2dlbV9vYmplY3RfcGluX21hcCgpPwo+Pj4gLUNocmlzCj4+Cj4+ IFRoZSBvYmplY3QgaXMgcGlubmVkLWFuZC1tYXBwZWQganVzdCBvbmNlLCB3aGVuIGl0J3MgY3Jl YXRlZCwgYW5kCj4+IGtlcHQgdGhhdCB3YXkgdW50aWwgaXQncyBkZXN0cm95ZWQuIENhbGxpbmcg cGluLWFuZC1tYXAgaGVyZSB3b3VsZAo+PiBnaXZlIGl0IGEgcGluIGNvdW50IG9mIHR3bywgd2hp Y2ggd291bGQgYmUgcmVkdW5kYW50LCBhbmQgcmVxdWlyZSB1cwo+PiB0byB1bnBpbi1hbmQtbWFw IGl0IGFnYWluIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIC0gd2hpY2gganVzdAo+PiBzZWVt cyBhIHdhc3RlIG9mIHRpbWUuCj4KPiBDb25zaWRlcmluZyB0aGUgYWx0ZXJuYXRpdmUgaXMgYW4g dW5zb3VuZCBBUEkuIEp1c3QgZG8gaXQsIG9yIHBhc3MKPiBhcm91bmQgdGhlIG1hcHBpbmcgaW4g YSBsb2NhbCB5b3UgaGF2ZSBhbHJlYWR5IHBpbm5lZC4KPiAtQ2hyaXMKCk5vLCBJJ3ZlIGRlY2lk ZWQganVzdCBub3QgdG8gdXNlIHRoZSBwaW4tYW5kLW1hcCBBUEkgYXQgYWxsLiBXZSByZWFsbHkg Cm9ubHkgbmVlZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBzaGFyZWQgZG9vcmJlbGwvcHJvY2VzcyBk ZXNjcmlwdG9yIHBhZ2UsIApzbyB3ZSBjYW4ganVzdCBrbWFwIHRoZSBzaW5nbGUgcGFnZSBpbnN0 ZWFkLiBUaGlzIGlzIG1vcmUgZWNvbm9taWNhbCBpbiAKdXNlIG9mIGFkZHJlc3Mgc3BhY2UsIGFu ZCBzaW1wbGVyIHRvIGtlZXAgYXdheSBmcm9tIHRoZSBzaHJpbmtlci4KCi5EYXZlLgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==