From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: Re: [RFC v5 02/12] drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.
Date: Thu, 05 Nov 2015 15:55:36 +0100
Message-ID: <1446735336.3894.102.camel@pengutronix.de>
References: <1446637509-6418-1-git-send-email-p.zabel@pengutronix.de>
<1446637509-6418-3-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: Daniel Kurtz
Cc: Mark Rutland , "open list:OPEN FIRMWARE AND..." , Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , dri-devel , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , Sasha Hauer
List-Id: linux-mediatek@lists.infradead.org
SGkgRGFuaWVsLAoKQW0gRG9ubmVyc3RhZywgZGVuIDA1LjExLjIwMTUsIDAyOjQ5ICswODAwIHNj
aHJpZWIgRGFuaWVsIEt1cnR6Ogo+IEhpIFBoaWxpcHAsCj4gCj4gQSBidW5jaCBvZiByZXZpZXcg
Y29tbWVudHMgaW5saW5lLgoKQSBidW5jaCBpbmRlZWQuIFRoYW5rIHlvdSBmb3IgdGhlIGZlZWRi
YWNrLgoKPiBPbiBXZWQsIE5vdiA0LCAyMDE1IGF0IDc6NDQgUE0sIFBoaWxpcHAgWmFiZWwgPHAu
emFiZWxAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOgpbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJtX2Ny
dGMgewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZTsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBpcGU7Cj4gCj4gVGhlcmUgaXMgb25lIHBpcGUgdG9vIG1hbnkgOi0pCj4gSSB0aGluayB0aGlz
IG9uZSBpcyBub3QgdXNlZC4iCj4gCj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVkOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NydGNfZGRw
X2NvbnRleHQgICAgICAgICAgICAgKmN0eDsKPiAKPiBJIHRoaW5rIHlvdSBzaG91bGQgYmUgYWJs
ZSB0byBqdXN0IGVtYmVkIHRoZSAibXRrX2NydGNfZGRwX2NvbnRleHQiCj4gcmlnaHQgaW50byBt
dGtfZHJtX2NydGMuCj4gT3IgbWF5YmUganVzdCBnZXQgcmlkIG9mIG10a19jcnRjX2RkcF9jb250
ZXh0IGNvbXBsZXRlbHkgYW5kIGp1c3QgdXNlCj4gbXRrX2RybV9jcnRjIGV2ZXl3aGVyZS4KCkkn
bGwgY29tYmluZSB0aGVtIGFuZCBnZXQgcmlkIG9mIHRoZSBzdXBlcmZsdW91cyBwaXBlLgoKWy4u
Ll0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9j
cnRjICpjcnRjKQo+ID4gK3sKWy4uLl0KPiA+ICsgICAgICAgLyogZGlzcF9tdGNtb3MgKi8KPiA+
ICsgICAgICAgcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkcm0tPmRldik7Cj4gPiArICAgICAg
IGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgICAgIERSTV9FUlJPUigiRmFpbGVkIHRvIGVu
YWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZGRw
X2Nsb2NrX29uKGN0eC0+bXV0ZXhfZGV2KTsKPiA+ICsgICAgICAgbXRrX2NydGNfZGRwX3Bvd2Vy
X29uKGN0eCk7Cj4gCj4gZ2V0X3N5bmMoKSwgY2xvY2tfb24oKSBhbmQgZGRwX3Bvd2VyX29uKCkg
cmVhbGx5IGNhbiBmYWlsOyB3ZSBhcmUganVzdAo+IGlnbm9yaW5nIGVycm9ycyBoZXJlLgo+IFNp
bmNlIHRoZXkgY2FuIGZhaWwsIHNob3VsZG4ndCB0aGV5IGJlIG1vdmVkIG91dCBvZiB0aGUgYXRv
bWljCj4gIi0+ZW5hYmxlKCkiIHBhdGggaW50byB0aGUgLT5jaGVjaygpIHBhdGggdGhhdCBpcyBh
bGxvd2VkIHRvIGZhaWw/CgpZb3Ugc3VnZ2VzdCBJIG1vdmUgdGhlbSBpbnRvIGF0b21pY19jaGVj
az8KClRvIG1lIGl0IHNvdW5kcyBsaWtlIHRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBj
aGVjaywgYnV0IGZyb20gdGhlCmRybV9tb2RlX2NvbmZpZ19mdW5jcyBhdG9taWNfY29tbWl0IGNh
bGxiYWNrLCByaWdodCBhZnRlciBjYWxsaW5nIApkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3Bs
YW5lcy4gQnV0IHRoZXJlIGlzIG5vIHByZXBhcmUgZXF1aXZhbGVudCB0bwpkcm1fYXRvbWljX2hl
bHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzLgoKPiA+ICsKPiA+ICsgICAgICAgRFJNX0lORk8o
Im1lZGlhdGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7Cj4gPiArICAgICAgIGZvciAoaSA9IDA7
IGkgPCAoY3R4LT5kZHBfY29tcF9uciAtIDEpOyBpKyspIHsKPiAKPiBuaXQ6IHRoZSBpbm5lciAo
KSBhcmUgbm90IG5lY2Vzc2FyeS4KCldpbGwgcmVtb3ZlIHRob3NlLgoKPiA+ICsgICAgICAgICAg
ICAgICBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgoY3R4LT5jb25maWdfcmVncywgY3R4LT5waXBl
LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmRkcF9j
b21wW2ldLmZ1bmNzLT5jb21wX2lkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdHgtPmRkcF9jb21wW2krMV0uZnVuY3MtPmNvbXBfaWQpOwo+ID4gKyAgICAg
ICAgICAgICAgIG10a19kZHBfYWRkX2NvbXBfdG9fbXV0ZXgoY3R4LT5tdXRleF9kZXYsIGN0eC0+
cGlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+
ZGRwX2NvbXBbaV0uZnVuY3MtPmNvbXBfaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdHgtPmRkcF9jb21wW2krMV0uZnVuY3MtPmNvbXBfaWQpOwo+ID4g
KyAgICAgICB9Cj4gCj4gRG8geW91IHJlYWxseSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBpbiB0aGUg
ZW5hYmxlIHBhdGg/ICBUaGlzIGxvb2tzCj4gbGlrZSBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUg
ZG9uZSBpbiBiaW5kKCk/Cj4gCj4gUGVyaGFwcyBhbGwgd2UgcmVhbGx5IG5lZWQgaGVyZSBpcyB0
byB3YWxrIHRoZSBwYXRoIGFuZCB3cml0ZSB0bwo+IERJU1BfUkVHX01VVEVYX0VOIGF0IHRoZSBl
bmQgb2YgbXRrX2RkcF9hZGRfY29tcF90b19tdXRleCgpLgo+IEJ5IHRoZSB3YXksIHdoZXJlIGFy
ZSB0aG9zZSBiaXRzIGNsZWFyZWQgaW4gdGhlIGRpc2FibGUgcGF0aD8KCkRpc2FibGluZyBvciBj
aGFuZ2luZyB0aGUgcGF0aCBpcyBub3QgaW1wbGVtZW50ZWQsIHRoZSBjdXJyZW50bHkgc3RhdGlj
CnNldHVwIGNvdWxkIHdlbGwgYmUgbW92ZWQgaW50byBiaW5kKCkuCgpbLi4uXQo+ID4gK3N0YXRp
YyB2b2lkIG10a19jcnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJtX2NydGMgKmNydGMpCj4g
PiArewpbLi4uXQo+ID4gKyAgICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiAK
PiBXaHkgc3luYz8KCkkgY2FuIHRoaW5rIG9mIG5vIHJlYXNvbiwgd2lsbCB1c2UgdGhlIGFzeW5j
IHZlcnNpb24gaGVyZS4KClsuLi5dCj4gPiArc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2Fi
bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19k
cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiA+ICsgICAgICAgc3RydWN0
IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsK
PiA+ICsKPiA+ICsgICAgICAgRFJNX0lORk8oIm10a19kcm1fY3J0Y19kaXNhYmxlICVkXG4iLCBj
cnRjLT5iYXNlLmlkKTsKPiA+ICsgICAgICAgaWYgKFdBUk5fT04oIW10a19jcnRjLT5lbmFibGVk
KSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICAgIG10a19jcnRj
X2RkcF9od19maW5pKG10a19jcnRjKTsKPiA+ICsgICAgICAgbXRrX2NydGMtPmRvX2ZsdXNoID0g
ZmFsc2U7Cj4gPiArICAgICAgIGlmIChzdGF0ZS0+ZXZlbnQpCj4gPiArICAgICAgICAgICAgICAg
bXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2NydGMpOwo+IAo+IEl0IGlzIGEgYml0
IGF3a3dhcmQgdG8gc2VuZCB0aGUgcGFnZSBmbGlwIGV2ZW50IGJlZm9yZSB0aGUgYWN0dWFsIHBh
Z2UKPiBmbGlwIGhhcyBjb21wbGV0ZWQgKGluIHRoaXMgY2FzZSwgZm9yIGEgcGFnZSBmbGlwIHRo
YXQgeW91IGFyZQo+IGNhbmNlbGluZyBieSBkaXNhYmxpbmcgdGhlIGNydGMpLgo+IFdvdWxkIGl0
IGJlIGJldHRlciB0byB3YWl0IGZvciB2YmxhbmsgaGVyZSBpbiBjcnRjX2Rpc2FibGUgaW5zdGVh
ZD8KClllcywgSSB3aWxsIHdhaXQgZm9yIHZibGFuayBoZXJlIGluc3RlYWQuCgpbLi4uXQo+ID4g
K3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpj
cnRjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt
X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10
a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiA+
ICsKPiA+ICsgICAgICAgaWYgKHN0YXRlLT5iYXNlLmV2ZW50KSB7Cj4gPiArICAgICAgICAgICAg
ICAgc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKPiA+ICsg
ICAgICAgICAgICAgICBXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7Cj4g
PiArICAgICAgICAgICAgICAgc3RhdGUtPmV2ZW50ID0gc3RhdGUtPmJhc2UuZXZlbnQ7Cj4gPiAr
ICAgICAgICAgICAgICAgc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOwo+IAo+IEhtbS4gV2h5IGFy
ZSB3ZSAic3RlYWxpbmciIGV2ZW50IGZyb20gZHJtX2NydGNfc3RhdGUgYW5kIGhhbmRpbmcgaXQK
PiBvdmVyIHRvIHRoZSB3cmFwcGVyIG10a19jcnRjX3N0YXRlPwo+IFdvbid0IHdlIHN0aWxsIGJl
IGFibGUgdG8gcmV0cmlldmUgc3RhdGUtPmJhc2UuZXZlbnQgbGF0ZXIgd2hlbiB3ZQo+IG5lZWQg
aXQgaW4gdGhlIG10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwPwoKSG1tLCBnb29kIHBvaW50
LiBJJ2xsIHRyeSB0aGF0LgoKWy4uLl0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaXJx
KHN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4KQo+IAo+ID09PiBTbywgdGhpcyBpcyB0
aGUgcGFydCBvZiB0aGUgZHJpdmVyIHRoYXQgbWFrZXMgbWUgdGhlIG1vc3QgbmVydm91cy4KPiBX
aHkgYXJlIHdlIHdyaXRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZSByZWdpc3RlcnMgaW4gdGhlICp2
YmxhbmsKPiBpbnRlcnJ1cHQgaGFuZGxlcio/IQo+IEV2ZXJ5IG90aGVyIGRpc3BsYXkgY29udHJv
bGxlciB0aGF0IEkndmUgZXZlciBzZWVuIGhhcyBzaGFkb3cKPiByZWdpc3RlcnMgdGhhdCBhcmUg
dXNlZCB0byBzdGFnZSBhIHBhZ2UgZmxpcCBhdCB0aGUgbmV4dCB2YmxhbmsuCj4gQXJlIHlvdSBz
dXJlIHRoaXMgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXM/Cj4KPiBJbiBhbnkgY2FzZSwg
aG93IGRvIHdlIGdldCB0aGF0IGZpcnN0IGludGVycnVwdCBpbiB3aGljaCB0byBhcHBseSB0aGUg
cmVnaXN0ZXI/CgpJJ2xsIHRyeSB0byByZXdvcmsgdGhpcyB1c2luZyB0aGUgRElTUF9NVVRFWCB0
byB0cmlnZ2VyIHJlZ2lzdGVyIHVwZGF0ZXMKb24gU09GLgoKPiA+ICt7Cj4gPiArICAgICAgIHN0
cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gY3R4LT5jcnRjOwo+ID4gKyAgICAgICBzdHJ1
Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmY3R4LT5kZHBfY29tcFswXTsKPiAKPiBkZHBfY29tcFsw
XSBoZXJlIGxvb2tzIGEgYml0IGxpa2UgYmxhY2sgbWFnaWMuICAiVGhlIDB0aCBjb21wb25lbnQg
aXMKPiBhbHdheXMgdGhlIG92bCIuCj4gUGVyaGFwcyBtYWtlIGFuIGV4cGxpY2l0bHkgbmFtZWQg
Im92bCIgZmllbGQgZm9yIG10a19jcnRjX2RkcF9jb250ZXh0LgoKT2suCgo+ID4gKyAgICAgICBz
dHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMt
PmJhc2Uuc3RhdGUpOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICsgICAg
ICAgaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgewo+ID4gKyAgICAgICAgICAgICAgIHN0YXRl
LT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg
IG92bC0+ZnVuY3MtPmNvbXBfbGF5ZXJfb2ZmKG92bC0+cmVncywgaSk7Cj4gCj4gV2h5IGRvIHlv
dSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBsYXllcnMgYmVmb3JlIHNldHRpbmcgbW9kZT8KCkkgYW0g
bm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIEl0IHNlZW1zIHRvIHdvcmsgd2l0aG91dC4K
Cj4gPiArICAgICAgICAgICAgICAgb3ZsLT5mdW5jcy0+Y29tcF9jb25maWcob3ZsLT5yZWdzLCBz
dGF0ZS0+cGVuZGluZ193aWR0aCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdodCwKPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX3Zy
ZWZyZXNoKTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwg
T1ZMX0xBWUVSX05SOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnBlbmRp
bmdfb3ZsX2NvbmZpZ1tpXSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZS0+cGVuZGluZ19vdmxfZW5hYmxlW2ldKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdmwtPmZ1bmNzLT5jb21wX2xheWVyX29mZihvdmwtPnJlZ3MsIGkpOwo+ID4gKwo+ID4g
KyAgICAgICAgICAgICAgICAgICAgICAgb3ZsLT5mdW5jcy0+Y29tcF9sYXllcl9jb25maWcob3Zs
LT5yZWdzLCBpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLT5wZW5kaW5nX292bF9hZGRyW2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX292bF9waXRjaFtpXSwKPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cGVuZGluZ19vdmxfZm9ybWF0W2ld
LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wZW5k
aW5nX292bF94W2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLT5wZW5kaW5nX292bF95W2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLT5wZW5kaW5nX292bF9zaXplW2ldKTsKPiA+ICsKPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+cGVuZGluZ19vdmxfZW5hYmxlW2ldKQo+ID4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmwtPmZ1bmNzLT5jb21wX2xheWVyX29u
KG92bC0+cmVncywgaSk7Cj4gPiArICAgICAgICAgICAgICAgfQo+IAo+IEknZCBtb3ZlIHRoaXMg
YWxsIGFsbCB3aXRoIGFuIG10a19wbGFuZSBmdW5jdGlvbiwgYW5kIGxldCBlYWNoCj4gbXRrX3Bs
YW5lIHN0b3JlIGl0cyBvd24gcGVuZGluZyBzdGF0ZS4KCk9rLgoKWy4uLl0KPiA+ICtzdGF0aWMg
aW50IG10a19jcnRjX2RkcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq
bWFzdGVyLAo+ID4gKyAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCj4gPiArewpbLi4uXQo+ID4g
KyAgICAgICBmb3IgKHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKPiA+
ICsgICAgICAgICAgICAgICB0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklN
QVJZIDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHpwb3MgPT0gMSkgPyBE
Uk1fUExBTkVfVFlQRV9DVVJTT1IgOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiA+ICsgICAgICAgICAg
ICAgICByZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmY3R4LT5wbGFuZXNbenBvc10sCj4g
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgY3R4LT5waXBlLCB0eXBlLCB6
cG9zLCBPVkxfTEFZRVJfTlIpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4gPiArICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIHVucHJlcGFyZTsKPiA+ICsgICAgICAgfQo+IAo+IEkg
dGhpbmsgeW91IHNob3VsZCBqdXN0IGxldCBtdGtfZHJtX2NydGNfY3JlYXRlKCkgY3JlYXRlICYg
aW5pdCBpdHMgb3duIHBsYW5lcy4KPiBDdXJyZW50bHksIGl0cyBvdmVybGF5IHBsYW5lcyBhcmUg
dW5hc3NpZ25lZC4KPiBGdXJ0aGVybW9yZSwgdGhlIGNydGMgY29udGV4dCBkb2Vzbid0IHJlYWxs
eSBuZWVkIGFuIGFycmF5IG9mIHBsYW5lcyBhdCBhbGwuCj4gSXQgb25seSByZWFsbHkgdXNlcyB0
aGUgYXJyYXkgdG8ga25vdyB3aGljaCBwbGFuZXMgdG8gdXBkYXRlIGR1cmluZwo+IHRoZSB2Ymxh
bmsgaXJxLgo+IEJ1dCwgdGhhdCBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBhbHJlYWR5IHByZXNl
bnQgaW4gdGhlIGF0b21pYyBzdGF0ZQo+IHRvIGJlIGFwcGxpZWQgaXRzZWxmLgoKCgpbLi4uXQo+
ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAo+ID4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmI2OTYwNjYKPiA+IC0tLSAvZGV2L251bGwKPiA+
ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAo+ID4gQEAgLTAs
MCArMSw1NiBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7Cj4gPiArICAgICAg
IHN0cnVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2NydGNfc3RhdGUgYmFzZTsKPiA+
ICsgICAgICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7Cj4gPiArCj4g
PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgcGVuZGluZ191cGRhdGU7
Cj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ19uZWVk
c192Ymxhbms7Cj4gPiArCj4gPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGVuZGluZ19jb25maWc7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAg
ICAgICAgcGVuZGluZ193aWR0aDsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAg
ICAgICAgICBwZW5kaW5nX2hlaWdodDsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAg
ICAgICAgICAgICBwZW5kaW5nX3ZyZWZyZXNoOwo+ID4gKwo+ID4gKyAgICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3ZsX2NvbmZpZ1tPVkxfTEFZRVJfTlJdOwo+
ID4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3ZsX2Vu
YWJsZVtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAg
ICAgICAgIHBlbmRpbmdfb3ZsX2FkZHJbT1ZMX0xBWUVSX05SXTsKPiA+ICsgICAgICAgdW5zaWdu
ZWQgaW50ICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX292bF9waXRjaFtPVkxfTEFZRVJfTlJd
Owo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3Zs
X2Zvcm1hdFtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBlbmRpbmdfb3ZsX3hbT1ZMX0xBWUVSX05SXTsKPiA+ICsgICAgICAgaW50ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX292bF95W09WTF9MQVlFUl9OUl07Cj4g
PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgcGVuZGluZ19vdmxfc2l6
ZVtPVkxfTEFZRVJfTlJdOwo+ID4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBlbmRpbmdfb3ZsX2RpcnR5W09WTF9MQVlFUl9OUl07Cj4gCj4gQWxsIG9mIHRoZXNlIE9W
TF9MQVlFUl9OUiBsZW5ndGggYXJyYXlzIGxvb2sgbGlrZSBtdGtfcGxhbmVfc3RhdGUgdG8gbWUu
Cj4gSSB0aGluayB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGFuZCB3cmFwIGRybV9w
bGFuZV9zdGF0ZS4KCgoKWy4uLl0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcC5jCj4gPiBAQCAtMCwwICsxLDIxOCBAQApbLi4uXQo+ID4gKyNkZWZpbmUgRElT
UF9SRUdfTVVURVhfRU4obikgICAoMHgyMCArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9S
RUdfTVVURVhfUlNUKG4pICAoMHgyOCArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9SRUdf
TVVURVhfTU9EKG4pICAoMHgyYyArIDB4MjAgKiBuKQo+ID4gKyNkZWZpbmUgRElTUF9SRUdfTVVU
RVhfU09GKG4pICAoMHgzMCArIDB4MjAgKiBuKQo+IAo+IFRoZSBuIHNob3VsZCBiZSBpbiBwYXJl
bnMgaGVyZS4KCk9rLgoKWy4uLl0KPiA+ICt2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2
b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLCB1bnNpZ25lZCBpbnQgcGlwZSwKPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCj4KPiBX
aHkgcGFzcyBwaXBlIGlmIHdlIGRvbid0IHVzZSBpdD8KCkxlZnRvdmVyIGZyb20gYmVmb3JlIHRo
ZSBzcGxpdCBvZiBtdGtfZGRwX2FkZF90b19wYXRoL211dGV4LgoKWy4uLl0KPiA+ICsgICAgICAg
aWYgKHZhbHVlKSB7Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZyA9IHJlYWRs
KGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICB3
cml0ZWwocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+IAo+IEFsbW9zdCBhbGwgb2YgdGhlIHdy
aXRlbCgpIGluIHRoaXMgcGF0Y2ggY2FuIHJlYWxseSBiZSB3cml0ZWxfcmVsYXhlZCgpLgo+IFRo
ZSBvbmx5IG9uZXMgdGhhdCBuZWVkIHdyaXRlbCgpIGFyZSB3aGVuIHlvdSByZWFsbHkgbmVlZCBh
IGJhcnJpZXIuCgpPay4KCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZGRwX2NvbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk
cF9jb21wLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4yZjNi
MzJiCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kZHBfY29tcC5jCj4gPiBAQCAtMCwwICsxLDQyNCBAQApbLi4uXQo+ID4gK3N0YXRp
YyB2b2lkIG10a19vdmxfY29uZmlnKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsCj4gPiArICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJl
ZnJlc2gpCj4gPiArewo+ID4gKyAgICAgICBpZiAodyAhPSAwICYmIGggIT0gMCkKPiA+ICsgICAg
ICAgICAgICAgICB3cml0ZWwoaCA8PCAxNiB8IHcsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JP
SV9TSVpFKTsKPiAKPiBTaG91bGQgeW91IGp1c3Qgd3JpdGUgMCB0byBESVNQX1JFR19PVkxfUk9J
X1NJWkUgaWYgdyBvciBoIGFyZSAwPwoKQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB3aWR0aCBhbmQg
aGVpZ2h0IG11c3QgYmUgYXQgbGVhc3QgMS4KQnV0IG9mIGNvdXJzZSBJIHNob3VsZCBjaGVjayB0
aGlzIGVhcmxpZXIuCgpbLi4uXQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252
ZXJ0KHVuc2lnbmVkIGludCBmbXQpCj4gCj4gcmV0dXJuIGludCBzbyB0aGUgZXJyb3IgY29kZSBz
dGF5cyBuZWdhdGl2ZT8KCkknbGwganVzdCByZXR1cm4gUkdCODg4IG9uIGVycm9yLgoKWy4uLl0K
PiA+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyh2b2lkIF9faW9tZW0gKm92bF9i
YXNlLCB1bnNpZ25lZCBpbnQgaWR4LAo+ID4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBh
ZGRyLCB1bnNpZ25lZCBpbnQgcGl0Y2gsIHVuc2lnbmVkIGludCBmbXQsCj4gPiArICAgICAgICAg
ICAgICAgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgc2l6ZSkKPiA+ICt7Cj4gPiArICAgICAg
IHVuc2lnbmVkIGludCByZWc7Cj4gPiArCj4gPiArICAgICAgIHJlZyA9IGhhc19yYl9zd2FwcGVk
KGZtdCkgPDwgMjQgfCBvdmxfZm10X2NvbnZlcnQoZm10KSA8PCAxMjsKPiAKPiBvdmxfZm10X2Nv
bnZlcnQoKSBjYW4gcmV0dXJuIDwgMCBmb3IgdW5zdXBwb3J0ZWQgZm10Lgo+IEJ1dCwgcGVyaGFw
cyB3ZSBjYW4gcmVtb3ZlIHRoYXQgY2hlY2ssIHNpbmNlIGl0IHNob3VsZCBhY3R1YWxseQo+IGFs
cmVhZHkgYmUgZ3VhcmFudGVlZCBieSB0aGUgZHJtIGNvcmUgdGhhdCBhIHBsYW5lIGlzIG9ubHkg
ZXZlciBhc2tlZAo+IHRvIGRpc3BsYXkgYW4gRkIgd2l0aCBhIGZvcm1hdCB0aGF0IHRoZSBwbGFu
ZSBhZHZlcnRpc2VzLgoKRXhhY3RseS4gSWYgc29tZXRoaW5nIHVuc3VwcG9ydGVkIGdldHMgdGhy
b3VnaCBoZXJlLCBpdCdzIGEgYnVnLgoKWy4uLl0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10
a19kZHBfY29tcF9mdW5jcyBkZHBfY29sb3IwID0gewo+ID4gKyAgICAgICAuY29tcF9pZCA9IERE
UF9DT01QT05FTlRfQ09MT1IwLAo+ID4gKyAgICAgICAuY29tcF9wb3dlcl9vbiA9IG10a19jb2xv
cl9zdGFydCwKPiAKPiBGb3IgY29uc2lzdGVuY3ksIGNhbiB5b3UgbmFtZSBhbGwgb2YgdGhlICIq
X3N0YXJ0KCkiIGZ1bmN0aW9ucwo+ICIqX3Bvd2VyX29uIiwgb3IgY2hhbmdlIHRoZSAuY29tcF9w
b3dlcl9vbiB0byAuY29tcF9zdGFydC4KPiBBY3R1YWxseSwganVzdCBkcm9wIHRoZSAiY29tcF8i
IGZyb20gYWxsIG9mIHRoZSBmaWVsZHMgb2YKPiBtdGtfZGRwX2NvbXBfZnVuY3MsIHNpbmNlIGl0
IGlzIHJlZHVuZGFudC4KCkknZCBjaGFuZ2UgdGhlbSBhbGwgdG8gLmVuYWJsZS8uZGlzYWJsZS4K
Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX292bDEgPSB7
Cj4gPiArICAgICAgIC5jb21wX2lkID0gRERQX0NPTVBPTkVOVF9PVkwxLAo+ID4gKyAgICAgICAu
Y29tcF9jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywKPiA+ICsgICAgICAgLmNvbXBfcG93ZXJfb24g
PSBtdGtfb3ZsX3N0YXJ0LAo+ID4gKyAgICAgICAuY29tcF9lbmFibGVfdmJsYW5rID0gbXRrX292
bF9lbmFibGVfdmJsYW5rLAo+ID4gKyAgICAgICAuY29tcF9kaXNhYmxlX3ZibGFuayA9IG10a19v
dmxfZGlzYWJsZV92YmxhbmssCj4gPiArICAgICAgIC5jb21wX2NsZWFyX3ZibGFuayA9IG10a19v
dmxfY2xlYXJfdmJsYW5rLAo+ID4gKyAgICAgICAuY29tcF9sYXllcl9vbiA9IG10a19vdmxfbGF5
ZXJfb24sCj4gPiArICAgICAgIC5jb21wX2xheWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAo+
ID4gKyAgICAgICAuY29tcF9sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKPiA+
ICt9Owo+IAo+IFRoZSBjYWxsYmFjayBkdXBsaWNhdGlvbiBoZXJlIHN1Z2dlc3RzIHRoZSBjb21w
b25lbnQgbW9kZWwgY2FuIGJlIHJlZmluZWQgYSBiaXQuCj4gSSB0aGluayB5b3UgcHJvYmFibHkg
d2FudCBhIHNpbmdsZSBvbmUgb2YgdGhlc2U6Cj4KPiBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19k
ZHBfY29tcF9mdW5jcyBkZHBfb3ZsID0gewo+ICAgICAgICAuY29uZmlnID0gbXRrX292bF9jb25m
aWcsCj4gICAgICAgIC5zdGFydCA9IG10a19vdmxfc3RhcnQsCj4gICAgICAgIC5lbmFibGVfdmJs
YW5rID0gbXRrX292bF9lbmFibGVfdmJsYW5rLAo+ICAgICAgICAuZGlzYWJsZV92YmxhbmsgPSBt
dGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAo+ICAgICAgICAuY2xlYXJfdmJsYW5rID0gbXRrX292bF9j
bGVhcl92YmxhbmssCj4gICAgICAgIC5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCj4gICAg
ICAgIC5sYXllcl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKPiAgICAgICAgLmxheWVyX2NvbmZp
ZyA9IG10a19vdmxfbGF5ZXJfY29uZmlnLAo+IH07CgpZZXMsIHRoZSBuZXh0IHZlcnNpb24gd2ls
bCBkcm9wIC5jb21wX2lkIGZyb20gdGhlIGZ1bmNzLgoKPiBhbmQgdGhlbiB0byB1c2UgaXQgZm9y
IGJvdGggb3ZsJ3MuICBNYXliZSBzb21ldGhpbmcgbGlrZSB0aGlzOgo+IAo+IHN0YXRpYyBjb25z
dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Rlc2MgZGRwX292bDAgPSB7Cj4gICAuaWQgPSBERFBfQ09N
UE9ORU5UX09WTDAsCj4gICAub3BzID0gZGRwX292bAo+IH07Cj4gCj4gc3RhdGljIGNvbnN0IHN0
cnVjdCBtdGtfZGRwX2NvbXBfZGVzYyBkZHBfb3ZsMSA9IHsKPiAgIC5pZCA9IEREUF9DT01QT05F
TlRfT1ZMMSwKPiAgIC5vcHMgPSBkZHBfb3ZsCj4gfTsKClRoZXNlIHdpbGwgbm90IGJlIG5lY2Vz
c2FyeSwgSSdsbCBzdG9yZSB0aGUgaWQgaW4gbXRrX2RkcF9jb21wLgoKPiA+IGRpZmYgLS1naXQg
YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQKPiA+IGluZGV4IDAwMDAwMDAuLmFlM2E2ZTgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiA+IEBAIC0wLDAg
KzEsODYgQEAKWy4uLl0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfYXRvbWljX2NvbXBsZXRlKHN0cnVj
dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArICAgICAg
IHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07Cj4gPiArCj4gPiArICAgICAg
IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRybSwgc3RhdGUpOwo+
ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUpOwo+
ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwg
c3RhdGUpOwo+ID4gKyAgICAgICBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRy
bSwgc3RhdGUpOwo+IAo+IFdoeSB3YWl0IGZvciB2YmxhbmsgaGVyZT8KPiBBcmUgeW91IHN1cmUg
d2Ugd2FpdGVkIGxvbmcgZW5vdWdoIGhlcmU/Cj4gVGhpcyB3aWxsIHJldHVybiBhZnRlciB0aGUg
dmVyeSBuZXh0IHZibGFuay4KPiBIb3dldmVyLCB3aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgbmV3
IHN0YXRlIHdhcyByZWFsbHkgdHJhbnNmZXJyZWQgdG8KPiB0aGUgaGFyZHdhcmUgaW4gdGltZT8K
CkknbGwgY2hlY2sgb3V0IGhvdyB0byB1c2UgdGhlIERJU1BfTVVURVggZm9yIHRoaXMuIEl0IGhh
cyBhbiBpbnRlcnJ1cHQKdG8gc2lnbmFsIHdoZW4gdGhlIHJlZ2lzdGVyIHNldHRpbmdzIHdlcmUg
YXBwbGllZC4KClsuLi5dCj4gPiArc3RhdGljIGludCBtdGtfYXRvbWljX2NvbW1pdChzdHJ1Y3Qg
ZHJtX2RldmljZSAqZHJtLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYXN5bmMpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw
cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+
ICsgICAgICAgcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0
ZSk7Cj4gPiArICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
PiA+ICsKPiA+ICsgICAgICAgbXV0ZXhfbG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ID4g
KyAgICAgICBmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7Cj4gPiArCj4gPiArICAg
ICAgIGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0ZSk7Cj4gPiArCj4gPiAr
ICAgICAgIGlmIChhc3luYykKPiA+ICsgICAgICAgICAgICAgICBtdGtfYXRvbWljX3NjaGVkdWxl
KHByaXZhdGUsIHN0YXRlKTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICAgIG10
a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOwo+ID4gKwo+ID4gKyAgICAgICBtdXRl
eF91bmxvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKPiAKPiBXaGF0IGRvZXMgdGhpcyBsb2Nr
IGRvPwo+IEFGQUlDVCwgaXQgb25seSBlbnN1cmVzIHRoYXQgdGhlIHNlY29uZCBoYWxmIG9mIG10
a19hdG9taWNfY29tbWl0KCkKPiBjYW5ub3QgZXhlY3V0ZSB0d2ljZSBhdCB0aGUgc2FtZSB0aW1l
Lgo+IEhvd2V2ZXIsIEkgZXhwZWN0IHNpbXVsdGFuZW91cyBjYWxscyB0byBhdG9taWNfY29tbWl0
KCkgc2hvdWxkIGFscmVhZHkKPiBiZSBwcm9oaWJpdGVkIGJ5IHRoZSBkcm0gY29yZT8KCkkgZG9u
J3Qgc2VlIGl0LiBEUk1fSU9DVExfTU9ERV9BVE9NSUMgaXMgdW5sb2NrZWQsIGFuZApkcm1fbW9k
ZV9hdG9taWNfaW9jdGwgb25seSBjYWxscyBkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQgYnV0IGRv
ZXNuJ3QKZ2V0IGFueSBsb2NrIGJlZm9yZSBjYWxsaW5nIGRybV9hdG9taWNfKGFzeW5jXyljb21t
aXQuCgpbLi4uXQo+ID4gK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp
dmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZp
Y2UgKnBkZXY7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArICAgICAgIGludCBpOwo+ID4gKwo+
ID4gKyAgICAgICBwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9u
b2RlKTsKPiA+ICsgICAgICAgaWYgKCFwZGV2KSB7Cj4gPiArICAgICAgICAgICAgICAgZGV2X2Vy
cihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4iLAo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKPiA+
ICsgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiA+ICsg
ICAgICAgICAgICAgICByZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiA+ICsgICAgICAgfQo+ID4gKyAg
ICAgICBwcml2YXRlLT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2Owo+ID4gKwo+ID4gKyAgICAgICBm
b3IgKGkgPSAwOyBpIDwgTUFYX0NSVEM7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlmICgh
cHJpdmF0ZS0+bGFyYl9ub2RlW2ldKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUo
cHJpdmF0ZS0+bGFyYl9ub2RlW2ldKTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIXBkZXYpIHsK
PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZv
ciBsYXJiIGRldmljZSAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdmF0ZS0+bGFyYl9ub2RlW2ldLT5mdWxsX25hbWUpOwo+IAo+IE5pdDogZGV2X3dhcm4oKSBw
ZXJoYXBzPwoKT2suCgpbLi4uXQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NSVEM7
IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlmICghcHJpdmF0ZS0+bGFyYl9kZXZbaV0pCj4g
PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg
ICByZXQgPSBtdGtfc21pX2xhcmJfZ2V0KHByaXZhdGUtPmxhcmJfZGV2W2ldKTsKPiAKPiBIbW0u
IHRoaXMgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZG9uZSBieSBhIGNydGMgZnVuY3Rpb24sIGFu
ZCwgb25seQo+IGZvciBDUlRDcyB0aGF0IGFyZSBhY3R1YWxseSBnb2luZyB0byBiZSB1c2VkLgoK
WWVzLCBJIHN1cHBvc2UgdGhlc2Ugc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGlsZSB0aGUgcmVz
cGVjdGl2ZSBETUEKY29tcG9uZW50cyAoT1ZMLCBSRE1BLCBXRE1BKSBhcmUgYWN0aXZlLgpJIHRo
aW5rIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aGlzIHdvdWxkIGJlIGluIHRoZSBjb21wb25lbnQn
cyAuZW5hYmxlCihvciBhIG5ldyAucHJlcGFyZSBpZiBuZWNlc3NhcnkpLgoKPiA+ICsgICAgICAg
ICAgICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1Io
IkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7Cj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGVycl9sYXJiX2dldDsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg
IH0KPiA+ICsKPiA+ICsgICAgICAgZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gPiAr
ICAgICAgIGRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ID4gKwo+ID4gKyAgICAgICByZXR1
cm4gMDsKPiA+ICsKPiA+ICtlcnJfbGFyYl9nZXQ6Cj4gPiArICAgICAgIGZvciAoaSA9IGkgLSAx
OyBpID49IDA7IGktLSkKPiA+ICsgICAgICAgICAgICAgICBtdGtfc21pX2xhcmJfcHV0KHByaXZh
dGUtPmxhcmJfZGV2W2ldKTsKPiA+ICsgICAgICAgZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRy
bSk7Cj4gCj4gTm90IGRybV9rbXNfaGVscGVyX3BvbGxfZmluaSgpLgoKT2suCgpbLi4uXQo+ID4g
K3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+
ID4gK3sKPiAKPiBwdXQgdGhlIGxhcmJzPwoKT2ssIHVubGVzcyBJIG1vdmUgdGhlbSBlbHNld2hl
cmUuCgo+ID4gKyAgICAgICBkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiA+ICsKPiA+
ICsgICAgICAgZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gCj4gdW5iaW5kX2FsbCA/CgpPay4K
ClsuLi5dCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0gewo+
ID4gKyAgICAgICAuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VN
LAo+IAo+IHwgRFJJVkVSX0FUT01JQyA/CgpZZXMuCgpbLi4uXQo+ID4gK3N0YXRpYyBpbnQgbXRr
X2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKWy4uLl0KPiA+
ICsgICAgICAgLyogSXRlcmF0ZSBvdmVyIHNpYmxpbmcgRElTUCBmdW5jdGlvbiBibG9ja3MgKi8K
PiA+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwg
bm9kZSkgewo+ID4gKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9m
X2lkOwo+ID4gKyAgICAgICAgICAgICAgIGVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBl
Owo+ID4gKyAgICAgICAgICAgICAgIGludCBjb21wX2lkOwo+ID4gKwo+ID4gKyAgICAgICAgICAg
ICAgIG9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKPiA+
ICsgICAgICAgICAgICAgICBpZiAoIW9mX2lkKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgY29tcF90eXBlID0gKGVudW0gbXRr
X2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgaWYg
KGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOwo+ID4gKyAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgICAgfQo+IAo+IEknZCBt
b3ZlIHRoZSBNVVRFWCBjaGVjayBhZnRlciAiaXNfYXZhaWxhYmxlKCkiLCB0byBjYXRjaCB0aGUg
b2RkIGNhc2UKPiB3aGVyZSB0aGUgTVVURVggbm9kZSBpcyBkaXNhYmxlZCAoaXQgd2lsbCBzdGls
bCBiZSBOVUxMLCBhbmQgZmFpbAo+IGJlbG93KS4KCk9rLgoKPiA+ICsKPiA+ICsgICAgICAgICAg
ICAgICBpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVz
XG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5mdWxsX25hbWUp
Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAg
ICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0
X2lkKG5vZGUsIGNvbXBfdHlwZSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKGNvbXBfaWQgPCAw
KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfaW5mbyhkZXYsICJTa2lwcGluZyB1
bmtub3duIGNvbXBvbmVudCAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmZ1bGxfbmFtZSk7Cj4gCj4gZGV2X3dhcm4oKQoKT2suCgpbLi4uXQo+ID4gKyAg
ICAgICAgICAgICAgIGlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMKSB7Cj4gPiArICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKPiA+ICsKPiA+
ICsgICAgICAgICAgICAgICAgICAgICAgIGxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9k
ZSwgIm1lZGlhdGVrLGxhcmIiLCAwKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
YXJiX25vZGUgJiYgbnVtX2xhcmJzIDwgTUFYX0NSVEMpCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaXZhdGUtPmxhcmJfbm9kZVtudW1fbGFyYnMrK10gPSBsYXJiX25vZGU7
Cj4gCj4gSXQgZmVlbHMgbGlrZSB0aGUgbGFyYl9ub2RlcyBzaG91bGQgYmUgaGFuZGxlZCBkaXJl
Y3RseSBieSB0aGUgb3ZsIGRyaXZlci4KClllcy4gQW5kIHRoZSByZG1hL3dkbWEsIHByb2JhYmx5
LiBGb3IgdGhhdCBJJ2QgbGlrZSB0byBzcGxpdCB0aGUgb3ZsCmRyaXZlciBmcm9tIHRoZSBjcnRj
IGltcGxlbWVudGF0aW9uLgoKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+
ICsKPiA+ICsgICAgICAgaWYgKCFwcml2YXRlLT5tdXRleF9ub2RlKSB7Cj4gPiArICAgICAgICAg
ICAgICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOwo+
IAo+IENsZWFudXA6Cj4gICBvZl9ub2RlX3B1dCgpIGFueSBub2RlcyBhbHJlYWR5IGluIGNvbXBf
bm9kZVtdCj4gICBBbnl0aGluZyB0byBjbGVhbiBhZnRlciBjb21wb25lbnRfbWF0Y2hfYWRkKCk/
Cj4gICBvZl9ub2RlX3B1dCgpIGxhcmJfbm9kZXM/CgoKWy4uLl0KPiA+ICtzdGF0aWMgaW50IG10
a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKyAg
ICAgICBjb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOwo+ID4g
KyAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gCj4gQ2xlYW51cDoKPiAg
IG9mX25vZGVfcHV0KCkgYW55IG5vZGVzIGFscmVhZHkgaW4gY29tcF9ub2RlW10KCk9rLgoKPiAg
IEFueXRoaW5nIHRvIGNsZWFuIGFmdGVyIGNvbXBvbmVudF9tYXRjaF9hZGQoKT8KCk5vLCB0aGF0
IGp1c3QgY2FsbHMgZGV2bV9rbWFsbG9jIGludGVybmFsbHkuCgo+ICAgb2Zfbm9kZV9wdXQoKSBs
YXJiX25vZGVzPwoKT2suCgpbLi4uXQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZHJ2LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi41ZTUxMjhl
Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kcnYuaAo+ID4gQEAgLTAsMCArMSw2MSBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJt
X3ByaXZhdGUgewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+
IAo+IE5vdCB1c2VkPwoKV2lsbCBkcm9wLCB0aGlzIGJlbG9uZ3MgaW50byBhIHNlcGFyYXRlIGZi
X2hlbHBlciBwYXRjaCAobm90IHBhcnQgb2YKdGhpcyBzZXJpZXMpLgoKPiA+ICsgICAgICAgc3Ry
dWN0IGRybV9kZXZpY2UgKmRybTsKPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICog
Y3JlYXRlZCBjcnRjIG9iamVjdCB3b3VsZCBiZSBjb250YWluZWQgYXQgdGhpcyBhcnJheSBhbmQK
PiA+ICsgICAgICAgICogdGhpcyBhcnJheSBpcyB1c2VkIHRvIGJlIGF3YXJlIG9mIHdoaWNoIGNy
dGMgZGlkIGl0IHJlcXVlc3QgdmJsYW5rLgo+IAo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGNv
bW1lbnQuCgpJJ2xsIGp1c3QgZHJvcCBpdC4gVGhpcyBhcnJheSBvZiBwb2ludGVycyBpcyBuZWVk
ZWQgdG8gdHJhbnNsYXRlIGZyb20KcGlwZSBudW1iZXIgdG8gc3RydWN0IG10a19kcm1fY3J0YyBp
biBjcnRjX2VuYWJsZS9kaXNhYmxlX3ZibGFuay4KCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAg
ICBzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJt
X3Byb3BlcnR5ICpwbGFuZV96cG9zX3Byb3BlcnR5Owo+IAo+IE5vdCB1c2VkLgoKV2lsbCBkcm9w
LCB0aGlzIGJlbG9uZ3MgaW50byBhIHNlcGFyYXRlIHpwb3MgcHJvcGVydHkgcGF0Y2ggKG5vdCBw
YXJ0IG9mCnRoaXMgc2VyaWVzKS4KCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBwaXBlOwo+IAo+
IHdoYXQgcGlwZSBpcyB0aGlzPwoKVGhhdCBzaG91bGQgYmUgcmVuYW1lZCB0byBudW1fcGlwZXMu
Cgo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZVtNQVhfQ1JUQ107Cj4g
PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmxhcmJfZGV2W01BWF9DUlRDXTsKPiA+ICsgICAgICAg
c3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOwo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNl
ICptdXRleF9kZXY7Cj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3M7Cj4gPiAr
ICAgICAgIHVuc2lnbmVkIGludCBwYXRoX2xlbltNQVhfQ1JUQ107Cj4gPiArICAgICAgIGNvbnN0
IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoW01BWF9DUlRDXTsKPiAKPiBIYXZpbmcgNSBhcnJh
eXMgb2YgbGVuZ3RoIE1BWF9DUlRDIHN1Z2dlc3RzIHlvdSByZWFsbHkgd2FudCBvbmUgdG8KPiBj
b21iaW5lIHRoZXNlIGZpZWxkcyBpbnRvIGEgc3RydWN0LCBhbmQgaGF2ZSBhbiBNQVhfQ1JUQyBh
cnJheSBvZiB0aGUKPiBzdHJ1Y3QuCj4gSW4gZmFjdCwgdGhpcyBzdHJ1Y3Qgc291bmRzIGxpa2Ug
aXQgc2hvdWxkIGJlICJtdGtfY3J0YyIsIHdoaWNoIHdyYXBzCj4gYSBkcm1fY3J0Yy4KClRoZSBs
YXJiX25vZGUvZGV2IHNob3VsZCBiZSBtb3ZlZCBpbnRvIERNQSBjb21wb25lbnQgZHJpdmVycywg
YnV0IGEKc3RhdGljIHBhdGggaW5kZWVkIGN1cnJlbnRseSBtYXBzIGRpcmVjdGx5IHRvIGEgY3J0
Yy4KClsuLi5dCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiA+IG5ldyBm
aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5kZmE5MzFiCj4gPiAtLS0gL2Rldi9u
dWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCj4gPiBA
QCAtMCwwICsxLDE1MSBAQApbLi4uXQo+ID4gK3N0cnVjdCBtdGtfZHJtX2ZiIHsKPiA+ICsgICAg
ICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAgYmFzZTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9n
ZW1fb2JqZWN0ICAgKmdlbV9vYmpbTUFYX0ZCX09CSl07Cj4gCj4gTml0OiBUaGUgZGlzcGxheSBj
b250cm9sbGVyIGRyaXZlciBkb2VzIG5vdCBoYW5kbGUgbXVsdGktYnVmZmVyIGZvcm1hdHMuCj4g
U28sIG1heWJlIGp1c3QgYWRkIHRoZSBhcnJheSBsYXRlciB3aGVuIGl0IGRvZXMuCj4gQXJndWFi
bHksIGZvciBub3cgaXQgaXMganVzdCBhZGRpbmcgY29tcGxleGl0eSB3aXRoIG5vIGJlbmVmaXQu
CgpPay4KClsuLi5dCj4gPiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2Zi
X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gPiArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbW9k
ZV9mYl9jbWQyICpjbWQpCj4gPiArewo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgaHN1YiwgdnN1
YiwgaTsKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKPiA+ICsgICAgICAg
c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1bTUFYX0ZCX09CSl07Cj4gPiArICAgICAgIGludCBl
cnI7Cj4gPiArCj4gPiArICAgICAgIGhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNh
bXBsaW5nKGNtZC0+cGl4ZWxfZm9ybWF0KTsKPiA+ICsgICAgICAgdnN1YiA9IGRybV9mb3JtYXRf
dmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoY21kLT5waXhlbF9mb3JtYXQpOwo+IAo+IG5pdDogYmxh
bmsgbGluZSBoZXJlIHdvdWxkIGhlbHAgcmVhZGFiaWxpdHkuCj4KPiA+ICsgICAgICAgZm9yIChp
ID0gMDsgaSA8IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhjbWQtPnBpeGVsX2Zvcm1hdCk7IGkrKykg
ewoKT2suCgpbLi4uXQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCj4gPiBu
ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uOWNlNzMwNwo+ID4gLS0tIC9k
ZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaAo+
ID4gQEAgLTAsMCArMSwyOSBAQAo+ID4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1f
Z2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQo+IAo+IHN0YXRpYz8KPiBC
dXQgYWN0dWFsbHksIGp1c3QgZm9sZGluZyB0aGlzIGRpcmVjdGx5IGludG8gbXRrX2RybV9nZW1f
Y3JlYXRlKCkKPiB3b3VsZCBtYWtlIHRoZSBjb2RlIGZsb3cgY2xlYXJlciwgc2luY2UgdGhpcyBm
dW5jdGlvbiBoYXMgbm8KPiBjb3JyZXNwb25kaW5nIF9maW5pKCkuCgpZZXMuCgpbLi4uXQo+ID4g
K3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl
dmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBhbGxvY19rbWFwKQo+IAo+IHN0YXRpYz8KCkl0IGlz
IHJlZmVyZW5jZWQgZnJvbSBtdGtfZHJtX2Rydi5jCgpbLi4uXQo+ID4gK3ZvaWQgbXRrX2RybV9n
ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiArewo+ID4gKyAg
ICAgICBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2Jq
KTsKPiA+ICsKPiA+ICsgICAgICAgZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7Cj4gPiAr
Cj4gPiArICAgICAgIC8qIHJlbGVhc2UgZmlsZSBwb2ludGVyIHRvIGdlbSBvYmplY3QuICovCj4g
PiArICAgICAgIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKPiAKPiBkcm1fZ2VtX29iamVj
dF9yZWxlYXNlIGNhbGxzIGRybV9nZW1fZnJlZV9tbWFwX29mZnNldCgpLgoKT2suCgo+ID4gKwo+
ID4gKyAgICAgICBkbWFfZnJlZV9hdHRycyhvYmotPmRldi0+ZGV2LCBvYmotPnNpemUsIG10a19n
ZW0tPmNvb2tpZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIs
ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwo+IAo+IEkgdGhpbmsgeW91IHdhbnQgdG8gZG8gdGhpcyBi
ZWZvcmUgY2FsbGluZyBkcm1fZ2VtX29iamVjdF9yZWxlYXNlLgoKV2h5PwoKWy4uLl0KPiA+IGRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NAo+ID4gaW5kZXggMDAwMDAwMC4uZmI3OTUzZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKPiA+IEBAIC0wLDAgKzEsNTYg
QEAKWy4uLl0KPiA+ICtzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKPiA+ICsgICAgICAgc3RydWN0
IGRybV9nZW1fb2JqZWN0ICAgYmFzZTsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICAgICAgICAg
ICAgKmNvb2tpZTsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICAgICAgICAgICAgKmt2YWRkcjsK
PiAKPiBJcyBrdmFkZHIgcmVhbGx5IF9faW9tZW0/CgpObywgYW5kIG5laXRoZXIgaXMgY29va2ll
LgoKWy4uLl0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwo+ID4g
bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjNhODg0M2MKPiA+IC0tLSAv
ZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l
LmMKPiA+IEBAIC0wLDAgKzEsMTY3IEBAClsuLi5dCj4gPiArc3RhdGljIHZvaWQgbXRrX3BsYW5l
X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUp
Cj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5l
LT5zdGF0ZTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ID4g
KyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKPiA+ICsgICAgICAg
c3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7Cj4g
PiArICAgICAgIHN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ID4gKyAgICAgICAgICAgICAgIC54
MSA9IHN0YXRlLT5jcnRjX3gsCj4gPiArICAgICAgICAgICAgICAgLnkxID0gc3RhdGUtPmNydGNf
eSwKPiA+ICsgICAgICAgICAgICAgICAueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNf
dywKPiA+ICsgICAgICAgICAgICAgICAueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNf
aCwKPiA+ICsgICAgICAgfTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAs
IH07Cj4gPiArCj4gPiArICAgICAgIGlmICghY3J0YykKPiA+ICsgICAgICAgICAgICAgICByZXR1
cm47Cj4gPiArCj4gPiArICAgICAgIGNsaXAueDIgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGUtPm1vZGUu
aGRpc3BsYXk7Cj4gPiArICAgICAgIGNsaXAueTIgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGUtPm1vZGUu
dmRpc3BsYXk7Cj4gPiArICAgICAgIGRybV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOwo+
ID4gKyAgICAgICBtdGtfcGxhbmUtPmRpc3Bfc2l6ZSA9IChkZXN0LnkyIC0gZGVzdC55MSkgPDwg
MTYgfCAoZGVzdC54MiAtIGRlc3QueDEpOwo+ID4gKwo+ID4gKyAgICAgICBwbGFuZS0+ZmIgPSBz
dGF0ZS0+ZmI7Cj4gCj4gVGhpcyBkb2Vzbid0IGxvb2sgcmlnaHQuICBUaGUgZHJtIGNvcmUgc2hv
dWxkIGJlIGRvaW5nIHRoaXMgZm9yIHVzLgo+IFdoeSBkbyB5b3UgbmVlZCB0aGlzIGhlcmU/Cj4g
Cj4gSSByZWFsbHkgdGhpbmsgd2Ugd2FudCB0byBiZSB1c2luZyBhICJzdHJ1Y3QgbXRrX3BsYW5l
X3N0YXRlIiB3aGljaAo+IHdyYXBzIGEgZHJtX3BsYW5lX3N0YXRlIGFuZCBhY2N1bXVsYXRlcyBv
dXIgb3ZsIHNwZWNpZmljIGNoYW5nZXMuCj4gRHVyaW5nIGluaXQsIHdoZW4gY3JlYXRpbmcgY3J0
Y3MgJiBwbGFuZXMsIHdlIHNob3VsZCB0ZWxsIGVhY2ggcGxhbmUKPiBpdHMgaWQsIGFuZCB3aGlj
aCBvdmwgaXQgc2hvdWxkIHVzZS4KPiBUaGUgbXRrX3BsYW5lIGNvZGUgY2FuIHRoZW4gcHJvdmlk
ZSBhIGZ1bmN0aW9uIGZvciB0aGUgdmJsYW5rIGlycSB0bwo+IGFwcGx5IG10a19wbGFuZSdzIHBl
bmRpbmcgc3RhdGUuCgpJIGFncmVlLgoKPiA+ICsKPiA+ICsgICAgICAgZ2VtX29iaiA9IG10a19m
Yl9nZXRfZ2VtX29iaihzdGF0ZS0+ZmIsIDApOwo+ID4gKyAgICAgICBtdGtfcGxhbmUtPmZsaXBf
b2JqID0gdG9fbXRrX2dlbV9vYmooZ2VtX29iaik7Cj4gCj4gV2UgZG8gbm90IG5lZWQgdG8gc3Rv
cmUgImZsaXBfb2JqIi4KPiBXZSBvbmx5IHVzZSBpdCB0d2ljZSwgKzMgYW5kICs1IGxpbmVzIGRv
d24gZnJvbSBoZXJlLgo+IEFsc28sIHRoaXMgZG9lc24ndCBsb29rIHNhZmUuICBXaGF0IGlmIHN0
YXRlLT5mYiBpcyBOVUxMPwoKU2luY2Ugd2UgaW1wbGVtZW50IGF0b21pY19kaXNhYmxlLCBhdG9t
aWNfdXBkYXRlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKd2l0aCBzdGF0ZS0+ZmIgPT0gTlVMTC4K
Cj4gSXQgd29ya3MgYmVjYXVzZSB0b19tdGtfZ2VtX29iaihOVUxMKSA9PSBOVUxMLCBidXQgaXQg
cmVsaWVzIG9uIGFuCj4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0gZ2VtX29iai5i
YXNlIGlzIGF0IG9mZnNldCAwLgo+IAo+ID4gKyAgICAgICBtdGtfcGxhbmUtPmNydGMgPSBjcnRj
Owo+IAo+IFRoaXMgaXNuJ3QgdXNlZCwgZWl0aGVyLgoKV2lsbCBkcm9wLgoKWy4uLl0KPiA+ICtz
dGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxh
bmUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9w
bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kcm1f
cGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7Cj4gPiArICAgICAgIHN0cnVj
dCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0YzsKPiA+ICsKPiA+ICsgICAgICAgaWYg
KCFjcnRjKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgICAgbXRr
X2RybV9jcnRjX3BsYW5lX2NvbmZpZyhjcnRjLCBtdGtfcGxhbmUtPmlkeCwgZmFsc2UsIDApOwo+
ID4gKwo+ID4gKyAgICAgICBtdGtfZHJtX2NydGNfY29tbWl0KGNydGMpOwo+IAo+IFdoeSB0aGlz
IGhlcmU/ICBXb24ndCB0aGlzIGhhcHBlbiBkdXJpbmcgbXRrX2RybV9jcnRjX2F0b21pY19mbHVz
aD8KCkJlY2F1c2UgdGhhdCBqdXN0IG1hcmtzIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UgaW4gcGVu
ZGluZ19vdmxfY29uZmlnLAp3aGljaCB5b3UgYWxyZWFkeSBzdWdnZXN0ZWQgcmlnaHRmdWxseSBi
ZWxvbmdzIGluIG10a19wbGFuZV9zdGF0ZS4gSSdsbApmaXggdGhhdC4KClsuLi5dCj4gPiAraW50
IG10a19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3Bs
YW5lICptdGtfcGxhbmUsCj4gPiArICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3Nz
aWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB6cG9zLCB1bnNpZ25lZCBpbnQgbWF4X3BsYW5lKQo+IAo+IG1heF9w
bGFuZSBpcyBub3QgdXNlZC4KPiAKPiBPay4uLiBlbm91Z2ggZm9yIHRvZGF5IDotKS4KClRoaXMg
aXMgYWxzbyBwYXJ0IG9mIHRoZSB6cG9zIHByb3BlcnR5IHBhdGNoLCBJJ2xsIGRyb3AgaXQuCgpy
ZWdhcmRzClBoaWxpcHAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w
Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl
dmVsCg==