From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Goel, Sameer" Subject: Re: [RFC v2 7/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Tue, 21 Nov 2017 19:17:55 -0700 Message-ID: <2362e03f-be7f-9d6a-442f-a40e311d4424@codeaurora.org> References: <1505954230-18892-1-git-send-email-sgoel@codeaurora.org> <1505954230-18892-8-git-send-email-sgoel@codeaurora.org> <4c554d39-4419-07e6-5acc-208ed072744b@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eHKc0-0000b5-7i for xen-devel@lists.xenproject.org; Wed, 22 Nov 2017 02:18:04 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall , xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, wei.liu2@citrix.com, george.dunlap@eu.citrix.com, Andrew.Cooper3@citrix.com, jbeulich@suse.com, Ian.Jackson@citrix.com, nd@arm.com, robin.murphy@arm.com, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org CgpPbiAxMS8yMC8yMDE3IDc6MjUgQU0sIEp1bGllbiBHcmFsbCB3cm90ZToKPiBIaSBTYW1lZXIs Cj4gCj4gT24gMTkvMTEvMTcgMDc6NDUsIEdvZWwsIFNhbWVlciB3cm90ZToKPj4gT24gMTAvMTIv MjAxNyAxMDozNiBBTSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+Pj4+ICsKPj4+PiArdHlwZWRlZiBw YWRkcl90IHBoeXNfYWRkcl90Owo+Pj4+ICt0eXBlZGVmIHBhZGRyX3QgZG1hX2FkZHJfdDsKPj4+ PiArCj4+Pj4gKy8qIEFsaWFzIHRvIFhlbiBkZXZpY2UgdHJlZSBoZWxwZXJzICovCj4+Pj4gKyNk ZWZpbmUgZGV2aWNlX25vZGUgZHRfZGV2aWNlX25vZGUKPj4+PiArI2RlZmluZSBvZl9waGFuZGxl X2FyZ3MgZHRfcGhhbmRsZV9hcmdzCj4+Pj4gKyNkZWZpbmUgb2ZfZGV2aWNlX2lkIGR0X2Rldmlj ZV9tYXRjaAo+Pj4+ICsjZGVmaW5lIG9mX21hdGNoX25vZGUgZHRfbWF0Y2hfbm9kZQo+Pj4+ICsj ZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0KSAoIWR0X3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0KSkKPj4+PiArI2RlZmluZSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wgZHRfcHJvcGVydHlfcmVhZF9ib29sCj4+Pj4gKyNkZWZpbmUgb2ZfcGFyc2VfcGhhbmRs ZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MKPj4+PiArI2RlZmluZSBtdXRl eCBzcGlubG9ja190Cj4+Pj4gKyNkZWZpbmUgbXV0ZXhfaW5pdCBzcGluX2xvY2tfaW5pdAo+Pj4+ ICsjZGVmaW5lIG11dGV4X2xvY2sgc3Bpbl9sb2NrCj4+Pj4gKyNkZWZpbmUgbXV0ZXhfdW5sb2Nr IHNwaW5fdW5sb2NrCj4+Pgo+Pj4gbXV0ZXggYW5kIHNwaW5sb2NrIGFyZSBub3QgdGhlIHNhbWUu IFRoZSBmb3JtZXIgaXMgc2xlZXBpbmcgd2hpbHN0IHRoZSBsYXRlciBpcyBub3QuCj4+Pgo+Pj4g Q2FuIHlvdSBwbGVhc2UgZXhwbGFpbiB3aHkgdGhpcyBpcyBmaW5lIGFuZCBwb3NzaWJseSBhZGQg dGhhdCBpbiBhIGNvbW1lbnQ/Cj4+Pgo+PiBNdXRleCBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGFj Y2VzcyB0byBzbW11IGRldmljZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB3aGVuIHNldHRpbmcg dXAgdGhlIHMyIGNvbmZpZyBhbmQgaW5zdGFsbGluZyBzdGVzIGZvciBhIGdpdmVuIGRldmljZSBp biBMaW51eC4gVGhlIHN0ZSBwcm9ncmFtbWluZ8KgIG9wZXJhdGlvbiBjYW4gYmUgY29tcGV0aXRp dmVseSBsb25nIGJ1dCBpbiB0aGUgY3VycmVudCB0ZXN0aW5nLCBJIGRpZCBub3Qgc2VlIHRoaXMg YmxvY2tpbmcgZm9yIHRvbyBsb25nLiBJIHdpbGwgcHV0IGluIGEgY29tbWVudC4KPiAKPiBXZWxs LCBJIGRvbid0IHRoaW5rIHRoYXQgdGhpcyBpcyBhIGp1c3RpZmljYXRpb24uIFlvdSB0ZXN0ZWQg b24gb25lIHBsYXRmb3JtIGFuZCBkb2VzIG5vdCBleHBsYWluIGhvdyB5b3UgcGVyZm9ybSB0aGVt Lgo+IAo+IElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoYXQgbXV0ZXggaXMgb25seSB1c2Vk IHdoZW4gYXNzaWduaW5nIGRldmljZS4gU28gaXQgbWlnaHQgYmUgb2sgdG8gc3dpdGNoIHRvIHNw aW5sb2NrLiBCdXQgdGhhdCdzIG5vdCBiZWNhdXNlIHRoZSBvcGVyYXRpb24gaXMgbm90IHRvbyBs b25nLCBpdCBqdXN0IGJlY2F1c2UgaXQgd291bGQgYmUgb25seSBwZXJmb3JtIGJ5IHRoZSB0b29s c3RhY2sgKGRvbWN0bCkgYW5kIHdpbGwgbm90IGJlIGlzc3VlZCBieSBndWVzdC4KT2suIEkgYWdy ZWUgYW5zIHdpbGwgdXBkYXRlIHRoZSBjb21tZW50LiAKPiAKPj4KPj4+PiArCj4+Pj4gKy8qIFhl bjogSGVscGVycyB0byBnZXQgZGV2aWNlIE1NSU8gYW5kIElSUXMgKi8KPj4+PiArc3RydWN0IHJl c291cmNlIHsKPj4+PiArwqDCoMKgIHU2NCBhZGRyOwo+Pj4+ICvCoMKgwqAgdTY0IHNpemU7Cj4+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgdHlwZTsKPj4+PiArfTsKPj4+Cj4+PiBMaWtlbHkgd2Ug d2FudCBhIGNvbXBhdCBoZWFkZXIgZm9yIGRlZmluaW5nIExpbnV4IGhlbHBlcnMuIFRoaXMgd291 bGQgYXZvaWQgcmVwbGljYXRpbmcgaXQgZXZlcnl3aGVyZS4KPj4gQWdyZWVkLgo+Pgo+IFRoYXQg c2hvdWxkIGJlCj4+Pgo+Pj4+ICsKPj4+PiArI2RlZmluZSByZXNvdXJjZV9zaXplKHJlcykgKChy ZXMpLT5zaXplKQo+Pj4+ICsKPj4+PiArI2RlZmluZSBwbGF0Zm9ybV9kZXZpY2UgZGV2aWNlCj4+ Pj4gKwo+Pj4+ICsjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDAKPj4+PiArI2RlZmluZSBJT1JFU09V UkNFX0lSUSAxCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9n ZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHR5 cGUsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHVuc2lnbmVkIGludCBudW0pCj4+Pj4gK3sKPj4+PiArwqDCoMKgIC8qCj4+Pj4gK8KgwqDC oMKgICogVGhlIHJlc291cmNlIGlzIG9ubHkgdXNlZCBiZXR3ZWVuIDIgY2FsbHMgb2YgcGxhdGZv cm1fZ2V0X3Jlc291cmNlLgo+Pj4+ICvCoMKgwqDCoCAqIEl0J3MgcXVpdGUgdWdseSBidXQgaXQn cyBhdm9pZCB0byBhZGQgdG9vIG11Y2ggY29kZSBpbiB0aGUgcGFydAo+Pj4+ICvCoMKgwqDCoCAq IGltcG9ydGVkIGZyb20gTGludXgKPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIHN0YXRp YyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+Pj4+ICvCoMKgwqAgc3RydWN0IGFjcGlfaW9ydF9ub2Rl ICppb3J0X25vZGU7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVf c21tdV9kYXRhOwo+Pj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAg cmVzLnR5cGUgPSB0eXBlOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHN3aXRjaCAodHlwZSkgewo+Pj4+ ICvCoMKgwqAgY2FzZSBJT1JFU09VUkNFX01FTToKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHBk ZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQg PSAxOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvcnRfbm9kZSA9IHBkZXYtPmFjcGlf bm9kZTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBub2RlX3NtbXVfZGF0YSA9Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3RydWN0IGFjcGlfaW9ydF9zbW11X3Yz ICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChub2RlX3NtbXVfZGF0YSAhPSBOVUxMKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXMuYWRkciA9IG5vZGVfc21tdV9kYXRhLT5iYXNlX2FkZHJlc3M7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXMuc2l6ZSA9IFNaXzEyOEs7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAwOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBkdF9kZXZpY2VfZ2V0X2FkZHJlc3MoZGV2X3RvX2R0 KHBkZXYpLCBudW0sCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmcmVzLmFkZHIsICZyZXMuc2l6ZSk7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAoKHJldCkgPyBOVUxMIDog JnJlcyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgY2FzZSBJT1JFU09VUkNFX0lSUToKPj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShkZXZfdG9fZHQocGRldiksIG51bSk7 Cj4+Pgo+Pj4gTm8gSVJRIGZvciBBQ1BJPwo+PiBGb3IgSVJRcyB0aGUgY29kZSBjYWxscyBwbGF0 Zm9ybV9nZXRfaXJxX2J5bmFtZS4gU28sIHRoZSBJT1JFU09VUkNFX0lSUSBpbXBsZW1lbnRhdGlv biBpcyBub3QgbmVlZGVkIGF0IGFsbC4gKERUIG9yIEFDUEkpCj4gCj4gUGxlYXNlIGRvY3VtZW50 IGl0IHRoZW4uCk9rLgo+IAo+IFsuLi5dCj4gCj4+Pgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB1ZGVs YXkoc2xlZXBfdXMpOyBcCj4+Pj4gK8KgwqDCoCB9IFwKPj4+PiArwqDCoMKgIChjb25kKSA/IDAg OiAtRVRJTUVET1VUOyBcCj4+Pj4gK30pCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIHJlYWRsX3JlbGF4 ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZhbCwgY29uZCwgZGVsYXlfdXMsIHRpbWVvdXRfdXMpIFwK Pj4+PiArwqDCoMKgIHJlYWR4X3BvbGxfdGltZW91dChyZWFkbF9yZWxheGVkLCBhZGRyLCB2YWws IGNvbmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKQo+Pj4+ICsKPj4+PiArLyogWGVuOiBIZWxwZXJz IGZvciBJUlEgZnVuY3Rpb25zICovCj4+Pj4gKyNkZWZpbmUgcmVxdWVzdF9pcnEoaXJxLCBmdW5j LCBmbGFncywgbmFtZSwgZGV2KSByZXF1ZXN0X2lycShpcnEsIGZsYWdzLCBmdW5jLCBuYW1lLCBk ZXYpCj4+Pj4gKyNkZWZpbmUgZnJlZV9pcnEgcmVsZWFzZV9pcnEKPj4+PiArCj4+Pj4gK2VudW0g aXJxcmV0dXJuIHsKPj4+PiArwqDCoMKgIElSUV9OT05FwqDCoMKgID0gKDAgPDwgMCksCj4+Pj4g K8KgwqDCoCBJUlFfSEFORExFRMKgwqDCoCA9ICgxIDw8IDApLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+ PiArdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKPj4+PiArCj4+Pj4gKy8qIERl dmljZSBsb2dnZXIgZnVuY3Rpb25zICovCj4+Pj4gKyNkZWZpbmUgZGV2X3ByaW50KGRldiwgbHZs LCBmbXQsIC4uLinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPj4+PiArwqDCoMKgwqAgcHJpbnRrKGx2bCAic21tdTogIiBmbXQsICMjIF9fVkFfQVJHU19f KQo+Pj4+ICsKPj4+PiArI2RlZmluZSBkZXZfZGJnKGRldiwgZm10LCAuLi4pIGRldl9wcmludChk ZXYsIFhFTkxPR19ERUJVRywgZm10LCAjIyBfX1ZBX0FSR1NfXykKPj4+PiArI2RlZmluZSBkZXZf bm90aWNlKGRldiwgZm10LCAuLi4pIGRldl9wcmludChkZXYsIFhFTkxPR19JTkZPLCBmbXQsICMj IF9fVkFfQVJHU19fKQo+Pj4+ICsjZGVmaW5lIGRldl93YXJuKGRldiwgZm10LCAuLi4pIGRldl9w cmludChkZXYsIFhFTkxPR19XQVJOSU5HLCBmbXQsICMjIF9fVkFfQVJHU19fKQo+Pj4+ICsjZGVm aW5lIGRldl9lcnIoZGV2LCBmbXQsIC4uLikgZGV2X3ByaW50KGRldiwgWEVOTE9HX0VSUiwgZm10 LCAjIyBfX1ZBX0FSR1NfXykKPj4+PiArI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZtdCwgLi4uKSBk ZXZfcHJpbnQoZGV2LCBYRU5MT0dfSU5GTywgZm10LCAjIyBfX1ZBX0FSR1NfXykKPj4+PiArCj4+ Pj4gKyNkZWZpbmUgZGV2X2Vycl9yYXRlbGltaXRlZChkZXYsIGZtdCwgLi4uKcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4+PiArwqDCoMKgwqAgZGV2X3ByaW50KGRl diwgWEVOTE9HX0VSUiwgZm10LCAjIyBfX1ZBX0FSR1NfXykKPj4+PiArCj4+Pj4gKyNkZWZpbmUg ZGV2X25hbWUoZGV2KSBkdF9ub2RlX2Z1bGxfbmFtZShkZXZfdG9fZHQoZGV2KSkKPj4+PiArCj4+ Pj4gKy8qIEFsaWFzIHRvIFhlbiBhbGxvY2F0aW9uIGhlbHBlcnMgKi8KPj4+PiArI2RlZmluZSBr ZnJlZSB4ZnJlZQo+Pj4+ICsjZGVmaW5lIGttYWxsb2Moc2l6ZSwgZmxhZ3MpwqDCoMKgwqDCoMKg wqAgX3htYWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpCj4+Pj4gKyNkZWZpbmUga3phbGxvYyhz aXplLCBmbGFncynCoMKgwqDCoMKgwqDCoCBfeHphbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkK Pj4+PiArI2RlZmluZSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplLCBmbGFncynCoMKgwqAgX3h6YWxs b2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpCj4+Pj4gKyNkZWZpbmUga21hbGxvY19hcnJheShzaXpl LCBuLCBmbGFncynCoMKgwqAgX3htYWxsb2NfYXJyYXkoc2l6ZSwgc2l6ZW9mKHZvaWQgKiksIG4p Cj4+Pj4gKwo+Pj4+ICsvKiBDb21wYXRpYmlsaXR5IGRlZmluZXMgKi8KPj4+PiArI3VuZGVmIFdB Uk5fT04KPj4+PiArI2RlZmluZSBXQVJOX09OKGNvbmQpICghIWNvbmQpCj4+Pgo+Pj4gV2h5IGRv IHlvdSByZWRlZmluZSBXQVJOX09OP05lZWQgaXQgdG8gYmUgYSBzY2FsYXIgdmFsdWUuIFRoZSBY ZW4gaW1wbGVtZW50YXRpb24gaXMgYSBkby4ud2hpbGUuIERpZCBub3Qgd2FudCBhIGxhcmdlIGlt cGFjdCBoZW5jZSB0aGUgbG9jYWwgZGVmaW5lLiBJIGNhbiB0cnkgcHJvcG9zaW5nIGEgbmV3IGNv bW1vbiBkZWZpbmUuCj4gCj4gV2VsbCwgSSBkb24ndCB0aGluayBpdCBpcyBhY2NlcHRhYmxlIHRv IHJlZGVmaW5lIFdBUk5fT04uIEF0IGxlYXN0IHdpdGhvdXQgdHJ5aW5nIHRvIG1vZGlmeSB0aGUg Y29tbW9uIHZlcnNpb24uCgpJIHdpbGwgcHV0IHRoaXMgaW4gdGhlIGNvbW1vbiBmb2xkZXIuCj4g Cj4+Pgo+Pj4+ICsjZGVmaW5lIFdBUk5fT05fT05DRShjb25kKSBXQVJOX09OKGNvbmQpCj4+Pj4g SG1tbSwgY2FuJ3Qgd2UgaW1wbGVtZW50IGEgY29tbW9uIFdBUk5fT05fT05DRT8KPj4gV2lsbCBu b3QgcmVhbGx5IGJlIGV4ZWN1dGVkLiBEZWZpbmluZyBpdCB0byBtYWludGFpbiBjb21wYXRpYmls aXR5LiBJIHRoaW5rIHRoaXMgZmlsZSBpcyB0aGUgcmlnaHQgcGxhY2UgZm9yIHRoaXMgZGVmaW5l LiBXZSBjYW4gc2VuZCBpdCB0byBhIGdlbmVyaWMgZmlsZSBpZiBzbyBuZWVkZWQuCj4gCj4gSSBj YW4ndCBzZWUgd2h5IHdlIHdvdWxkbid0IHdhbnQgdG8gaGF2ZSBhIFdBUk5fT05fT05DRSBpbiB0 aGUgY29tbW9uIGNvZGUuIElmIHlvdSBkaXNhZ3JlZSwgcGxlYXNlIGV4cGxhaW4uCj4gCj4gWy4u Ll0KPiAKPj4+Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2Ugewo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY3B1X3JlbGF4KCk7Cj4+Pgo+Pj4gSG1tbSBJIG5vdyBzZWUgd2h5IHlv dSBhZGRlZCBjcHVfcmVsYXgoKSBhdCB0aGUgdG9wLiBXZWxsLCBvbiBYZW4gY3B1X3JlbGF4IGlz IGp1c3QgYSBiYXJyaWVyLiBPbiBMaW51eCBpdCBpcyB1c2VkIHRvIHlpZWxkLgo+Pj4KPj4+IEFu ZCB0aGF0IGJpdCBpcyB3b3JyeWluZyBtZS4gVGhlIExpbnV4IGNvZGUgd2lsbCBhbGxvdyBjb250 ZXh0IHN3aXRjaGluZyB0byBhbm90aGVyIHRhc2tzIGlmIHRoZSBjb2RlIGlzIHRha2luZyB0b28g bXVjaCB0aW1lLgo+Pj4KPj4+IFhlbiBpcyBub3QgcHJlZW1wdGlibGUsIHNvIGlzIGl0IGZpbmU/ Cj4+IFRoaXMgaXMgdXNlZCB3aGVuIGNvbnN1bWluZyB0aGUgY29tbWFuZCBxdWV1ZSBhbmQgY291 bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWUgaWYgdGhlIHF1ZXVlIGlzIGxhcmdl LiAoVGhpcyBpcyBuZXZlciB0aGUgY2FzZSkuCj4+IEkgYW0gd29uZGVyaW5nIGlmIHdlIHNob3Vs ZCBkZWZpbmUgYSB5ZWlsZCBpbiBsb25nIHJ1bj8KPiAKPiBBcyBJIHNhaWQgYmVmb3JlLCBYZW4g aXMgbm90IHByZWVtcHRpYmxlLiBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgdGhlcmUgYXJlIHNw aW5sb2NrIHRha2VuIGJ5IHRoZSBjYWxsZXJzIChlLmcgYW55IGZ1bmN0aW9uIGFzc2lnbmluZyBk ZXZpY2UpLiBTbyB5aWVsZCB3b3VsZCBqdXN0IG1ha2UgaXQgd29yc3QuCj4gCj4gWy4uLl0KSSBj YW4ga2VlcCB0aGUgbWVtb3J5IGJhcnJpZXIgYXMgaXMuIFRoaXMgc2hvdWxkIG5vdCBpbXBhY3Qg bXVjaC4gVGhpcyBzaG91bGQgbm90IGJlIGEgY29uY2Vybi4KPiAKPj4+Cj4+Pj4gwqDCoMKgwqDC oMKgIHN0cnRhYiA9ICZjZmctPnN0cnRhYlsoc2lkID4+IFNUUlRBQl9TUExJVCkgKiBTVFJUQUJf TDFfREVTQ19EV09SRFNdOwo+Pj4+IMKgwqAgwqDCoMKgwqDCoCBkZXNjLT5zcGFuID0gU1RSVEFC X1NQTElUICsgMTsKPj4+PiAtwqDCoMKgIGRlc2MtPmwycHRyID0gZG1hbV9hbGxvY19jb2hlcmVu dChzbW11LT5kZXYsIHNpemUsICZkZXNjLT5sMnB0cl9kbWEsCj4+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgYWxpZ25tZW50ID0gMSA8PCAoKDUgKyAoZGVzYy0+c3BhbiAtIDEp KSk7Cj4+Pgo+Pj4gRG8geW91IG1pbmQgZXhwbGFpbmluZyB0aGUgNT8gQWxzbywgZG9lcyB0aGUg c2hpZnQgd2lsbCBhbHdheXMgYmUgPCAzMj8KPj4gSXRzIGZyb20gdGhlICJMZXZlbCAxIFN0cmVh bSBUYWJsZSBEZXNjcmlwdG9yIiBmcm9tIFNNTVUgc3BlYy4gSSBjYW4gYWRkIHRoZSByZWYgdG8g dGhlIHNwZWMuIFllcyB0aGUgc3BhbiBpcyBoYXJkIGNvZGVkIGluIHRoZSBkcml2ZXIgYW5kIHdp dGggYW55IHNwZWMgdmFsaWQgc3BhbiB2YWx1ZXMgdGhpcyBjYW5ub3QgZXhjZWVkIDMyLgo+PiBJ IGhhdmUgYWRkZWQgYSBjb21tZW50IHRvdCBoZSBjb2RlCj4+Pgo+Pj4+ICvCoMKgwqAgZGVzYy0+ bDJwdHIgPSBfeHphbGxvYyhzaXplLCBhbGlnbm1lbnQpOwo+Pj4+ICvCoMKgwqAgZGVzYy0+bDJw dHJfZG1hID0gdmlydF90b19tYWRkcihkZXNjLT5sMnB0cik7Cj4+Pgo+Pj4gX3h6YWxsb2MgY2Fu IGZhaWwgYW5kIHZpcnRfdG9fbWFkZHIgd2lsbCByZXN1bHQgdG8gYSBwYW5pYy4KPj4+Cj4+IEkg d2lsbCBtb3ZlIHRoZSBjaGVjay4KPj4+PiArCj4+Pj4gwqDCoMKgwqDCoMKgIGlmICghZGVzYy0+ bDJwdHIpIHsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHNtbXUtPmRldiwKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJmYWlsZWQgdG8gYWxsb2NhdGUgbDIgc3Ry ZWFtIHRhYmxlIGZvciBTSUQgJXVcbiIsCj4+Pj4gQEAgLTExNTgsNyArMTQxOCw3IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfaW5pdF9sMl9zdHJ0YWIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSwgdTMyIHNpZCkKPj4+PiDCoMKgIH0KPj4+PiDCoMKgIMKgIC8qIElSUSBhbmQgZXZlbnQgaGFu ZGxlcnMgKi8KPj4+PiAtc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2V2dHFfdGhyZWFkKGlu dCBpcnEsIHZvaWQgKmRldikKPj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZXZ0cV90aHJlYWQo aW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4+Cj4+PiBD b3VsZCB5b3UgcGxlYXNlIGludHJvZHVjZSBhIHdyYXBwZXIgaW5zdGVhZCBhcyBpdCB3YXMgZG9u ZSBpbiBzbW11LmM/Cj4+Pgo+PiBEb25lLgo+Pgo+Pj4+IMKgwqAgewo+Pj4+IMKgwqDCoMKgwqDC oCBpbnQgaTsKPj4+PiDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9 IGRldjsKPj4+PiBAQCAtMTE4Niw3ICsxNDQ2LDYgQEAgc3RhdGljIGlycXJldHVybl90IGFybV9z bW11X2V2dHFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldikKPj4+PiDCoMKgIMKgwqDCoMKgwqAg LyogU3luYyBvdXIgb3ZlcmZsb3cgZmxhZywgYXMgd2UgYmVsaWV2ZSB3ZSdyZSB1cCB0byBzcGVl ZCAqLwo+Pj4+IMKgwqDCoMKgwqDCoCBxLT5jb25zID0gUV9PVkYocSwgcS0+cHJvZCkgfCBRX1dS UChxLCBxLT5jb25zKSB8IFFfSURYKHEsIHEtPmNvbnMpOwo+Pj4+IC3CoMKgwqAgcmV0dXJuIElS UV9IQU5ETEVEOwo+Pj4+IMKgwqAgfQo+Pj4+IMKgwqAgwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVf aGFuZGxlX3BwcihzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1NjQgKmV2dCkKPj4+PiBA QCAtMTIwMyw3ICsxNDYyLDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfaGFuZGxlX3BwcihzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1NjQgKmV2dCkKPj4+PiDCoMKgIMKgwqDCoMKgwqAg ZGV2X2luZm8oc21tdS0+ZGV2LCAidW5leHBlY3RlZCBQUkkgcmVxdWVzdCByZWNlaXZlZDpcbiIp Owo+Pj4+IMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsCj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqAgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFj Y2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoCAiXHRzaWQg MHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEg MHglMDE2bHhcbiIsCj4+Pgo+Pj4gSG1tbSB3aHk/Cj4+IFRoZSB2YXJpYWJsZSBpcyBkZWZpbmVk IGFzIHVuZ2luZWQgbG9uZyBsb25nIGluIExpbnV4LiAoIHVzZXMgZ2VuZXJpYyBpbnQtbGw2NC5o KSBJbiBYZW4gdGhlIGRlZmluaXRpb24gY2hhbmdlcyB0byB1bnNpZ25lZCBsb25nIGZvciBBUk1f NjQgd2hpY2ggYWN0dWFsbHkgbWFrZXMgc2Vuc2UuCj4gCj4gdTY0IGlzIGEgNjQtYml0IHZhcmlh YmxlLiBBbmQgdGhlcmVmb3JlIHRoZSBmb3JtYXQgc2hvdWxkIGJlIFBSSXg2NCB0byBhY2NvbW9k YXRlIDY0LWJpdCBhbmQgMzItYml0LgpTdXJlLiBJIGNhbiBjaGFuZ2UgdGhlIGZvcm1hdCBzcGVj aWZpZXIuIAo+IAo+IFsuLi5dCj4gCj4+Pgo+Pj4+ICsKPj4+PiDCoMKgIMKgIHN0YXRpYyBzdHJ1 Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9kb21haW5fYWxsb2ModW5zaWduZWQgdHlwZSkKPj4+ PiDCoMKgIHsKPj4+PiBAQCAtMTQxMCw2ICsxNjc0LDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9k b21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBlKQo+Pj4+IMKgwqDCoMKg wqDCoCByZXR1cm4gJnNtbXVfZG9tYWluLT5kb21haW47Cj4+Pj4gwqDCoCB9Cj4+Pj4gwqDCoCAr I2lmIDAKPj4+Cj4+PiBQbGVhc2UgZXhwbGFpbiB0aGUgI2lmIDAKPj4+Cj4+IERvbmUuCj4+Cj4+ Pj4gwqDCoCBzdGF0aWMgaW50IGFybV9zbW11X2JpdG1hcF9hbGxvYyh1bnNpZ25lZCBsb25nICpt YXAsIGludCBzcGFuKQo+Pj4+IMKgwqAgewo+Pj4+IMKgwqDCoMKgwqDCoCBpbnQgaWR4LCBzaXpl ID0gMSA8PCBzcGFuOwo+Pj4+IEBAIC0xNDI3LDM2ICsxNjkyLDIwIEBAIHN0YXRpYyB2b2lkIGFy bV9zbW11X2JpdG1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IGlkeCkKPj4+PiDCoMKg IHsKPj4+PiDCoMKgwqDCoMKgwqAgY2xlYXJfYml0KGlkeCwgbWFwKTsKPj4+PiDCoMKgIH0KPj4+ PiArI2VuZGlmCj4+Pj4gwqDCoCDCoCBzdGF0aWMgdm9pZCBhcm1fc21tdV9kb21haW5fZnJlZShz dHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCj4+Pj4gwqDCoCB7Cj4+Pj4gwqDCoMKgwqDCoMKg IHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9t YWluKTsKPj4+PiAtwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11X2Rv bWFpbi0+c21tdTsKPj4+PiAtCj4+Pj4gLcKgwqDCoCBpb21tdV9wdXRfZG1hX2Nvb2tpZShkb21h aW4pOwo+Pj4+IC3CoMKgwqAgZnJlZV9pb19wZ3RhYmxlX29wcyhzbW11X2RvbWFpbi0+cGd0Ymxf b3BzKTsKPj4+PiAtCj4+Pj4gLcKgwqDCoCAvKiBGcmVlIHRoZSBDRCBhbmQgQVNJRCwgaWYgd2Ug YWxsb2NhdGVkIHRoZW0gKi8KPj4+PiAtwqDCoMKgIGlmIChzbW11X2RvbWFpbi0+c3RhZ2UgPT0g QVJNX1NNTVVfRE9NQUlOX1MxKSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21t dV9zMV9jZmcgKmNmZyA9ICZzbW11X2RvbWFpbi0+czFfY2ZnOwo+Pj4+IC0KPj4+PiAtwqDCoMKg wqDCoMKgwqAgaWYgKGNmZy0+Y2RwdHIpIHsKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk bWFtX2ZyZWVfY29oZXJlbnQoc21tdV9kb21haW4tPnNtbXUtPmRldiwKPj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ1RYREVTQ19DRF9EV09SRFMgPDwg MywKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2Zn LT5jZHB0ciwKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY2ZnLT5jZHB0cl9kbWEpOwo+Pj4+IC0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh cm1fc21tdV9iaXRtYXBfZnJlZShzbW11LT5hc2lkX21hcCwgY2ZnLT5jZC5hc2lkKTsKPj4+PiAt wqDCoMKgwqDCoMKgwqAgfQo+Pj4+IC3CoMKgwqAgfSBlbHNlIHsKPj4+PiAtwqDCoMKgwqDCoMKg wqAgc3RydWN0IGFybV9zbW11X3MyX2NmZyAqY2ZnID0gJnNtbXVfZG9tYWluLT5zMl9jZmc7Cj4+ Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChjZmctPnZtaWQpCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXJtX3NtbXVfYml0bWFwX2ZyZWUoc21tdS0+dm1pZF9tYXAsIGNmZy0+dm1pZCk7Cj4+ Pj4gLcKgwqDCoCB9Cj4+Pj4gK8KgwqDCoCAvKgo+Pj4+ICvCoMKgwqDCoCAqIFhlbjogUmVtb3Zl IHRoZSBmcmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgdXNlZCBhbmQgY29kZSByZWxhdGVkCj4+ Pj4gK8KgwqDCoMKgICogdG8gUzEgdHJhbnNsYXRpb24uIFdlIGp1c3QgbmVlZCB0byBmcmVlIHRo ZSBkb21haW4gaGVyZS4KPj4+PiArwqDCoMKgwqAgKi8KPj4+Cj4+PiBQbGVhc2UgdXNlICNpZiAw IHJhdGhlciB0aGFuIHJlbW92aW5nIHRoZSBjb2RlICsgY29tbWVudCBvbiB0b3AuIEJ1dCBJIGFt IG5vdCBzdXJlIHdoeSB5b3UgZHJvcCB0aGUgUzIgZnJlZSBjb2RlLiBTaG91bGRuJ3Qgd2UgYWxs b2NhdGUgVk1JRCBmcm9tIHRoZSBTTU1VPwo+PiBJIGFtIHBpY2tpbmcgdXAgdGhlIHZtaWQgZnJv bSB0aGUgZG9tYWluIEkgYW0gc2hhcmluZyB0aGUgcGFnZSB0YWJsZXMgd2l0aC4gZG9tYWluLT5h cmNoLnAybS52bWlkLiBUaGlzIHNlZW1lZCB2YWxpZC4gUGxlYXNlIGxldCBtZSBrbm93IGlmIHdl IHdhbnQgdG8gZ2VuZXJhdGUgYSBkaWZmZXJlbnQgdm1pZD8KPiAKPiBUaGUgcHJvY2Vzc29yIGFu ZCB0aGUgU01NVSBtYXkgc3VwcG9ydCBlaXRoZXIgOCBvciAxNmJpdHMgVk1JRCBidXQgSSBkb24n dCB0aGluayBhbnkgdGhpbmcgaW4gdGhlIHNwZWMgc2F5cyB0aGF0IGJvdGggcHJvY2Vzc29yIGFu ZCBTTU1VIG11c3Qgc3VwcG9ydCB0aGUgc2FtZSB2YWx1ZS4KPiAKPiBTbyBpdCB3b3VsZCBiZSBw b3NzaWJsZSB0byBoYXZlIGEgcHJvY2Vzc29yIHN1cHBvcnRpbmcgMTYtYml0cyBWTUlEIGFuZCB0 aGUgU01NVSBvbmx5IDgtYml0cyBWTUlELgo+IAo+IEFkZGluZyBhIGNoZWNrIGF0IHRoZSBTTU1V IGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGEgc29sdXRpb24uIEJ1dCBhcyB0aGUgY29kZSBmb3Ig YWxsb2NhdGluZyB0aGUgVk1JRCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZW4gSSB3b3VsZCBwcmVm ZXIgdG8gd2Ugc3RpY2sgd2l0aCBkaWZmZXJlbnQgdGhlIFZNSUQuClN1cmUuIEZvciB0aGlzIGl0 ZXJhdGlvbiBJIHdpbGwgZ2VuZXJhdGUgYW4gU01NVSBzcGVjaWZpYyBWTUlELiBEbyB5b3UgdGhp bmsgaXQgd291bGQgYmUgYW4gb3B0aW1pemF0aW9uIHRvIHJldXNlIHRoZSBDUFUgVk1JRCBpZiBT TU1VIHN1cHBvcnRzIDE2Yml0IFZNSUQ/CgpUaGFua3MsClNhbWVlcgo+IAo+Pgo+Pgo+Pj4KPj4+ PiDCoMKgIMKgwqDCoMKgwqAga2ZyZWUoc21tdV9kb21haW4pOwo+Pj4+IMKgwqAgfQo+Pj4+IMKg wqAgKyNpZiAwCj4+Pj4gwqDCoCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9z MShzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiwKPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJsZV9j ZmcgKnBndGJsX2NmZykKPj4+PiDCoMKgIHsKPj4+PiBAQCAtMTQ4OCwzMyArMTczNywzMCBAQCBv dXRfZnJlZV9hc2lkOgo+Pj4+IMKgwqDCoMKgwqDCoCBhcm1fc21tdV9iaXRtYXBfZnJlZShzbW11 LT5hc2lkX21hcCwgYXNpZCk7Cj4+Pj4gwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gwqDC oCB9Cj4+Pj4gKyNlbmRpZgo+Pj4+IMKgwqAgLXN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2Zp bmFsaXNlX3MyKHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluLAo+Pj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW9fcGd0YWJs ZV9jZmcgKnBndGJsX2NmZykKPj4+PiArc3RhdGljIGludCBhcm1fc21tdV9kb21haW5fZmluYWxp c2VfczIoc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4pCj4+Pj4gwqDCoCB7Cj4+ Pj4gLcKgwqDCoCBpbnQgdm1pZDsKPj4+PiAtwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2Ug KnNtbXUgPSBzbW11X2RvbWFpbi0+c21tdTsKPj4+PiDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9z bW11X3MyX2NmZyAqY2ZnID0gJnNtbXVfZG9tYWluLT5zMl9jZmc7Cj4+Pj4gwqDCoCAtwqDCoMKg IHZtaWQgPSBhcm1fc21tdV9iaXRtYXBfYWxsb2Moc21tdS0+dm1pZF9tYXAsIHNtbXUtPnZtaWRf Yml0cyk7Cj4+Pj4gLcKgwqDCoCBpZiAodm1pZCA8IDApCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJl dHVybiB2bWlkOwo+Pj4+ICvCoMKgwqAgLyogWGVuOiBTZXQgdGhlIHZhbHVlcyBhcyBuZWVkZWQg Ki8KPj4+PiDCoMKgIC3CoMKgwqAgY2ZnLT52bWlkwqDCoMKgID0gKHUxNil2bWlkOwo+Pj4+IC3C oMKgwqAgY2ZnLT52dHRicsKgwqDCoCA9IHBndGJsX2NmZy0+YXJtX2xwYWVfczJfY2ZnLnZ0dGJy Owo+Pj4+IC3CoMKgwqAgY2ZnLT52dGNywqDCoMKgID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9j ZmcudnRjcjsKPj4+PiArwqDCoMKgIGNmZy0+dm1pZMKgwqDCoCA9IGNmZy0+ZG9tYWluLT5hcmNo LnAybS52bWlkOwo+Pj4KPj4+IFNlZSBteSBjb21tZW50IGFib3ZlLgo+PiBJIGFtIHdvbmRlcmlu ZyB3aHkgd2UgYXJlIGNvbnNpZGVyaW5nIHRoaXMgdmFsdWUgaW52YWxpZD8gU2luY2UgdGhlIHBh Z2UgdGFibGVzIGFyZSBzaGFyZWQgd2UgY2FuIHVzZSB0aGUgdm1pZCBmcm9tIHRoZSBkb21haW4u IElzIHRoZSBjb25jZXJuIHJlZ2FyZGluZyB0aGUgc2l6ZT8KPiAKPiBTZWUgYWJvdmUuCj4gCj4g Q2hlZXJzLAo+IAoKLS0gCiBRdWFsY29tbSBEYXRhY2VudGVyIFRlY2hub2xvZ2llcyBhcyBhbiBh ZmZpbGlhdGUgb2YgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIFF1YWxjb21tIFRlY2hub2xv Z2llcywgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sIGEgTGludXgg Rm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QuCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK