From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [RFC 1/4] drm: Add writeback connector type Date: Fri, 23 Feb 2018 10:59:35 -0500 Message-ID: <20180223155935.GJ223881@art_vandelay> References: <20180223131758.18362-1-robdclark@gmail.com> <20180223131758.18362-2-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180223131758.18362-2-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: Jonathan Corbet , Maarten Lankhorst , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Liviu Dudau , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, David Airlie , Sean Paul , Gustavo Padovan , Mihail Atanassov , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Brian Starkey List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMDg6MTc6NTFBTSAtMDUwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IEZyb206IEJyaWFuIFN0YXJrZXkgPGJyaWFuLnN0YXJrZXlAYXJtLmNvbT4KPiAKPiBXcml0 ZWJhY2sgY29ubmVjdG9ycyByZXByZXNlbnQgd3JpdGViYWNrIGVuZ2luZXMgd2hpY2ggY2FuIHdy aXRlIHRoZQo+IENSVEMgb3V0cHV0IHRvIGEgbWVtb3J5IGZyYW1lYnVmZmVyLiBBZGQgYSB3cml0 ZWJhY2sgY29ubmVjdG9yIHR5cGUgYW5kCj4gcmVsYXRlZCBzdXBwb3J0IGZ1bmN0aW9ucy4KPiAK PiBEcml2ZXJzIHNob3VsZCBpbml0aWFsaXplIGEgd3JpdGViYWNrIGNvbm5lY3RvciB3aXRoCj4g ZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdCgpIHdoaWNoIHRha2VzIGNhcmUgb2Ygc2V0dGlu ZyB1cCBhbGwgdGhlCj4gd3JpdGViYWNrLXNwZWNpZmljIGRldGFpbHMgb24gdG9wIG9mIHRoZSBu b3JtYWwgZnVuY3Rpb25hbGl0eSBvZgo+IGRybV9jb25uZWN0b3JfaW5pdCgpLgo+IAo+IFdyaXRl YmFjayBjb25uZWN0b3JzIGhhdmUgYSBXUklURUJBQ0tfRkJfSUQgcHJvcGVydHksIHVzZWQgdG8g c2V0IHRoZQo+IG91dHB1dCBmcmFtZWJ1ZmZlciwgYW5kIGEgV1JJVEVCQUNLX1BJWEVMX0ZPUk1B VFMgYmxvYiB1c2VkIHRvIGV4cG9zZSB0aGUKPiBzdXBwb3J0ZWQgd3JpdGViYWNrIGZvcm1hdHMg dG8gdXNlcnNwYWNlLgo+IAo+IFdoZW4gYSBmcmFtZWJ1ZmZlciBpcyBhdHRhY2hlZCB0byBhIHdy aXRlYmFjayBjb25uZWN0b3Igd2l0aCB0aGUKPiBXUklURUJBQ0tfRkJfSUQgcHJvcGVydHksIGl0 IGlzIHVzZWQgb25seSBvbmNlIChmb3IgdGhlIGNvbW1pdCBpbiB3aGljaAo+IGl0IHdhcyBpbmNs dWRlZCksIGFuZCB1c2Vyc3BhY2UgY2FuIG5ldmVyIHJlYWQgYmFjayB0aGUgdmFsdWUgb2YKPiBX UklURUJBQ0tfRkJfSUQuIFdSSVRFQkFDS19GQl9JRCBjYW4gb25seSBiZSBzZXQgaWYgdGhlIGNv bm5lY3RvciBpcwo+IGF0dGFjaGVkIHRvIGEgQ1JUQy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ ICAtIEFkZGVkIGRybV93cml0ZWJhY2suYyArIGRvY3VtZW50YXRpb24KPiAgLSBBZGRlZCBoZWxw ZXIgdG8gaW5pdGlhbGl6ZSB3cml0ZWJhY2sgY29ubmVjdG9yIGluIG9uZSBnbwo+ICAtIEFkZGVk IGNvcmUgY2hlY2tzCj4gIC0gU3F1YXNoZWQgaW50byBhIHNpbmdsZSBjb21taXQKPiAgLSBEcm9w cGVkIHRoZSBjbGllbnQgY2FwCj4gIC0gV3JpdGViYWNrIGZyYW1lYnVmZmVycyBhcmUgbm8gbG9u Z2VyIHBlcnNpc3RlbnQKPiAKPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ICBEYW5pZWwgVmV0dGVyOgo+ ICAtIFN1YmNsYXNzIGRybV9jb25uZWN0b3IgdG8gZHJtX3dyaXRlYmFja19jb25uZWN0b3IKPiAg LSBSZWxheCBjaGVjayB0byBhbGxvdyBDUlRDIHRvIGJlIHNldCB3aXRob3V0IGFuIEZCCj4gIC0g QWRkIHNvbWUgd3JpdGViYWNrXyBwcmVmaXhlcwo+ICAtIERyb3AgUElYRUxfRk9STUFUU19TSVpF IHByb3BlcnR5LCBhcyBpdCB3YXMgdW5uZWNlc3NhcnkKPiAgR3VzdGF2byBQYWRvdmFuOgo+ICAt IEFkZCBkcm1fd3JpdGViYWNrX2pvYiB0byBoYW5kbGUgd3JpdGViYWNrIHNpZ25hbGxpbmcgY2Vu dHJhbGx5Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiAgLSBSZWJhc2VkCj4gIC0gUmVuYW1lIFBJ WEVMX0ZPUk1BVFMgLT4gV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMKPiAKPiBDaGFuZ2VzIHNpbmNl IHY0Ogo+ICAtIEFkZGVkIGF0b21pY19jb21taXQoKSB2ZnVuYyB0byBjb25uZWN0b3IgaGVscGVy IGZ1bmNzLCBzbyB0aGF0Cj4gICAgd3JpdGViYWNrIGpvYnMgYXJlIGNvbW1pdHRlZCBmcm9tIGF0 b21pYyBoZWxwZXJzCj4gCj4gU2lnbmVkLW9mZi1ieTogQnJpYW4gU3RhcmtleSA8YnJpYW4uc3Rh cmtleUBhcm0uY29tPgo+IFtyZWJhc2VkIGFuZCBmaXhlZCBjb25mbGljdHNdCj4gU2lnbmVkLW9m Zi1ieTogTWloYWlsIEF0YW5hc3NvdiA8bWloYWlsLmF0YW5hc3NvdkBhcm0uY29tPgo+IFNpZ25l ZC1vZmYtYnk6IExpdml1IER1ZGF1IDxsaXZpdS5kdWRhdUBhcm0uY29tPgo+IFtyZWJhc2VkIGFu ZCBhZGRlZCBhdG9taWNfY29tbWl0KCkgdmZ1bmMgZm9yIHdyaXRlYmFjayBqb2JzXQo+IFNpZ25l ZC1vZmYtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiAtLS0KPiAgRG9jdW1l bnRhdGlvbi9ncHUvZHJtLWttcy5yc3QgICAgICAgICAgICB8ICAgOSArKwo+ICBkcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMgICAgICAgICAgICAgfCAxMzAgKysrKysrKysrKysrKysrKwo+ICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyAgICAgIHwgIDMwICsrKysKPiAgZHJpdmVy cy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYyAgICAgICAgICB8ICAgNCArLQo+ICBkcml2ZXJzL2dw dS9kcm0vZHJtX3dyaXRlYmFjay5jICAgICAgICAgIHwgMjU3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oICAgICAgICAgICAgICAgICB8 ICAgMyArCj4gIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCAgICAgICAgICAgICAgfCAgMTMg KysKPiAgaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggICAgICAgICAgICB8ICAxNCArKwo+ ICBpbmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oIHwgIDExICsrCj4gIGlu Y2x1ZGUvZHJtL2RybV93cml0ZWJhY2suaCAgICAgICAgICAgICAgfCAgODkgKysrKysrKysrKysK PiAgaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oICAgICAgICAgICAgICB8ICAgMSArCj4gIDEy IGZpbGVzIGNoYW5nZWQsIDU2MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV93cml0ZWJhY2suYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX3dyaXRlYmFjay5oCj4gCj4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWtt cy5yc3QKPiBpbmRleCAyZGNmNWI0MjAxNWQuLmU3NTkwZGQyZjcxZSAxMDA2NDQKPiAtLS0gYS9E b2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2Ry bS1rbXMucnN0Cj4gQEAgLTM3MCw2ICszNzAsMTUgQEAgQ29ubmVjdG9yIEZ1bmN0aW9ucyBSZWZl cmVuY2UKPiAgLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMK PiAgICAgOmV4cG9ydDoKPiAgCj4gK1dyaXRlYmFjayBDb25uZWN0b3JzCj4gKy0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV93cml0 ZWJhY2suYwo+ICsgIDpkb2M6IG92ZXJ2aWV3Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVy cy9ncHUvZHJtL2RybV93cml0ZWJhY2suYwo+ICsgIDpleHBvcnQ6Cj4gKwo+ICBFbmNvZGVyIEFi c3RyYWN0aW9uCj4gID09PT09PT09PT09PT09PT09PT0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IDUw MDkzZmY0NDc5Yi4uM2Q3MDg5NTliMjI0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC0xOCw3ICsxOCw3 IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCj4g IAkJZHJtX2VuY29kZXIubyBkcm1fbW9kZV9vYmplY3QubyBkcm1fcHJvcGVydHkubyBcCj4gIAkJ ZHJtX3BsYW5lLm8gZHJtX2NvbG9yX21nbXQubyBkcm1fcHJpbnQubyBcCj4gIAkJZHJtX2R1bWJf YnVmZmVycy5vIGRybV9tb2RlX2NvbmZpZy5vIGRybV92YmxhbmsubyBcCj4gLQkJZHJtX3N5bmNv YmoubyBkcm1fbGVhc2Uubwo+ICsJCWRybV9zeW5jb2JqLm8gZHJtX2xlYXNlLm8gZHJtX3dyaXRl YmFjay5vCj4gIAo+ICBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9kcm1fcmFu ZG9tLm8KPiAgZHJtLSQoQ09ORklHX0RSTV9WTSkgKz0gZHJtX3ZtLm8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj LmMKPiBpbmRleCA0NjczM2Q1MzQ1ODcuLjAxOWYxMzFmZThiZSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWMuYwo+IEBAIC0zMCw2ICszMCw3IEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ICAjaW5jbHVkZSA8bGludXgvc3lu Y19maWxlLmg+Cj4gIAo+ICAjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJuYWwuaCIKPiBAQCAtNjM4 LDYgKzYzOSw0NiBAQCBzdGF0aWMgdm9pZCBkcm1fYXRvbWljX2NydGNfcHJpbnRfc3RhdGUoc3Ry dWN0IGRybV9wcmludGVyICpwLAo+ICAJCWNydGMtPmZ1bmNzLT5hdG9taWNfcHJpbnRfc3RhdGUo cCwgc3RhdGUpOwo+ICB9Cj4gIAo+ICsvKioKPiArICogZHJtX2F0b21pY19jb25uZWN0b3JfY2hl Y2sgLSBjaGVjayBjb25uZWN0b3Igc3RhdGUKPiArICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRv IGNoZWNrCj4gKyAqIEBzdGF0ZTogY29ubmVjdG9yIHN0YXRlIHRvIGNoZWNrCj4gKyAqCj4gKyAq IFByb3ZpZGVzIGNvcmUgc2FuaXR5IGNoZWNrcyBmb3IgY29ubmVjdG9yIHN0YXRlLgo+ICsgKgo+ ICsgKiBSRVRVUk5TOgo+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVy ZQo+ICsgKi8KPiArc3RhdGljIGludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9jaGVjayhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJ c3RydWN0IGRybV93cml0ZWJhY2tfam9iICp3cml0ZWJhY2tfam9iID0gc3RhdGUtPndyaXRlYmFj a19qb2I7Cj4gKwo+ICsJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RF X0NPTk5FQ1RPUl9XUklURUJBQ0spIHx8Cj4gKwkgICAgIXdyaXRlYmFja19qb2IpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJaWYgKHdyaXRlYmFja19qb2ItPmZiICYmICFzdGF0ZS0+Y3J0Yykgewo+ ICsJCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIGZyYW1lYnVmZmVyIHdpdGhv dXQgQ1JUQ1xuIiwKPiArCQkJCSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKHN0YXRlLT5jcnRjKQo+ICsJ CWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHN0YXRlLT5z dGF0ZSwKPiArCQkJCQkJCQlzdGF0ZS0+Y3J0Yyk7Cj4gKwo+ICsJaWYgKHdyaXRlYmFja19qb2It PmZiICYmICFjcnRjX3N0YXRlLT5hY3RpdmUpIHsKCkNoZWNraW5nIGZvciB3cml0ZWJhY2tfam9i LT5mYiBpcyByZWR1bmRhbnQgaGVyZSBhbmQgYWJvdmUgc2luY2UgaXQncyBjaGVja2VkCmZpcnN0 IHRoaW5nIGFzIGVhcmx5IGV4aXQgY3JpdGVyaWEuCgo+ICsJCURSTV9ERUJVR19BVE9NSUMoIltD T05ORUNUT1I6JWQ6JXNdIGhhcyBmcmFtZWJ1ZmZlciwgYnV0IFtDUlRDOiVkXSBpcyBvZmZcbiIs Cj4gKwkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCj4gKwkJCQkgc3Rh dGUtPmNydGMtPmJhc2UuaWQpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICAvKioKPiAgICogZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUg LSBnZXQgcGxhbmUgc3RhdGUKPiAgICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlIG9iamVj dAo+IEBAIC0xMjMwLDYgKzEyNzEsMTIgQEAgc3RhdGljIGludCBkcm1fYXRvbWljX2Nvbm5lY3Rv cl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gIAkJfQo+ICAJCXN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb24gPSB2YWw7 Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3Bl cnR5KSB7Cj4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBkcm1fZnJhbWVidWZmZXJf bG9va3VwKGRldiwgTlVMTCwgdmFsKTsKPiArCQlpbnQgcmV0ID0gZHJtX2F0b21pY19zZXRfd3Jp dGViYWNrX2ZiX2Zvcl9jb25uZWN0b3Ioc3RhdGUsIGZiKTsKPiArCQlpZiAoZmIpCj4gKwkJCWRy bV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShmYik7Cj4gKwkJcmV0dXJuIHJldDsKPiAgCX0gZWxz ZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewo+ICAJCXJldHVy biBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKPiAgCQkJ CXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiBAQCAtMTMxMSw2ICsxMzU4LDkgQEAgZHJtX2F0b21p Y19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Cj4gIAkJKnZhbCA9IHN0YXRlLT5zY2FsaW5nX21vZGU7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KSB7Cj4gIAkJKnZhbCA9 IHN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb247Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5KSB7Cj4gKwkJLyogV3JpdGViYWNrIGZyYW1l YnVmZmVyIGlzIG9uZS1zaG90LCB3cml0ZSBhbmQgZm9yZ2V0ICovCj4gKwkJKnZhbCA9IDA7Cj4g IAl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkpIHsKPiAg CQlyZXR1cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShjb25uZWN0b3Is Cj4gIAkJCQlzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gQEAgLTE1MTgsNiArMTU2OCw3NSBAQCBk cm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUsCj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRj X2Zvcl9jb25uZWN0b3IpOwo+ICAKPiArLyoKPiArICogZHJtX2F0b21pY19nZXRfd3JpdGViYWNr X2pvYiAtIHJldHVybiBvciBhbGxvY2F0ZSBhIHdyaXRlYmFjayBqb2IKPiArICogQGNvbm5fc3Rh dGU6IENvbm5lY3RvciBzdGF0ZSB0byBnZXQgdGhlIGpvYiBmb3IKPiArICoKPiArICogV3JpdGVi YWNrIGpvYnMgaGF2ZSBhIGRpZmZlcmVudCBsaWZldGltZSB0byB0aGUgYXRvbWljIHN0YXRlIHRo ZXkgYXJlCj4gKyAqIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiB0 YWtlcyBjYXJlIG9mIGFsbG9jYXRpbmcgYSBqb2IKPiArICogaWYgdGhlcmUgaXNuJ3QgeWV0IG9u ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3RvciBzdGF0ZSwgb3RoZXJ3aXNlCj4gKyAqIGl0 IGp1c3QgcmV0dXJucyB0aGUgZXhpc3Rpbmcgam9iLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBUaGUg d3JpdGViYWNrIGpvYiBmb3IgdGhlIGdpdmVuIGNvbm5lY3RvciBzdGF0ZQo+ICsgKi8KPiArc3Rh dGljIHN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqCj4gK2RybV9hdG9taWNfZ2V0X3dyaXRlYmFj a19qb2Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gK3sKPiArCVdB Uk5fT04oY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQo+ICsJCURSTV9N T0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spOwo+ICsKPiArCWlmICghY29ubl9zdGF0ZS0+d3JpdGVi YWNrX2pvYikKPiArCQljb25uX3N0YXRlLT53cml0ZWJhY2tfam9iID0KPiArCQkJa3phbGxvYyhz aXplb2YoKmNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwly ZXR1cm4gY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRy bV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yIC0gc2V0IHdyaXRlYmFjayBm cmFtZWJ1ZmZlcgo+ICsgKiBAY29ubl9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhl IGNvbm5lY3Rvcgo+ICsgKiBAZmI6IGZiIHRvIHVzZSBmb3IgdGhlIGNvbm5lY3Rvcgo+ICsgKgo+ ICsgKiBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBmcmFtZWJ1ZmZlciBmb3IgYSB3cml0ZWJhY2sg Y29ubmVjdG9yLCB3aGljaCBvdXRwdXRzCj4gKyAqIHRvIGEgYnVmZmVyIGluc3RlYWQgb2YgYW4g YWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rvci4KPiArICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGZy YW1lYnVmZmVyIHJlcXVpcmVzIHVzIHRvIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIG5ldwo+ICsg KiBmYiBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvbGQgZmIsIGlmIHRoZXJlIGlzIG9u ZS4gVGhpcyBmdW5jdGlvbgo+ICsgKiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVzZSBkZXRhaWxzIGJl c2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlCj4gKyAqIHN0YXRlIG9iamVjdCBpdHNl bGYuCj4gKyAqCj4gKyAqIE5vdGU6IFRoZSBvbmx5IHdheSBjb25uX3N0YXRlIGNhbiBhbHJlYWR5 IGhhdmUgYW4gZmIgc2V0IGlzIGlmIHRoZSBjb21taXQKPiArICogc2V0cyB0aGUgcHJvcGVydHkg bW9yZSB0aGFuIG9uY2UuCj4gKyAqCj4gKyAqIFNlZSBhbHNvOiBkcm1fd3JpdGViYWNrX2Nvbm5l Y3Rvcl9pbml0KCkKPiArICoKPiArICogUmV0dXJuczogMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtp bnQgZHJtX2F0b21pY19zZXRfd3JpdGViYWNrX2ZiX2Zvcl9jb25uZWN0b3IoCj4gKwkJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCj4gKwkJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCj4gK3sKPiArCXN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iID0KPiArCQlk cm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwo+ICsJaWYgKCFqb2IpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYgKGpvYi0+ZmIpCj4gKwkJZHJtX2ZyYW1lYnVm ZmVyX3VucmVmZXJlbmNlKGpvYi0+ZmIpOwo+ICsJaWYgKGZiKQo+ICsJCWRybV9mcmFtZWJ1ZmZl cl9yZWZlcmVuY2UoZmIpOwo+ICsJam9iLT5mYiA9IGZiOwo+ICsKPiArCWlmIChmYikKPiArCQlE Uk1fREVCVUdfQVRPTUlDKCJTZXQgW0ZCOiVkXSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAo+ ICsJCQkJIGZiLT5iYXNlLmlkLCBjb25uX3N0YXRlKTsKPiArCWVsc2UKPiArCQlEUk1fREVCVUdf QVRPTUlDKCJTZXQgW05PRkJdIGZvciBjb25uZWN0b3Igc3RhdGUgJXBcbiIsCj4gKwkJCQkgY29u bl9zdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRv bWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3Rvcik7Cj4gKwo+ICAvKioKPiAgICogZHJt X2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAtIGFkZCBjb25uZWN0b3JzIGZvciBjcnRj Cj4gICAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCj4gQEAgLTE2MzYsNiArMTc1NSw4IEBAIGludCBk cm1fYXRvbWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMg KmNydGM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlOwo+ICAJaW50IGksIHJldCA9IDA7Cj4gIAo+ICAJRFJNX0RFQlVHX0FUT01JQygiY2hl Y2tpbmcgJXBcbiIsIHN0YXRlKTsKPiBAQCAtMTY1OCw2ICsxNzc5LDE1IEBAIGludCBkcm1fYXRv bWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJCX0KPiAg CX0KPiAgCj4gKwlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uLCBj b25uX3N0YXRlLCBpKSB7Cj4gKwkJcmV0ID0gZHJtX2F0b21pY19jb25uZWN0b3JfY2hlY2soY29u biwgY29ubl9zdGF0ZSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJb Q09OTkVDVE9SOiVkOiVzXSBhdG9taWMgY29yZSBjaGVjayBmYWlsZWRcbiIsCj4gKwkJCQkJIGNv bm4tPmJhc2UuaWQsIGNvbm4tPm5hbWUpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0K PiArCj4gIAlpZiAoY29uZmlnLT5mdW5jcy0+YXRvbWljX2NoZWNrKQo+ICAJCXJldCA9IGNvbmZp Zy0+ZnVuY3MtPmF0b21pY19jaGVjayhzdGF0ZS0+ZGV2LCBzdGF0ZSk7Cj4gIAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljX2hlbHBlci5jCj4gaW5kZXggYWUzY2JmZTllMDFjLi4xMmI5MTA3NTVkODQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+IEBAIC0zMCw2ICszMCw3IEBA Cj4gICNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ICAjaW5jbHVkZSA8bGludXgvZG1hLWZl bmNlLmg+Cj4gIAo+ICAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyX2ludGVybmFsLmgiCj4gQEAg LTExNTksNiArMTE2MCwyNyBAQCB2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0 X2Rpc2FibGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIH0KPiAgRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyk7Cj4gIAo+ICtzdGF0aWMg dm9pZCBjb21taXRfd3JpdGViYWNrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRl Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShvbGRf c3RhdGUsIGNvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpIHsKPiArCQljb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+ICsKPiArCQlmdW5jcyA9IGNvbm5l Y3Rvci0+aGVscGVyX3ByaXZhdGU7Cj4gKwo+ICsJCWlmIChuZXdfY29ubl9zdGF0ZS0+d3JpdGVi YWNrX2pvYiAmJgo+ICsJCSAgICBuZXdfY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYi0+ZmIpIHsK PiArCQkJV0FSTl9PTihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9Cj4gKwkJCQlEUk1fTU9E RV9DT05ORUNUT1JfV1JJVEVCQUNLKTsKPiArCQkJZnVuY3MtPmF0b21pY19jb21taXQoY29ubmVj dG9yLAo+ICsJCQkJCSAgICAgbmV3X2Nvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpOwo+ICsJCX0K PiArCX0KPiArfQo+ICsKPiAgLyoqCj4gICAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rl c2V0X2VuYWJsZXMgLSBtb2Rlc2V0IGNvbW1pdCB0byBlbmFibGUgb3V0cHV0cwo+ICAgKiBAZGV2 OiBEUk0gZGV2aWNlCj4gQEAgLTEyMzgsNiArMTI2MCw4IEBAIHZvaWQgZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAKPiAg CQlkcm1fYnJpZGdlX2VuYWJsZShlbmNvZGVyLT5icmlkZ2UpOwo+ICAJfQo+ICsKPiArCWNvbW1p dF93cml0ZWJhY2tzKGRldiwgb2xkX3N0YXRlKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9h dG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMpOwo+ICAKPiBAQCAtMzYyNyw2ICsz NjUxLDkgQEAgX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlpZiAoc3RhdGUtPmNydGMpCj4gIAkJ ZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKPiAgCXN0YXRlLT5jb21taXQgPSBOVUxMOwo+ ICsKPiArCS8qIERvbid0IGNvcHkgb3ZlciBhIHdyaXRlYmFjayBqb2IsIHRoZXkgYXJlIHVzZWQg b25seSBvbmNlICovCj4gKwlzdGF0ZS0+d3JpdGViYWNrX2pvYiA9IE5VTEw7Cj4gIH0KPiAgRVhQ T1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUp Owo+ICAKPiBAQCAtMzc1Niw2ICszNzgzLDkgQEAgX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gIAo+ ICAJaWYgKHN0YXRlLT5jb21taXQpCj4gIAkJZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29t bWl0KTsKPiArCj4gKwlpZiAoc3RhdGUtPndyaXRlYmFja19qb2IpCj4gKwkJZHJtX3dyaXRlYmFj a19jbGVhbnVwX2pvYihzdGF0ZS0+d3JpdGViYWNrX2pvYik7Cj4gIH0KPiAgRVhQT1JUX1NZTUJP TChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2Nvbm5lY3Rvci5jCj4gaW5kZXggMTZiOWMzODEwYWYyLi5hZGQ0N2YwNmFlNzAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMKPiBAQCAtODcsNiArODcsNyBAQCBzdGF0aWMgc3Ry dWN0IGRybV9jb25uX3Byb3BfZW51bV9saXN0IGRybV9jb25uZWN0b3JfZW51bV9saXN0W10gPSB7 Cj4gIAl7IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMLCAiVmlydHVhbCIgfSwKPiAgCXsgRFJN X01PREVfQ09OTkVDVE9SX0RTSSwgIkRTSSIgfSwKPiAgCXsgRFJNX01PREVfQ09OTkVDVE9SX0RQ SSwgIkRQSSIgfSwKPiArCXsgRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSywgIldyaXRlYmFj ayIgfSwKPiAgfTsKPiAgCj4gIHZvaWQgZHJtX2Nvbm5lY3Rvcl9pZGFfaW5pdCh2b2lkKQo+IEBA IC0yNDksNyArMjUwLDggQEAgaW50IGRybV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICAJY29uZmlnLT5udW1fY29ubmVjdG9yKys7Cj4gIAlzcGluX3VubG9ja19pcnEo JmNvbmZpZy0+Y29ubmVjdG9yX2xpc3RfbG9jayk7Cj4gIAo+IC0JaWYgKGNvbm5lY3Rvcl90eXBl ICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKQo+ICsJaWYgKGNvbm5lY3Rvcl90eXBlICE9 IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMICYmCj4gKwkgICAgY29ubmVjdG9yX3R5cGUgIT0g RFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSykKPiAgCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9w ZXJ0eSgmY29ubmVjdG9yLT5iYXNlLAo+ICAJCQkJCSAgICAgIGNvbmZpZy0+ZWRpZF9wcm9wZXJ0 eSwKPiAgCQkJCQkgICAgICAwKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV93 cml0ZWJhY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fd3JpdGViYWNrLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGE2MWY5MjljYmMzCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fd3JpdGViYWNrLmMKPiBAQCAtMCwwICsx LDI1NyBAQAo+ICsvKgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogQnJpYW4gU3RhcmtleSA8YnJpYW4uc3Rhcmtl eUBhcm0uY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQg aXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFt IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9t b2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Byb3BlcnR5Lmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArCj4gKy8qKgo+ICsgKiBET0M6IG92ZXJ2aWV3Cj4gKyAqCj4gKyAqIFdyaXRlYmFjayBj b25uZWN0b3JzIGFyZSB1c2VkIHRvIGV4cG9zZSBoYXJkd2FyZSB3aGljaCBjYW4gd3JpdGUgdGhl IG91dHB1dAo+ICsgKiBmcm9tIGEgQ1JUQyB0byBhIG1lbW9yeSBidWZmZXIuIFRoZXkgYXJlIHVz ZWQgYW5kIGFjdCBzaW1pbGFybHkgdG8gb3RoZXIKPiArICogdHlwZXMgb2YgY29ubmVjdG9ycywg d2l0aCBzb21lIGltcG9ydGFudCBkaWZmZXJlbmNlczoKPiArICogIC0gV3JpdGViYWNrIGNvbm5l Y3RvcnMgZG9uJ3QgcHJvdmlkZSBhIHdheSB0byBvdXRwdXQgdmlzdWFsbHkgdG8gdGhlIHVzZXIu Cj4gKyAqICAtIFdyaXRlYmFjayBjb25uZWN0b3JzIHNob3VsZCBhbHdheXMgcmVwb3J0IGFzICJk aXNjb25uZWN0ZWQiIChzbyB0aGF0Cj4gKyAqICAgIGNsaWVudHMgd2hpY2ggZG9uJ3QgdW5kZXJz dGFuZCB0aGVtIHdpbGwgaWdub3JlIHRoZW0pLgoKSGF2ZSB3ZSBjb25zaWRlcmVkIGhpZGluZyB3 cml0ZWJhY2sgYmVoaW5kIGEgY2xpZW50IGNhcCBpbnN0ZWFkPwoKPiArICogIC0gV3JpdGViYWNr IGNvbm5lY3RvcnMgZG9uJ3QgaGF2ZSBFRElELgo+ICsgKgo+ICsgKiBBIGZyYW1lYnVmZmVyIG1h eSBvbmx5IGJlIGF0dGFjaGVkIHRvIGEgd3JpdGViYWNrIGNvbm5lY3RvciB3aGVuIHRoZQo+ICsg KiBjb25uZWN0b3IgaXMgYXR0YWNoZWQgdG8gYSBDUlRDLiBUaGUgV1JJVEVCQUNLX0ZCX0lEIHBy b3BlcnR5IHdoaWNoIHNldHMgdGhlCj4gKyAqIGZyYW1lYnVmZmVyIGFwcGxpZXMgb25seSB0byBh IHNpbmdsZSBjb21taXQgKHNlZSBiZWxvdykuIEEgZnJhbWVidWZmZXIgbWF5Cj4gKyAqIG5vdCBi ZSBhdHRhY2hlZCB3aGlsZSB0aGUgQ1JUQyBpcyBvZmYuCj4gKyAqCj4gKyAqIFdyaXRlYmFjayBj b25uZWN0b3JzIGhhdmUgc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMsIHdoaWNoIHVzZXJzcGFj ZQo+ICsgKiBjYW4gdXNlIHRvIHF1ZXJ5IGFuZCBjb250cm9sIHRoZW06Cj4gKyAqCj4gKyAqICAi V1JJVEVCQUNLX0ZCX0lEIjoKPiArICoJV3JpdGUtb25seSBvYmplY3QgcHJvcGVydHkgc3Rvcmlu ZyBhIERSTV9NT0RFX09CSkVDVF9GQjogaXQgc3RvcmVzIHRoZQo+ICsgKglmcmFtZWJ1ZmZlciB0 byBiZSB3cml0dGVuIGJ5IHRoZSB3cml0ZWJhY2sgY29ubmVjdG9yLiBUaGlzIHByb3BlcnR5IGlz Cj4gKyAqCXNpbWlsYXIgdG8gdGhlIEZCX0lEIHByb3BlcnR5IG9uIHBsYW5lcywgYnV0IHdpbGwg YWx3YXlzIHJlYWQgYXMgemVybwo+ICsgKglhbmQgaXMgbm90IHByZXNlcnZlZCBhY3Jvc3MgY29t bWl0cy4KPiArICoJVXNlcnNwYWNlIG11c3Qgc2V0IHRoaXMgcHJvcGVydHkgdG8gYW4gb3V0cHV0 IGJ1ZmZlciBldmVyeSB0aW1lIGl0Cj4gKyAqCXdpc2hlcyB0aGUgYnVmZmVyIHRvIGdldCBmaWxs ZWQuCj4gKyAqCj4gKyAqICAiV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMiOgo+ICsgKglJbW11dGFi bGUgYmxvYiBwcm9wZXJ0eSB0byBzdG9yZSB0aGUgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgdGFi bGUuIFRoZQo+ICsgKglkYXRhIGlzIGFuIGFycmF5IG9mIHUzMiBEUk1fRk9STUFUXyogZm91cmNj IHZhbHVlcy4KPiArICoJVXNlcnNwYWNlIGNhbiB1c2UgdGhpcyBibG9iIHRvIGZpbmQgb3V0IHdo YXQgcGl4ZWwgZm9ybWF0cyBhcmUgc3VwcG9ydGVkCj4gKyAqCWJ5IHRoZSBjb25uZWN0b3IncyB3 cml0ZWJhY2sgZW5naW5lLgo+ICsgKi8KPiArCj4gK3N0YXRpYyBib29sIGNyZWF0ZV93cml0ZWJh Y2tfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wOwo+ICsKPiArCWlmICghZGV2LT5tb2RlX2NvbmZpZy53cml0ZWJhY2tf ZmJfaWRfcHJvcGVydHkpIHsKClNvbWV3aGF0IGFuIGFzaWRlLCBidXQgd2Ugc2hvdWxkIHByb2Jh Ymx5IGNvbWUgdXAgd2l0aCBtb3JlIGZvcm1hbCBydWxlcyBvbgp3aGVyZSB0byBzdGljayBwcm9w ZXJ0aWVzLiBXZSBoYXZlIHNvbWUgaW4gZHJtX2Nvbm5lY3Rvciwgd2hpY2ggSSBpbnRlcnByZXQg YXMKImNvbm5lY3Rvci1vbmx5IHByb3BlcnRpZXMiLCBidXQgd2UgYWxzbyBoYXZlIGEgYnVuY2gg aW4gbW9kZV9jb25maWcuCgpGb3Igb3B0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGdlbmVy YWxseSBvbmx5IGFwcGx5IHRvIG9uZSBjb25uZWN0b3Igb24gYQpzeXN0ZW0sIEknZCBiZSBpbmNs aW5lZCB0byBwdXQgaXQgaW4gY29ubmVjdG9yLiAKCj4gKwkJcHJvcCA9IGRybV9wcm9wZXJ0eV9j cmVhdGVfb2JqZWN0KGRldiwgRFJNX01PREVfUFJPUF9BVE9NSUMsCj4gKwkJCQkJCSAgIldSSVRF QkFDS19GQl9JRCIsCj4gKwkJCQkJCSAgRFJNX01PREVfT0JKRUNUX0ZCKTsKPiArCQlpZiAoIXBy b3ApCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlkZXYtPm1vZGVfY29uZmlnLndyaXRlYmFja19m Yl9pZF9wcm9wZXJ0eSA9IHByb3A7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFkZXYtPm1vZGVfY29uZmln LndyaXRlYmFja19waXhlbF9mb3JtYXRzX3Byb3BlcnR5KSB7Cj4gKwkJcHJvcCA9IGRybV9wcm9w ZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX0JMT0IgfCBEUk1fTU9ERV9QUk9QX0lNTVVU QUJMRSwKPiArCQkJCQkgICAiV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMiLCAwKTsKCkRvZXMgaXQg bWFrZSBzZW5zZSB0byBleHBvc2UgdGhlIGZvcm1hdHMgaWYgdS9zIGRvZXNuJ3Qgc3VwcG9ydCBh dG9taWMgYW5kIGNhbid0CnVzZSB3cml0ZWJhY2s/IFBlcmhhcHMgdGhpcyBzaG91bGQgYWxzbyBi ZSBEUk1fTU9ERV9QUk9QX0FUT01JQy4KCgo+ICsJCWlmICghcHJvcCkKPiArCQkJcmV0dXJuIGZh bHNlOwo+ICsJCWRldi0+bW9kZV9jb25maWcud3JpdGViYWNrX3BpeGVsX2Zvcm1hdHNfcHJvcGVy dHkgPSBwcm9wOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGRybV93cml0ZWJhY2tfZW5jb2Rlcl9mdW5j cyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKPiArfTsKPiArCj4gKy8q Kgo+ICsgKiBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9pbml0IC0gSW5pdGlhbGl6ZSBhIHdyaXRl YmFjayBjb25uZWN0b3IgYW5kIGl0cyBwcm9wZXJ0aWVzCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UK PiArICogQHdiX2Nvbm5lY3RvcjogV3JpdGViYWNrIGNvbm5lY3RvciB0byBpbml0aWFsaXplCj4g KyAqIEBjb25fZnVuY3M6IENvbm5lY3RvciBmdW5jcyB2dGFibGUKPiArICogQGVuY19oZWxwZXJf ZnVuY3M6IEVuY29kZXIgaGVscGVyIGZ1bmNzIHZ0YWJsZSB0byBiZSB1c2VkIGJ5IHRoZSBpbnRl cm5hbCBlbmNvZGVyCj4gKyAqIEBmb3JtYXRzOiBBcnJheSBvZiBzdXBwb3J0ZWQgcGl4ZWwgZm9y bWF0cyBmb3IgdGhlIHdyaXRlYmFjayBlbmdpbmUKPiArICogQG5fZm9ybWF0czogTGVuZ3RoIG9m IHRoZSBmb3JtYXRzIGFycmF5Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUg d3JpdGViYWNrLWNvbm5lY3Rvci1zcGVjaWZpYyBwcm9wZXJ0aWVzIGlmIHRoZXkKPiArICogaGF2 ZSBub3QgYmVlbiBhbHJlYWR5IGNyZWF0ZWQsIGluaXRpYWxpemVzIHRoZSBjb25uZWN0b3IgYXMK PiArICogdHlwZSBEUk1fTU9ERV9DT05ORUNUT1JfV1JJVEVCQUNLLCBhbmQgY29ycmVjdGx5IGlu aXRpYWxpemVzIHRoZSBwcm9wZXJ0eQo+ICsgKiB2YWx1ZXMuIEl0IHdpbGwgYWxzbyBjcmVhdGUg YW4gaW50ZXJuYWwgZW5jb2RlciBhc3NvY2lhdGVkIHdpdGggdGhlCj4gKyAqIGRybV93cml0ZWJh Y2tfY29ubmVjdG9yIGFuZCBzZXQgaXQgdG8gdXNlIHRoZSBAZW5jX2hlbHBlcl9mdW5jcyB2dGFi bGUgZm9yCj4gKyAqIHRoZSBlbmNvZGVyIGhlbHBlci4KPiArICoKPiArICogRHJpdmVycyBzaG91 bGQgYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgZHJtX2Nvbm5lY3Rvcl9pbml0 KCkgdG8KPiArICogc2V0IHVwIHdyaXRlYmFjayBjb25uZWN0b3JzLgo+ICsgKgo+ICsgKiBSZXR1 cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQo+ICsgKi8KPiAraW50 IGRybV93cml0ZWJhY2tfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAr CQkJCSBzdHJ1Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3IgKndiX2Nvbm5lY3RvciwKPiArCQkJ CSBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqY29uX2Z1bmNzLAo+ICsJCQkJIGNv bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY19oZWxwZXJfZnVuY3MsCj4g KwkJCQkgY29uc3QgdTMyICpmb3JtYXRzLCBpbnQgbl9mb3JtYXRzKQo+ICt7Cj4gKwlpbnQgcmV0 Owo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iOwo+ICsJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciA9ICZ3Yl9jb25uZWN0b3ItPmJhc2U7Cj4gKwlzdHJ1Y3QgZHJtX21v ZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiArCj4gKwlpZiAoIWNyZWF0 ZV93cml0ZWJhY2tfcHJvcGVydGllcyhkZXYpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZGV2LCBuX2Zvcm1hdHMgKiBzaXplb2Yo KmZvcm1hdHMpLAo+ICsJCQkJCWZvcm1hdHMpOwo+ICsJaWYgKElTX0VSUihibG9iKSkKPiArCQly ZXR1cm4gUFRSX0VSUihibG9iKTsKPiArCj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZ3Yl9j b25uZWN0b3ItPmVuY29kZXIsIGVuY19oZWxwZXJfZnVuY3MpOwo+ICsJcmV0ID0gZHJtX2VuY29k ZXJfaW5pdChkZXYsICZ3Yl9jb25uZWN0b3ItPmVuY29kZXIsCj4gKwkJCSAgICAgICAmZHJtX3dy aXRlYmFja19lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9WSVJU VUFMLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCWNvbm5lY3Rv ci0+aW50ZXJsYWNlX2FsbG93ZWQgPSAwOwo+ICsKPiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5p dChkZXYsIGNvbm5lY3RvciwgY29uX2Z1bmNzLAo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9X UklURUJBQ0spOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGNvbm5lY3Rvcl9mYWlsOwo+ICsKPiAr CXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsCj4gKwkJ CQkJCSZ3Yl9jb25uZWN0b3ItPmVuY29kZXIpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGF0dGFj aF9mYWlsOwo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZ3Yl9jb25uZWN0b3ItPmpvYl9xdWV1ZSk7 Cj4gKwlzcGluX2xvY2tfaW5pdCgmd2JfY29ubmVjdG9yLT5qb2JfbG9jayk7Cj4gKwo+ICsJZHJt X29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwKPiArCQkJCSAgIGNvbmZp Zy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5LCAwKTsKPiArCj4gKwlkcm1fb2JqZWN0X2F0dGFj aF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLAo+ICsJCQkJICAgY29uZmlnLT53cml0ZWJhY2tf cGl4ZWxfZm9ybWF0c19wcm9wZXJ0eSwKPiArCQkJCSAgIGJsb2ItPmJhc2UuaWQpOwo+ICsJd2Jf Y29ubmVjdG9yLT5waXhlbF9mb3JtYXRzX2Jsb2JfcHRyID0gYmxvYjsKPiArCj4gKwlyZXR1cm4g MDsKPiArCj4gK2F0dGFjaF9mYWlsOgo+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rv cik7Cj4gK2Nvbm5lY3Rvcl9mYWlsOgo+ICsJZHJtX2VuY29kZXJfY2xlYW51cCgmd2JfY29ubmVj dG9yLT5lbmNvZGVyKTsKPiArZmFpbDoKPiArCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9i KGJsb2IpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV93cml0ZWJh Y2tfY29ubmVjdG9yX2luaXQpOwo+ICsKPiArLyoqCj4gKyAqIGRybV93cml0ZWJhY2tfcXVldWVf am9iIC0gUXVldWUgYSB3cml0ZWJhY2sgam9iIGZvciBsYXRlciBzaWduYWxsaW5nCj4gKyAqIEB3 Yl9jb25uZWN0b3I6IFRoZSB3cml0ZWJhY2sgY29ubmVjdG9yIHRvIHF1ZXVlIGEgam9iIG9uCj4g KyAqIEBqb2I6IFRoZSBqb2IgdG8gcXVldWUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBhZGRz IGEgam9iIHRvIHRoZSBqb2JfcXVldWUgZm9yIGEgd3JpdGViYWNrIGNvbm5lY3Rvci4gSXQKPiAr ICogc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgdGhlIHdyaXRlYmFj ayBqb2IsIGFuZCBzbyBhbnkgb3RoZXIKPiArICogcmVmZXJlbmNlcyB0byB0aGUgam9iIG11c3Qg YmUgY2xlYXJlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCj4gKyAqCj4gKyAqIERyaXZl cnMgbXVzdCBlbnN1cmUgdGhhdCBmb3IgYSBnaXZlbiB3cml0ZWJhY2sgY29ubmVjdG9yLCBqb2Jz IGFyZSBxdWV1ZWQgaW4KPiArICogZXhhY3RseSB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IHdpbGwg YmUgY29tcGxldGVkIGJ5IHRoZSBoYXJkd2FyZSAoYW5kCj4gKyAqIHNpZ25hbGVkIHZpYSBkcm1f d3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKS4KPiArICoKPiArICogRm9yIGV2ZXJ5IGNhbGwg dG8gZHJtX3dyaXRlYmFja19xdWV1ZV9qb2IoKSB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGNh bGwgdG8KPiArICogZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbigpCj4gKyAqCj4gKyAq IFNlZSBhbHNvOiBkcm1fd3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKCkKPiArICovCj4gK3Zv aWQgZHJtX3dyaXRlYmFja19xdWV1ZV9qb2Ioc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9y ICp3Yl9jb25uZWN0b3IsCj4gKwkJCSAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2Ip Cj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JndiX2Nvbm5lY3Rvci0+am9iX2xvY2ssIGZsYWdzKTsKPiArCWxpc3RfYWRkX3RhaWwoJmpvYi0+ bGlzdF9lbnRyeSwgJndiX2Nvbm5lY3Rvci0+am9iX3F1ZXVlKTsKPiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJndiX2Nvbm5lY3Rvci0+am9iX2xvY2ssIGZsYWdzKTsKPiArfQo+ICtFWFBPUlRf U1lNQk9MKGRybV93cml0ZWJhY2tfcXVldWVfam9iKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fd3Jp dGViYWNrX2NsZWFudXBfam9iIC0gQ2xlYW51cCBhbmQgZnJlZSBhIHdyaXRlYmFjayBqb2IKPiAr ICogQGpvYjogVGhlIHdyaXRlYmFjayBqb2IgdG8gZnJlZQo+ICsgKgo+ICsgKiBEcm9wcyBhbnkg cmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSB3cml0ZWJhY2sgam9iLCBhbmQgZnJlZXMgdGhlIHN0cnVj dHVyZS4KPiArICovCj4gK3ZvaWQgZHJtX3dyaXRlYmFja19jbGVhbnVwX2pvYihzdHJ1Y3QgZHJt X3dyaXRlYmFja19qb2IgKmpvYikKPiArewo+ICsJaWYgKCFqb2IpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWlmIChqb2ItPmZiKQo+ICsJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShqb2ItPmZi KTsKPiArCWtmcmVlKGpvYik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fd3JpdGViYWNrX2Ns ZWFudXBfam9iKTsKPiArCj4gKy8qCj4gKyAqIEBjbGVhbnVwX3dvcms6IGRlZmVycmVkIGNsZWFu dXAgb2YgYSB3cml0ZWJhY2sgam9iCj4gKyAqCj4gKyAqIFRoZSBqb2IgY2Fubm90IGJlIGNsZWFu ZWQgdXAgZGlyZWN0bHkgaW4gZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbiwKPiArICog YmVjYXVzZSBpdCBtYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiBEcm9wcGluZyB0 aGUgZnJhbWVidWZmZXIKPiArICogcmVmZXJlbmNlIGNhbiBzbGVlcCwgYW5kIHNvIHRoZSBjbGVh bnVwIGlzIGRlZmVycmVkIHRvIGEgd29ya3F1ZXVlLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgY2xl YW51cF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IGRybV93 cml0ZWJhY2tfam9iICpqb2IgPSBjb250YWluZXJfb2Yod29yaywKPiArCQkJCQkJICAgICBzdHJ1 Y3QgZHJtX3dyaXRlYmFja19qb2IsCj4gKwkJCQkJCSAgICAgY2xlYW51cF93b3JrKTsKPiArCWRy bV93cml0ZWJhY2tfY2xlYW51cF9qb2Ioam9iKTsKClRJTCB0aGF0IHlvdSBjYW4gZnJlZSB3b3Jr IHdoaWxlIHVzaW5nIGl0LgoKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRybV93cml0ZWJhY2tfc2ln bmFsX2NvbXBsZXRpb24gLSBTaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgYSB3cml0ZWJhY2sgam9i Cj4gKyAqIEB3Yl9jb25uZWN0b3I6IFRoZSB3cml0ZWJhY2sgY29ubmVjdG9yIHdob3NlIGpvYiBp cyBjb21wbGV0ZQo+ICsgKgo+ICsgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgdG8gc2lnbmFs IHRoZSBjb21wbGV0aW9uIG9mIGEgcHJldmlvdXNseSBxdWV1ZWQKPiArICogd3JpdGViYWNrIGpv Yi4gSXQgc2hvdWxkIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBoYXJk d2FyZQo+ICsgKiBoYXMgZmluaXNoZWQgd3JpdGluZywgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSBp bnRlcnJ1cHQgY29udGV4dC4KPiArICogSXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5 IHRvIGVuc3VyZSB0aGF0IGZvciBhIGdpdmVuIGNvbm5lY3RvciwgdGhlCj4gKyAqIGhhcmR3YXJl IGNvbXBsZXRlcyB3cml0ZWJhY2sgam9icyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBx dWV1ZWQuCj4gKyAqCj4gKyAqIFVubGVzcyB0aGUgZHJpdmVyIGlzIGhvbGRpbmcgaXRzIG93biBy ZWZlcmVuY2UgdG8gdGhlIGZyYW1lYnVmZmVyLCBpdCBtdXN0Cj4gKyAqIG5vdCBiZSBhY2Nlc3Nl ZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCj4gKyAqCj4gKyAqIFNlZSBhbHNvOiBkcm1f d3JpdGViYWNrX3F1ZXVlX2pvYigpCj4gKyAqLwo+ICt2b2lkCj4gK2RybV93cml0ZWJhY2tfc2ln bmFsX2NvbXBsZXRpb24oc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yICp3Yl9jb25uZWN0 b3IpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlzdHJ1Y3QgZHJtX3dyaXRlYmFj a19qb2IgKmpvYjsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2JfY29ubmVjdG9yLT5qb2Jf bG9jaywgZmxhZ3MpOwo+ICsJam9iID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZ3Yl9jb25u ZWN0b3ItPmpvYl9xdWV1ZSwKPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2Is Cj4gKwkJCQkgICAgICAgbGlzdF9lbnRyeSk7Cj4gKwlpZiAoam9iKQo+ICsJCWxpc3RfZGVsKCZq b2ItPmxpc3RfZW50cnkpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2JfY29ubmVjdG9y LT5qb2JfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChXQVJOX09OKCFqb2IpKQo+ICsJCXJldHVy bjsKPiArCj4gKwlJTklUX1dPUksoJmpvYi0+Y2xlYW51cF93b3JrLCBjbGVhbnVwX3dvcmspOwo+ ICsJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmpvYi0+Y2xlYW51cF93b3JrKTsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MKGRybV93cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRpb24pOwo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmggYi9pbmNsdWRlL2RybS9kcm1fYXRvbWlj LmgKPiBpbmRleCBjZjEzODQyYTZkYmQuLmQ3YjAyNjNjYzVjZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fYXRvbWljLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmgKPiBA QCAtNTk0LDYgKzU5NCw5IEBAIHZvaWQgZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ICBpbnQgX19tdXN0X2NoZWNrCj4g IGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSwKPiAgCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiAraW50 IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKAo+ICsJCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ICsJCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiKTsKPiAgaW50IF9fbXVzdF9jaGVjawo+ICBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9j b25uZWN0b3JzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAgCQkJCSAgIHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0 b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+IGluZGV4IDc1OGExNzZlN2I1Ny4u ODcwMWViY2M2OGIzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+ ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+IEBAIC00MjUsNiArNDI1LDE5IEBA IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlIHsKPiAgCSAqIHByb3RlY3Rpb24uIFRoaXMgaXMg bW9zdCBjb21tb25seSB1c2VkIGZvciBIRENQLgo+ICAJICovCj4gIAl1bnNpZ25lZCBpbnQgY29u dGVudF9wcm90ZWN0aW9uOwo+ICsKPiArCS8qKgo+ICsJICogQHdyaXRlYmFja19qb2I6IFdyaXRl YmFjayBqb2IgZm9yIHdyaXRlYmFjayBjb25uZWN0b3JzCj4gKwkgKgo+ICsJICogSG9sZHMgdGhl IGZyYW1lYnVmZmVyIGZvciBhIHdyaXRlYmFjayBjb25uZWN0b3IuIEFzIHRoZSB3cml0ZWJhY2sK PiArCSAqIGNvbXBsZXRpb24gbWF5IGJlIGFzeW5jaHJvbm91cyB0byB0aGUgbm9ybWFsIGNvbW1p dCBjeWNsZSwgdGhlCj4gKwkgKiB3cml0ZWJhY2sgam9iIGxpZmV0aW1lIGlzIG1hbmFnZWQgc2Vw YXJhdGVseSBmcm9tIHRoZSBub3JtYWwgYXRvbWljCj4gKwkgKiBzdGF0ZSBieSB0aGlzIG9iamVj dC4KPiArCSAqCj4gKwkgKiBTZWUgYWxzbzogZHJtX3dyaXRlYmFja19xdWV1ZV9qb2IoKSBhbmQK PiArCSAqIGRybV93cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRpb24oKQo+ICsJICovCj4gKwlzdHJ1 Y3QgZHJtX3dyaXRlYmFja19qb2IgKndyaXRlYmFja19qb2I7Cj4gIH07Cj4gIAo+ICAvKioKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggYi9pbmNsdWRlL2RybS9k cm1fbW9kZV9jb25maWcuaAo+IGluZGV4IDc1NjlmMjJmZmVmNi4uYzAxMmUxMTQ4ZWMwIDEwMDY0 NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCj4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX21vZGVfY29uZmlnLmgKPiBAQCAtNzc5LDYgKzc3OSwyMCBAQCBzdHJ1Y3QgZHJtX21v ZGVfY29uZmlnIHsKPiAgCSAqLwo+ICAJc3RydWN0IGRybV9wcm9wZXJ0eSAqcGFuZWxfb3JpZW50 YXRpb25fcHJvcGVydHk7Cj4gIAo+ICsJLyoqCj4gKwkgKiBAd3JpdGViYWNrX2ZiX2lkX3Byb3Bl cnR5OiBQcm9wZXJ0eSBmb3Igd3JpdGViYWNrIGNvbm5lY3RvcnMsIHN0b3JpbmcKPiArCSAqIHRo ZSBJRCBvZiB0aGUgb3V0cHV0IGZyYW1lYnVmZmVyLgo+ICsJICogU2VlIGFsc286IGRybV93cml0 ZWJhY2tfY29ubmVjdG9yX2luaXQoKQo+ICsJICovCj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp3 cml0ZWJhY2tfZmJfaWRfcHJvcGVydHk7Cj4gKwkvKioKPiArCSAqIEB3cml0ZWJhY2tfcGl4ZWxf Zm9ybWF0c19wcm9wZXJ0eTogUHJvcGVydHkgZm9yIHdyaXRlYmFjayBjb25uZWN0b3JzLAo+ICsJ ICogc3RvcmluZyBhbiBhcnJheSBvZiB0aGUgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgZm9yIHRo ZSB3cml0ZWJhY2sKPiArCSAqIGVuZ2luZSAocmVhZC1vbmx5KS4KPiArCSAqIFNlZSBhbHNvOiBk cm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9pbml0KCkKPiArCSAqLwo+ICsJc3RydWN0IGRybV9wcm9w ZXJ0eSAqd3JpdGViYWNrX3BpeGVsX2Zvcm1hdHNfcHJvcGVydHk7Cj4gKwo+ICAJLyogZHVtYiBp b2N0bCBwYXJhbWV0ZXJzICovCj4gIAl1aW50MzJfdCBwcmVmZXJyZWRfZGVwdGgsIHByZWZlcl9z aGFkb3c7Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJf dnRhYmxlcy5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+IGlu ZGV4IDNlNzZjYTgwNWIwZi4uOTdkM2E4MTBiYzg1IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJt L2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fbW9k ZXNldF9oZWxwZXJfdnRhYmxlcy5oCj4gQEAgLTk3NCw2ICs5NzQsMTcgQEAgc3RydWN0IGRybV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzIHsKPiAgCSAqLwo+ICAJaW50ICgqYXRvbWljX2NoZWNrKShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJCQkgICAgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKnN0YXRlKTsKPiArCj4gKwkvKioKPiArCSAqIEBhdG9taWNfY29tbWl0Ogo+ ICsJICoKPiArCSAqIEZvciB3cml0ZS1iYWNrIGNvbm5lY3RvcnMsIHRoaXMgaXMgdGhlIHBvaW50 IHRvIGNvbW1pdCB0aGUgd3JpdGUtCj4gKwkgKiBiYWNrIGpvYiB0byBody4KPiArCSAqCj4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIGF0b21pYyBtb2Rlc2V0IGhlbHBlcnMuCj4g KwkgKi8KPiArCXZvaWQgKCphdG9taWNfY29tbWl0KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKndyaXRlYmFja19q b2IpOwo+ICB9Owo+ICAKPiAgLyoqCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV93cml0 ZWJhY2suaCBiL2luY2x1ZGUvZHJtL2RybV93cml0ZWJhY2suaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wYmI5NWZkNDkwN2QKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvaW5jbHVkZS9kcm0vZHJtX3dyaXRlYmFjay5oCj4gQEAgLTAsMCArMSw4OSBAQAo+ICsv Kgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gKyAqIEF1dGhvcjogQnJpYW4gU3RhcmtleSA8YnJpYW4uc3RhcmtleUBhcm0uY29tPgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQg dG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBG b3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3Qg dG8gdGhlIHRlcm1zCj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfX0RSTV9XUklURUJBQ0tfSF9fCj4gKyNkZWZpbmUgX19EUk1fV1JJVEVCQUNLX0hfXwo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZW5j b2Rlci5oPgo+ICsjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJt X3dyaXRlYmFja19jb25uZWN0b3Igewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKPiAr Cj4gKwkvKioKPiArCSAqIEBlbmNvZGVyOiBJbnRlcm5hbCBlbmNvZGVyIHVzZWQgYnkgdGhlIGNv bm5lY3RvciB0byBmdWxmaWxsCj4gKwkgKiB0aGUgRFJNIGZyYW1ld29yayByZXF1aXJlbWVudHMu IFRoZSB1c2VycyBvZiB0aGUKPiArCSAqIEBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciBjb250cm9s IHRoZSBiZWhhdmlvdXIgb2YgdGhlIEBlbmNvZGVyCj4gKwkgKiBieSBwYXNzaW5nIHRoZSBAZW5j X2Z1bmNzIHBhcmFtZXRlciB0byBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9pbml0KCkKPiArCSAq IGZ1bmN0aW9uLgo+ICsJICovCj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKPiArCj4g KwkvKioKPiArCSAqIEBwaXhlbF9mb3JtYXRzX2Jsb2JfcHRyOgo+ICsJICoKPiArCSAqIERSTSBi bG9iIHByb3BlcnR5IGRhdGEgZm9yIHRoZSBwaXhlbCBmb3JtYXRzIGxpc3Qgb24gd3JpdGViYWNr Cj4gKwkgKiBjb25uZWN0b3JzCj4gKwkgKiBTZWUgYWxzbyBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rv cl9pbml0KCkKPiArCSAqLwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpwaXhlbF9mb3Jt YXRzX2Jsb2JfcHRyOwo+ICsKPiArCS8qKiBAam9iX2xvY2s6IFByb3RlY3RzIGpvYl9xdWV1ZSAq Lwo+ICsJc3BpbmxvY2tfdCBqb2JfbG9jazsKPiArCj4gKwkvKioKPiArCSAqIEBqb2JfcXVldWU6 Cj4gKwkgKgo+ICsJICogSG9sZHMgYSBsaXN0IG9mIGEgY29ubmVjdG9yJ3Mgd3JpdGViYWNrIGpv YnM7IHRoZSBsYXN0IGl0ZW0gaXMgdGhlCj4gKwkgKiBtb3N0IHJlY2VudC4gVGhlIGZpcnN0IGl0 ZW0gbWF5IGJlIGVpdGhlciB3YWl0aW5nIGZvciB0aGUgaGFyZHdhcmUKPiArCSAqIHRvIGJlZ2lu IHdyaXRpbmcsIG9yIGN1cnJlbnRseSBiZWluZyB3cml0dGVuLgo+ICsJICoKPiArCSAqIFNlZSBh bHNvOiBkcm1fd3JpdGViYWNrX3F1ZXVlX2pvYigpIGFuZAo+ICsJICogZHJtX3dyaXRlYmFja19z aWduYWxfY29tcGxldGlvbigpCj4gKwkgKi8KPiArCXN0cnVjdCBsaXN0X2hlYWQgam9iX3F1ZXVl Owo+ICt9Owo+ICsjZGVmaW5lIHRvX3diX2Nvbm5lY3Rvcih4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yLCBiYXNlKQo+ICsKPiArc3RydWN0IGRybV93cml0 ZWJhY2tfam9iIHsKPiArCS8qKgo+ICsJICogQGNsZWFudXBfd29yazoKPiArCSAqCj4gKwkgKiBV c2VkIHRvIGFsbG93IGRybV93cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRpb24gdG8gZGVmZXIgZHJv cHBpbmcgdGhlCj4gKwkgKiBmcmFtZWJ1ZmZlciByZWZlcmVuY2UgdG8gYSB3b3JrcXVldWUuCj4g KwkgKi8KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhbnVwX3dvcms7Cj4gKwkvKioKPiArCSAq IEBsaXN0X2VudHJ5Ogo+ICsJICoKPiArCSAqIExpc3QgaXRlbSBmb3IgdGhlIGNvbm5lY3Rvcidz IEBqb2JfcXVldWUKPiArCSAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5Owo+ICsJ LyoqCj4gKwkgKiBAZmI6Cj4gKwkgKgo+ICsJICogRnJhbWVidWZmZXIgdG8gYmUgd3JpdHRlbiB0 byBieSB0aGUgd3JpdGViYWNrIGNvbm5lY3Rvci4gRG8gbm90IHNldAo+ICsJICogZGlyZWN0bHks IHVzZSBkcm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3RvcigpCj4gKwkgKi8K PiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICt9Owo+ICsKPiAraW50IGRybV93cml0 ZWJhY2tfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSBzdHJ1 Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3IgKndiX2Nvbm5lY3RvciwKPiArCQkJCSBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqY29uX2Z1bmNzLAo+ICsJCQkJIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY19oZWxwZXJfZnVuY3MsCj4gKwkJCQkgY29u c3QgdTMyICpmb3JtYXRzLCBpbnQgbl9mb3JtYXRzKTsKPiArCj4gK3ZvaWQgZHJtX3dyaXRlYmFj a19xdWV1ZV9qb2Ioc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yICp3Yl9jb25uZWN0b3Is Cj4gKwkJCSAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IpOwo+ICsKPiArdm9pZCBk cm1fd3JpdGViYWNrX2NsZWFudXBfam9iKHN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iKTsK PiArdm9pZCBkcm1fd3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKHN0cnVjdCBkcm1fd3JpdGVi YWNrX2Nvbm5lY3RvciAqd2JfY29ubmVjdG9yKTsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+ IGluZGV4IDJjNTc1Nzk0ZmI1Mi4uN2I0N2UxODRlOTVlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv dWFwaS9kcm0vZHJtX21vZGUuaAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+ IEBAIC0zMzgsNiArMzM4LDcgQEAgZW51bSBkcm1fbW9kZV9zdWJjb25uZWN0b3Igewo+ICAjZGVm aW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMICAgICAgMTUKPiAgI2RlZmluZSBEUk1fTU9E RV9DT05ORUNUT1JfRFNJCQkxNgo+ICAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkJCTE3 Cj4gKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSwkxOAo+ICAKPiAgc3RydWN0 IGRybV9tb2RlX2dldF9jb25uZWN0b3Igewo+ICAKPiAtLSAKPiAyLjE0LjMKPiAKCi0tIApTZWFu IFBhdWwsIFNvZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBs aXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K