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 8C372C433F5 for ; Tue, 26 Apr 2022 19:15:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353835AbiDZTSe (ORCPT ); Tue, 26 Apr 2022 15:18:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243674AbiDZTSb (ORCPT ); Tue, 26 Apr 2022 15:18:31 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 28F935F91 for ; Tue, 26 Apr 2022 12:15:19 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1BFE823A; Tue, 26 Apr 2022 12:15:19 -0700 (PDT) Received: from [192.168.178.6] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 412C53F774; Tue, 26 Apr 2022 12:15:17 -0700 (PDT) Message-ID: <2244a7f7-9894-06a0-ea51-edf84f6caada@arm.com> Date: Tue, 26 Apr 2022 21:14:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH V2] arm64: add SCHED_CLUSTER's dependency on ACPI Content-Language: en-US To: Sudeep Holla , =?UTF-8?B?546L5pOO?= Cc: Catalin Marinas , Will Deacon , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "vincent.guittot@linaro.org" , "peterz@infradead.org" References: <1650855303-91388-1-git-send-email-wangqing@vivo.com> <20220425100635.ig4dxvlflglfagpx@bogus> <20220425165946.qb6xilgmjahdh4pa@bogus> <20220426064053.h4rwvcdvmwxj2hmt@bogus> <20220426132511.7zo4w42kauvrq26n@bogus> From: Dietmar Eggemann In-Reply-To: <20220426132511.7zo4w42kauvrq26n@bogus> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 26/04/2022 15:25, Sudeep Holla wrote: > On Tue, Apr 26, 2022 at 06:52:34AM +0000, 王擎 wrote: >> >>>>>>>> From: Wang Qing >>>>>>>> >>>>>>>> cluster sched_domain configured by cpu_topology[].cluster_sibling, >>>>>>>> which is set by cluster_id, cluster_id can only get from ACPI. >>>>>>>> >>>>>>>> If the system does not enable ACPI, cluster_id is always -1, even enable >>>>>>>> SCHED_CLUSTER is invalid, this is misleading. >>>>>>>> >>>>>>>> So we add SCHED_CLUSTER's dependency on ACPI here. >>>>>>>> >>>>>>> >>>>>>> Any reason why this can't be extended to support DT based systems via >>>>>>> cpu-map in the device tree. IMO we almost have everything w.r.t topology >>>>>>> in DT and no reason to deviate this feature between ACPI and DT. >>>>>>> >>>>>> That's the problem, we parse out "cluster" info according to the >>>>>> description in cpu-map, but do assign it to package_id, which used to >>>>>> configure the MC sched domain, not cluster sched domain. >>>>>> >>>>> >>>>> Right, we haven't updated the code after updating the bindings to match >>>>> ACPI sockets which are the physical package boundaries. Clusters are not >>>>> the physical boundaries and the current topology code is not 100% aligned >>>>> with the bindings after Commit 849b384f92bc ("Documentation: DT: arm: add >>>>> support for sockets defining package boundaries") >>>> >>>> I see, but this commit is a long time ago, why hasn't it been used widely. >>>> Maybe I can help about it if you need. >>>> >>> >>> I assume no one cared or had a requirement for the same. >> >> It took me a while to find the root cause why enabling SCHED_CLUSTER >> didn't work. >> >> We should add SCHED_CLUSTER's dependency before implementation. >> Otherwise, everyone who doesn't have ACPI but use SCHED_CLUSTER >> will have this problem. >> > > I am fine with that or mark it broken for DT, but ideally I wouldn't > want to create unnecessary dependency on ACPI or DT when both supports > the feature. IMHO trying to introduce SCHED_COMPLEX for DT next to the linux-wide available SCHED_CLUSTER (used only for ACPI right now) is the wrong way. _If_ asymmetric sub-clustering of CPUs underneath LLC (L3) makes any sense on ARMv9 single DSU systems like: .---------------. CPU |0 1 2 3 4 5 6 7| +---------------+ uarch |l l l l m m m b| (so called tri-gear: little, medium, big) +---------------+ L2 | | | | | | | +---------------+ L3 |<-- -->| +---------------+ |<-- cluster -->| +---------------+ |<-- DSU -->| '---------------' (and I'm not saying here it does!) then the existing SCHED_CLUSTER should be used in DT as well. Since it provides exactly the same functionality for the task scheduler no matter whether it's setup from ACPI or DT. parse_cluster() -> parse_core() should be changed to be able to decode both id's (package_id and cluster_id) in this case. DT's cpu_map would have to be changed to code 2 level setups. For a system like the one above it should look like: cpu-map { cluster0 { foo0 { core0 { cpu = <&cpu0>; }; core1 { cpu = <&cpu1>; }; }; foo2 { core2 { cpu = <&cpu2>; }; core3 { cpu = <&cpu3>; }; }; }; cluster1 { core0 { cpu = <&cpu4>; }; core1 { cpu = <&cpu5>; }; core2 { cpu = <&cpu6>; }; }; cluster2 { core0 { cpu = <&cpu7>; }; }; }; I pimped my Hikey 960 to look like one of those Armv9 4-3-1 systems with L2-complexes on the LITTLES and I get: # cat /sys/kernel/debug/sched/domains/cpu*/domain*/name CLS MC DIE CLS MC DIE CLS MC DIE CLS MC DIE MC DIE MC DIE MC DIE DIE cat /proc/schedstat | awk '{print $1 " " $2 }' | grep ^[cd] cpu0 0 domain0 03 domain1 0f domain2 ff cpu1 0 domain0 03 domain1 0f domain2 ff cpu2 0 domain0 0c domain1 0f domain2 ff cpu3 0 domain0 0c domain1 0f domain2 ff cpu4 0 domain0 70 domain1 ff cpu5 0 domain0 70 domain1 ff cpu6 0 domain0 70 domain1 ff cpu7 0 domain0 ff Like I mentioned earlier, I'm not sure if this additional complexity makes sense on mobile systems running EAS (since only CFS load-balancing on little CPUs would be affected). But my hunch is that this setup is what you want for your system. If we could agree on this one, that would already be some progress to see the entire story here. 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 D71B6C433F5 for ; Tue, 26 Apr 2022 19:16:42 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qfio0mnTFwj4L+Iw8cMhq5v4uP2+dxTKvqsWsPyXayk=; b=VlRgIsiS66lN9P f4FHXWVoUGrhKTktQf++I3KXz9VvlHX+kIADICtRmdDkWUDdPeeJX5QEZzbQN8Q6IoBQSp6ADQB3B I1iA28jeOU1QPBQeDiP1HgecQHXpxcRJyYVaX27BRMSSwWhXD0Cd+NMeKfx0N9/FD6dCQrLlbtrQE SEBbH69I8YVtFaIHHztxPCrVql//UWGVAekdK9GPbTTxJ2xrIO+kBr+feUgDoFtXQTCW+lYiqmErn omgx3cZ7L/UJaoVdIVgiF45j0RNq+rqH6nzJ8JzLw69JOurZH8JAUtfK2jDKnUO+0GeIdYJXjIGDC aHz9D5SdI7T/UURw2exg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1njQem-00FvPd-62; Tue, 26 Apr 2022 19:15:28 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1njQei-00FvOQ-JN for linux-arm-kernel@lists.infradead.org; Tue, 26 Apr 2022 19:15:26 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1BFE823A; Tue, 26 Apr 2022 12:15:19 -0700 (PDT) Received: from [192.168.178.6] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 412C53F774; Tue, 26 Apr 2022 12:15:17 -0700 (PDT) Message-ID: <2244a7f7-9894-06a0-ea51-edf84f6caada@arm.com> Date: Tue, 26 Apr 2022 21:14:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH V2] arm64: add SCHED_CLUSTER's dependency on ACPI Content-Language: en-US To: Sudeep Holla , =?UTF-8?B?546L5pOO?= Cc: Catalin Marinas , Will Deacon , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "vincent.guittot@linaro.org" , "peterz@infradead.org" References: <1650855303-91388-1-git-send-email-wangqing@vivo.com> <20220425100635.ig4dxvlflglfagpx@bogus> <20220425165946.qb6xilgmjahdh4pa@bogus> <20220426064053.h4rwvcdvmwxj2hmt@bogus> <20220426132511.7zo4w42kauvrq26n@bogus> From: Dietmar Eggemann In-Reply-To: <20220426132511.7zo4w42kauvrq26n@bogus> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220426_121524_777252_ADA63BA2 X-CRM114-Status: GOOD ( 23.39 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjYvMDQvMjAyMiAxNToyNSwgU3VkZWVwIEhvbGxhIHdyb3RlOgo+IE9uIFR1ZSwgQXByIDI2 LCAyMDIyIGF0IDA2OjUyOjM0QU0gKzAwMDAsIOeOi+aTjiB3cm90ZToKPj4KPj4+Pj4+Pj4gRnJv bTogV2FuZyBRaW5nIDx3YW5ncWluZ0B2aXZvLmNvbT4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gY2x1c3Rl ciBzY2hlZF9kb21haW4gY29uZmlndXJlZCBieSBjcHVfdG9wb2xvZ3lbXS5jbHVzdGVyX3NpYmxp bmcsIAo+Pj4+Pj4+PiB3aGljaCBpcyBzZXQgYnkgY2x1c3Rlcl9pZCwgY2x1c3Rlcl9pZCBjYW4g b25seSBnZXQgZnJvbSBBQ1BJLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJZiB0aGUgc3lzdGVtIGRvZXMg bm90IGVuYWJsZSBBQ1BJLCBjbHVzdGVyX2lkIGlzIGFsd2F5cyAtMSwgZXZlbiBlbmFibGUKPj4+ Pj4+Pj4gU0NIRURfQ0xVU1RFUiBpcyBpbnZhbGlkLCB0aGlzIGlzIG1pc2xlYWRpbmcuIAo+Pj4+ Pj4+Pgo+Pj4+Pj4+PiBTbyB3ZSBhZGQgU0NIRURfQ0xVU1RFUidzIGRlcGVuZGVuY3kgb24gQUNQ SSBoZXJlLgo+Pj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+Pj4gQW55IHJlYXNvbiB3aHkgdGhpcyBjYW4n dCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IERUIGJhc2VkIHN5c3RlbXMgdmlhCj4+Pj4+Pj4gY3B1 LW1hcCBpbiB0aGUgZGV2aWNlIHRyZWUuIElNTyB3ZSBhbG1vc3QgaGF2ZSBldmVyeXRoaW5nIHcu ci50IHRvcG9sb2d5Cj4+Pj4+Pj4gaW4gRFQgYW5kIG5vIHJlYXNvbiB0byBkZXZpYXRlIHRoaXMg ZmVhdHVyZSBiZXR3ZWVuIEFDUEkgYW5kIERULgo+Pj4+Pj4+Cj4+Pj4+PiBUaGF0J3MgdGhlIHBy b2JsZW0sIHdlIHBhcnNlIG91dCAiY2x1c3RlciIgaW5mbyBhY2NvcmRpbmcgdG8gdGhlCj4+Pj4+ PiBkZXNjcmlwdGlvbiBpbiBjcHUtbWFwLCBidXQgZG8gYXNzaWduIGl0IHRvIHBhY2thZ2VfaWQs IHdoaWNoIHVzZWQgdG8KPj4+Pj4+IGNvbmZpZ3VyZSB0aGUgTUMgc2NoZWQgZG9tYWluLCBub3Qg Y2x1c3RlciBzY2hlZCBkb21haW4uCj4+Pj4+Pgo+Pj4+Pgo+Pj4+PiBSaWdodCwgd2UgaGF2ZW4n dCB1cGRhdGVkIHRoZSBjb2RlIGFmdGVyIHVwZGF0aW5nIHRoZSBiaW5kaW5ncyB0byBtYXRjaAo+ Pj4+PiBBQ1BJIHNvY2tldHMgd2hpY2ggYXJlIHRoZSBwaHlzaWNhbCBwYWNrYWdlIGJvdW5kYXJp ZXMuIENsdXN0ZXJzIGFyZSBub3QKPj4+Pj4gdGhlIHBoeXNpY2FsIGJvdW5kYXJpZXMgYW5kIHRo ZSBjdXJyZW50IHRvcG9sb2d5IGNvZGUgaXMgbm90IDEwMCUgYWxpZ25lZAo+Pj4+PiB3aXRoIHRo ZSBiaW5kaW5ncyBhZnRlciBDb21taXQgODQ5YjM4NGY5MmJjICgiRG9jdW1lbnRhdGlvbjogRFQ6 IGFybTogYWRkCj4+Pj4+IHN1cHBvcnQgZm9yIHNvY2tldHMgZGVmaW5pbmcgcGFja2FnZSBib3Vu ZGFyaWVzIikKPj4+Pgo+Pj4+IEkgc2VlLCBidXQgdGhpcyBjb21taXQgaXMgYSBsb25nIHRpbWUg YWdvLCB3aHkgaGFzbid0IGl0IGJlZW4gdXNlZCB3aWRlbHkuCj4+Pj4gTWF5YmUgSSBjYW4gaGVs cCBhYm91dCBpdCBpZiB5b3UgbmVlZC4KPj4+Pgo+Pj4KPj4+IEkgYXNzdW1lIG5vIG9uZSBjYXJl ZCBvciBoYWQgYSByZXF1aXJlbWVudCBmb3IgdGhlIHNhbWUuCj4+Cj4+IEl0IHRvb2sgbWUgYSB3 aGlsZSB0byBmaW5kIHRoZSByb290IGNhdXNlIHdoeSBlbmFibGluZyBTQ0hFRF9DTFVTVEVSCj4+ IGRpZG4ndCB3b3JrLgo+Pgo+PiBXZSBzaG91bGQgYWRkIFNDSEVEX0NMVVNURVIncyBkZXBlbmRl bmN5IGJlZm9yZSBpbXBsZW1lbnRhdGlvbi4KPj4gT3RoZXJ3aXNlLCBldmVyeW9uZSB3aG8gZG9l c24ndCBoYXZlIEFDUEkgYnV0IHVzZSBTQ0hFRF9DTFVTVEVSIAo+PiB3aWxsIGhhdmUgdGhpcyBw cm9ibGVtLgo+Pgo+IAo+IEkgYW0gZmluZSB3aXRoIHRoYXQgb3IgbWFyayBpdCBicm9rZW4gZm9y IERULCBidXQgaWRlYWxseSBJIHdvdWxkbid0Cj4gd2FudCB0byBjcmVhdGUgdW5uZWNlc3Nhcnkg ZGVwZW5kZW5jeSBvbiBBQ1BJIG9yIERUIHdoZW4gYm90aCBzdXBwb3J0cwo+IHRoZSBmZWF0dXJl LgoKSU1ITyB0cnlpbmcgdG8gaW50cm9kdWNlIFNDSEVEX0NPTVBMRVggZm9yIERUIG5leHQgdG8g dGhlIGxpbnV4LXdpZGUKYXZhaWxhYmxlIFNDSEVEX0NMVVNURVIgKHVzZWQgb25seSBmb3IgQUNQ SSByaWdodCBub3cpIGlzIHRoZSB3cm9uZyB3YXkuCgpfSWZfIGFzeW1tZXRyaWMgc3ViLWNsdXN0 ZXJpbmcgb2YgQ1BVcyB1bmRlcm5lYXRoIExMQyAoTDMpIG1ha2VzIGFueQpzZW5zZSBvbiBBUk12 OSBzaW5nbGUgRFNVIHN5c3RlbXMgbGlrZToKCiAgICAgIC4tLS0tLS0tLS0tLS0tLS0uCkNQVSAg IHwwIDEgMiAzIDQgNSA2IDd8CiAgICAgICstLS0tLS0tLS0tLS0tLS0rCnVhcmNoIHxsIGwgbCBs IG0gbSBtIGJ8IChzbyBjYWxsZWQgdHJpLWdlYXI6IGxpdHRsZSwgbWVkaXVtLCBiaWcpCiAgICAg ICstLS0tLS0tLS0tLS0tLS0rCiAgTDIgIHwgICB8ICAgfCB8IHwgfCB8CiAgICAgICstLS0tLS0t LS0tLS0tLS0rCiAgTDMgIHw8LS0gICAgICAgICAtLT58CiAgICAgICstLS0tLS0tLS0tLS0tLS0r CiAgICAgIHw8LS0gY2x1c3RlciAtLT58CiAgICAgICstLS0tLS0tLS0tLS0tLS0rCiAgICAgIHw8 LS0gICBEU1UgICAtLT58CiAgICAgICctLS0tLS0tLS0tLS0tLS0nCgooYW5kIEknbSBub3Qgc2F5 aW5nIGhlcmUgaXQgZG9lcyEpIHRoZW4gdGhlIGV4aXN0aW5nIFNDSEVEX0NMVVNURVIKc2hvdWxk IGJlIHVzZWQgaW4gRFQgYXMgd2VsbC4gU2luY2UgaXQgcHJvdmlkZXMgZXhhY3RseSB0aGUgc2Ft ZQpmdW5jdGlvbmFsaXR5IGZvciB0aGUgdGFzayBzY2hlZHVsZXIgbm8gbWF0dGVyIHdoZXRoZXIg aXQncyBzZXR1cCBmcm9tCkFDUEkgb3IgRFQuCgpwYXJzZV9jbHVzdGVyKCkgLT4gcGFyc2VfY29y ZSgpIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGJlIGFibGUgdG8gZGVjb2RlCmJvdGggaWQncyAocGFj a2FnZV9pZCBhbmQgY2x1c3Rlcl9pZCkgaW4gdGhpcyBjYXNlLgoKRFQncyBjcHVfbWFwIHdvdWxk IGhhdmUgdG8gYmUgY2hhbmdlZCB0byBjb2RlIDIgbGV2ZWwgc2V0dXBzLgoKRm9yIGEgc3lzdGVt IGxpa2UgdGhlIG9uZSBhYm92ZSBpdCBzaG91bGQgbG9vayBsaWtlOgoKICAgICAgICAgICAgICAg IGNwdS1tYXAgewogICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyMCB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9vMCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb3JlMCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNwdSA9IDwmY3B1MD47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTEg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSA8 JmNwdTE+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvbzIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTIg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSA8 JmNwdTI+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUzIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gPCZjcHUzPjsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAg ICAgICAgY2x1c3RlcjEgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUwIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IDwmY3B1ND47CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb3JlMSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj cHUgPSA8JmNwdTU+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29yZTIgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3B1ID0gPCZjcHU2PjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAg ICBjbHVzdGVyMiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTAgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gPCZjcHU3PjsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9Owog ICAgICAgICAgICAgICAgfTsKCkkgcGltcGVkIG15IEhpa2V5IDk2MCB0byBsb29rIGxpa2Ugb25l IG9mIHRob3NlIEFybXY5IDQtMy0xIHN5c3RlbXMgd2l0aApMMi1jb21wbGV4ZXMgb24gdGhlIExJ VFRMRVMgYW5kIEkgZ2V0OgoKIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvc2NoZWQvZG9tYWlucy9j cHUqL2RvbWFpbiovbmFtZQpDTFMKTUMKRElFCgpDTFMKTUMKRElFCgpDTFMKTUMKRElFCgpDTFMK TUMKRElFCgpNQwpESUUKCk1DCkRJRQoKTUMKRElFCgpESUUKCmNhdCAvcHJvYy9zY2hlZHN0YXQg fCBhd2sgJ3twcmludCAkMSAiICIgJDIgfScgfCBncmVwIF5bY2RdCgpjcHUwIDAKZG9tYWluMCAw Mwpkb21haW4xIDBmCmRvbWFpbjIgZmYKY3B1MSAwCmRvbWFpbjAgMDMKZG9tYWluMSAwZgpkb21h aW4yIGZmCmNwdTIgMApkb21haW4wIDBjCmRvbWFpbjEgMGYKZG9tYWluMiBmZgpjcHUzIDAKZG9t YWluMCAwYwpkb21haW4xIDBmCmRvbWFpbjIgZmYKY3B1NCAwCmRvbWFpbjAgNzAKZG9tYWluMSBm ZgpjcHU1IDAKZG9tYWluMCA3MApkb21haW4xIGZmCmNwdTYgMApkb21haW4wIDcwCmRvbWFpbjEg ZmYKY3B1NyAwCmRvbWFpbjAgZmYKCkxpa2UgSSBtZW50aW9uZWQgZWFybGllciwgSSdtIG5vdCBz dXJlIGlmIHRoaXMgYWRkaXRpb25hbCBjb21wbGV4aXR5Cm1ha2VzIHNlbnNlIG9uIG1vYmlsZSBz eXN0ZW1zIHJ1bm5pbmcgRUFTIChzaW5jZSBvbmx5IENGUyBsb2FkLWJhbGFuY2luZwpvbiBsaXR0 bGUgQ1BVcyB3b3VsZCBiZSBhZmZlY3RlZCkuCgpCdXQgbXkgaHVuY2ggaXMgdGhhdCB0aGlzIHNl dHVwIGlzIHdoYXQgeW91IHdhbnQgZm9yIHlvdXIgc3lzdGVtLiBJZiB3ZQpjb3VsZCBhZ3JlZSBv biB0aGlzIG9uZSwgdGhhdCB3b3VsZCBhbHJlYWR5IGJlIHNvbWUgcHJvZ3Jlc3MgdG8gc2VlIHRo ZQplbnRpcmUgc3RvcnkgaGVyZS4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK