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 X-Spam-Level: X-Spam-Status: No, score=-8.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2777DC4338F for ; Mon, 2 Aug 2021 18:12:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 00234610A2 for ; Mon, 2 Aug 2021 18:12:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229567AbhHBSMX (ORCPT ); Mon, 2 Aug 2021 14:12:23 -0400 Received: from fllv0015.ext.ti.com ([198.47.19.141]:42620 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229537AbhHBSMW (ORCPT ); Mon, 2 Aug 2021 14:12:22 -0400 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 172IC3iL075966; Mon, 2 Aug 2021 13:12:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1627927923; bh=6jKNCNgnOk/jr23qOQNV3EWRpcXfYEqxPGAv2dk/mMk=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=g5lt/89WzFOtxGWjxwuVJoEADXZJCczHHMOSwuuCZ/e3Ui24FnsyxKYKlDOEnnWSQ yW7WL87NRSxTsiSucSgrSzAjdqP3NsYqAH8dpHgtlR0P13tiJAdzyX0FuFzZ91dQ8c xJiZGzY5k9IZXeMLKhWTPsEVGx7jPdd52sh8SUAc= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 172IC2wD036760 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 2 Aug 2021 13:12:03 -0500 Received: from DFLE109.ent.ti.com (10.64.6.30) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 2 Aug 2021 13:12:02 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE109.ent.ti.com (10.64.6.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2 via Frontend Transport; Mon, 2 Aug 2021 13:12:02 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id 172IC2f8074437; Mon, 2 Aug 2021 13:12:02 -0500 Date: Mon, 2 Aug 2021 23:42:01 +0530 From: Pratyush Yadav To: Tudor Ambarus CC: , , , , , Mark Brown Subject: Re: spi-nor 5.11 regression: Division by zero in kernel Message-ID: <20210802181201.wkff3k32to3lin4n@ti.com> References: <99bdb1eb-71a8-99e6-be03-a97185246740@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: NeoMutt/20171215 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org + Mark On 02/08/21 02:39PM, Tudor.Ambarus@microchip.com wrote: > On 8/2/21 4:24 PM, Rafał Miłecki wrote: > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > > > Hi, > > Hi, Rafał! > > > > > It seems that kernel 5.11 broke spi-nor on Broadcom Northstar (BCM5301X) > > platforms. > > > > The problem seems to be spi_nor_spimem_read_data() which calculates: > > op.dummy.nbytes = (nor->read_dummy * op.dummy.buswidth) / 8; > > > > On Northstar this happens to be: > > op.dummy.nbytes = (0 * 0) / 8; > > > > That results in bcm_qspi_bspi_set_flex_mode() dividing by zero in the: > > bpp |= (op->dummy.nbytes * 8) / op->dummy.buswidth; > > > > Could you take a look at that issue, please? > > > > GOOD    5.10.55 > > BAD     5.11.22 > > BAD     5.12.19 > > BAD     5.13.2 > > BAD     5.13.7 > > > > It's hard to guess. Would you please bisect and identify the commit that introduces > the regression? I think the bug is pretty obvious here. op->dummy.buswidth is 0 when there is no dummy phase, and that's why there is a division by zero. The controller driver does not check if the dummy phase exists (by checking op->dummy.nbytes) before performing the calculation. I saw a similar patch posted for spi-cadence-quadspi.c [0]. The fix is obvious IMO. BTW, I think this was introduced by 0e30f47232ab ("mtd: spi-nor: add support for DTR protocol"). It set buswidths of non-existent phases to 0. The main question is: do we want to keep the buswidth 0 when the dummy phase does not exist? It seems to be tripping up controller drivers. FWIW, I think we should keep it 0 since I think that when dummy.nbytes == 0 the other fields should be "don't care". The responsibility should lie on the controller driver to check this. Thoughts? [0] https://patchwork.kernel.org/project/spi-devel-general/patch/92eea403-9b21-2488-9cc1-664bee760c5e@nskint.co.jp/ > > Thanks, > ta > > > [    1.075513] Division by zero in kernel. > > [    1.079354] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.7 #18 > > [    1.085376] Hardware name: BCM5301X > > [    1.088873] [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > > [    1.096666] [] (show_stack) from [] (dump_stack+0x94/0xa8) > > [    1.103926] [] (dump_stack) from [] (Ldiv0+0x8/0x10) > > [    1.110653] [] (Ldiv0) from [] (bcm_qspi_exec_mem_op+0x3e0/0x744) > > [    1.118512] [] (bcm_qspi_exec_mem_op) from [] (spi_mem_exec_op+0x184/0x4fc) > > [    1.127234] [] (spi_mem_exec_op) from [] (spi_mem_dirmap_read+0xf4/0x1c8) > > [    1.135780] [] (spi_mem_dirmap_read) from [] (spi_nor_spimem_read_data+0x13c/0x1ec) > > [    1.145199] [] (spi_nor_spimem_read_data) from [] (spi_nor_read+0x16c/0x174) > > [    1.154008] [] (spi_nor_read) from [] (mtd_read_oob_std+0x9c/0xa4) > > [    1.161964] [] (mtd_read_oob_std) from [] (mtd_read_oob+0x84/0x148) > > [    1.169997] [] (mtd_read_oob) from [] (mtd_read+0x60/0x90) > > [    1.177237] [] (mtd_read) from [] (bcm47xxpart_parse+0x1d4/0x744) > > [    1.185089] [] (bcm47xxpart_parse) from [] (parse_mtd_partitions+0x188/0x424) > > [    1.193985] [] (parse_mtd_partitions) from [] (mtd_device_parse_register+0x7c/0x1c0) > > [    1.203489] [] (mtd_device_parse_register) from [] (spi_nor_probe+0x20c/0x2d0) > > [    1.212471] [] (spi_nor_probe) from [] (really_probe+0xf0/0x4dc) > > [    1.220245] [] (really_probe) from [] (bus_for_each_drv+0x80/0xd0) > > [    1.228184] [] (bus_for_each_drv) from [] (__device_attach+0xf8/0x15c) > > [    1.236468] [] (__device_attach) from [] (bus_probe_device+0x84/0x8c) > > [    1.244668] [] (bus_probe_device) from [] (device_add+0x300/0x840) > > [    1.252606] [] (device_add) from [] (spi_add_device+0x9c/0x164) > > [    1.260292] [] (spi_add_device) from [] (spi_register_controller+0x8ac/0xbc0) > > [    1.269187] [] (spi_register_controller) from [] (bcm_qspi_probe+0x600/0x700) > > [    1.278092] [] (bcm_qspi_probe) from [] (platform_probe+0x48/0x8c) > > [    1.286030] [] (platform_probe) from [] (really_probe+0xf0/0x4dc) > > [    1.293880] [] (really_probe) from [] (device_driver_attach+0xf0/0x100) > > [    1.302254] [] (device_driver_attach) from [] (__driver_attach+0x8c/0x11c) > > [    1.310888] [] (__driver_attach) from [] (bus_for_each_dev+0x74/0xc0) > > [    1.319086] [] (bus_for_each_dev) from [] (bus_add_driver+0xf4/0x1dc) > > [    1.327286] [] (bus_add_driver) from [] (driver_register+0x88/0x118) > > [    1.335397] [] (driver_register) from [] (do_one_initcall+0x54/0x1d0) > > [    1.343598] [] (do_one_initcall) from [] (kernel_init_freeable+0x244/0x2ac) > > [    1.352337] [] (kernel_init_freeable) from [] (kernel_init+0x8/0x118) > > [    1.360536] [] (kernel_init) from [] (ret_from_fork+0x14/0x24) > > [    1.368125] Exception stack(0xc1035fb0 to 0xc1035ff8) > > [    1.373184] 5fa0:                                     00000000 00000000 00000000 00000000 > > [    1.381384] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > > [    1.389582] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 > > > > ______________________________________________________ > > Linux MTD discussion mailing list > > http://lists.infradead.org/mailman/listinfo/linux-mtd/ > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ -- Regards, Pratyush Yadav Texas Instruments Inc. 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 X-Spam-Level: X-Spam-Status: No, score=-6.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48DAAC4338F for ; Mon, 2 Aug 2021 18:12:52 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0D486610A2 for ; Mon, 2 Aug 2021 18:12:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0D486610A2 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:CC:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=sCW8mmRO8ENPrTKUrhLkhQM5hRszChy8rb9d+dk2r/M=; b=Zyrm4OOTDyeiOb EJHWPiyq7dw/WumCpmlfP6HYNdOCHR2glEYNEvvU954Ufgbf+15iiAzqRAACm0jHm+vsaB7fkKdUt 8XN7N+dlJDRMn5DH/K2ZCuxMuPTUghCi04pAJYf3Uw4kJ9mANoOKoupY+1Cd5p+C+oI8mv84jh39N orkyMNNK1Su00a6BvOeMISo2yne45ydPLE0bJzncr6xmMMKKngYnDPLbqfVWH9CXc7zaXpIgVWEn3 7LIwiWQODTCZ8jjCuSpVuuPvboqcNWaGXAgJ/MasL2MUgl0jU0hBv20AKftMhfixMG86nQgRNOSCi AyhEVuTmWxpkr35pV/1g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAcQ9-00HTFP-JH; Mon, 02 Aug 2021 18:12:13 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAcQ5-00HTDd-NY for linux-mtd@lists.infradead.org; Mon, 02 Aug 2021 18:12:11 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 172IC3iL075966; Mon, 2 Aug 2021 13:12:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1627927923; bh=6jKNCNgnOk/jr23qOQNV3EWRpcXfYEqxPGAv2dk/mMk=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=g5lt/89WzFOtxGWjxwuVJoEADXZJCczHHMOSwuuCZ/e3Ui24FnsyxKYKlDOEnnWSQ yW7WL87NRSxTsiSucSgrSzAjdqP3NsYqAH8dpHgtlR0P13tiJAdzyX0FuFzZ91dQ8c xJiZGzY5k9IZXeMLKhWTPsEVGx7jPdd52sh8SUAc= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 172IC2wD036760 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 2 Aug 2021 13:12:03 -0500 Received: from DFLE109.ent.ti.com (10.64.6.30) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 2 Aug 2021 13:12:02 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE109.ent.ti.com (10.64.6.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2 via Frontend Transport; Mon, 2 Aug 2021 13:12:02 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id 172IC2f8074437; Mon, 2 Aug 2021 13:12:02 -0500 Date: Mon, 2 Aug 2021 23:42:01 +0530 From: Pratyush Yadav To: Tudor Ambarus CC: , , , , , Mark Brown Subject: Re: spi-nor 5.11 regression: Division by zero in kernel Message-ID: <20210802181201.wkff3k32to3lin4n@ti.com> References: <99bdb1eb-71a8-99e6-be03-a97185246740@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20171215 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210802_111210_070509_D8747BBA X-CRM114-Status: GOOD ( 24.68 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org KyBNYXJrCgpPbiAwMi8wOC8yMSAwMjozOVBNLCBUdWRvci5BbWJhcnVzQG1pY3JvY2hpcC5jb20g d3JvdGU6Cj4gT24gOC8yLzIxIDQ6MjQgUE0sIFJhZmHFgiBNacWCZWNraSB3cm90ZToKPiA+IEVY VEVSTkFMIEVNQUlMOiBEbyBub3QgY2xpY2sgbGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bmxl c3MgeW91IGtub3cgdGhlIGNvbnRlbnQgaXMgc2FmZQo+ID4gCj4gPiBIaSwKPiAKPiBIaSwgUmFm YcWCIQo+IAo+ID4gCj4gPiBJdCBzZWVtcyB0aGF0IGtlcm5lbCA1LjExIGJyb2tlIHNwaS1ub3Ig b24gQnJvYWRjb20gTm9ydGhzdGFyIChCQ001MzAxWCkKPiA+IHBsYXRmb3Jtcy4KPiA+IAo+ID4g VGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgc3BpX25vcl9zcGltZW1fcmVhZF9kYXRhKCkgd2hpY2gg Y2FsY3VsYXRlczoKPiA+IG9wLmR1bW15Lm5ieXRlcyA9IChub3ItPnJlYWRfZHVtbXkgKiBvcC5k dW1teS5idXN3aWR0aCkgLyA4Owo+ID4gCj4gPiBPbiBOb3J0aHN0YXIgdGhpcyBoYXBwZW5zIHRv IGJlOgo+ID4gb3AuZHVtbXkubmJ5dGVzID0gKDAgKiAwKSAvIDg7Cj4gPiAKPiA+IFRoYXQgcmVz dWx0cyBpbiBiY21fcXNwaV9ic3BpX3NldF9mbGV4X21vZGUoKSBkaXZpZGluZyBieSB6ZXJvIGlu IHRoZToKPiA+IGJwcCB8PSAob3AtPmR1bW15Lm5ieXRlcyAqIDgpIC8gb3AtPmR1bW15LmJ1c3dp ZHRoOwo+ID4gCj4gPiBDb3VsZCB5b3UgdGFrZSBhIGxvb2sgYXQgdGhhdCBpc3N1ZSwgcGxlYXNl Pwo+ID4gCj4gPiBHT09EwqDCoMKgIDUuMTAuNTUKPiA+IEJBRMKgwqDCoMKgIDUuMTEuMjIKPiA+ IEJBRMKgwqDCoMKgIDUuMTIuMTkKPiA+IEJBRMKgwqDCoMKgIDUuMTMuMgo+ID4gQkFEwqDCoMKg wqAgNS4xMy43Cj4gPiAKPiAKPiBJdCdzIGhhcmQgdG8gZ3Vlc3MuIFdvdWxkIHlvdSBwbGVhc2Ug YmlzZWN0IGFuZCBpZGVudGlmeSB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlcwo+IHRoZSByZWdy ZXNzaW9uPwoKSSB0aGluayB0aGUgYnVnIGlzIHByZXR0eSBvYnZpb3VzIGhlcmUuIG9wLT5kdW1t eS5idXN3aWR0aCBpcyAwIHdoZW4gCnRoZXJlIGlzIG5vIGR1bW15IHBoYXNlLCBhbmQgdGhhdCdz IHdoeSB0aGVyZSBpcyBhIGRpdmlzaW9uIGJ5IHplcm8uIFRoZSAKY29udHJvbGxlciBkcml2ZXIg ZG9lcyBub3QgY2hlY2sgaWYgdGhlIGR1bW15IHBoYXNlIGV4aXN0cyAoYnkgY2hlY2tpbmcgCm9w LT5kdW1teS5uYnl0ZXMpIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBjYWxjdWxhdGlvbi4gSSBzYXcg YSBzaW1pbGFyIApwYXRjaCBwb3N0ZWQgZm9yIHNwaS1jYWRlbmNlLXF1YWRzcGkuYyBbMF0uIFRo ZSBmaXggaXMgb2J2aW91cyBJTU8uCgpCVFcsIEkgdGhpbmsgdGhpcyB3YXMgaW50cm9kdWNlZCBi eSAwZTMwZjQ3MjMyYWIgKCJtdGQ6IHNwaS1ub3I6IGFkZCAKc3VwcG9ydCBmb3IgRFRSIHByb3Rv Y29sIikuIEl0IHNldCBidXN3aWR0aHMgb2Ygbm9uLWV4aXN0ZW50IHBoYXNlcyB0byAKMC4KClRo ZSBtYWluIHF1ZXN0aW9uIGlzOiBkbyB3ZSB3YW50IHRvIGtlZXAgdGhlIGJ1c3dpZHRoIDAgd2hl biB0aGUgZHVtbXkgCnBoYXNlIGRvZXMgbm90IGV4aXN0PyBJdCBzZWVtcyB0byBiZSB0cmlwcGlu ZyB1cCBjb250cm9sbGVyIGRyaXZlcnMuIApGV0lXLCBJIHRoaW5rIHdlIHNob3VsZCBrZWVwIGl0 IDAgc2luY2UgSSB0aGluayB0aGF0IHdoZW4gZHVtbXkubmJ5dGVzIAo9PSAwIHRoZSBvdGhlciBm aWVsZHMgc2hvdWxkIGJlICJkb24ndCBjYXJlIi4gVGhlIHJlc3BvbnNpYmlsaXR5IHNob3VsZCAK bGllIG9uIHRoZSBjb250cm9sbGVyIGRyaXZlciB0byBjaGVjayB0aGlzLgoKVGhvdWdodHM/Cgpb MF0gaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L3NwaS1kZXZlbC1nZW5lcmFs L3BhdGNoLzkyZWVhNDAzLTliMjEtMjQ4OC05Y2MxLTY2NGJlZTc2MGM1ZUBuc2tpbnQuY28uanAv Cgo+IAo+IFRoYW5rcywKPiB0YQo+IAo+ID4gW8KgwqDCoCAxLjA3NTUxM10gRGl2aXNpb24gYnkg emVybyBpbiBrZXJuZWwuCj4gPiBbwqDCoMKgIDEuMDc5MzU0XSBDUFU6IDAgUElEOiAxIENvbW06 IHN3YXBwZXIvMCBOb3QgdGFpbnRlZCA1LjEzLjcgIzE4Cj4gPiBbwqDCoMKgIDEuMDg1Mzc2XSBI YXJkd2FyZSBuYW1lOiBCQ001MzAxWAo+ID4gW8KgwqDCoCAxLjA4ODg3M10gWzxjMDEwODM5ND5d ICh1bndpbmRfYmFja3RyYWNlKSBmcm9tIFs8YzAxMDQ5OGM+XSAoc2hvd19zdGFjaysweDEwLzB4 MTQpCj4gPiBbwqDCoMKgIDEuMDk2NjY2XSBbPGMwMTA0OThjPl0gKHNob3dfc3RhY2spIGZyb20g WzxjMDY5NjQ3MD5dIChkdW1wX3N0YWNrKzB4OTQvMHhhOCkKPiA+IFvCoMKgwqAgMS4xMDM5MjZd IFs8YzA2OTY0NzA+XSAoZHVtcF9zdGFjaykgZnJvbSBbPGMwM2U3Zjk0Pl0gKExkaXYwKzB4OC8w eDEwKQo+ID4gW8KgwqDCoCAxLjExMDY1M10gWzxjMDNlN2Y5ND5dIChMZGl2MCkgZnJvbSBbPGMw Njk5Mjc0Pl0gKGJjbV9xc3BpX2V4ZWNfbWVtX29wKzB4M2UwLzB4NzQ0KQo+ID4gW8KgwqDCoCAx LjExODUxMl0gWzxjMDY5OTI3ND5dIChiY21fcXNwaV9leGVjX21lbV9vcCkgZnJvbSBbPGMwNjk4 NzQwPl0gKHNwaV9tZW1fZXhlY19vcCsweDE4NC8weDRmYykKPiA+IFvCoMKgwqAgMS4xMjcyMzRd IFs8YzA2OTg3NDA+XSAoc3BpX21lbV9leGVjX29wKSBmcm9tIFs8YzA2OThiYWM+XSAoc3BpX21l bV9kaXJtYXBfcmVhZCsweGY0LzB4MWM4KQo+ID4gW8KgwqDCoCAxLjEzNTc4MF0gWzxjMDY5OGJh Yz5dIChzcGlfbWVtX2Rpcm1hcF9yZWFkKSBmcm9tIFs8YzA2OTdkNTg+XSAoc3BpX25vcl9zcGlt ZW1fcmVhZF9kYXRhKzB4MTNjLzB4MWVjKQo+ID4gW8KgwqDCoCAxLjE0NTE5OV0gWzxjMDY5N2Q1 OD5dIChzcGlfbm9yX3NwaW1lbV9yZWFkX2RhdGEpIGZyb20gWzxjMDQ5OGQ2MD5dIChzcGlfbm9y X3JlYWQrMHgxNmMvMHgxNzQpCj4gPiBbwqDCoMKgIDEuMTU0MDA4XSBbPGMwNDk4ZDYwPl0gKHNw aV9ub3JfcmVhZCkgZnJvbSBbPGMwNDgzNWQwPl0gKG10ZF9yZWFkX29vYl9zdGQrMHg5Yy8weGE0 KQo+ID4gW8KgwqDCoCAxLjE2MTk2NF0gWzxjMDQ4MzVkMD5dIChtdGRfcmVhZF9vb2Jfc3RkKSBm cm9tIFs8YzA0ODU1ZDA+XSAobXRkX3JlYWRfb29iKzB4ODQvMHgxNDgpCj4gPiBbwqDCoMKgIDEu MTY5OTk3XSBbPGMwNDg1NWQwPl0gKG10ZF9yZWFkX29vYikgZnJvbSBbPGMwNDg1NmY0Pl0gKG10 ZF9yZWFkKzB4NjAvMHg5MCkKPiA+IFvCoMKgwqAgMS4xNzcyMzddIFs8YzA0ODU2ZjQ+XSAobXRk X3JlYWQpIGZyb20gWzxjMDQ4YWI1MD5dIChiY200N3h4cGFydF9wYXJzZSsweDFkNC8weDc0NCkK PiA+IFvCoMKgwqAgMS4xODUwODldIFs8YzA0OGFiNTA+XSAoYmNtNDd4eHBhcnRfcGFyc2UpIGZy b20gWzxjMDQ4ODU2OD5dIChwYXJzZV9tdGRfcGFydGl0aW9ucysweDE4OC8weDQyNCkKPiA+IFvC oMKgwqAgMS4xOTM5ODVdIFs8YzA0ODg1Njg+XSAocGFyc2VfbXRkX3BhcnRpdGlvbnMpIGZyb20g WzxjMDQ4NjAxOD5dIChtdGRfZGV2aWNlX3BhcnNlX3JlZ2lzdGVyKzB4N2MvMHgxYzApCj4gPiBb wqDCoMKgIDEuMjAzNDg5XSBbPGMwNDg2MDE4Pl0gKG10ZF9kZXZpY2VfcGFyc2VfcmVnaXN0ZXIp IGZyb20gWzxjMDQ5OThiOD5dIChzcGlfbm9yX3Byb2JlKzB4MjBjLzB4MmQwKQo+ID4gW8KgwqDC oCAxLjIxMjQ3MV0gWzxjMDQ5OThiOD5dIChzcGlfbm9yX3Byb2JlKSBmcm9tIFs8YzA0NmZiZjg+ XSAocmVhbGx5X3Byb2JlKzB4ZjAvMHg0ZGMpCj4gPiBbwqDCoMKgIDEuMjIwMjQ1XSBbPGMwNDZm YmY4Pl0gKHJlYWxseV9wcm9iZSkgZnJvbSBbPGMwNDZkZDQwPl0gKGJ1c19mb3JfZWFjaF9kcnYr MHg4MC8weGQwKQo+ID4gW8KgwqDCoCAxLjIyODE4NF0gWzxjMDQ2ZGQ0MD5dIChidXNfZm9yX2Vh Y2hfZHJ2KSBmcm9tIFs8YzA0NzAxZDA+XSAoX19kZXZpY2VfYXR0YWNoKzB4ZjgvMHgxNWMpCj4g PiBbwqDCoMKgIDEuMjM2NDY4XSBbPGMwNDcwMWQwPl0gKF9fZGV2aWNlX2F0dGFjaCkgZnJvbSBb PGMwNDZlZGQ0Pl0gKGJ1c19wcm9iZV9kZXZpY2UrMHg4NC8weDhjKQo+ID4gW8KgwqDCoCAxLjI0 NDY2OF0gWzxjMDQ2ZWRkND5dIChidXNfcHJvYmVfZGV2aWNlKSBmcm9tIFs8YzA0NmM2YzQ+XSAo ZGV2aWNlX2FkZCsweDMwMC8weDg0MCkKPiA+IFvCoMKgwqAgMS4yNTI2MDZdIFs8YzA0NmM2YzQ+ XSAoZGV2aWNlX2FkZCkgZnJvbSBbPGMwNGIzZGM0Pl0gKHNwaV9hZGRfZGV2aWNlKzB4OWMvMHgx NjQpCj4gPiBbwqDCoMKgIDEuMjYwMjkyXSBbPGMwNGIzZGM0Pl0gKHNwaV9hZGRfZGV2aWNlKSBm cm9tIFs8YzA0YjQ4MmM+XSAoc3BpX3JlZ2lzdGVyX2NvbnRyb2xsZXIrMHg4YWMvMHhiYzApCj4g PiBbwqDCoMKgIDEuMjY5MTg3XSBbPGMwNGI0ODJjPl0gKHNwaV9yZWdpc3Rlcl9jb250cm9sbGVy KSBmcm9tIFs8YzA0YjdiZDQ+XSAoYmNtX3FzcGlfcHJvYmUrMHg2MDAvMHg3MDApCj4gPiBbwqDC oMKgIDEuMjc4MDkyXSBbPGMwNGI3YmQ0Pl0gKGJjbV9xc3BpX3Byb2JlKSBmcm9tIFs8YzA0NzFk M2M+XSAocGxhdGZvcm1fcHJvYmUrMHg0OC8weDhjKQo+ID4gW8KgwqDCoCAxLjI4NjAzMF0gWzxj MDQ3MWQzYz5dIChwbGF0Zm9ybV9wcm9iZSkgZnJvbSBbPGMwNDZmYmY4Pl0gKHJlYWxseV9wcm9i ZSsweGYwLzB4NGRjKQo+ID4gW8KgwqDCoCAxLjI5Mzg4MF0gWzxjMDQ2ZmJmOD5dIChyZWFsbHlf cHJvYmUpIGZyb20gWzxjMDQ3MDVkYz5dIChkZXZpY2VfZHJpdmVyX2F0dGFjaCsweGYwLzB4MTAw KQo+ID4gW8KgwqDCoCAxLjMwMjI1NF0gWzxjMDQ3MDVkYz5dIChkZXZpY2VfZHJpdmVyX2F0dGFj aCkgZnJvbSBbPGMwNDcwNjc4Pl0gKF9fZHJpdmVyX2F0dGFjaCsweDhjLzB4MTFjKQo+ID4gW8Kg wqDCoCAxLjMxMDg4OF0gWzxjMDQ3MDY3OD5dIChfX2RyaXZlcl9hdHRhY2gpIGZyb20gWzxjMDQ2 ZGM3ND5dIChidXNfZm9yX2VhY2hfZGV2KzB4NzQvMHhjMCkKPiA+IFvCoMKgwqAgMS4zMTkwODZd IFs8YzA0NmRjNzQ+XSAoYnVzX2Zvcl9lYWNoX2RldikgZnJvbSBbPGMwNDZlZmM4Pl0gKGJ1c19h ZGRfZHJpdmVyKzB4ZjQvMHgxZGMpCj4gPiBbwqDCoMKgIDEuMzI3Mjg2XSBbPGMwNDZlZmM4Pl0g KGJ1c19hZGRfZHJpdmVyKSBmcm9tIFs8YzA0NzBjZGM+XSAoZHJpdmVyX3JlZ2lzdGVyKzB4ODgv MHgxMTgpCj4gPiBbwqDCoMKgIDEuMzM1Mzk3XSBbPGMwNDcwY2RjPl0gKGRyaXZlcl9yZWdpc3Rl cikgZnJvbSBbPGMwMTAxNmRjPl0gKGRvX29uZV9pbml0Y2FsbCsweDU0LzB4MWQwKQo+ID4gW8Kg wqDCoCAxLjM0MzU5OF0gWzxjMDEwMTZkYz5dIChkb19vbmVfaW5pdGNhbGwpIGZyb20gWzxjMDgw MTBlOD5dIChrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDI0NC8weDJhYykKPiA+IFvCoMKgwqAgMS4z NTIzMzddIFs8YzA4MDEwZTg+XSAoa2VybmVsX2luaXRfZnJlZWFibGUpIGZyb20gWzxjMDY5YTdj OD5dIChrZXJuZWxfaW5pdCsweDgvMHgxMTgpCj4gPiBbwqDCoMKgIDEuMzYwNTM2XSBbPGMwNjlh N2M4Pl0gKGtlcm5lbF9pbml0KSBmcm9tIFs8YzAxMDAxMzA+XSAocmV0X2Zyb21fZm9yaysweDE0 LzB4MjQpCj4gPiBbwqDCoMKgIDEuMzY4MTI1XSBFeGNlcHRpb24gc3RhY2soMHhjMTAzNWZiMCB0 byAweGMxMDM1ZmY4KQo+ID4gW8KgwqDCoCAxLjM3MzE4NF0gNWZhMDrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg MDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAKPiA+IFvCoMKgwqAgMS4zODEzODRd IDVmYzA6IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAw MDAwIDAwMDAwMDAwIDAwMDAwMDAwCj4gPiBbwqDCoMKgIDEuMzg5NTgyXSA1ZmUwOiAwMDAwMDAw MCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAxMyAwMDAwMDAwMAo+ID4gCj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+ IExpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdAo+ID4gaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCj4gCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gTGludXggTVREIGRpc2N1 c3Npb24gbWFpbGluZyBsaXN0Cj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1tdGQvCgotLSAKUmVnYXJkcywKUHJhdHl1c2ggWWFkYXYKVGV4YXMgSW5z dHJ1bWVudHMgSW5jLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K