From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 618421F03F6 for ; Fri, 6 Dec 2024 10:44:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733481897; cv=none; b=tG+KFibAWNPwcU/mn8GdqkcPyUw6EO7DIdnv+NG/dx5CRGbANOdprq9ngFeFr4DdEKyoJWXjEuYYA8uOGRfz4hULX+2rsv5DZCPGZUlUC90CbY+rI4JitdiPMIlfM69G4xb59nSw0226BssYa5IGFKKU786whq+QHHhyMNuDh1Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733481897; c=relaxed/simple; bh=VdLM04lU/6Qnim7wYBbpRrvOccR8ws50/OQSJUBrxo4=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=UbgSdCyOU4JvpNqOqZ5h7JyG98/atteB2x+OcmVAhgnRdFf0+tCLj5/4Cqvmq7YMhj0lm15dDRm4Rjx2qIVyzVV4xFTtAlixKRSYMhWpjE3wyHlfJDVidGBaFpeot2duQMZV4lgD4x56GNitQSvDVPxVZ1vczSVUsW2ADJbWvWA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=U+749bMy; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="U+749bMy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733481893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VdLM04lU/6Qnim7wYBbpRrvOccR8ws50/OQSJUBrxo4=; b=U+749bMyhxkKiZCLOy9cUFMWWoxAwqep9MeUWwsWseCwz2kCleWlDiPxfNkL8rVFxEZT5X s99YSJEqxF0xJiMJZDe0O3RdqZeaOCGjf8/9iNhgbv2+pDIMmbvwDVaeoWZCl1RxC3o5Ak l7Mfj4DlIPXpLfiwgfX4JGf2tcXYK+E= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-253-Hp9NfcrdM5yAUNnJVzYkWw-1; Fri, 06 Dec 2024 05:44:52 -0500 X-MC-Unique: Hp9NfcrdM5yAUNnJVzYkWw-1 X-Mimecast-MFC-AGG-ID: Hp9NfcrdM5yAUNnJVzYkWw Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-434a0bf9914so12529825e9.2 for ; Fri, 06 Dec 2024 02:44:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733481891; x=1734086691; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=VdLM04lU/6Qnim7wYBbpRrvOccR8ws50/OQSJUBrxo4=; b=aAbt2duRiieBz6w7RTh4aFlbF18KxX0TJDb1tWvRgx3hvRXEhocv35W7tkvpAGDQBL RynCZO0gEYlTyX4cjrKaz9pIo4e2p4lWnnZNluFW0m97dcS1pDIE9WJFNQPneaj+8emi B2uresAHM/QPCRtkk5Hw28sTrNhExFaM5Xo7DKEkhrZQB0pcZkfX+QH1GaR9Ch2/7Jf7 x7230vLq3cVnLUHu8vZugQcMLJbbYfglSp6KQfPGbL4cPF+/e0VQZEDHOuwaEEo1qPVr w8db4ExwF6ggtN6A5a1IDx8dIQa+3p92sh1cGOC939r5GG3nvtZ8nBBEBrzwLp8e0xY+ fgaw== X-Forwarded-Encrypted: i=1; AJvYcCUb8deGgaAdksYj7EaM35nd0aA8SkMK+XphUwdWW+K20NDf4fW1Nmnp8nvQpGSr55xdPppcWDKNNFKp@vger.kernel.org X-Gm-Message-State: AOJu0Yz13NLijJWXtcf7x+ZBmml+I94f6+s5wpko2sv46TS1nWGzyrX3 NBFvK4aPP69btfQr4idmOX+dCtsWXNNOwC2N9KA/xKTNxVhS41N6OeN3Sv1Fzrd/eQqvQGX4Lgh RK923fFoUIfHMZIFVOV/dlQtGbaUBzsrnoRq2Xv1j5IfbkJeNe1YuM7gyfaI= X-Gm-Gg: ASbGncsC9vyGgaB7N5VNx3lR+flrnnuJHFtfHqySTWm2y+yLY+cVT8GkxO2icr2oawl Rzmxi/ti/mh67+ouC8ZfERbhQxPhMM3z3cdXV2YTYGTSihXyDd7gbdL3AF4Y0ink3Ozrx9xpC9E z1VLdNZxXcH+owpODB+9p4jUoREc+pe88OaFiSkBF5ykOEff61LmxGZFe1D+vV8Lx6EGhSZfCLi kaB2MgRak0NtZWD2w0OBCSwx/A2QbFroKONriU/uAExfSEaKdEbuq/k2XXzgZd/XMe85fYGbbQT X-Received: by 2002:a05:600c:4ecd:b0:434:a802:e99a with SMTP id 5b1f17b1804b1-434ddeadafcmr22762815e9.4.1733481890653; Fri, 06 Dec 2024 02:44:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IGV+6LDWILNYB2NrECNa3c6De9CRxe18oSJqKngmdn5TnKCeoxC0QHGQt2H/kLkfVwA+SqUtA== X-Received: by 2002:a05:600c:4ecd:b0:434:a802:e99a with SMTP id 5b1f17b1804b1-434ddeadafcmr22762315e9.4.1733481890204; Fri, 06 Dec 2024 02:44:50 -0800 (PST) Received: from [10.200.68.91] (nat-pool-muc-u.redhat.com. [149.14.88.27]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-434da0d6a07sm52272785e9.13.2024.12.06.02.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2024 02:44:49 -0800 (PST) Message-ID: <900dcafa7ee5113145f1ee7dda02de32432388e7.camel@redhat.com> Subject: Re: [PATCH v4 09/13] rust: pci: implement I/O mappable `pci::Bar` From: Philipp Stanner To: Danilo Krummrich , gregkh@linuxfoundation.org, rafael@kernel.org, bhelgaas@google.com, ojeda@kernel.org, alex.gaynor@gmail.com, boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, tmgross@umich.edu, a.hindborg@samsung.com, aliceryhl@google.com, airlied@gmail.com, fujita.tomonori@gmail.com, lina@asahilina.net, ajanulgu@redhat.com, lyude@redhat.com, robh@kernel.org, daniel.almeida@collabora.com, saravanak@google.com, dirk.behme@de.bosch.com, j@jannau.net, fabien.parent@linaro.org, chrisi.schrefl@gmail.com Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, devicetree@vger.kernel.org Date: Fri, 06 Dec 2024 11:44:48 +0100 In-Reply-To: <20241205141533.111830-10-dakr@kernel.org> References: <20241205141533.111830-1-dakr@kernel.org> <20241205141533.111830-10-dakr@kernel.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.52.4 (3.52.4-2.fc40) Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 YnR3IHRoZSBQQ0kgc3Vic3lzdGVtIGNvbnNpc3RlbnRseSBhbHdheXMgd3JpdGVzIHRoZSBhY3Jv bnltIGFsbC0KdXBwZXJjYXNlIChQQ0kpIGluIGNvbW1pdCBtZXNzYWdlcyBhbmQgY29tbWVudHMu CgpJZiB5b3UgZ28gZm9yIGEgdjUsIG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gYWRqdXN0IHRoYXQuCgpT YW1lIGFwcGxpZXMgZm9yIHBhdGNoIDguCgoKUC4KCgpPbiBUaHUsIDIwMjQtMTItMDUgYXQgMTU6 MTQgKzAxMDAsIERhbmlsbyBLcnVtbXJpY2ggd3JvdGU6Cj4gSW1wbGVtZW50IGBwY2k6OkJhcmAs IGBwY2k6OkRldmljZTo6aW9tYXBfcmVnaW9uYCBhbmQKPiBgcGNpOjpEZXZpY2U6OmlvbWFwX3Jl Z2lvbl9zaXplZGAgdG8gYWxsb3cgZm9yIEkvTyBtYXBwaW5ncyBvZiBQQ0kKPiBCQVJzLgo+IAo+ IFRvIGVuc3VyZSB0aGF0IGEgYHBjaTo6QmFyYCwgYW5kIGhlbmNlIHRoZSBJL08gbWVtb3J5IG1h cHBpbmcsIGNhbid0Cj4gb3V0LWxpdmUgdGhlIFBDSSBkZXZpY2UsIHRoZSBgcGNpOjpCYXJgIHR5 cGUgaXMgYWx3YXlzIGVtYmVkZGVkIGludG8KPiBhCj4gYERldnJlc2AgY29udGFpbmVyLCBzdWNo IHRoYXQgdGhlIGBwY2k6OkJhcmAgaXMgcmV2b2tlZCBvbmNlIHRoZQo+IGRldmljZQo+IGlzIHVu Ym91bmQgYW5kIGhlbmNlIHRoZSBJL08gbWFwcGVkIG1lbW9yeSBpcyB1bm1hcHBlZC4KPiAKPiBB IGBwY2k6OkJhcmAgY2FuIGJlIHJlcXVlc3RlZCB3aXRoCj4gKGBwY2k6OkRldmljZTo6aW9tYXBf cmVnaW9uX3NpemVkYCkgb3IKPiB3aXRob3V0IChgcGNpOjpEZXZpY2U6OmlvbWFwX3JlZ2lvbmAp IGEgY29uc3QgZ2VuZXJpYyByZXByZXNlbnRpbmcKPiB0aGUKPiBtaW5pbWFsIHJlcXVlc3RlZCBz aXplIG9mIHRoZSBJL08gbWFwcGVkIG1lbW9yeSByZWdpb24uIEluIGNhc2Ugb2YKPiB0aGUKPiBs YXR0ZXIgb25seSBydW50aW1lIGNoZWNrZWQgSS9PIHJlYWRzIC8gd3JpdGVzIGFyZSBwb3NzaWJs ZS4KPiAKPiBDby1kZXZlbG9wZWQtYnk6IFBoaWxpcHAgU3Rhbm5lciA8cHN0YW5uZXJAcmVkaGF0 LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFN0YW5uZXIgPHBzdGFubmVyQHJlZGhhdC5j b20+Cj4gU2lnbmVkLW9mZi1ieTogRGFuaWxvIEtydW1tcmljaCA8ZGFrckBrZXJuZWwub3JnPgo+ IC0tLQo+IMKgcnVzdC9rZXJuZWwvcGNpLnJzIHwgMTQ1Cj4gKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gwqAxIGZpbGUgY2hhbmdlZCwgMTQ1IGluc2VydGlv bnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvcGNpLnJzIGIvcnVzdC9rZXJuZWwv cGNpLnJzCj4gaW5kZXggNzQ4OTEyYzFjOTk0Li4wYTMyYTU5MzVjOWMgMTAwNjQ0Cj4gLS0tIGEv cnVzdC9rZXJuZWwvcGNpLnJzCj4gKysrIGIvcnVzdC9rZXJuZWwvcGNpLnJzCj4gQEAgLTUsMTAg KzUsMTQgQEAKPiDCoC8vISBDIGhlYWRlcjogW2BpbmNsdWRlL2xpbnV4L3BjaS5oYF0oc3JjdHJl ZS9pbmNsdWRlL2xpbnV4L3BjaS5oKQo+IMKgCj4gwqB1c2UgY3JhdGU6OnsKPiArwqDCoMKgIGFs bG9jOjpmbGFnczo6KiwKPiDCoMKgwqDCoCBiaW5kaW5ncywgY29udGFpbmVyX29mLCBkZXZpY2Us Cj4gwqDCoMKgwqAgZGV2aWNlX2lkOjpSYXdEZXZpY2VJZCwKPiArwqDCoMKgIGRldnJlczo6RGV2 cmVzLAo+IMKgwqDCoMKgIGRyaXZlciwKPiDCoMKgwqDCoCBlcnJvcjo6e3RvX3Jlc3VsdCwgUmVz dWx0fSwKPiArwqDCoMKgIGlvOjpJbywKPiArwqDCoMKgIGlvOjpJb1JhdywKPiDCoMKgwqDCoCBz dHI6OkNTdHIsCj4gwqDCoMKgwqAgdHlwZXM6OntBUmVmLCBGb3JlaWduT3duYWJsZX0sCj4gwqDC oMKgwqAgVGhpc01vZHVsZSwKPiBAQCAtMjM5LDkgKzI0MywxMTUgQEAgcHViIHRyYWl0IERyaXZl ciB7Cj4gwqAvLy8KPiDCoC8vLyBBIFBDSSBkZXZpY2UgaXMgYmFzZWQgb24gYW4gYWx3YXlzIHJl ZmVyZW5jZSBjb3VudGVkCj4gYGRldmljZTpEZXZpY2VgIGluc3RhbmNlLiBDbG9uaW5nIGEgUENJ Cj4gwqAvLy8gZGV2aWNlLCBoZW5jZSwgYWxzbyBpbmNyZW1lbnRzIHRoZSBiYXNlIGRldmljZScg cmVmZXJlbmNlIGNvdW50Lgo+ICsvLy8KPiArLy8vICMgSW52YXJpYW50cwo+ICsvLy8KPiArLy8v IGBEZXZpY2VgIGhvbGQgYSB2YWxpZCByZWZlcmVuY2Ugb2YgYEFSZWY8ZGV2aWNlOjpEZXZpY2U+ YCB3aG9zZQo+IHVuZGVybHlpbmcgYHN0cnVjdCBkZXZpY2VgIGlzIGEKPiArLy8vIG1lbWJlciBv ZiBhIGBzdHJ1Y3QgcGNpX2RldmAuCj4gwqAjW2Rlcml2ZShDbG9uZSldCj4gwqBwdWIgc3RydWN0 IERldmljZShBUmVmPGRldmljZTo6RGV2aWNlPik7Cj4gwqAKPiArLy8vIEEgUENJIEJBUiB0byBw ZXJmb3JtIEkvTy1PcGVyYXRpb25zIG9uLgo+ICsvLy8KPiArLy8vICMgSW52YXJpYW50cwo+ICsv Ly8KPiArLy8vIGBCYXJgIGFsd2F5cyBob2xkcyBhbiBgSW9SYXdgIGluc3RzdGFuY2UgdGhhdCBo b2xkcyBhIHZhbGlkCj4gcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIEkvTwo+ICsvLy8gbWVt b3J5IG1hcHBlZCBQQ0kgYmFyIGFuZCBpdHMgc2l6ZS4KPiArcHViIHN0cnVjdCBCYXI8Y29uc3Qg U0laRTogdXNpemUgPSAwPiB7Cj4gK8KgwqDCoCBwZGV2OiBEZXZpY2UsCj4gK8KgwqDCoCBpbzog SW9SYXc8U0laRT4sCj4gK8KgwqDCoCBudW06IGkzMiwKPiArfQo+ICsKPiAraW1wbDxjb25zdCBT SVpFOiB1c2l6ZT4gQmFyPFNJWkU+IHsKPiArwqDCoMKgIGZuIG5ldyhwZGV2OiBEZXZpY2UsIG51 bTogdTMyLCBuYW1lOiAmQ1N0cikgLT4gUmVzdWx0PFNlbGY+IHsKPiArwqDCoMKgwqDCoMKgwqAg bGV0IGxlbiA9IHBkZXYucmVzb3VyY2VfbGVuKG51bSk/Owo+ICvCoMKgwqDCoMKgwqDCoCBpZiBs ZW4gPT0gMCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVycihFTk9NRU0pOwo+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvLyBDb252ZXJ0IHRvIGBp MzJgLCBzaW5jZSB0aGF0J3Mgd2hhdCBhbGwgdGhlIEMgYmluZGluZ3MKPiB1c2UuCj4gK8KgwqDC oMKgwqDCoMKgIGxldCBudW0gPSBpMzI6OnRyeV9mcm9tKG51bSk/Owo+ICsKPiArwqDCoMKgwqDC oMKgwqAgLy8gU0FGRVRZOgo+ICvCoMKgwqDCoMKgwqDCoCAvLyBgcGRldmAgaXMgdmFsaWQgYnkg dGhlIGludmFyaWFudHMgb2YgYERldmljZWAuCj4gK8KgwqDCoMKgwqDCoMKgIC8vIGBudW1gIGlz IGNoZWNrZWQgZm9yIHZhbGlkaXR5IGJ5IGEgcHJldmlvdXMgY2FsbCB0bwo+IGBEZXZpY2U6OnJl c291cmNlX2xlbmAuCj4gK8KgwqDCoMKgwqDCoMKgIC8vIGBuYW1lYCBpcyBhbHdheXMgdmFsaWQu Cj4gK8KgwqDCoMKgwqDCoMKgIGxldCByZXQgPSB1bnNhZmUgewo+IGJpbmRpbmdzOjpwY2lfcmVx dWVzdF9yZWdpb24ocGRldi5hc19yYXcoKSwgbnVtLCBuYW1lLmFzX2NoYXJfcHRyKCkpCj4gfTsK PiArwqDCoMKgwqDCoMKgwqAgaWYgcmV0ICE9IDAgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBFcnIoRUJVU1kpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCAvLyBTQUZFVFk6Cj4gK8KgwqDCoMKgwqDCoMKgIC8vIGBwZGV2YCBpcyB2YWxpZCBieSB0 aGUgaW52YXJpYW50cyBvZiBgRGV2aWNlYC4KPiArwqDCoMKgwqDCoMKgwqAgLy8gYG51bWAgaXMg Y2hlY2tlZCBmb3IgdmFsaWRpdHkgYnkgYSBwcmV2aW91cyBjYWxsIHRvCj4gYERldmljZTo6cmVz b3VyY2VfbGVuYC4KPiArwqDCoMKgwqDCoMKgwqAgLy8gYG5hbWVgIGlzIGFsd2F5cyB2YWxpZC4K PiArwqDCoMKgwqDCoMKgwqAgbGV0IGlvcHRyOiB1c2l6ZSA9IHVuc2FmZSB7Cj4gYmluZGluZ3M6 OnBjaV9pb21hcChwZGV2LmFzX3JhdygpLCBudW0sIDApIH0gYXMgdXNpemU7Cj4gK8KgwqDCoMKg wqDCoMKgIGlmIGlvcHRyID09IDAgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIFNBRkVU WToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBgcGRldmAgdmFsaWQgYnkgdGhlIGludmFy aWFudHMgb2YgYERldmljZWAuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYG51bWAgaXMg Y2hlY2tlZCBmb3IgdmFsaWRpdHkgYnkgYSBwcmV2aW91cyBjYWxsIHRvCj4gYERldmljZTo6cmVz b3VyY2VfbGVuYC4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNhZmUgeyBiaW5kaW5nczo6 cGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYuYXNfcmF3KCksCj4gbnVtKSB9Owo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBFcnIoRU5PTUVNKTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqAgbGV0IGlvID0gbWF0Y2ggSW9SYXc6Om5ldyhpb3B0ciwgbGVuIGFz IHVzaXplKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT2soaW8pID0+IGlvLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEVycihlcnIpID0+IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8vIFNBRkVUWToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8v IGBwZGV2YCBpcyB2YWxpZCBieSB0aGUgaW52YXJpYW50cyBvZiBgRGV2aWNlYC4KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIGBpb3B0cmAgaXMgZ3VhcmFudGVlZCB0byBiZSB0 aGUgc3RhcnQgb2YgYSB2YWxpZAo+IEkvTyBtYXBwZWQgbWVtb3J5IHJlZ2lvbi4KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIGBudW1gIGlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5 IGJ5IGEgcHJldmlvdXMgY2FsbAo+IHRvIGBEZXZpY2U6OnJlc291cmNlX2xlbmAuCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNhZmUgeyBTZWxmOjpkb19yZWxlYXNlKCZwZGV2 LCBpb3B0ciwgbnVtKSB9Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEVycihlcnIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAg fTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIE9rKEJhciB7IHBkZXYsIGlvLCBudW0gfSkKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCAvLy8gIyBTYWZldHkKPiArwqDCoMKgIC8vLwo+ICvCoMKgwqAg Ly8vIGBpb3B0cmAgbXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBtYXBwZWQg UENJIGJhcgo+IG51bWJlciBgbnVtYC4KPiArwqDCoMKgIHVuc2FmZSBmbiBkb19yZWxlYXNlKHBk ZXY6ICZEZXZpY2UsIGlvcHRyOiB1c2l6ZSwgbnVtOiBpMzIpIHsKPiArwqDCoMKgwqDCoMKgwqAg Ly8gU0FGRVRZOgo+ICvCoMKgwqDCoMKgwqDCoCAvLyBgcGRldmAgaXMgdmFsaWQgYnkgdGhlIGlu dmFyaWFudHMgb2YgYERldmljZWAuCj4gK8KgwqDCoMKgwqDCoMKgIC8vIGBpb3B0cmAgaXMgdmFs aWQgYnkgdGhlIHNhZmV0eSByZXF1aXJlbWVudHMuCj4gK8KgwqDCoMKgwqDCoMKgIC8vIGBudW1g IGlzIHZhbGlkIGJ5IHRoZSBzYWZldHkgcmVxdWlyZW1lbnRzLgo+ICvCoMKgwqDCoMKgwqDCoCB1 bnNhZmUgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJpbmRpbmdzOjpwY2lfaW91bm1hcChw ZGV2LmFzX3JhdygpLCBpb3B0ciBhcyBfKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiaW5k aW5nczo6cGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYuYXNfcmF3KCksIG51bSk7Cj4gK8KgwqDCoMKg wqDCoMKgIH0KPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBmbiByZWxlYXNlKCZzZWxmKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIC8vIFNBRkVUWTogVGhlIHNhZmV0eSByZXF1aXJlbWVudHMgYXJlIGd1 YXJhbnRlZWQgYnkgdGhlCj4gdHlwZSBpbnZhcmlhbnQgb2YgYHNlbGYucGRldmAuCj4gK8KgwqDC oMKgwqDCoMKgIHVuc2FmZSB7IFNlbGY6OmRvX3JlbGVhc2UoJnNlbGYucGRldiwgc2VsZi5pby5h ZGRyKCksCj4gc2VsZi5udW0pIH07Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gK2ltcGwgQmFyIHsK PiArwqDCoMKgIGZuIGluZGV4X2lzX3ZhbGlkKGluZGV4OiB1MzIpIC0+IGJvb2wgewo+ICvCoMKg wqDCoMKgwqDCoCAvLyBBIGBzdHJ1Y3QgcGNpX2RldmAgb3ducyBhbiBhcnJheSBvZiByZXNvdXJj ZXMgd2l0aCBhdAo+IG1vc3QgYFBDSV9OVU1fUkVTT1VSQ0VTYCBlbnRyaWVzLgo+ICvCoMKgwqDC oMKgwqDCoCBpbmRleCA8IGJpbmRpbmdzOjpQQ0lfTlVNX1JFU09VUkNFUwo+ICvCoMKgwqAgfQo+ ICt9Cj4gKwo+ICtpbXBsPGNvbnN0IFNJWkU6IHVzaXplPiBEcm9wIGZvciBCYXI8U0laRT4gewo+ ICvCoMKgwqAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5yZWxl YXNlKCk7Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gK2ltcGw8Y29uc3QgU0laRTogdXNpemU+IERl cmVmIGZvciBCYXI8U0laRT4gewo+ICvCoMKgwqAgdHlwZSBUYXJnZXQgPSBJbzxTSVpFPjsKPiAr Cj4gK8KgwqDCoCBmbiBkZXJlZigmc2VsZikgLT4gJlNlbGY6OlRhcmdldCB7Cj4gK8KgwqDCoMKg wqDCoMKgIC8vIFNBRkVUWTogQnkgdGhlIHR5cGUgaW52YXJpYW50IG9mIGBTZWxmYCwgdGhlIE1N SU8gcmFuZ2UKPiBpbiBgc2VsZi5pb2AgaXMgcHJvcGVybHkgbWFwcGVkLgo+ICvCoMKgwqDCoMKg wqDCoCB1bnNhZmUgeyBJbzo6ZnJvbV9yYXcoJnNlbGYuaW8pIH0KPiArwqDCoMKgIH0KPiArfQo+ ICsKPiDCoGltcGwgRGV2aWNlIHsKPiDCoMKgwqDCoCAvLy8gQ3JlYXRlIGEgUENJIERldmljZSBp bnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nCj4gYGRldmljZTo6RGV2aWNlYC4KPiDCoMKgwqDCoCAv Ly8KPiBAQCAtMjc1LDYgKzM4NSw0MSBAQCBwdWIgZm4gc2V0X21hc3Rlcigmc2VsZikgewo+IMKg wqDCoMKgwqDCoMKgwqAgLy8gU0FGRVRZOiBgc2VsZi5hc19yYXdgIGlzIGd1YXJhbnRlZWQgdG8g YmUgYSBwb2ludGVyIHRvIGEKPiB2YWxpZCBgc3RydWN0IHBjaV9kZXZgLgo+IMKgwqDCoMKgwqDC oMKgwqAgdW5zYWZlIHsgYmluZGluZ3M6OnBjaV9zZXRfbWFzdGVyKHNlbGYuYXNfcmF3KCkpIH07 Cj4gwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgIC8vLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBn aXZlbiBQQ0kgYmFyIHJlc291cmNlLgo+ICvCoMKgwqAgcHViIGZuIHJlc291cmNlX2xlbigmc2Vs ZiwgYmFyOiB1MzIpIC0+Cj4gUmVzdWx0PGJpbmRpbmdzOjpyZXNvdXJjZV9zaXplX3Q+IHsKPiAr wqDCoMKgwqDCoMKgwqAgaWYgIUJhcjo6aW5kZXhfaXNfdmFsaWQoYmFyKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVycihFSU5WQUwpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoCAvLyBTQUZFVFk6Cj4gK8KgwqDCoMKgwqDCoMKgIC8vIC0gYGJh cmAgaXMgYSB2YWxpZCBiYXIgbnVtYmVyLCBhcyBndWFyYW50ZWVkIGJ5IHRoZSBhYm92ZQo+IGNh bGwgdG8gYEJhcjo6aW5kZXhfaXNfdmFsaWRgLAo+ICvCoMKgwqDCoMKgwqDCoCAvLyAtIGJ5IGl0 cyB0eXBlIGludmFyaWFudCBgc2VsZi5hc19yYXdgIGlzIGFsd2F5cyBhIHZhbGlkCj4gcG9pbnRl ciB0byBhIGBzdHJ1Y3QgcGNpX2RldmAuCj4gK8KgwqDCoMKgwqDCoMKgIE9rKHVuc2FmZSB7IGJp bmRpbmdzOjpwY2lfcmVzb3VyY2VfbGVuKHNlbGYuYXNfcmF3KCksCj4gYmFyLnRyeV9pbnRvKCk/ KSB9KQo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIC8vLyBNYXBwcyBhbiBlbnRpcmUgUENJLUJB UiBhZnRlciBwZXJmb3JtaW5nIGEgcmVnaW9uLXJlcXVlc3Qgb24KPiBpdC4gSS9PIG9wZXJhdGlv biBib3VuZCBjaGVja3MKPiArwqDCoMKgIC8vLyBjYW4gYmUgcGVyZm9ybWVkIG9uIGNvbXBpbGUg dGltZSBmb3Igb2Zmc2V0cyAocGx1cyB0aGUKPiByZXF1ZXN0ZWQgdHlwZSBzaXplKSA8IFNJWkUu Cj4gK8KgwqDCoCBwdWIgZm4gaW9tYXBfcmVnaW9uX3NpemVkPGNvbnN0IFNJWkU6IHVzaXplPigK PiArwqDCoMKgwqDCoMKgwqAgJnNlbGYsCj4gK8KgwqDCoMKgwqDCoMKgIGJhcjogdTMyLAo+ICvC oMKgwqDCoMKgwqDCoCBuYW1lOiAmQ1N0ciwKPiArwqDCoMKgICkgLT4gUmVzdWx0PERldnJlczxC YXI8U0laRT4+PiB7Cj4gK8KgwqDCoMKgwqDCoMKgIGxldCBiYXIgPSBCYXI6OjxTSVpFPjo6bmV3 KHNlbGYuY2xvbmUoKSwgYmFyLCBuYW1lKT87Cj4gK8KgwqDCoMKgwqDCoMKgIGxldCBkZXZyZXMg PSBEZXZyZXM6Om5ldyhzZWxmLmFzX3JlZigpLCBiYXIsIEdGUF9LRVJORUwpPzsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgIE9rKGRldnJlcykKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAvLy8gTWFw cHMgYW4gZW50aXJlIFBDSS1CQVIgYWZ0ZXIgcGVyZm9ybWluZyBhIHJlZ2lvbi1yZXF1ZXN0IG9u Cj4gaXQuCj4gK8KgwqDCoCBwdWIgZm4gaW9tYXBfcmVnaW9uKCZzZWxmLCBiYXI6IHUzMiwgbmFt ZTogJkNTdHIpIC0+Cj4gUmVzdWx0PERldnJlczxCYXI+PiB7Cj4gK8KgwqDCoMKgwqDCoMKgIHNl bGYuaW9tYXBfcmVnaW9uX3NpemVkOjo8MD4oYmFyLCBuYW1lKQo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIC8vLyBSZXR1cm5zIGEgbmV3IGBBUmVmYCBvZiB0aGUgYmFzZSBgZGV2aWNlOjpEZXZp Y2VgLgo+ICvCoMKgwqAgcHViIGZuIGFzX2Rldigmc2VsZikgLT4gQVJlZjxkZXZpY2U6OkRldmlj ZT4gewo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLjAuY2xvbmUoKQo+ICvCoMKgwqAgfQo+IMKgfQo+ IMKgCj4gwqBpbXBsIEFzUmVmPGRldmljZTo6RGV2aWNlPiBmb3IgRGV2aWNlIHsKCg==