Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp378257ybb; Sat, 28 Mar 2020 01:03:11 -0700 (PDT) X-Google-Smtp-Source: ADFU+vufJ7TeQ34aTTXwzftwwXNM3c73ZvLgtsvanhtGtrOdVSzp6bENg2Bm/Jf7i5vib5viPgMh X-Received: by 2002:aca:b5c3:: with SMTP id e186mr1665861oif.114.1585382591081; Sat, 28 Mar 2020 01:03:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585382591; cv=none; d=google.com; s=arc-20160816; b=fW+sKwM0UkHQQxCIm60PTuIlmHFVRKttKzhwEn4qVr+MXHzgh12J0jDd7hEkJjqZKi 9wBK5/ZYRSS0jZKRUQuwDIIf/RNFEi/C+qErR2R4lOVzu9/DNapSoDHly/zQbMWmhBEt ozJdhi9+5ooKbwlf+Ww2r9TrH+d4h3zdJ7FCLd4ktUm1+cJYEHhLbhhvO0o/vhHF5Q55 3McrFbyHGeIEe4D06gwYJNIM4FQhFKmqaLkUo3Y2WV2SQ1fVOHPjcTPHGk1kxmwzNYnU foERiZvuJq14FeBHPkwTg3aITziXNtF25xomE1UWHwZIsMLhaaD3Ue9YkR3A+Bub/blD vdKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=6MgRPs6DmOhsEmo9+ZhSxGglpwx36ZM4DqnWEE4v6tk=; b=KpNiIBuHanDg1/Ypn38/21zBb31fVLelDYOocZZsB4r32RTmCLwAodssmtZ2Ye3bgK 5ca7unukfEtFRpTmHUGmR4iRbAhZsyXFsQWpeaMtXtPJwI0uyJNLO5J0yWAjezZfIYR2 MXHyXTvexZv9pofaKH2YV6HJX6PyBj0y4urED4bSgUq9UQjLz3wHVLljmGhrYx2T8J4B 0r1W/6xhvHBknQg3i0C4pDDzpH+aKLBFziWtAHa3jfqPooVnu7IEvL4+ergDs6rFCd3I RraK88vU+ylxTMCYfiwI7Uh/P1HL2Gk5mEwkJNtSlylgx4BdWUpKSJmPVD/IfnvXf92Z iM/A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l131si3310598oih.10.2020.03.28.01.02.57; Sat, 28 Mar 2020 01:03:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726186AbgC1ICI (ORCPT + 99 others); Sat, 28 Mar 2020 04:02:08 -0400 Received: from mga04.intel.com ([192.55.52.120]:14298 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725800AbgC1ICI (ORCPT ); Sat, 28 Mar 2020 04:02:08 -0400 IronPort-SDR: GML189JtfdLfUbR7sXWw8YEvw0uRDpmrs+ZrKhadCvXcRq+wl0BJTkfKNASwqobGCBt6ehy2pi pl/LsmVqEzaw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Mar 2020 01:02:06 -0700 IronPort-SDR: NUW1Xirk+N7d6FPJygw9Y0Y0T9gpns5l0UY3o7EiveSAqnBqyMODsmrZ49ISNSfyECy7KY2LnW +1rDyVUOJ8Jw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,315,1580803200"; d="scan'208";a="358705738" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 28 Mar 2020 01:02:06 -0700 Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 28 Mar 2020 01:02:05 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by FMSMSX153.amr.corp.intel.com (10.18.125.6) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 28 Mar 2020 01:02:05 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.89]) with mapi id 14.03.0439.000; Sat, 28 Mar 2020 16:02:02 +0800 From: "Tian, Kevin" To: Jacob Pan , Lu Baolu , "iommu@lists.linux-foundation.org" , LKML , Joerg Roedel , David Woodhouse , "Alex Williamson" , Jean-Philippe Brucker CC: "Liu, Yi L" , "Raj, Ashok" , Christoph Hellwig , Jonathan Cameron , Eric Auger , Yi L Subject: RE: [PATCH V10 06/11] iommu/vt-d: Add bind guest PASID support Thread-Topic: [PATCH V10 06/11] iommu/vt-d: Add bind guest PASID support Thread-Index: AQHV/w5foy7T7IWYZE6uagYhbLhuWKhcZlrw Date: Sat, 28 Mar 2020 08:02:01 +0000 Message-ID: References: <1584746861-76386-1-git-send-email-jacob.jun.pan@linux.intel.com> <1584746861-76386-7-git-send-email-jacob.jun.pan@linux.intel.com> In-Reply-To: <1584746861-76386-7-git-send-email-jacob.jun.pan@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiBTZW50 OiBTYXR1cmRheSwgTWFyY2ggMjEsIDIwMjAgNzoyOCBBTQ0KPiANCj4gV2hlbiBzdXBwb3J0aW5n IGd1ZXN0IFNWQSB3aXRoIGVtdWxhdGVkIElPTU1VLCB0aGUgZ3Vlc3QgUEFTSUQNCj4gdGFibGUg aXMgc2hhZG93ZWQgaW4gVk1NLiBVcGRhdGVzIHRvIGd1ZXN0IHZJT01NVSBQQVNJRCB0YWJsZQ0K PiB3aWxsIHJlc3VsdCBpbiBQQVNJRCBjYWNoZSBmbHVzaCB3aGljaCB3aWxsIGJlIHBhc3NlZCBk b3duIHRvDQo+IHRoZSBob3N0IGFzIGJpbmQgZ3Vlc3QgUEFTSUQgY2FsbHMuDQo+IA0KPiBGb3Ig dGhlIFNMIHBhZ2UgdGFibGVzLCBpdCB3aWxsIGJlIGhhcnZlc3RlZCBmcm9tIGRldmljZSdzDQo+ IGRlZmF1bHQgZG9tYWluIChyZXF1ZXN0IHcvbyBQQVNJRCksIG9yIGF1eCBkb21haW4gaW4gY2Fz ZSBvZg0KPiBtZWRpYXRlZCBkZXZpY2UuDQo+IA0KPiAgICAgLi0tLS0tLS0tLS0tLS0uICAuLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KPiAgICAgfCAgIHZJT01NVSAgICB8ICB8IEd1ZXN0 IHByb2Nlc3MgQ1IzLCBGTCBvbmx5fA0KPiAgICAgfCAgICAgICAgICAgICB8ICAnLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tJw0KPiAgICAgLi0tLS0tLS0tLS0tLS0tLS0vDQo+ICAgICB8IFBB U0lEIEVudHJ5IHwtLS0gUEFTSUQgY2FjaGUgZmx1c2ggLQ0KPiAgICAgJy0tLS0tLS0tLS0tLS0n ICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgIFYNCj4gICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBDUjMg aW4gR1BBDQo+ICAgICAnLS0tLS0tLS0tLS0tLScNCj4gR3Vlc3QNCj4gLS0tLS0tfCBTaGFkb3cg fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tDQo+ICAgICAgIHYgICAgICAgIHYg ICAgICAgICAgICAgICAgICAgICAgICAgIHYNCj4gSG9zdA0KPiAgICAgLi0tLS0tLS0tLS0tLS0u ICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCj4gICAgIHwgICBwSU9NTVUgICAgfCAgfCBCaW5k IEZMIGZvciBHVkEtR1BBICB8DQo+ICAgICB8ICAgICAgICAgICAgIHwgICctLS0tLS0tLS0tLS0t LS0tLS0tLS0tJw0KPiAgICAgLi0tLS0tLS0tLS0tLS0tLS0vICB8DQo+ICAgICB8IFBBU0lEIEVu dHJ5IHwgICAgIFYgKE5lc3RlZCB4bGF0ZSkNCj4gICAgICctLS0tLS0tLS0tLS0tLS0tXC4tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQo+ICAgICB8ICAgICAgICAgICAgIHwgICB8U0wg Zm9yIEdQQS1IUEEsIGRlZmF1bHQgZG9tYWlufA0KPiAgICAgfCAgICAgICAgICAgICB8ICAgJy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScNCj4gICAgICctLS0tLS0tLS0tLS0tJw0KPiBX aGVyZToNCj4gIC0gRkwgPSBGaXJzdCBsZXZlbC9zdGFnZSBvbmUgcGFnZSB0YWJsZXMNCj4gIC0g U0wgPSBTZWNvbmQgbGV2ZWwvc3RhZ2UgdHdvIHBhZ2UgdGFibGVzDQo+IA0KPiBTaWduZWQtb2Zm LWJ5OiBKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiBTaWduZWQt b2ZmLWJ5OiBMaXUsIFlpIEwgPHlpLmwubGl1QGxpbnV4LmludGVsLmNvbT4NCj4gLS0tDQo+ICBk cml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMgfCAgIDQgKw0KPiAgZHJpdmVycy9pb21tdS9pbnRl bC1zdm0uYyAgIHwgMjI0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQo+ICBpbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmggfCAgIDggKy0NCj4gIGluY2x1 ZGUvbGludXgvaW50ZWwtc3ZtLmggICB8ICAxNyArKysrDQo+ICA0IGZpbGVzIGNoYW5nZWQsIDI1 MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pb21tdS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jDQo+IGlu ZGV4IGU1OTliMjUzN2IxYy4uYjE0NzdjZDQyM2RkIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2lv bW11L2ludGVsLWlvbW11LmMNCj4gKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jDQo+ IEBAIC02MjAzLDYgKzYyMDMsMTAgQEAgY29uc3Qgc3RydWN0IGlvbW11X29wcyBpbnRlbF9pb21t dV9vcHMgPSB7DQo+ICAJLmRldl9kaXNhYmxlX2ZlYXQJPSBpbnRlbF9pb21tdV9kZXZfZGlzYWJs ZV9mZWF0LA0KPiAgCS5pc19hdHRhY2hfZGVmZXJyZWQJPSBpbnRlbF9pb21tdV9pc19hdHRhY2hf ZGVmZXJyZWQsDQo+ICAJLnBnc2l6ZV9iaXRtYXAJCT0gSU5URUxfSU9NTVVfUEdTSVpFUywNCj4g KyNpZmRlZiBDT05GSUdfSU5URUxfSU9NTVVfU1ZNDQo+ICsJLnN2YV9iaW5kX2dwYXNpZAk9IGlu dGVsX3N2bV9iaW5kX2dwYXNpZCwNCj4gKwkuc3ZhX3VuYmluZF9ncGFzaWQJPSBpbnRlbF9zdm1f dW5iaW5kX2dwYXNpZCwNCj4gKyNlbmRpZg0KPiAgfTsNCj4gDQo+ICBzdGF0aWMgdm9pZCBxdWly a19pb21tdV9pZ2Z4KHN0cnVjdCBwY2lfZGV2ICpkZXYpDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2lvbW11L2ludGVsLXN2bS5jIGIvZHJpdmVycy9pb21tdS9pbnRlbC1zdm0uYw0KPiBpbmRleCBk N2YyYTUzNTg5MDAuLjQ3YzBkZWI1YWU1NiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9pb21tdS9p bnRlbC1zdm0uYw0KPiArKysgYi9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jDQo+IEBAIC0yMjYs NiArMjI2LDIzMCBAQCBzdGF0aWMgTElTVF9IRUFEKGdsb2JhbF9zdm1fbGlzdCk7DQo+ICAJbGlz dF9mb3JfZWFjaF9lbnRyeSgoc2RldiksICYoc3ZtKS0+ZGV2cywgbGlzdCkJXA0KPiAgCQlpZiAo KGQpICE9IChzZGV2KS0+ZGV2KSB7fSBlbHNlDQo+IA0KPiAraW50IGludGVsX3N2bV9iaW5kX2dw YXNpZChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sDQo+ICsJCQlzdHJ1Y3QgZGV2aWNlICpk ZXYsDQo+ICsJCQlzdHJ1Y3QgaW9tbXVfZ3Bhc2lkX2JpbmRfZGF0YSAqZGF0YSkNCj4gK3sNCj4g KwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gaW50ZWxfc3ZtX2RldmljZV90b19pb21tdShk ZXYpOw0KPiArCXN0cnVjdCBkbWFyX2RvbWFpbiAqZGRvbWFpbjsNCg0Kd2hhdCBhYm91dCB0aGUg ZnVsbCBuYW1lIGUuZy4gZG1hcl9kb21haW4/IHRob3VnaCBhIGJpdCBsb25nZXINCmJ1dCBjbGVh cmVyIHRoYW4gZGRvbWFpbi4NCg0KPiArCXN0cnVjdCBpbnRlbF9zdm1fZGV2ICpzZGV2Ow0KPiAr CXN0cnVjdCBpbnRlbF9zdm0gKnN2bTsNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKw0KPiArCWlmIChX QVJOX09OKCFpb21tdSkgfHwgIWRhdGEpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJ aWYgKGRhdGEtPnZlcnNpb24gIT0gSU9NTVVfR1BBU0lEX0JJTkRfVkVSU0lPTl8xIHx8DQo+ICsJ ICAgIGRhdGEtPmZvcm1hdCAhPSBJT01NVV9QQVNJRF9GT1JNQVRfSU5URUxfVlREKQ0KPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmIChkZXZfaXNfcGNpKGRldikpIHsNCj4gKwkJLyog VlQtZCBzdXBwb3J0cyBkZXZpY2VzIHdpdGggZnVsbCAyMCBiaXQgUEFTSURzIG9ubHkgKi8NCj4g KwkJaWYgKHBjaV9tYXhfcGFzaWRzKHRvX3BjaV9kZXYoZGV2KSkgIT0gUEFTSURfTUFYKQ0KPiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfSBlbHNlIHsNCj4gKwkJcmV0dXJuIC1FTk9UU1VQUDsN Cj4gKwl9DQo+ICsNCj4gKwkvKg0KPiArCSAqIFdlIG9ubHkgY2hlY2sgaG9zdCBQQVNJRCByYW5n ZSwgd2UgaGF2ZSBubyBrbm93bGVkZ2UgdG8gY2hlY2sNCj4gKwkgKiBndWVzdCBQQVNJRCByYW5n ZSBub3IgZG8gd2UgdXNlIHRoZSBndWVzdCBQQVNJRC4NCj4gKwkgKi8NCj4gKwlpZiAoZGF0YS0+ aHBhc2lkIDw9IDAgfHwgZGF0YS0+aHBhc2lkID49IFBBU0lEX01BWCkNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsNCj4gKwlkZG9tYWluID0gdG9fZG1hcl9kb21haW4oZG9tYWluKTsNCj4gKw0K PiArCS8qIFNhbml0eSBjaGVjayBwYWdpbmcgbW9kZSBzdXBwb3J0IG1hdGNoIGJldHdlZW4gaG9z dCBhbmQgZ3Vlc3QNCj4gKi8NCj4gKwlpZiAoZGF0YS0+YWRkcl93aWR0aCA9PSBBRERSX1dJRFRI XzVMRVZFTCAmJg0KPiArCSAgICAhY2FwXzVscF9zdXBwb3J0KGlvbW11LT5jYXApKSB7DQo+ICsJ CXByX2VycigiQ2Fubm90IHN1cHBvcnQgNSBsZXZlbCBwYWdpbmcgcmVxdWVzdGVkIGJ5DQo+IGd1 ZXN0IVxuIik7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCg0KLUVOT1RTVVBQPw0KDQo+ ICsNCj4gKwltdXRleF9sb2NrKCZwYXNpZF9tdXRleCk7DQo+ICsJc3ZtID0gaW9hc2lkX2ZpbmQo TlVMTCwgZGF0YS0+aHBhc2lkLCBOVUxMKTsNCj4gKwlpZiAoSVNfRVJSKHN2bSkpIHsNCj4gKwkJ cmV0ID0gUFRSX0VSUihzdm0pOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAo c3ZtKSB7DQo+ICsJCS8qDQo+ICsJCSAqIElmIHdlIGZvdW5kIHN2bSBmb3IgdGhlIFBBU0lELCB0 aGVyZSBtdXN0IGJlIGF0DQo+ICsJCSAqIGxlYXN0IG9uZSBkZXZpY2UgYm9uZCwgb3RoZXJ3aXNl IHN2bSBzaG91bGQgYmUgZnJlZWQuDQo+ICsJCSAqLw0KPiArCQlpZiAoV0FSTl9PTihsaXN0X2Vt cHR5KCZzdm0tPmRldnMpKSkgew0KPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gKwkJCWdvdG8gb3V0 Ow0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKHN2bS0+bW0gPT0gZ2V0X3Rhc2tfbW0oY3VycmVudCkg JiYNCj4gKwkJICAgIGRhdGEtPmhwYXNpZCA9PSBzdm0tPnBhc2lkICYmDQo+ICsJCSAgICBkYXRh LT5ncGFzaWQgPT0gc3ZtLT5ncGFzaWQpIHsNCj4gKwkJCXByX3dhcm4oIkNhbm5vdCBiaW5kIHRo ZSBzYW1lIGd1ZXN0LWhvc3QgUEFTSUQgZm9yDQo+IHRoZSBzYW1lIHByb2Nlc3NcbiIpOw0KDQpT b3JyeSBJIGRpZG7igJl0IGdldCB0aGUgcmF0aW9uYWxlIGhlcmUuIElzbid0IHRoaXMgYnJhbmNo IGlzIGZvciBiaW5kaW5nIHRoZSBzYW1lDQpQQVNJRCB0byBtdWx0aXBsZSBkZXZpY2VzPyBJbiB0 aGF0IGNhc2UgZGVmaW5pdGVseSBpdCBpcyBiaW5kaW5nIHRoZSBzYW1lIA0KZ3Vlc3QtaG9zdCBQ QVNJRCBmb3IgdGhlIHNhbWUgcHJvY2Vzcy4gb3RoZXJ3aXNlIGlmIGhwYXNpZCBpcyBkaWZmZXJl bnQgdGhlbg0KeW91J2xsIGhpdCBhIGRpZmZlcmVudCBpbnRlbF9zdm0sIHdoaWxlIGlmIGdwYXNp ZCBpcyBkaWZmZXJlbnQgaG93IHlvdSBjYW4gdXNlDQpvbmUgaW50ZWxfc3ZtIHRvIGhvbGQgbXVs dGlwbGUgZ3Bhc2lkcz8NCg0KSSBmZWVsIHRoZSBlcnJvciBjb25kaXRpb24gc2hvdWxkIGJlIHRo ZSBvcHBvc2l0ZS4gYW5kIHN1cHBvc2UgU1ZNX0ZMQUdfDQpHVUVTVF9QQVNJRCBzaG91bGQgYmUg dmVyaWZpZWQgYmVmb3JlIGNoZWNraW5nIGdwYXNpZC4NCg0KPiArCQkJbW1wdXQoc3ZtLT5tbSk7 DQo+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKwkJbW1w dXQoY3VycmVudC0+bW0pOw0KPiArDQo+ICsJCWZvcl9lYWNoX3N2bV9kZXYoc2Rldiwgc3ZtLCBk ZXYpIHsNCj4gKwkJCS8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgc3ViLWRldmljZXMgb2YgdGhlIHNh bWUgcGRldg0KPiArCQkJICogYXNzaWduZWQsIHdlIHNob3VsZCBhbGxvdyBtdWx0aXBsZSBiaW5k IGNhbGxzIHdpdGgNCj4gKwkJCSAqIHRoZSBzYW1lIFBBU0lEIGFuZCBwZGV2Lg0KDQpEb2VzIHN1 Yi1kZXZpY2UgbWVhbiBtZGV2PyBJIGRpZG4ndCBmaW5kIHN1Y2ggbm90YXRpb24gaW4gY3VycmVu dCBpb21tdQ0KZGlyZWN0b3J5Lg0KDQphbmQgdG8gbWFrZSBpdCBjbGVhcmVyLCAiSW4gY2FzZSBv ZiBtdWx0aXBsZSBtZGV2cyBvZiB0aGUgc2FtZSBwZGV2IGFzc2lnbmVkDQp0byB0aGUgc2FtZSBn dWVzdCBwcm9jZXNzIi4NCg0KPiArCQkJICovDQo+ICsJCQlzZGV2LT51c2VycysrOw0KPiArCQkJ Z290byBvdXQ7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQkvKiBXZSBjb21lIGhlcmUgd2hl biBQQVNJRCBoYXMgbmV2ZXIgYmVlbiBib25kIHRvIGENCj4gZGV2aWNlLiAqLw0KPiArCQlzdm0g PSBremFsbG9jKHNpemVvZigqc3ZtKSwgR0ZQX0tFUk5FTCk7DQo+ICsJCWlmICghc3ZtKSB7DQo+ ICsJCQlyZXQgPSAtRU5PTUVNOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKwkJLyogUkVW SVNJVDogdXBwZXIgbGF5ZXIvVkZJTyBjYW4gdHJhY2sgaG9zdCBwcm9jZXNzIHRoYXQgYmluZA0K PiB0aGUgUEFTSUQuDQo+ICsJCSAqIGlvYXNpZF9zZXQgPSBtbSBtaWdodCBiZSBzdWZmaWNpZW50 IGZvciB2ZmlvIHRvIGNoZWNrIHBhc2lkDQo+IFZNTQ0KPiArCQkgKiBvd25lcnNoaXAuDQo+ICsJ CSAqLw0KDQpBYm92ZSBtZXNzYWdlIGlzIHVuY2xlYXIgYWJvdXQgd2hhdCBzaG91bGQgYmUgcmV2 aXNpdGVkLiBEb2VzIGl0IGRlc2NyaWJlDQp0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvciB0 aGUgZXhwZWN0ZWQgcmV2aXNpb24gaW4gdGhlIGZ1dHVyZT8gDQoNCj4gKwkJc3ZtLT5tbSA9IGdl dF90YXNrX21tKGN1cnJlbnQpOw0KPiArCQlzdm0tPnBhc2lkID0gZGF0YS0+aHBhc2lkOw0KPiAr CQlpZiAoZGF0YS0+ZmxhZ3MgJiBJT01NVV9TVkFfR1BBU0lEX1ZBTCkgew0KPiArCQkJc3ZtLT5n cGFzaWQgPSBkYXRhLT5ncGFzaWQ7DQo+ICsJCQlzdm0tPmZsYWdzIHw9IFNWTV9GTEFHX0dVRVNU X1BBU0lEOw0KPiArCQl9DQo+ICsJCWlvYXNpZF9zZXRfZGF0YShkYXRhLT5ocGFzaWQsIHN2bSk7 DQo+ICsJCUlOSVRfTElTVF9IRUFEX1JDVSgmc3ZtLT5kZXZzKTsNCj4gKwkJbW1wdXQoc3ZtLT5t bSk7DQo+ICsJfQ0KPiArCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldiksIEdGUF9LRVJORUwp Ow0KPiArCWlmICghc2Rldikgew0KPiArCQlpZiAobGlzdF9lbXB0eSgmc3ZtLT5kZXZzKSkgew0K PiArCQkJaW9hc2lkX3NldF9kYXRhKGRhdGEtPmhwYXNpZCwgTlVMTCk7DQo+ICsJCQlrZnJlZShz dm0pOw0KPiArCQl9DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0N Cj4gKwlzZGV2LT5kZXYgPSBkZXY7DQo+ICsJc2Rldi0+dXNlcnMgPSAxOw0KPiArDQo+ICsJLyog U2V0IHVwIGRldmljZSBjb250ZXh0IGVudHJ5IGZvciBQQVNJRCBpZiBub3QgZW5hYmxlZCBhbHJl YWR5ICovDQo+ICsJcmV0ID0gaW50ZWxfaW9tbXVfZW5hYmxlX3Bhc2lkKGlvbW11LCBzZGV2LT5k ZXYpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxl IFBBU0lEIGNhcGFiaWxpdHlcbiIpOw0KPiArCQlrZnJlZShzZGV2KTsNCj4gKwkJLyoNCj4gKwkJ ICogSWYgdGhpcyB0aGlzIGEgbmV3IFBBU0lEIHRoYXQgbmV2ZXIgYm9uZCB0byBhIGRldmljZSwg dGhlbg0KPiArCQkgKiB0aGUgZGV2aWNlIGxpc3QgbXVzdCBiZSBlbXB0eSB3aGljaCBpbmRpY2F0 ZXMgc3RydWN0IHN2bQ0KPiArCQkgKiB3YXMgYWxsb2NhdGVkIGluIHRoaXMgZnVuY3Rpb24uDQo+ ICsJCSAqLw0KDQp0aGUgY29tbWVudCBiZXR0ZXIgbW92ZSB0byB0aGUgMXN0IG9jY3VycmVuY2Ug d2hlbiBzZGV2IGFsbG9jYXRpb24NCmZhaWxzLiBvciBldmVuIGJldHRlciBwdXQgaXQgaW4gb3V0 IGxhYmVsLi4uDQoNCj4gKwkJaWYgKGxpc3RfZW1wdHkoJnN2bS0+ZGV2cykpIHsNCj4gKwkJCWlv YXNpZF9zZXRfZGF0YShkYXRhLT5ocGFzaWQsIE5VTEwpOw0KPiArCQkJa2ZyZWUoc3ZtKTsNCj4g KwkJfQ0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwkvKg0KPiArCSAqIEZvciBndWVz dCBiaW5kLCB3ZSBuZWVkIHRvIHNldCB1cCBQQVNJRCB0YWJsZSBlbnRyeSBhcyBmb2xsb3dzOg0K PiArCSAqIC0gRkxQTSBtYXRjaGVzIGd1ZXN0IHBhZ2luZyBtb2RlDQo+ICsJICogLSB0dXJuIG9u IG5lc3RlZCBtb2RlDQo+ICsJICogLSBTTCBndWVzdCBhZGRyZXNzIHdpZHRoIG1hdGNoaW5nDQo+ ICsJICovDQoNCmxvb2tzIGFib3ZlIGp1c3QgZXhwbGFpbnMgdGhlIGludGVybmFsIGRldGFpbCBv ZiBpbnRlbF9wYXNpZF9zZXR1cF9uZXN0ZWQsDQp3aGljaCBpcyBub3QgbmVjZXNzYXJ5IHRvIGJl IGhlcmUuDQoNCj4gKwlyZXQgPSBpbnRlbF9wYXNpZF9zZXR1cF9uZXN0ZWQoaW9tbXUsDQo+ICsJ CQkJICAgICAgIGRldiwNCj4gKwkJCQkgICAgICAgKHBnZF90ICopZGF0YS0+Z3BnZCwNCj4gKwkJ CQkgICAgICAgZGF0YS0+aHBhc2lkLA0KPiArCQkJCSAgICAgICAmZGF0YS0+dnRkLA0KPiArCQkJ CSAgICAgICBkZG9tYWluLA0KPiArCQkJCSAgICAgICBkYXRhLT5hZGRyX3dpZHRoKTsNCg0KSXQn cyB3b3J0aHkgb2YgYW4gZXhwbGFuYXRpb24gaGVyZSB0aGF0IHNldHVwX25lc3RlZCBpcyByZXF1 aXJlZCBmb3INCmV2ZXJ5IGRldmljZSAoZXZlbiB3aGVuIHRoZXkgYXJlIHNoYXJpbmcgc2FtZSBp bnRlbF9zdm0pIGJlY2F1c2UNCndlIGFsbG9jYXRlIHBhc2lkIHRhYmxlIHBlciBkZXZpY2UuIE90 aGVyd2lzZSBJIG1hZGUgYSBtaXN0YWtlIHRvDQp0aGluayB0aGF0IG9ubHkgdGhlIDFzdCBkZXZp Y2UgYm91bmQgdG8gYSBuZXcgaHBhc2lkIHJlcXVpcmVzIHRoaXMNCnN0ZXAuIPCfmIoNCg0KPiAr CWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0IHVwIFBBU0lEICVs bHUgaW4gbmVzdGVkIG1vZGUsDQo+IEVyciAlZFxuIiwNCj4gKwkJCWRhdGEtPmhwYXNpZCwgcmV0 KTsNCj4gKwkJLyoNCj4gKwkJICogUEFTSUQgZW50cnkgc2hvdWxkIGJlIGluIGNsZWFyZWQgc3Rh dGUgaWYgbmVzdGVkIG1vZGUNCj4gKwkJICogc2V0IHVwIGZhaWxlZC4gU28gd2Ugb25seSBuZWVk IHRvIGNsZWFyIElPQVNJRCB0cmFja2luZw0KPiArCQkgKiBkYXRhIHN1Y2ggdGhhdCBmcmVlIGNh bGwgd2lsbCBzdWNjZWVkLg0KPiArCQkgKi8NCj4gKwkJa2ZyZWUoc2Rldik7DQo+ICsJCWlmIChs aXN0X2VtcHR5KCZzdm0tPmRldnMpKSB7DQo+ICsJCQlpb2FzaWRfc2V0X2RhdGEoZGF0YS0+aHBh c2lkLCBOVUxMKTsNCj4gKwkJCWtmcmVlKHN2bSk7DQo+ICsJCX0NCj4gKwkJZ290byBvdXQ7DQo+ ICsJfQ0KPiArCXN2bS0+ZmxhZ3MgfD0gU1ZNX0ZMQUdfR1VFU1RfTU9ERTsNCj4gKw0KPiArCWlu aXRfcmN1X2hlYWQoJnNkZXYtPnJjdSk7DQo+ICsJbGlzdF9hZGRfcmN1KCZzZGV2LT5saXN0LCAm c3ZtLT5kZXZzKTsNCj4gKyBvdXQ6DQo+ICsJbXV0ZXhfdW5sb2NrKCZwYXNpZF9tdXRleCk7DQo+ ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAraW50IGludGVsX3N2bV91bmJpbmRfZ3Bhc2lk KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBhc2lkKQ0KPiArew0KPiArCXN0cnVjdCBpbnRlbF9p b21tdSAqaW9tbXUgPSBpbnRlbF9zdm1fZGV2aWNlX3RvX2lvbW11KGRldik7DQo+ICsJc3RydWN0 IGludGVsX3N2bV9kZXYgKnNkZXY7DQo+ICsJc3RydWN0IGludGVsX3N2bSAqc3ZtOw0KPiArCWlu dCByZXQgPSAtRUlOVkFMOw0KPiArDQo+ICsJaWYgKFdBUk5fT04oIWlvbW11KSkNCj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZwYXNpZF9tdXRleCk7DQo+ICsJc3Zt ID0gaW9hc2lkX2ZpbmQoTlVMTCwgcGFzaWQsIE5VTEwpOw0KPiArCWlmICghc3ZtKSB7DQo+ICsJ CXJldCA9IC1FSU5WQUw7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCWlmIChJU19F UlIoc3ZtKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKHN2bSk7DQo+ICsJCWdvdG8gb3V0Ow0KPiAr CX0NCj4gKw0KPiArCWZvcl9lYWNoX3N2bV9kZXYoc2Rldiwgc3ZtLCBkZXYpIHsNCj4gKwkJcmV0 ID0gMDsNCj4gKwkJc2Rldi0+dXNlcnMtLTsNCj4gKwkJaWYgKCFzZGV2LT51c2Vycykgew0KPiAr CQkJbGlzdF9kZWxfcmN1KCZzZGV2LT5saXN0KTsNCj4gKwkJCWludGVsX3Bhc2lkX3RlYXJfZG93 bl9lbnRyeShpb21tdSwgZGV2LCBzdm0tDQo+ID5wYXNpZCk7DQo+ICsJCQkvKiBUT0RPOiBEcmFp biBpbiBmbGlnaHQgUFJRIGZvciB0aGUgUEFTSUQgc2luY2UgaXQNCj4gKwkJCSAqIG1heSBnZXQg cmV1c2VkIHNvb24sIHdlIGRvbid0IHdhbnQgdG8NCj4gKwkJCSAqIGNvbmZ1c2Ugd2l0aCBpdHMg cHJldmlvdXMgbGlmZS4NCj4gKwkJCSAqIGludGVsX3N2bV9kcmFpbl9wcnEoZGV2LCBwYXNpZCk7 DQo+ICsJCQkgKi8NCj4gKwkJCWtmcmVlX3JjdShzZGV2LCByY3UpOw0KPiArDQo+ICsJCQlpZiAo bGlzdF9lbXB0eSgmc3ZtLT5kZXZzKSkgew0KPiArCQkJCS8qDQo+ICsJCQkJICogV2UgZG8gbm90 IGZyZWUgUEFTSUQgaGVyZSB1bnRpbCBleHBsaWNpdCBjYWxsDQo+ICsJCQkJICogZnJvbSBWRklP IHRvIGZyZWUuIFRoZSBQQVNJRCBsaWZlIGN5Y2xlDQo+ICsJCQkJICogbWFuYWdlbWVudCBpcyBs YXJnZWx5IHRpZWQgdG8gVkZJTw0KPiBtYW5hZ2VtZW50DQo+ICsJCQkJICogb2YgYXNzaWduZWQg ZGV2aWNlIGxpZmUgY3ljbGVzLiBJbiBjYXNlIG9mDQo+ICsJCQkJICogZ3Vlc3QgZXhpdCB3aXRo b3V0IGEgZXhwbGljaXQgZnJlZSBQQVNJRCBjYWxsLA0KPiArCQkJCSAqIHRoZSByZXNwb25zaWJp bGl0eSBsaWVzIGluIFZGSU8gbGF5ZXIgdG8gZnJlZQ0KPiArCQkJCSAqIHRoZSBQQVNJRHMgYWxs b2NhdGVkIGZvciB0aGUgZ3Vlc3QuDQo+ICsJCQkJICogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIFZG SU8gaGFzIHRvIHRyYWNrIHRoZQ0KPiArCQkJCSAqIFBBU0lEIG93bmVyc2hpcCBwZXIgZ3Vlc3Qg YW55d2F5IHRvDQo+IGVuc3VyZQ0KPiArCQkJCSAqIHRoYXQgUEFTSUQgYWxsb2NhdGVkIGJ5IG9u ZSBndWVzdCBjYW5ub3QNCj4gYmUNCj4gKwkJCQkgKiB1c2VkIGJ5IGFub3RoZXIuDQoNCkFzIGNv bW1lbnRlZCBpbiBvdGhlciBwYXRjaGVzLCBWRklPIGlzIG9ubHkgb25lIGV4YW1wbGUgdXNlciBv ZiB0aGlzIEFQSS4uLiANCg0KPiArCQkJCSAqLw0KPiArCQkJCWlvYXNpZF9zZXRfZGF0YShwYXNp ZCwgTlVMTCk7DQo+ICsJCQkJa2ZyZWUoc3ZtKTsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCQlicmVh azsNCj4gKwl9DQoNCndoYXQgYWJvdXQgbm8gZGV2IG1hdGNoPyBhbiAtRUlOVkFMIGlzIGFsc28g cmVxdWlyZWQgdGhlbi4NCg0KPiArb3V0Og0KPiArCW11dGV4X3VubG9jaygmcGFzaWRfbXV0ZXgp Ow0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAgaW50IGludGVsX3N2bV9iaW5k X21tKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICpwYXNpZCwgaW50IGZsYWdzLCBzdHJ1Y3QNCj4g c3ZtX2Rldl9vcHMgKm9wcykNCj4gIHsNCj4gIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0g aW50ZWxfc3ZtX2RldmljZV90b19pb21tdShkZXYpOw0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oDQo+IGluZGV4 IGVkYTFkNjY4NzE0NC4uODViMDUxMjA5NDBlIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2xpbnV4 L2ludGVsLWlvbW11LmgNCj4gKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oDQo+IEBA IC02ODEsNyArNjgxLDkgQEAgc3RydWN0IGRtYXJfZG9tYWluICpmaW5kX2RvbWFpbihzdHJ1Y3Qg ZGV2aWNlDQo+ICpkZXYpOw0KPiAgZXh0ZXJuIHZvaWQgaW50ZWxfc3ZtX2NoZWNrKHN0cnVjdCBp bnRlbF9pb21tdSAqaW9tbXUpOw0KPiAgZXh0ZXJuIGludCBpbnRlbF9zdm1fZW5hYmxlX3BycShz dHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsNCj4gIGV4dGVybiBpbnQgaW50ZWxfc3ZtX2Zpbmlz aF9wcnEoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7DQo+IC0NCj4gK2V4dGVybiBpbnQgaW50 ZWxfc3ZtX2JpbmRfZ3Bhc2lkKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwNCj4gKwkJc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZ3Bhc2lkX2JpbmRfZGF0YSAqZGF0YSk7DQo+ ICtleHRlcm4gaW50IGludGVsX3N2bV91bmJpbmRfZ3Bhc2lkKHN0cnVjdCBkZXZpY2UgKmRldiwg aW50IHBhc2lkKTsNCj4gIHN0cnVjdCBzdm1fZGV2X29wczsNCj4gDQo+ICBzdHJ1Y3QgaW50ZWxf c3ZtX2RldiB7DQo+IEBAIC02OTgsOSArNzAwLDEzIEBAIHN0cnVjdCBpbnRlbF9zdm1fZGV2IHsN Cj4gIHN0cnVjdCBpbnRlbF9zdm0gew0KPiAgCXN0cnVjdCBtbXVfbm90aWZpZXIgbm90aWZpZXI7 DQo+ICAJc3RydWN0IG1tX3N0cnVjdCAqbW07DQo+ICsNCj4gIAlzdHJ1Y3QgaW50ZWxfaW9tbXUg KmlvbW11Ow0KPiAgCWludCBmbGFnczsNCj4gIAlpbnQgcGFzaWQ7DQo+ICsJaW50IGdwYXNpZDsg LyogR3Vlc3QgUEFTSUQgaW4gY2FzZSBvZiB2U1ZBIGJpbmQgd2l0aCBub24taWRlbnRpdHkgaG9z dA0KPiArCQkgICAgICogdG8gZ3Vlc3QgUEFTSUQgbWFwcGluZy4NCj4gKwkJICAgICAqLw0KDQp3 ZSBkb24ndCBuZWVkIHRvIGhpZ2hsaWdodCBpZGVudGl0eSBvciBub24taWRlbnRpdHkgdGhpbmcs IHNpbmNlIGVpdGhlciB3YXkgDQpzaGFyZXMgdGhlIHNhbWUgaW5mcmFzdHJ1Y3R1cmUgaGVyZSBh bmQgaXQgaXMgbm90IHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUNCmtlcm5lbCBkcml2ZXIgc2hvdWxk IGFzc3VtZQ0KDQo+ICAJc3RydWN0IGxpc3RfaGVhZCBkZXZzOw0KPiAgCXN0cnVjdCBsaXN0X2hl YWQgbGlzdDsNCj4gIH07DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVsLXN2bS5o IGIvaW5jbHVkZS9saW51eC9pbnRlbC1zdm0uaA0KPiBpbmRleCBkN2M0MDNkMGRkMjcuLmMxOTY5 MDkzNzU0MCAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1zdm0uaA0KPiArKysg Yi9pbmNsdWRlL2xpbnV4L2ludGVsLXN2bS5oDQo+IEBAIC00NCw2ICs0NCwyMyBAQCBzdHJ1Y3Qg c3ZtX2Rldl9vcHMgew0KPiAgICogZG8gc3VjaCBJT1RMQiBmbHVzaGVzIGF1dG9tYXRpY2FsbHku DQo+ICAgKi8NCj4gICNkZWZpbmUgU1ZNX0ZMQUdfU1VQRVJWSVNPUl9NT0RFCSgxPDwxKQ0KPiAr LyoNCj4gKyAqIFRoZSBTVk1fRkxBR19HVUVTVF9NT0RFIGZsYWcgaXMgdXNlZCB3aGVuIGEgZ3Vl c3QgcHJvY2VzcyBiaW5kIHRvIGENCj4gZGV2aWNlLg0KPiArICogSW4gdGhpcyBjYXNlIHRoZSBt bV9zdHJ1Y3QgaXMgaW4gdGhlIGd1ZXN0IGtlcm5lbCBvciB1c2Vyc3BhY2UsIGl0cyBsaWZlDQo+ ICsgKiBjeWNsZSBpcyBtYW5hZ2VkIGJ5IFZNTSBhbmQgVkZJTyBsYXllci4gRm9yIElPTU1VIGRy aXZlciwgdGhpcyBBUEkNCj4gcHJvdmlkZXMNCj4gKyAqIG1lYW5zIHRvIGJpbmQvdW5iaW5kIGd1 ZXN0IENSMyB3aXRoIFBBU0lEcyBhbGxvY2F0ZWQgZm9yIGEgZGV2aWNlLg0KPiArICovDQo+ICsj ZGVmaW5lIFNWTV9GTEFHX0dVRVNUX01PREUJKDE8PDIpDQo+ICsvKg0KPiArICogVGhlIFNWTV9G TEFHX0dVRVNUX1BBU0lEIGZsYWcgaXMgdXNlZCB3aGVuIGEgZ3Vlc3QgaGFzIGl0cyBvd24gUEFT SUQNCj4gc3BhY2UsDQo+ICsgKiB3aGljaCByZXF1aXJlcyBndWVzdCBhbmQgaG9zdCBQQVNJRCB0 cmFuc2xhdGlvbiBhdCBib3RoIGRpcmVjdGlvbnMuIFdlDQo+IGtlZXANCj4gKyAqIHRyYWNrIG9m IGd1ZXN0IFBBU0lEIGluIG9yZGVyIHRvIHByb3ZpZGUgbG9va3VwIHNlcnZpY2UgdG8gZGV2aWNl IGRyaXZlcnMuDQo+ICsgKiBPbmUgc3VjaCBleGFtcGxlIGlzIGEgcGh5c2ljYWwgZnVuY3Rpb24g KFBGKSBkcml2ZXIgdGhhdCBzdXBwb3J0cw0KPiBtZWRpYXRlZA0KPiArICogZGV2aWNlIChtZGV2 KSBhc3NpZ25tZW50LiBHdWVzdCBwcm9ncmFtbWluZyBvZiBtZGV2IGNvbmZpZ3VyYXRpb24NCj4g c3BhY2UgY2FuDQo+ICsgKiBvbmx5IGJlIGRvbmUgd2l0aCBndWVzdCBQQVNJRCwgdGhlcmVmb3Jl IFBGIGRyaXZlciBuZWVkcyB0byBmaW5kIHRoZQ0KPiBtYXRjaGluZw0KPiArICogaG9zdCBQQVNJ RCB0byBwcm9ncmFtIHRoZSByZWFsIGhhcmR3YXJlLg0KPiArICovDQo+ICsjZGVmaW5lIFNWTV9G TEFHX0dVRVNUX1BBU0lECSgxPDwzKQ0KPiANCj4gICNpZmRlZiBDT05GSUdfSU5URUxfSU9NTVVf U1ZNDQo+IA0KPiAtLQ0KPiAyLjcuNA0KDQo=