From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 7220E47799E; Fri, 22 May 2026 17:08:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779469724; cv=none; b=ukA5EmLDkJ91ptgnAMFZzAPZ4WTh8tx7xZpeaRcylGYdJ/u9uJdzEgAEB4LRcdkcZflmUGdTs5r+9F4Xshex5lZFB5RyYx9WrwJzeJVkP8uZQvujhVX7z+WrKh4VSgyS+r8Z3zH103uWOxCZ1OTHdLaHXvTUNA57w7M8feVfavs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779469724; c=relaxed/simple; bh=6hF6rqEwrJD4s9VY7thyzGJ4hqC11lqcEw2MCFgUj1Y=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=VsvHEz1XSFFFMIcbL6hb17Pzo/r42gUr8DTtCKFJxe4IMcngpo9Es0KclyIXOrAcMvQtLRjB5B5/sIUvO9rFWaNvofU5KmcvP9/7eqW1yxAE7KGGX1ompSwuzncZLfvv+2CWJe8M/uV0oTwOM7aTyZGiwlnQEYAowr7Ic1LwfK4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OzJ6y0n+; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OzJ6y0n+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E79BE1F000E9; Fri, 22 May 2026 17:08:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779469723; bh=c23yxkM0+/60YQOR3FKGtI6McR78Ee+YJUODTCKTIss=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=OzJ6y0n+zfW4+8WQGFFIbfwbnhp6Kv+qBK9H1sgDjZOELbUwkG34A+MtzYhcyghwQ nrfe+NcdHemO7jYCA7aV3PfT7SaOud7n/OQycUYBIhSL7CO9++tBPbXgcl/QS+69gf n1cGbOPUqj2ZCfDoZbf4ImCy2xQSS3pyLRuKeOepf+0jBS3SPuTYdt2JZ1UV6wtj5o Em/8yk5bmWeLIV1wWHSEaNiqviQ3BwSC+MLhXk2Fs44SXHCFCatdF9dA6hgWDbxiyE fDpSnQbBwhWWCGTzo/yjjKcytOvjcNcAP1TEV5yc7GuI0KKFJ2ZEd+gvk++fOksqEZ Uzp89DIhXWvGQ== Date: Fri, 22 May 2026 17:08:41 +0000 From: Jaegeuk Kim To: Theodore Tso Cc: linux-api@vger.kernel.org, linux-kernel@vger.kernel.org, Matthew Wilcox , linux-f2fs-devel@lists.sourceforge.net, Christoph Hellwig , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Akilesh Kailash , Christian Brauner Subject: Re: [f2fs-dev] [PATCH v2] f2fs: another way to set large folio by remembering inode number Message-ID: References: <20260409134538.3692605-1-jaegeuk@kernel.org> <20260521155748.GA79343@macsyma-wired.lan> <20260522141115.GA8258@macsyma-wired.lan> Precedence: bulk X-Mailing-List: linux-api@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20260522141115.GA8258@macsyma-wired.lan> On 05/22, Theodore Tso wrote: > On Fri, May 22, 2026 at 03:32:39AM +0000, Jaegeuk Kim wrote: > > I went this route because Android heavily restricts ioctl() permissions > > and we needed broader access for this to work within the framework. It’s > > definitely a pragmatic choice just to get it running in production. > > > > If ioctl() is a right way for upstream, I'm happy to change this patch. By > > the way, I really don't understand why all the messages are so offensive, > > even without trying to understand the problem or guiding right directions. > > The reason why some people were getting annoyed was because as a Linux > file system maintainer, there was an assumption that you would > understand that extended attributes --- especially in the user.* > namespace --- have an intended use case of storing a user-chosen small > piece of metadata that would be stored in the file system. > > Hijacking user.fadvise such that it no longer persistent stores an > extended attribute for one specific file system --- such that if a > hypothetical user application might decide to store a piece of > application data in the extended attribute named "fadvise" would do > something completely different on a single mainline file system is in > such poor taste that I would have *hoped* that any Linux file system > maintainer would know that this a Really Bad Thing, such that if > someone in your development community suggested such an idea, you > would reject it. Thank you for the explanation. It seems I made a wrong assumption on the usage of "user." prefix where each filesystem can support in different ways. > > And then, when people complained that it was a bad idea, and you > decided to put in the f2fs branch, such that it would show up in > linux-next, and there was no way for other file system developers to > object (short of appealing to Linus) --- well, that's basically you > taking advantage of your file system maintainer privileges. And this > is why I started proposing whether we needed to appeal this to Linus > so he could make the call to reject something that the community had > already told you was in terrible, terrible taste. To be fair, I hadn't queued it in linux-next for weeks since the first post, and was waiting for more feedbacks. If I was able to hear "user." is a generic prefix used for all filesystems and use ioctl from the beginning, I'd just drop and be able to start arguing with security folks back. Since my employer is funding for production mainly, not much upstream work, I couldn't sit and wait for the response for months. :( > > As far as trying to understand why you were doing this --- I have to > turn that question around. Why didn't *you* explain why you needed to > do this thing? I went through the e-mail history, and I couldn't find > an explanation of why you decided to do this thing. I shared some motivation when replying to Darrick's feedback [1], but yes, it was not enough for all heads-up. The problem started that some speicific application needs as many high-order pages as possible mostly for reads. So, I thought we can turn on large folio on the specific files per hints. One way for the hints was using immutable bit, but it turned out it's very hard to manage disabling the bit whenever deleting the files. Along with limited ioctl() and requiring inode eviction to manage large folio activation, I had to implement this path. [1] https://lore.kernel.org/lkml/aeA5C8byIpXWla7f@google.com/ > > Perhaps we need to add an explanation the Documentation directory > explaining what the intended use of the extended attribute case, and > perhaps referencing past cases were people tried to use this to bypass > the linux-api review process (f2fs's user.fadvise is not the first > time someone has tried to do this) thing), so that automated review > bots like Sashiko can explain why it's in such terrible taste to patch > authors, perhaps we need to do this. Up until now, I think the > assumption is that file system maintainers would know something this > self-evident, and if not, if it was pointed out, they wouldn't try to > force such an ill-advised interface to Linus. I believe this helps a lot to all newbies like me. I really appreciate your feedback. > > - Ted > > P.S. As an exmaple of how I hanlded a somewhat similar scenario in > the past, my employer's cluster file system needed > FALLOC_FL_NO_HIDE_STALE to save $$$$ in TCO storage costs. But the > concern was this would be an attractive nuisance for enterprise distro > users, who would see the massive performance increase, not realize > that this would leak stale data, which could result in user PII being > exposed, thus making life hard for Enterprise Linux's reputation. > (This wasn't an issue at $WORK because we enrypt all data at rest, and > the cluster file system daemon was a privileged server who (a) knew > what it was doing, and (b) only it would have access to set > FALLOC_FL_NO_HIDE_STALE.) > > I disclosed *why* $WORK needed such a thing (it made a huge difference > to storage TCO costss for Google's Cluster Filesystem), and after > discussion and negotiation, we came to a compromise which involved my > keeping the (very small) patch out of tree, but reserving the code > point upstream to avoid future bitfield collisions. They key here was > that I *knew* it was controversial, and I understood what problems it > might cause in the rest of the ecosystem. That's part of the job of a > maintainer, and it's also why a company might want to hire a > maintainer. They can represent the needs of multiple stakeholders --- > the upstream community, upstream users and the greater Linux > ecosystem, as well as their employer. > > > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 90D02CD5BB3 for ; Fri, 22 May 2026 17:08:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type:Cc: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:In-Reply-To:MIME-Version:References: Message-ID:To:Date:Sender:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jPZn2Ioj1kELiGPtZ4JR72obiOOY39AZI6xaPDg0/AM=; b=J+T0iTcL8DLBI//SDD9C3s5Yu2 YlfqCPDlcifx6odcnmHRvwjtvKoMwXxaGPmK4MLMz8gfjLja6TrUqCHumMt8+ZFw/S1eF+zpQ/r8h 9N9MH/v0ueg14MZnA4mjPx8B0c+wXCeQkGjxsxAI7inQW8a5RmKymnA/IKnda49YbrZQ=; Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1wQTMh-0005ks-NR; Fri, 22 May 2026 17:08:51 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1wQTMg-0005km-EW for linux-f2fs-devel@lists.sourceforge.net; Fri, 22 May 2026 17:08:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=In-Reply-To:Content-Transfer-Encoding:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=c23yxkM0+/60YQOR3FKGtI6McR78Ee+YJUODTCKTIss=; b=FjmjzjyIeF0MmVPWYrt9nEack7 sccXdzg3ouQnq7O6sgmKQvDtu6XjWejUXhZvpKA1YieJRMZm/gy3X7hT/x1FQwg12E/NdulB0YuTm 0q+Qr/0AK9mCn9Obzx6ZVpIWdPFWmvgHD8IcgqRCZHvaZUbgLxxGObgPSKvsGjNT9hJo=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=c23yxkM0+/60YQOR3FKGtI6McR78Ee+YJUODTCKTIss=; b=Ei/PCLOr59RahojbxCvcSecV4c z81ecuanBkGVy079YQXULAJ7hqooM3XQOQgTnRLhyMo+I1bn/dY7w9YOuFqeIEIrIllZZ+8yGUP/H UbT5L93Hf1X1qz2SfQLUCVNc7aENlCDC0/0RZfNcTBvBc1n6HcKOfvkNNVM7XuJRCyck=; Received: from sea.source.kernel.org ([172.234.252.31]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1wQTMe-0006fr-B4 for linux-f2fs-devel@lists.sourceforge.net; Fri, 22 May 2026 17:08:50 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 73392432C6; Fri, 22 May 2026 17:08:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E79BE1F000E9; Fri, 22 May 2026 17:08:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779469723; bh=c23yxkM0+/60YQOR3FKGtI6McR78Ee+YJUODTCKTIss=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=OzJ6y0n+zfW4+8WQGFFIbfwbnhp6Kv+qBK9H1sgDjZOELbUwkG34A+MtzYhcyghwQ nrfe+NcdHemO7jYCA7aV3PfT7SaOud7n/OQycUYBIhSL7CO9++tBPbXgcl/QS+69gf n1cGbOPUqj2ZCfDoZbf4ImCy2xQSS3pyLRuKeOepf+0jBS3SPuTYdt2JZ1UV6wtj5o Em/8yk5bmWeLIV1wWHSEaNiqviQ3BwSC+MLhXk2Fs44SXHCFCatdF9dA6hgWDbxiyE fDpSnQbBwhWWCGTzo/yjjKcytOvjcNcAP1TEV5yc7GuI0KKFJ2ZEd+gvk++fOksqEZ Uzp89DIhXWvGQ== Date: Fri, 22 May 2026 17:08:41 +0000 To: Theodore Tso Message-ID: References: <20260409134538.3692605-1-jaegeuk@kernel.org> <20260521155748.GA79343@macsyma-wired.lan> <20260522141115.GA8258@macsyma-wired.lan> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20260522141115.GA8258@macsyma-wired.lan> X-Headers-End: 1wQTMe-0006fr-B4 Subject: Re: [f2fs-dev] [PATCH v2] f2fs: another way to set large folio by remembering inode number X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Jaegeuk Kim via Linux-f2fs-devel Reply-To: Jaegeuk Kim Cc: linux-api@vger.kernel.org, linux-kernel@vger.kernel.org, Matthew Wilcox , linux-f2fs-devel@lists.sourceforge.net, Christoph Hellwig , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Akilesh Kailash , Christian Brauner Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net T24gMDUvMjIsIFRoZW9kb3JlIFRzbyB3cm90ZToKPiBPbiBGcmksIE1heSAyMiwgMjAyNiBhdCAw MzozMjozOUFNICswMDAwLCBKYWVnZXVrIEtpbSB3cm90ZToKPiA+IEkgd2VudCB0aGlzIHJvdXRl IGJlY2F1c2UgQW5kcm9pZCBoZWF2aWx5IHJlc3RyaWN0cyBpb2N0bCgpIHBlcm1pc3Npb25zCj4g PiBhbmQgd2UgbmVlZGVkIGJyb2FkZXIgYWNjZXNzIGZvciB0aGlzIHRvIHdvcmsgd2l0aGluIHRo ZSBmcmFtZXdvcmsuIEl04oCZcwo+ID4gZGVmaW5pdGVseSBhIHByYWdtYXRpYyBjaG9pY2UganVz dCB0byBnZXQgaXQgcnVubmluZyBpbiBwcm9kdWN0aW9uLgo+ID4gCj4gPiBJZiBpb2N0bCgpIGlz IGEgcmlnaHQgd2F5IGZvciB1cHN0cmVhbSwgSSdtIGhhcHB5IHRvIGNoYW5nZSB0aGlzIHBhdGNo LiBCeQo+ID4gdGhlIHdheSwgSSByZWFsbHkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgYWxsIHRoZSBt ZXNzYWdlcyBhcmUgc28gb2ZmZW5zaXZlLAo+ID4gZXZlbiB3aXRob3V0IHRyeWluZyB0byB1bmRl cnN0YW5kIHRoZSBwcm9ibGVtIG9yIGd1aWRpbmcgcmlnaHQgZGlyZWN0aW9ucy4KPiAKPiBUaGUg cmVhc29uIHdoeSBzb21lIHBlb3BsZSB3ZXJlIGdldHRpbmcgYW5ub3llZCB3YXMgYmVjYXVzZSBh cyBhIExpbnV4Cj4gZmlsZSBzeXN0ZW0gbWFpbnRhaW5lciwgdGhlcmUgd2FzIGFuIGFzc3VtcHRp b24gdGhhdCB5b3Ugd291bGQKPiB1bmRlcnN0YW5kIHRoYXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAt LS0gZXNwZWNpYWxseSBpbiB0aGUgdXNlci4qCj4gbmFtZXNwYWNlIC0tLSBoYXZlIGFuIGludGVu ZGVkIHVzZSBjYXNlIG9mIHN0b3JpbmcgYSB1c2VyLWNob3NlbiBzbWFsbAo+IHBpZWNlIG9mIG1l dGFkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSBmaWxlIHN5c3RlbS4KPiAKPiBIaWph Y2tpbmcgdXNlci5mYWR2aXNlIHN1Y2ggdGhhdCBpdCBubyBsb25nZXIgcGVyc2lzdGVudCBzdG9y ZXMgYW4KPiBleHRlbmRlZCBhdHRyaWJ1dGUgZm9yIG9uZSBzcGVjaWZpYyBmaWxlIHN5c3RlbSAt LS0gc3VjaCB0aGF0IGlmIGEKPiBoeXBvdGhldGljYWwgdXNlciBhcHBsaWNhdGlvbiBtaWdodCBk ZWNpZGUgdG8gc3RvcmUgYSBwaWVjZSBvZgo+IGFwcGxpY2F0aW9uIGRhdGEgaW4gdGhlIGV4dGVu ZGVkIGF0dHJpYnV0ZSBuYW1lZCAiZmFkdmlzZSIgd291bGQgZG8KPiBzb21ldGhpbmcgY29tcGxl dGVseSBkaWZmZXJlbnQgb24gYSBzaW5nbGUgbWFpbmxpbmUgZmlsZSBzeXN0ZW0gaXMgaW4KPiBz dWNoIHBvb3IgdGFzdGUgdGhhdCBJIHdvdWxkIGhhdmUgKmhvcGVkKiB0aGF0IGFueSBMaW51eCBm aWxlIHN5c3RlbQo+IG1haW50YWluZXIgd291bGQga25vdyB0aGF0IHRoaXMgYSBSZWFsbHkgQmFk IFRoaW5nLCBzdWNoIHRoYXQgaWYKPiBzb21lb25lIGluIHlvdXIgZGV2ZWxvcG1lbnQgY29tbXVu aXR5IHN1Z2dlc3RlZCBzdWNoIGFuIGlkZWEsIHlvdQo+IHdvdWxkIHJlamVjdCBpdC4KClRoYW5r IHlvdSBmb3IgdGhlIGV4cGxhbmF0aW9uLiBJdCBzZWVtcyBJIG1hZGUgYSB3cm9uZyBhc3N1bXB0 aW9uIG9uIHRoZQp1c2FnZSBvZiAidXNlci4iIHByZWZpeCB3aGVyZSBlYWNoIGZpbGVzeXN0ZW0g Y2FuIHN1cHBvcnQgaW4gZGlmZmVyZW50CndheXMuCgo+IAo+IEFuZCB0aGVuLCB3aGVuIHBlb3Bs ZSBjb21wbGFpbmVkIHRoYXQgaXQgd2FzIGEgYmFkIGlkZWEsIGFuZCB5b3UKPiBkZWNpZGVkIHRv IHB1dCBpbiB0aGUgZjJmcyBicmFuY2gsIHN1Y2ggdGhhdCBpdCB3b3VsZCBzaG93IHVwIGluCj4g bGludXgtbmV4dCwgYW5kIHRoZXJlIHdhcyBubyB3YXkgZm9yIG90aGVyIGZpbGUgc3lzdGVtIGRl dmVsb3BlcnMgdG8KPiBvYmplY3QgKHNob3J0IG9mIGFwcGVhbGluZyB0byBMaW51cykgLS0tIHdl bGwsIHRoYXQncyBiYXNpY2FsbHkgeW91Cj4gdGFraW5nIGFkdmFudGFnZSBvZiB5b3VyIGZpbGUg c3lzdGVtIG1haW50YWluZXIgcHJpdmlsZWdlcy4gIEFuZCB0aGlzCj4gaXMgd2h5IEkgc3RhcnRl ZCBwcm9wb3Npbmcgd2hldGhlciB3ZSBuZWVkZWQgdG8gYXBwZWFsIHRoaXMgdG8gTGludXMKPiBz byBoZSBjb3VsZCBtYWtlIHRoZSBjYWxsIHRvIHJlamVjdCBzb21ldGhpbmcgdGhhdCB0aGUgY29t bXVuaXR5IGhhZAo+IGFscmVhZHkgdG9sZCB5b3Ugd2FzIGluIHRlcnJpYmxlLCB0ZXJyaWJsZSB0 YXN0ZS4KClRvIGJlIGZhaXIsIEkgaGFkbid0IHF1ZXVlZCBpdCBpbiBsaW51eC1uZXh0IGZvciB3 ZWVrcyBzaW5jZSB0aGUgZmlyc3QKcG9zdCwgYW5kIHdhcyB3YWl0aW5nIGZvciBtb3JlIGZlZWRi YWNrcy4gSWYgSSB3YXMgYWJsZSB0byBoZWFyICJ1c2VyLiIKaXMgYSBnZW5lcmljIHByZWZpeCB1 c2VkIGZvciBhbGwgZmlsZXN5c3RlbXMgYW5kIHVzZSBpb2N0bCBmcm9tIHRoZSBiZWdpbm5pbmcs CkknZCBqdXN0IGRyb3AgYW5kIGJlIGFibGUgdG8gc3RhcnQgYXJndWluZyB3aXRoIHNlY3VyaXR5 IGZvbGtzIGJhY2suIFNpbmNlCm15IGVtcGxveWVyIGlzIGZ1bmRpbmcgZm9yIHByb2R1Y3Rpb24g bWFpbmx5LCBub3QgbXVjaCB1cHN0cmVhbSB3b3JrLCBJCmNvdWxkbid0IHNpdCBhbmQgd2FpdCBm b3IgdGhlIHJlc3BvbnNlIGZvciBtb250aHMuIDooCgo+IAo+IEFzIGZhciBhcyB0cnlpbmcgdG8g dW5kZXJzdGFuZCB3aHkgeW91IHdlcmUgZG9pbmcgdGhpcyAtLS0gSSBoYXZlIHRvCj4gdHVybiB0 aGF0IHF1ZXN0aW9uIGFyb3VuZC4gIFdoeSBkaWRuJ3QgKnlvdSogZXhwbGFpbiB3aHkgeW91IG5l ZWRlZCB0bwo+IGRvIHRoaXMgdGhpbmc/ICBJIHdlbnQgdGhyb3VnaCB0aGUgZS1tYWlsIGhpc3Rv cnksIGFuZCBJIGNvdWxkbid0IGZpbmQKPiBhbiBleHBsYW5hdGlvbiBvZiB3aHkgeW91IGRlY2lk ZWQgdG8gZG8gdGhpcyB0aGluZy4gIAoKSSBzaGFyZWQgc29tZSBtb3RpdmF0aW9uIHdoZW4gcmVw bHlpbmcgdG8gRGFycmljaydzIGZlZWRiYWNrIFsxXSwgYnV0IHllcywKaXQgd2FzIG5vdCBlbm91 Z2ggZm9yIGFsbCBoZWFkcy11cC4gVGhlIHByb2JsZW0gc3RhcnRlZCB0aGF0IHNvbWUgc3BlaWNp ZmljCmFwcGxpY2F0aW9uIG5lZWRzIGFzIG1hbnkgaGlnaC1vcmRlciBwYWdlcyBhcyBwb3NzaWJs ZSBtb3N0bHkgZm9yIHJlYWRzLiBTbywKSSB0aG91Z2h0IHdlIGNhbiB0dXJuIG9uIGxhcmdlIGZv bGlvIG9uIHRoZSBzcGVjaWZpYyBmaWxlcyBwZXIgaGludHMuIE9uZSB3YXkKZm9yIHRoZSBoaW50 cyB3YXMgdXNpbmcgaW1tdXRhYmxlIGJpdCwgYnV0IGl0IHR1cm5lZCBvdXQgaXQncyB2ZXJ5IGhh cmQgdG8KbWFuYWdlIGRpc2FibGluZyB0aGUgYml0IHdoZW5ldmVyIGRlbGV0aW5nIHRoZSBmaWxl cy4gQWxvbmcgd2l0aCBsaW1pdGVkCmlvY3RsKCkgYW5kIHJlcXVpcmluZyBpbm9kZSBldmljdGlv biB0byBtYW5hZ2UgbGFyZ2UgZm9saW8gYWN0aXZhdGlvbiwgSSBoYWQKdG8gaW1wbGVtZW50IHRo aXMgcGF0aC4KClsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL2FlQTVDOGJ5SXBYV2xh N2ZAZ29vZ2xlLmNvbS8KCj4gCj4gUGVyaGFwcyB3ZSBuZWVkIHRvIGFkZCBhbiBleHBsYW5hdGlv biB0aGUgRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKPiBleHBsYWluaW5nIHdoYXQgdGhlIGludGVu ZGVkIHVzZSBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGNhc2UsIGFuZAo+IHBlcmhhcHMgcmVm ZXJlbmNpbmcgcGFzdCBjYXNlcyB3ZXJlIHBlb3BsZSB0cmllZCB0byB1c2UgdGhpcyB0byBieXBh c3MKPiB0aGUgbGludXgtYXBpIHJldmlldyBwcm9jZXNzIChmMmZzJ3MgdXNlci5mYWR2aXNlIGlz IG5vdCB0aGUgZmlyc3QKPiB0aW1lIHNvbWVvbmUgaGFzIHRyaWVkIHRvIGRvIHRoaXMpIHRoaW5n KSwgc28gdGhhdCBhdXRvbWF0ZWQgcmV2aWV3Cj4gYm90cyBsaWtlIFNhc2hpa28gY2FuIGV4cGxh aW4gd2h5IGl0J3MgaW4gc3VjaCB0ZXJyaWJsZSB0YXN0ZSB0byBwYXRjaAo+IGF1dGhvcnMsIHBl cmhhcHMgd2UgbmVlZCB0byBkbyB0aGlzLiAgVXAgdW50aWwgbm93LCBJIHRoaW5rIHRoZQo+IGFz c3VtcHRpb24gaXMgdGhhdCBmaWxlIHN5c3RlbSBtYWludGFpbmVycyB3b3VsZCBrbm93IHNvbWV0 aGluZyB0aGlzCj4gc2VsZi1ldmlkZW50LCBhbmQgaWYgbm90LCBpZiBpdCB3YXMgcG9pbnRlZCBv dXQsIHRoZXkgd291bGRuJ3QgdHJ5IHRvCj4gZm9yY2Ugc3VjaCBhbiBpbGwtYWR2aXNlZCBpbnRl cmZhY2UgdG8gTGludXMuCgpJIGJlbGlldmUgdGhpcyBoZWxwcyBhIGxvdCB0byBhbGwgbmV3Ymll cyBsaWtlIG1lLgoKSSByZWFsbHkgYXBwcmVjaWF0ZSB5b3VyIGZlZWRiYWNrLgoKPiAKPiAJCQkJ CQktIFRlZAo+IAo+IFAuUy4gIEFzIGFuIGV4bWFwbGUgb2YgaG93IEkgaGFubGRlZCBhIHNvbWV3 aGF0IHNpbWlsYXIgc2NlbmFyaW8gaW4KPiB0aGUgcGFzdCwgbXkgZW1wbG95ZXIncyBjbHVzdGVy IGZpbGUgc3lzdGVtIG5lZWRlZAo+IEZBTExPQ19GTF9OT19ISURFX1NUQUxFIHRvIHNhdmUgJCQk JCBpbiBUQ08gc3RvcmFnZSBjb3N0cy4gIEJ1dCB0aGUKPiBjb25jZXJuIHdhcyB0aGlzIHdvdWxk IGJlIGFuIGF0dHJhY3RpdmUgbnVpc2FuY2UgZm9yIGVudGVycHJpc2UgZGlzdHJvCj4gdXNlcnMs IHdobyB3b3VsZCBzZWUgdGhlIG1hc3NpdmUgcGVyZm9ybWFuY2UgaW5jcmVhc2UsIG5vdCByZWFs aXplCj4gdGhhdCB0aGlzIHdvdWxkIGxlYWsgc3RhbGUgZGF0YSwgd2hpY2ggY291bGQgcmVzdWx0 IGluIHVzZXIgUElJIGJlaW5nCj4gZXhwb3NlZCwgdGh1cyBtYWtpbmcgbGlmZSBoYXJkIGZvciBF bnRlcnByaXNlIExpbnV4J3MgcmVwdXRhdGlvbi4KPiAoVGhpcyB3YXNuJ3QgYW4gaXNzdWUgYXQg JFdPUksgYmVjYXVzZSB3ZSBlbnJ5cHQgYWxsIGRhdGEgYXQgcmVzdCwgYW5kCj4gdGhlIGNsdXN0 ZXIgZmlsZSBzeXN0ZW0gZGFlbW9uIHdhcyBhIHByaXZpbGVnZWQgc2VydmVyIHdobyAoYSkga25l dwo+IHdoYXQgaXQgd2FzIGRvaW5nLCBhbmQgKGIpIG9ubHkgaXQgd291bGQgaGF2ZSBhY2Nlc3Mg dG8gc2V0Cj4gRkFMTE9DX0ZMX05PX0hJREVfU1RBTEUuKQo+IAo+IEkgZGlzY2xvc2VkICp3aHkq ICRXT1JLIG5lZWRlZCBzdWNoIGEgdGhpbmcgKGl0IG1hZGUgYSBodWdlIGRpZmZlcmVuY2UKPiB0 byBzdG9yYWdlIFRDTyBjb3N0c3MgZm9yIEdvb2dsZSdzIENsdXN0ZXIgRmlsZXN5c3RlbSksIGFu ZCBhZnRlcgo+IGRpc2N1c3Npb24gYW5kIG5lZ290aWF0aW9uLCB3ZSBjYW1lIHRvIGEgY29tcHJv bWlzZSB3aGljaCBpbnZvbHZlZCBteQo+IGtlZXBpbmcgdGhlICh2ZXJ5IHNtYWxsKSBwYXRjaCBv dXQgb2YgdHJlZSwgYnV0IHJlc2VydmluZyB0aGUgY29kZQo+IHBvaW50IHVwc3RyZWFtIHRvIGF2 b2lkIGZ1dHVyZSBiaXRmaWVsZCBjb2xsaXNpb25zLiAgVGhleSBrZXkgaGVyZSB3YXMKPiB0aGF0 IEkgKmtuZXcqIGl0IHdhcyBjb250cm92ZXJzaWFsLCBhbmQgSSB1bmRlcnN0b29kIHdoYXQgcHJv YmxlbXMgaXQKPiBtaWdodCBjYXVzZSBpbiB0aGUgcmVzdCBvZiB0aGUgZWNvc3lzdGVtLiAgVGhh dCdzIHBhcnQgb2YgdGhlIGpvYiBvZiBhCj4gbWFpbnRhaW5lciwgYW5kIGl0J3MgYWxzbyB3aHkg YSBjb21wYW55IG1pZ2h0IHdhbnQgdG8gaGlyZSBhCj4gbWFpbnRhaW5lci4gIFRoZXkgY2FuIHJl cHJlc2VudCB0aGUgbmVlZHMgb2YgbXVsdGlwbGUgc3Rha2Vob2xkZXJzIC0tLQo+IHRoZSB1cHN0 cmVhbSBjb21tdW5pdHksIHVwc3RyZWFtIHVzZXJzIGFuZCB0aGUgZ3JlYXRlciBMaW51eAo+IGVj b3N5c3RlbSwgYXMgd2VsbCBhcyB0aGVpciBlbXBsb3llci4KPiAKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IExpbnV4LWYyZnMtZGV2ZWwgbWFp bGluZyBsaXN0Cj4gTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRw czovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9saW51eC1mMmZzLWRldmVs CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgt ZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3Jn ZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgt ZjJmcy1kZXZlbAo=