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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A75ECC433EF for ; Fri, 4 Feb 2022 17:17:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376833AbiBDRRk (ORCPT ); Fri, 4 Feb 2022 12:17:40 -0500 Received: from so254-9.mailgun.net ([198.61.254.9]:26266 "EHLO so254-9.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234482AbiBDRRj (ORCPT ); Fri, 4 Feb 2022 12:17:39 -0500 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1643995059; h=Content-Transfer-Encoding: Content-Type: In-Reply-To: MIME-Version: Date: Message-ID: References: Cc: To: From: Subject: Sender; bh=xeHh+pa7fmmtJaUQiZc4mFN9NjxA7Uxxmuyz53pl2r8=; b=cTJQmm4kkh6Maer/WLXscZac/WukzaSIqD0NwYhBT6Za/fn5BjnjoiQ9lvVXWYh554SIjGk+ KgfYNEdnT2IbmVz8xGnIBQ5/h7NYqSWm52Wt12bwb0H7vB16bjfZz47b7Xx4ypiBvttkBFYi uxf7ho9lIqdoYxDKo1fbhPxuTK8= X-Mailgun-Sending-Ip: 198.61.254.9 X-Mailgun-Sid: WyI1MzIzYiIsICJsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZyIsICJiZTllNGEiXQ== Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n07.prod.us-east-1.postgun.com with SMTP id 61fd5fb342b0db82d20af68a (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Fri, 04 Feb 2022 17:17:39 GMT Sender: sricharan=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 48747C4360C; Fri, 4 Feb 2022 17:17:38 +0000 (UTC) Received: from [192.168.0.104] (unknown [183.82.28.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sricharan) by smtp.codeaurora.org (Postfix) with ESMTPSA id E2448C4338F; Fri, 4 Feb 2022 17:17:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 smtp.codeaurora.org E2448C4338F Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=codeaurora.org Subject: Re: [PATCH] mtd: nand: raw: qcom_nandc: Don't clear_bam_transaction on READID From: Sricharan Ramabadhran To: Konrad Dybcio , Miquel Raynal Cc: Manivannan Sadhasivam , pragalla@codeaurora.org, ~postmarketos/upstreaming@lists.sr.ht, martin.botka@somainline.org, angelogioacchino.delregno@somainline.org, marijn.suijten@somainline.org, jamipkettunen@somainline.org, Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, mdalam@codeaurora.org, bbhatt@codeaurora.org, hemantk@codeaurora.org References: <20220113184427.2259509-1-konrad.dybcio@somainline.org> <20220114082718.32a2fc83@xps13> <20220126111613.3ab0021e@xps13> <20220126103316.GA212068@thinkpad> <20220126114200.4cc3c21b@xps13> <0a8d6550-aa19-0af1-abae-66bf34c91ea8@somainline.org> <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> <20220201145204.54646475@xps13> Message-ID: Date: Fri, 4 Feb 2022 22:47:27 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 2/2/2022 12:54 PM, Sricharan Ramabadhran wrote: > Hi Konrad/Miquel, > > On 2/1/2022 9:21 PM, Konrad Dybcio wrote: >> >> On 01/02/2022 14:52, Miquel Raynal wrote: >>> Hi Konrad, >>> >>> konrad.dybcio@somainline.org wrote on Mon, 31 Jan 2022 20:54:12 +0100: >>> >>>> On 31/01/2022 15:13, Sricharan Ramabadhran wrote: >>>>> Hi Konrad, >>>>> >>>>> On 1/31/2022 3:39 PM, Konrad Dybcio wrote: >>>>>> On 28/01/2022 18:50, Sricharan Ramabadhran wrote: >>>>>>> Hi Konrad, >>>>>>> >>>>>>> On 1/28/2022 9:55 AM, Sricharan Ramabadhran wrote: >>>>>>>> Hi Miquel, >>>>>>>> >>>>>>>> On 1/26/2022 4:12 PM, Miquel Raynal wrote: >>>>>>>>> Hi Mani, >>>>>>>>> >>>>>>>>> mani@kernel.org wrote on Wed, 26 Jan 2022 16:03:16 +0530: >>>>>>>>>> On Wed, Jan 26, 2022 at 11:16:13AM +0100, Miquel Raynal wrote: >>>>>>>>>>> Hello, >>>>>>>>>>> >>>>>>>>>>> miquel.raynal@bootlin.com wrote on Fri, 14 Jan 2022 08:27:18 >>>>>>>>>>> +0100: >>>>>>>>>>>> Hi Konrad, >>>>>>>>>>>> >>>>>>>>>>>> konrad.dybcio@somainline.org wrote on Thu, 13 Jan 2022 >>>>>>>>>>>> 19:44:26 >>>>>>>> +0100: >>>>>>>>>>>>> While I have absolutely 0 idea why and how, running >>>>>>>>>>>>> >>>>>>>>> clear_bam_transaction >>>>>>>>>>>>> when READID is issued makes the DMA totally clog up and >>>>>>>>>>>>> refuse >>>>>>>>> to function >>>>>>>>>>>>> at all on mdm9607. In fact, it is so bad that all the data >>>>>>>>>>>>> >>>>>>>>> gets garbled >>>>>>>>>>>>> and after a short while in the nand probe flow, the CPU >>>>>>>>>>>>> >>>>>>>>> decides that >>>>>>>>>>>>> sepuku is the only option. >>>>>>>>>>>>> >>>>>>>>>>>>> Removing _READID from the if condition makes it work like >>>>>>>>>>>>> a >>>>>>>>> charm, I can >>>>>>>>>>>>> read data and mount partitions without a problem. >>>>>>>>>>>>> >>>>>>>>>>>>> Signed-off-by: Konrad Dybcio >>>>>>>>>>>>> --- >>>>>>>>>>>>> This is totally just an observation which took me an >>>>>>>>>>>>> inhumane >>>>>>>>> amount of >>>>>>>>>>>>> debug prints to find.. perhaps there's a better reason >>>>>>>>>>>>> behind >>>>>>>>> this, but >>>>>>>>>>>>> I can't seem to find any answers.. Therefore, this is a >>>>>>>>>>>>> BIG RFC! >>>>>>>>>>>> I'm adding two people from codeaurora who worked a lot on >>>>>>>>>>>> this >>>>>>>> driver. >>>>>>>>>>>> Hopefully they will have an idea :) >>>>>>>>>>> Sadre, I've spent a significant amount of time reviewing >>>>>>>>>>> your >>>>>>> patches, >>>>>>>>>>> now it's your turn to not take a month to answer to your peers >>>>>>>>>>> proposals. >>>>>>>>>>> >>>>>>>>>>> Please help reviewing this patch. >>>>>>>>>> Sorry. I was hoping that Qcom folks would chime in as I don't >>>>>>>>>> >>>>>> have any idea >>>>>>>>>> about the mdm9607 platform. It could be that the mail server >>>>>>>>>> >>>>>> migration from >>>>>>>>>> codeaurora to quicinc put a barrier here. >>>>>>>>>> >>>>>>>>>> Let me ping them internally. >>>>>>>>> Oh, ok, I didn't know. Thanks! >>>>>>>>     Sorry Miquel, somehow we did not get this email in our inbox. >>>>>>>>     Thanks to Mani for pinging us, we will test this up today >>>>>>>> and >>>> get back. >>>>>>>        While we could not reproduce this issue on our ipq boards >>>>>>> (do >>> not have a mdm9607 right now) and >>>>>>>         issue does not look any obvious. >>>>>>>        can you please give the debug logs that you did for the >>>>>>> above >>> stage by stage ? >>>>>> I won't have access to the board for about two weeks, sorry. >>>>>> >>>>>> When I get to it, I'll surely try to send you the logs, though there >>>>>> >>>>>> wasn't much more than just something jumping to who-knows-where >>>>>> >>>>>> after clear_bam_transaction was called, resulting in values >> >>>>>> associated with >>>>>> >>>>>> the NAND being all zeroed out in pr_err/_debug/etc. >>>>>> >>>>>      Ok sure. So was the READID command itself failing (or) the > >>>>> subsequent one ? >>>>>     We can check which parameter reset by the >>>>> clear_bam_transaction is > causing the >>>>>     failure.  Meanwhile, looping in Pradeep who has access to the >>>>> > board, so in a better >>>>>     position to debug. >>>> I'm sorry I have so few details on hand, and no kernel tree (no >>>> access to that machine either, for now). >>>> >>>> >>>> I will try to describe to the best of my abilities what I recall. >>>> >>>> >>>> My methodology of making sure things don't go haywire was to print >>>> the oob size >>>> >>>> of our NAND basically every two lines of code (yes, i was very >>>> desperate at one point), >>>> >>>> as that was zeroed out when *the bug* happened, >>> This does look like a pointer error at some point and some kernel data >>> has been corrupted very badly by the driver. >>> >>>> leading to a kernel bug/panic/stall >>>> >>>> (can't recall what exactly it was, but it said something along the >>>> lines of "no support for >>>> >>>> oob size 0" and then it didn't fail graceully, leading to some bad >>>> jumps and ultimately >>>> >>>> a dead platform..) >>>> >>>> >>>> after hours of digging, I found out that everything goes fine until >>>> clear_bam_transaction is called, >>> Do you remember if this function was called for the first time when >>> this happened? >> >> I think so, if I recall correctly there are no more callers in this >> path, as readid is the first nand command executed in flash probe flow. >> >> >> >>> >>>> after that gets executed every nand op starts reading all zeroes >>>> (for example in JEDEC ID check) >>>> >>>> so I added the changes from this patch, and things magically >>>> started working... My suspicion is >>>> >>>> that the underlying FIFO isn't fully drained (is it a FIFO on 9607? >>>> bah, i work on too many socs at once) >>> I don't see it in the list of supported devices, what's the exact >>> compatible used? >> >> qcom,ipq4019-nand >> >> >> >>> >>>> and this function only makes Linux think it is, without actually >>>> draining it, and the leftover >>>> >>>> commands get executed with some parts of them getting overwritten, >>>> resulting in the >>>> >>>> famous garbage in - garbage out situation, but that's only a >>>> guesstimate.. >>> I would bet for a non allocated bam-ish pointer that is reset to zero >>> in the clear_bam_transaction() helper. >>> >>> Can you get your hands on the board again? >> >> Sure, but as I mentioned previously, only in about 2 weeks, I can't >> really do any dev before then.. :( >> >> >> >>> It would be nice to check if the allocation always occurs before use, >>> and if yes on how much bytes. >>> >>> If the pointer is not dangling, then perhaps something else smashes >>> that pointer. >> >> >> Konrad >> >>> >>>> Do note this somehow worked fine on 5.11 and then broke on 5.12/13. >>>> I went as far as replacing most >>>> >>>> of the kernel with the updated/downgraded parts via git checkout (i >>>> tried many combinations), >>>> >>>> to no avail.. I even tried different compilers and optimization >>>> levels, thinking it could have been >>>> >>>> a codegen issue, but no luck either. >>>> >>>> >>>> I.. do understand this email is a total mess to read, as much as it >>>> was to write, but >>>> >>>> without access to my code and the machine itself I can't give you >>>> solid details, and >>>> >>>> the fact this situation is far from ordinary doesn't help either.. >>>> >>>> >>>> The latest (ancient, not quite pretty, but probably working if my >>>> memory is correct) version of my patches >>>> >>>> for the mdm9607 is available at [1], I will push the new revision >>>> after I get access to the workstation. >>>> >   + few more who have access to the board. > >    Going by the description, for kernel corruption, we can try out a > KASAN build. >    Since you have mentioned it worked till 5.11, you bisected the > driver till 5.11 head and it worked ? >    Tried running a KASAN enabled image on IPQ board, but no luck. Nothing came out.    Only if someone with the board can help here, we can proceed Regards,   Sricharan 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 81BDAC433EF for ; Fri, 4 Feb 2022 17:18:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: Cc:To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xaO95vPdxw+TPgIuOvgn99lvrX25BEk/tAU4hsyArZY=; b=Z29TR6XZBVp43Oy5JlXrygFZFc 4ieI027qfOhW/bdiZ44/4gXpQh+T2RvFWPERVeTBo1YkdZHwDiRwxgGsX5D8kZspjnDUPrPZwiCo5 TTsmy724oCAexKUIumffbVl93MDOaR7QbxnxQdqcFXXLWHvwvf8uGT6G6HHKJDevvfr4M2CX/uyBt IueyhSlrw89N2TO1ZTZWOo6MsfdplGyVQp2AnyjDI38/keCnS1ToFSsRBoVT3veV+RsMqvsKHxepO 3O24JpTJXwxpkGMDU74Gojf/Rp9FM3dqaf/uhBVP0pLzsn5cwLqEeKNg8g9KaWTQArel+VmIxvwDU /ezAD/KA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nG2Da-004zPm-HE; Fri, 04 Feb 2022 17:17:54 +0000 Received: from m43-7.mailgun.net ([69.72.43.7]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nG2DW-004zP6-Mq for linux-mtd@lists.infradead.org; Fri, 04 Feb 2022 17:17:52 +0000 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1643995069; h=Content-Transfer-Encoding: Content-Type: In-Reply-To: MIME-Version: Date: Message-ID: References: Cc: To: From: Subject: Sender; bh=xeHh+pa7fmmtJaUQiZc4mFN9NjxA7Uxxmuyz53pl2r8=; b=kZrQFQZAn4Mq4oJelsrQlKztDAuXQglAvdu8GABj0bkd6zHRCiGeOy0ARbS9XzBzIDbJ4AlY UqWEvaOvp2ki1NOgtQfSezgo1T3h550+CE66N5GOvcyT8i1K8n2vEO3qkNF79GfJwe67uGO5 lROA8hA+FitdN1n+MyL8fyDZl20= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyJkZDQ0ZiIsICJsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZyIsICJiZTllNGEiXQ== Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n09.prod.us-east-1.postgun.com with SMTP id 61fd5fbc2afeb7f9b5600fd1 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Fri, 04 Feb 2022 17:17:48 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id BFA94C43618; Fri, 4 Feb 2022 17:17:37 +0000 (UTC) Received: from [192.168.0.104] (unknown [183.82.28.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sricharan) by smtp.codeaurora.org (Postfix) with ESMTPSA id E2448C4338F; Fri, 4 Feb 2022 17:17:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 smtp.codeaurora.org E2448C4338F Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=codeaurora.org Subject: Re: [PATCH] mtd: nand: raw: qcom_nandc: Don't clear_bam_transaction on READID From: Sricharan Ramabadhran To: Konrad Dybcio , Miquel Raynal Cc: Manivannan Sadhasivam , pragalla@codeaurora.org, ~postmarketos/upstreaming@lists.sr.ht, martin.botka@somainline.org, angelogioacchino.delregno@somainline.org, marijn.suijten@somainline.org, jamipkettunen@somainline.org, Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, mdalam@codeaurora.org, bbhatt@codeaurora.org, hemantk@codeaurora.org References: <20220113184427.2259509-1-konrad.dybcio@somainline.org> <20220114082718.32a2fc83@xps13> <20220126111613.3ab0021e@xps13> <20220126103316.GA212068@thinkpad> <20220126114200.4cc3c21b@xps13> <0a8d6550-aa19-0af1-abae-66bf34c91ea8@somainline.org> <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> <20220201145204.54646475@xps13> Message-ID: Date: Fri, 4 Feb 2022 22:47:27 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220204_091750_866440_5DE2E5C8 X-CRM114-Status: GOOD ( 40.11 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org Ck9uIDIvMi8yMDIyIDEyOjU0IFBNLCBTcmljaGFyYW4gUmFtYWJhZGhyYW4gd3JvdGU6Cj4gSGkg S29ucmFkL01pcXVlbCwKPgo+IE9uIDIvMS8yMDIyIDk6MjEgUE0sIEtvbnJhZCBEeWJjaW8gd3Jv dGU6Cj4+Cj4+IE9uIDAxLzAyLzIwMjIgMTQ6NTIsIE1pcXVlbCBSYXluYWwgd3JvdGU6Cj4+PiBI aSBLb25yYWQsCj4+Pgo+Pj4ga29ucmFkLmR5YmNpb0Bzb21haW5saW5lLm9yZyB3cm90ZSBvbiBN b24sIDMxIEphbiAyMDIyIDIwOjU0OjEyICswMTAwOgo+Pj4KPj4+PiBPbiAzMS8wMS8yMDIyIDE1 OjEzLCBTcmljaGFyYW4gUmFtYWJhZGhyYW4gd3JvdGU6Cj4+Pj4+IEhpIEtvbnJhZCwKPj4+Pj4K Pj4+Pj4gT24gMS8zMS8yMDIyIDM6MzkgUE0sIEtvbnJhZCBEeWJjaW8gd3JvdGU6Cj4+Pj4+PiBP biAyOC8wMS8yMDIyIDE4OjUwLCBTcmljaGFyYW4gUmFtYWJhZGhyYW4gd3JvdGU6Cj4+Pj4+Pj4g SGkgS29ucmFkLAo+Pj4+Pj4+Cj4+Pj4+Pj4gT24gMS8yOC8yMDIyIDk6NTUgQU0sIFNyaWNoYXJh biBSYW1hYmFkaHJhbiB3cm90ZToKPj4+Pj4+Pj4gSGkgTWlxdWVsLAo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiBPbiAxLzI2LzIwMjIgNDoxMiBQTSwgTWlxdWVsIFJheW5hbCB3cm90ZToKPj4+Pj4+Pj4+IEhp IE1hbmksCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gbWFuaUBrZXJuZWwub3JnIHdyb3RlIG9uIFdlZCwg MjYgSmFuIDIwMjIgMTY6MDM6MTYgKzA1MzA6Cj4+Pj4+Pj4+Pj4gT24gV2VkLCBKYW4gMjYsIDIw MjIgYXQgMTE6MTY6MTNBTSArMDEwMCwgTWlxdWVsIFJheW5hbCB3cm90ZToKPj4+Pj4+Pj4+Pj4g SGVsbG8sCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20g d3JvdGUgb24gRnJpLCAxNCBKYW4gMjAyMiAwODoyNzoxOCAKPj4+Pj4+Pj4+Pj4gKzAxMDA6Cj4+ Pj4+Pj4+Pj4+PiBIaSBLb25yYWQsCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4ga29ucmFkLmR5 YmNpb0Bzb21haW5saW5lLm9yZyB3cm90ZSBvbiBUaHUsIDEzIEphbiAyMDIyIAo+Pj4+Pj4+Pj4+ Pj4gMTk6NDQ6MjYgPj4+Pj4+Pj4gKzAxMDA6Cj4+Pj4+Pj4+Pj4+Pj4gV2hpbGUgSSBoYXZlIGFi c29sdXRlbHkgMCBpZGVhIHdoeSBhbmQgaG93LCBydW5uaW5nIAo+Pj4+Pj4+Pj4+Pj4+ID4+Pj4+ Pj4+PiBjbGVhcl9iYW1fdHJhbnNhY3Rpb24KPj4+Pj4+Pj4+Pj4+PiB3aGVuIFJFQURJRCBpcyBp c3N1ZWQgbWFrZXMgdGhlIERNQSB0b3RhbGx5IGNsb2cgdXAgYW5kIAo+Pj4+Pj4+Pj4+Pj4+IHJl ZnVzZSA+Pj4+Pj4+Pj4gdG8gZnVuY3Rpb24KPj4+Pj4+Pj4+Pj4+PiBhdCBhbGwgb24gbWRtOTYw Ny4gSW4gZmFjdCwgaXQgaXMgc28gYmFkIHRoYXQgYWxsIHRoZSBkYXRhIAo+Pj4+Pj4+Pj4+Pj4+ ID4+Pj4+Pj4+PiBnZXRzIGdhcmJsZWQKPj4+Pj4+Pj4+Pj4+PiBhbmQgYWZ0ZXIgYSBzaG9ydCB3 aGlsZSBpbiB0aGUgbmFuZCBwcm9iZSBmbG93LCB0aGUgQ1BVIAo+Pj4+Pj4+Pj4+Pj4+ID4+Pj4+ Pj4+PiBkZWNpZGVzIHRoYXQKPj4+Pj4+Pj4+Pj4+PiBzZXB1a3UgaXMgdGhlIG9ubHkgb3B0aW9u Lgo+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gUmVtb3ZpbmcgX1JFQURJRCBmcm9tIHRoZSBp ZiBjb25kaXRpb24gbWFrZXMgaXQgd29yayBsaWtlIAo+Pj4+Pj4+Pj4+Pj4+IGEgPj4+Pj4+Pj4+ IGNoYXJtLCBJIGNhbgo+Pj4+Pj4+Pj4+Pj4+IHJlYWQgZGF0YSBhbmQgbW91bnQgcGFydGl0aW9u cyB3aXRob3V0IGEgcHJvYmxlbS4KPj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IFNpZ25lZC1v ZmYtYnk6IEtvbnJhZCBEeWJjaW8gPGtvbnJhZC5keWJjaW9Ac29tYWlubGluZS5vcmc+Cj4+Pj4+ Pj4+Pj4+Pj4gLS0tCj4+Pj4+Pj4+Pj4+Pj4gVGhpcyBpcyB0b3RhbGx5IGp1c3QgYW4gb2JzZXJ2 YXRpb24gd2hpY2ggdG9vayBtZSBhbiAKPj4+Pj4+Pj4+Pj4+PiBpbmh1bWFuZSA+Pj4+Pj4+Pj4g YW1vdW50IG9mCj4+Pj4+Pj4+Pj4+Pj4gZGVidWcgcHJpbnRzIHRvIGZpbmQuLiBwZXJoYXBzIHRo ZXJlJ3MgYSBiZXR0ZXIgcmVhc29uIAo+Pj4+Pj4+Pj4+Pj4+IGJlaGluZCA+Pj4+Pj4+Pj4gdGhp cywgYnV0Cj4+Pj4+Pj4+Pj4+Pj4gSSBjYW4ndCBzZWVtIHRvIGZpbmQgYW55IGFuc3dlcnMuLiBU aGVyZWZvcmUsIHRoaXMgaXMgYSAKPj4+Pj4+Pj4+Pj4+PiBCSUcgUkZDIQo+Pj4+Pj4+Pj4+Pj4g SSdtIGFkZGluZyB0d28gcGVvcGxlIGZyb20gY29kZWF1cm9yYSB3aG8gd29ya2VkIGEgbG90IG9u IAo+Pj4+Pj4+Pj4+Pj4gdGhpcyA+Pj4+Pj4+PiBkcml2ZXIuCj4+Pj4+Pj4+Pj4+PiBIb3BlZnVs bHkgdGhleSB3aWxsIGhhdmUgYW4gaWRlYSA6KQo+Pj4+Pj4+Pj4+PiBTYWRyZSwgSSd2ZSBzcGVu dCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lIHJldmlld2luZyAKPj4+Pj4+Pj4+Pj4geW91 ciA+Pj4+Pj4+IHBhdGNoZXMsCj4+Pj4+Pj4+Pj4+IG5vdyBpdCdzIHlvdXIgdHVybiB0byBub3Qg dGFrZSBhIG1vbnRoIHRvIGFuc3dlciB0byB5b3VyIHBlZXJzCj4+Pj4+Pj4+Pj4+IHByb3Bvc2Fs cy4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gUGxlYXNlIGhlbHAgcmV2aWV3aW5nIHRoaXMgcGF0 Y2guCj4+Pj4+Pj4+Pj4gU29ycnkuIEkgd2FzIGhvcGluZyB0aGF0IFFjb20gZm9sa3Mgd291bGQg Y2hpbWUgaW4gYXMgSSBkb24ndCAKPj4+Pj4+Pj4+PiA+Pj4+Pj4gaGF2ZSBhbnkgaWRlYQo+Pj4+ Pj4+Pj4+IGFib3V0IHRoZSBtZG05NjA3IHBsYXRmb3JtLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBt YWlsIHNlcnZlciAKPj4+Pj4+Pj4+PiA+Pj4+Pj4gbWlncmF0aW9uIGZyb20KPj4+Pj4+Pj4+PiBj b2RlYXVyb3JhIHRvIHF1aWNpbmMgcHV0IGEgYmFycmllciBoZXJlLgo+Pj4+Pj4+Pj4+Cj4+Pj4+ Pj4+Pj4gTGV0IG1lIHBpbmcgdGhlbSBpbnRlcm5hbGx5Lgo+Pj4+Pj4+Pj4gT2gsIG9rLCBJIGRp ZG4ndCBrbm93LiBUaGFua3MhCj4+Pj4+Pj4+IMKgwqDCoCBTb3JyeSBNaXF1ZWwsIHNvbWVob3cg d2UgZGlkIG5vdCBnZXQgdGhpcyBlbWFpbCBpbiBvdXIgaW5ib3guCj4+Pj4+Pj4+IMKgwqDCoCBU aGFua3MgdG8gTWFuaSBmb3IgcGluZ2luZyB1cywgd2Ugd2lsbCB0ZXN0IHRoaXMgdXAgdG9kYXkg Cj4+Pj4+Pj4+IGFuZCA+Pj4+IGdldCBiYWNrLgo+Pj4+Pj4+IMKgwqAgwqAgwqAgV2hpbGUgd2Ug Y291bGQgbm90IHJlcHJvZHVjZSB0aGlzIGlzc3VlIG9uIG91ciBpcHEgYm9hcmRzIAo+Pj4+Pj4+ IChkbyA+Pj4gbm90IGhhdmUgYSBtZG05NjA3IHJpZ2h0IG5vdykgYW5kCj4+Pj4+Pj4gwqDCoMKg wqDCoMKgwqAgaXNzdWUgZG9lcyBub3QgbG9vayBhbnkgb2J2aW91cy4KPj4+Pj4+PiDCoMKgIMKg IMKgIGNhbiB5b3UgcGxlYXNlIGdpdmUgdGhlIGRlYnVnIGxvZ3MgdGhhdCB5b3UgZGlkIGZvciB0 aGUgCj4+Pj4+Pj4gYWJvdmUgPj4+IHN0YWdlIGJ5IHN0YWdlID8KPj4+Pj4+IEkgd29uJ3QgaGF2 ZSBhY2Nlc3MgdG8gdGhlIGJvYXJkIGZvciBhYm91dCB0d28gd2Vla3MsIHNvcnJ5Lgo+Pj4+Pj4K Pj4+Pj4+IFdoZW4gSSBnZXQgdG8gaXQsIEknbGwgc3VyZWx5IHRyeSB0byBzZW5kIHlvdSB0aGUg bG9ncywgdGhvdWdoIHRoZXJlCj4+Pj4+Pgo+Pj4+Pj4gd2Fzbid0IG11Y2ggbW9yZSB0aGFuIGp1 c3Qgc29tZXRoaW5nIGp1bXBpbmcgdG8gd2hvLWtub3dzLXdoZXJlCj4+Pj4+Pgo+Pj4+Pj4gYWZ0 ZXIgY2xlYXJfYmFtX3RyYW5zYWN0aW9uIHdhcyBjYWxsZWQsIHJlc3VsdGluZyBpbiB2YWx1ZXMg Pj4gCj4+Pj4+PiBhc3NvY2lhdGVkIHdpdGgKPj4+Pj4+Cj4+Pj4+PiB0aGUgTkFORCBiZWluZyBh bGwgemVyb2VkIG91dCBpbiBwcl9lcnIvX2RlYnVnL2V0Yy4KPj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg IE9rIHN1cmUuIFNvIHdhcyB0aGUgUkVBRElEIGNvbW1hbmQgaXRzZWxmIGZhaWxpbmcgKG9yKSB0 aGUgPiAKPj4+Pj4gc3Vic2VxdWVudCBvbmUgPwo+Pj4+PiDCoMKgwqAgV2UgY2FuIGNoZWNrIHdo aWNoIHBhcmFtZXRlciByZXNldCBieSB0aGUgCj4+Pj4+IGNsZWFyX2JhbV90cmFuc2FjdGlvbiBp cyA+IGNhdXNpbmcgdGhlCj4+Pj4+IMKgwqDCoCBmYWlsdXJlLsKgIE1lYW53aGlsZSwgbG9vcGlu ZyBpbiBQcmFkZWVwIHdobyBoYXMgYWNjZXNzIHRvIHRoZSAKPj4+Pj4gPiBib2FyZCwgc28gaW4g YSBiZXR0ZXIKPj4+Pj4gwqDCoMKgIHBvc2l0aW9uIHRvIGRlYnVnLgo+Pj4+IEknbSBzb3JyeSBJ IGhhdmUgc28gZmV3IGRldGFpbHMgb24gaGFuZCwgYW5kIG5vIGtlcm5lbCB0cmVlIChubyAKPj4+ PiBhY2Nlc3MgdG8gdGhhdCBtYWNoaW5lIGVpdGhlciwgZm9yIG5vdykuCj4+Pj4KPj4+Pgo+Pj4+ IEkgd2lsbCB0cnkgdG8gZGVzY3JpYmUgdG8gdGhlIGJlc3Qgb2YgbXkgYWJpbGl0aWVzIHdoYXQg SSByZWNhbGwuCj4+Pj4KPj4+Pgo+Pj4+IE15IG1ldGhvZG9sb2d5IG9mIG1ha2luZyBzdXJlIHRo aW5ncyBkb24ndCBnbyBoYXl3aXJlIHdhcyB0byBwcmludCAKPj4+PiB0aGUgb29iIHNpemUKPj4+ Pgo+Pj4+IG9mIG91ciBOQU5EIGJhc2ljYWxseSBldmVyeSB0d28gbGluZXMgb2YgY29kZSAoeWVz LCBpIHdhcyB2ZXJ5IAo+Pj4+IGRlc3BlcmF0ZSBhdCBvbmUgcG9pbnQpLAo+Pj4+Cj4+Pj4gYXMg dGhhdCB3YXMgemVyb2VkIG91dCB3aGVuICp0aGUgYnVnKiBoYXBwZW5lZCwKPj4+IFRoaXMgZG9l cyBsb29rIGxpa2UgYSBwb2ludGVyIGVycm9yIGF0IHNvbWUgcG9pbnQgYW5kIHNvbWUga2VybmVs IGRhdGEKPj4+IGhhcyBiZWVuIGNvcnJ1cHRlZCB2ZXJ5IGJhZGx5IGJ5IHRoZSBkcml2ZXIuCj4+ Pgo+Pj4+IGxlYWRpbmcgdG8gYSBrZXJuZWwgYnVnL3BhbmljL3N0YWxsCj4+Pj4KPj4+PiAoY2Fu J3QgcmVjYWxsIHdoYXQgZXhhY3RseSBpdCB3YXMsIGJ1dCBpdCBzYWlkIHNvbWV0aGluZyBhbG9u ZyB0aGUgCj4+Pj4gbGluZXMgb2YgIm5vIHN1cHBvcnQgZm9yCj4+Pj4KPj4+PiBvb2Igc2l6ZSAw IiBhbmQgdGhlbiBpdCBkaWRuJ3QgZmFpbCBncmFjZXVsbHksIGxlYWRpbmcgdG8gc29tZSBiYWQg Cj4+Pj4ganVtcHMgYW5kIHVsdGltYXRlbHkKPj4+Pgo+Pj4+IGEgZGVhZCBwbGF0Zm9ybS4uKQo+ Pj4+Cj4+Pj4KPj4+PiBhZnRlciBob3VycyBvZiBkaWdnaW5nLCBJIGZvdW5kIG91dCB0aGF0IGV2 ZXJ5dGhpbmcgZ29lcyBmaW5lIHVudGlsIAo+Pj4+IGNsZWFyX2JhbV90cmFuc2FjdGlvbiBpcyBj YWxsZWQsCj4+PiBEbyB5b3UgcmVtZW1iZXIgaWYgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGZv ciB0aGUgZmlyc3QgdGltZSB3aGVuCj4+PiB0aGlzIGhhcHBlbmVkPwo+Pgo+PiBJIHRoaW5rIHNv LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgdGhlcmUgYXJlIG5vIG1vcmUgY2FsbGVycyBpbiB0aGlz IAo+PiBwYXRoLCBhcyByZWFkaWQgaXMgdGhlIGZpcnN0IG5hbmQgY29tbWFuZCBleGVjdXRlZCBp biBmbGFzaCBwcm9iZSBmbG93Lgo+Pgo+Pgo+Pgo+Pj4KPj4+PiBhZnRlciB0aGF0IGdldHMgZXhl Y3V0ZWQgZXZlcnkgbmFuZCBvcCBzdGFydHMgcmVhZGluZyBhbGwgemVyb2VzIAo+Pj4+IChmb3Ig ZXhhbXBsZSBpbiBKRURFQyBJRCBjaGVjaykKPj4+Pgo+Pj4+IHNvIEkgYWRkZWQgdGhlIGNoYW5n ZXMgZnJvbSB0aGlzIHBhdGNoLCBhbmQgdGhpbmdzIG1hZ2ljYWxseSAKPj4+PiBzdGFydGVkIHdv cmtpbmcuLi4gTXkgc3VzcGljaW9uIGlzCj4+Pj4KPj4+PiB0aGF0IHRoZSB1bmRlcmx5aW5nIEZJ Rk8gaXNuJ3QgZnVsbHkgZHJhaW5lZCAoaXMgaXQgYSBGSUZPIG9uIDk2MDc/IAo+Pj4+IGJhaCwg aSB3b3JrIG9uIHRvbyBtYW55IHNvY3MgYXQgb25jZSkKPj4+IEkgZG9uJ3Qgc2VlIGl0IGluIHRo ZSBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLCB3aGF0J3MgdGhlIGV4YWN0Cj4+PiBjb21wYXRp YmxlIHVzZWQ/Cj4+Cj4+IHFjb20saXBxNDAxOS1uYW5kCj4+Cj4+Cj4+Cj4+Pgo+Pj4+IGFuZCB0 aGlzIGZ1bmN0aW9uIG9ubHkgbWFrZXMgTGludXggdGhpbmsgaXQgaXMsIHdpdGhvdXQgYWN0dWFs bHkgCj4+Pj4gZHJhaW5pbmcgaXQsIGFuZCB0aGUgbGVmdG92ZXIKPj4+Pgo+Pj4+IGNvbW1hbmRz IGdldCBleGVjdXRlZCB3aXRoIHNvbWUgcGFydHMgb2YgdGhlbSBnZXR0aW5nIG92ZXJ3cml0dGVu LCAKPj4+PiByZXN1bHRpbmcgaW4gdGhlCj4+Pj4KPj4+PiBmYW1vdXMgZ2FyYmFnZSBpbiAtIGdh cmJhZ2Ugb3V0IHNpdHVhdGlvbiwgYnV0IHRoYXQncyBvbmx5IGEgCj4+Pj4gZ3Vlc3N0aW1hdGUu Lgo+Pj4gSSB3b3VsZCBiZXQgZm9yIGEgbm9uIGFsbG9jYXRlZCBiYW0taXNoIHBvaW50ZXIgdGhh dCBpcyByZXNldCB0byB6ZXJvCj4+PiBpbiB0aGUgY2xlYXJfYmFtX3RyYW5zYWN0aW9uKCkgaGVs cGVyLgo+Pj4KPj4+IENhbiB5b3UgZ2V0IHlvdXIgaGFuZHMgb24gdGhlIGJvYXJkIGFnYWluPwo+ Pgo+PiBTdXJlLCBidXQgYXMgSSBtZW50aW9uZWQgcHJldmlvdXNseSwgb25seSBpbiBhYm91dCAy IHdlZWtzLCBJIGNhbid0IAo+PiByZWFsbHkgZG8gYW55IGRldiBiZWZvcmUgdGhlbi4uIDooCj4+ Cj4+Cj4+Cj4+PiBJdCB3b3VsZCBiZSBuaWNlIHRvIGNoZWNrIGlmIHRoZSBhbGxvY2F0aW9uIGFs d2F5cyBvY2N1cnMgYmVmb3JlIHVzZSwKPj4+IGFuZCBpZiB5ZXMgb24gaG93IG11Y2ggYnl0ZXMu Cj4+Pgo+Pj4gSWYgdGhlIHBvaW50ZXIgaXMgbm90IGRhbmdsaW5nLCB0aGVuIHBlcmhhcHMgc29t ZXRoaW5nIGVsc2Ugc21hc2hlcwo+Pj4gdGhhdCBwb2ludGVyLgo+Pgo+Pgo+PiBLb25yYWQKPj4K Pj4+Cj4+Pj4gRG8gbm90ZSB0aGlzIHNvbWVob3cgd29ya2VkIGZpbmUgb24gNS4xMSBhbmQgdGhl biBicm9rZSBvbiA1LjEyLzEzLiAKPj4+PiBJIHdlbnQgYXMgZmFyIGFzIHJlcGxhY2luZyBtb3N0 Cj4+Pj4KPj4+PiBvZiB0aGUga2VybmVsIHdpdGggdGhlIHVwZGF0ZWQvZG93bmdyYWRlZCBwYXJ0 cyB2aWEgZ2l0IGNoZWNrb3V0IChpIAo+Pj4+IHRyaWVkIG1hbnkgY29tYmluYXRpb25zKSwKPj4+ Pgo+Pj4+IHRvIG5vIGF2YWlsLi4gSSBldmVuIHRyaWVkIGRpZmZlcmVudCBjb21waWxlcnMgYW5k IG9wdGltaXphdGlvbiAKPj4+PiBsZXZlbHMsIHRoaW5raW5nIGl0IGNvdWxkIGhhdmUgYmVlbgo+ Pj4+Cj4+Pj4gYSBjb2RlZ2VuIGlzc3VlLCBidXQgbm8gbHVjayBlaXRoZXIuCj4+Pj4KPj4+Pgo+ Pj4+IEkuLiBkbyB1bmRlcnN0YW5kIHRoaXMgZW1haWwgaXMgYSB0b3RhbCBtZXNzIHRvIHJlYWQs IGFzIG11Y2ggYXMgaXQgCj4+Pj4gd2FzIHRvIHdyaXRlLCBidXQKPj4+Pgo+Pj4+IHdpdGhvdXQg YWNjZXNzIHRvIG15IGNvZGUgYW5kIHRoZSBtYWNoaW5lIGl0c2VsZiBJIGNhbid0IGdpdmUgeW91 IAo+Pj4+IHNvbGlkIGRldGFpbHMsIGFuZAo+Pj4+Cj4+Pj4gdGhlIGZhY3QgdGhpcyBzaXR1YXRp b24gaXMgZmFyIGZyb20gb3JkaW5hcnkgZG9lc24ndCBoZWxwIGVpdGhlci4uCj4+Pj4KPj4+Pgo+ Pj4+IFRoZSBsYXRlc3QgKGFuY2llbnQsIG5vdCBxdWl0ZSBwcmV0dHksIGJ1dCBwcm9iYWJseSB3 b3JraW5nIGlmIG15IAo+Pj4+IG1lbW9yeSBpcyBjb3JyZWN0KSB2ZXJzaW9uIG9mIG15IHBhdGNo ZXMKPj4+Pgo+Pj4+IGZvciB0aGUgbWRtOTYwNyBpcyBhdmFpbGFibGUgYXQgWzFdLCBJIHdpbGwg cHVzaCB0aGUgbmV3IHJldmlzaW9uIAo+Pj4+IGFmdGVyIEkgZ2V0IGFjY2VzcyB0byB0aGUgd29y a3N0YXRpb24uCj4+Pj4KPiDCoCArIGZldyBtb3JlIHdobyBoYXZlIGFjY2VzcyB0byB0aGUgYm9h cmQuCj4KPiDCoMKgIEdvaW5nIGJ5IHRoZSBkZXNjcmlwdGlvbiwgZm9yIGtlcm5lbCBjb3JydXB0 aW9uLCB3ZSBjYW4gdHJ5IG91dCBhIAo+IEtBU0FOIGJ1aWxkLgo+IMKgwqAgU2luY2UgeW91IGhh dmUgbWVudGlvbmVkIGl0IHdvcmtlZCB0aWxsIDUuMTEsIHlvdSBiaXNlY3RlZCB0aGUgCj4gZHJp dmVyIHRpbGwgNS4xMSBoZWFkIGFuZCBpdCB3b3JrZWQgPwo+CiDCoMKgIFRyaWVkIHJ1bm5pbmcg YSBLQVNBTiBlbmFibGVkIGltYWdlIG9uIElQUSBib2FyZCwgYnV0IG5vIGx1Y2suIApOb3RoaW5n IGNhbWUgb3V0LgogwqDCoCBPbmx5IGlmIHNvbWVvbmUgd2l0aCB0aGUgYm9hcmQgY2FuIGhlbHAg aGVyZSwgd2UgY2FuIHByb2NlZWQKCgpSZWdhcmRzLAogwqAgU3JpY2hhcmFuCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBk aXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LW10ZC8K