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.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 350EFC43603 for ; Tue, 17 Dec 2019 16:08:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EA6F724679 for ; Tue, 17 Dec 2019 16:08:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="bnCH8CLC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727202AbfLQQIf (ORCPT ); Tue, 17 Dec 2019 11:08:35 -0500 Received: from smtp-fw-9101.amazon.com ([207.171.184.25]:31058 "EHLO smtp-fw-9101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726858AbfLQQIf (ORCPT ); Tue, 17 Dec 2019 11:08:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576598913; x=1608134913; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=k0I76KDoH+Ci1ztva7Qrivr8vQ9oSswMnJqX6noDdf0=; b=bnCH8CLC6cHzIOkJWWrL9F8GQqIt7VJugsVm84TG+oeZbNBbjQZFeDoh ap17zB/foSnKYUJlQjHu1+kP0UG7427f24jBwQJg5DxYZB5sBPkDNuDIj vlcAZPBk29YdapHUjeL5QxesX1c9MC1PbnkS2M3JDhkKXcRBGPl9dGIEV Y=; IronPort-SDR: Qfa0OSQrrFWYCmyV+k2qrt5bWTKPedxp2SKK8tZsK9VZpq9mHDZnDdKRNjLUEfwgyCCzGs2OOD LC8tOGTXcTzA== X-IronPort-AV: E=Sophos;i="5.69,326,1571702400"; d="scan'208";a="5642827" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2a-22cc717f.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9101.sea19.amazon.com with ESMTP; 17 Dec 2019 16:08:22 +0000 Received: from EX13MTAUEA002.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2a-22cc717f.us-west-2.amazon.com (Postfix) with ESMTPS id 925E6A25DB; Tue, 17 Dec 2019 16:08:19 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA002.ant.amazon.com (10.43.61.77) with Microsoft SMTP Server (TLS) id 15.0.1236.3; Tue, 17 Dec 2019 16:08:19 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.179) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 16:08:14 +0000 From: SeongJae Park To: , , , CC: SeongJae Park , , , , , Subject: [PATCH v11 0/6] xenbus/backend: Add a memory pressure handler callback Date: Tue, 17 Dec 2019 17:07:42 +0100 Message-ID: <20191217160748.693-1-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.43.161.179] X-ClientProxiedBy: EX13d09UWC002.ant.amazon.com (10.43.162.102) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org Granting pages consumes backend system memory. In systems configured with insufficient spare memory for those pages, it can cause a memory pressure situation. However, finding the optimal amount of the spare memory is challenging for large systems having dynamic resource utilization patterns. Also, such a static configuration might lack flexibility. To mitigate such problems, this patchset adds a memory reclaim callback to 'xenbus_driver' (patch 1) and then introduce a lock for race condition avoidance (patch 2). Those two patches could be merged into one patch if necessary. The third patch applies the callback mechanism to mitigate the problem in 'xen-blkback' (patch 3), but it lacks use of the race condition mitigation. Following change (patch 4) applies the race protection mechanism to the blkback. Patch 3 and patch 4 has seperated for only review convenience. Highly recommend to merge those into one patch as patch 3 applied version might confuse bisecting. The fifth and sixth patches are trivial cleanups; those fix nits we found during the development of this patchset. Note that patch 1, 3, 5, 6 are same with previous version. I made the changes in this version to different commits (only second and fourth patches) to make review more comfortable. Especially, the third and fourth patches should be merged into one patch, as the third one alone might make bisecting confuse. Tthe next version of this patchset will also merge those. Base Version ------------ This patch is based on v5.4. A complete tree is also available at my public git repo: https://github.com/sjp38/linux/tree/patches/blkback/buffer_squeeze/v11 Patch History ------------- Changes from v10 (https://lore.kernel.org/xen-devel/20191216124527.30306-1-sjpark@amazon.com/) - Fix race condition (reported by SeongJae, suggested by Juergen) Changes from v9 (https://lore.kernel.org/xen-devel/20191213153546.17425-1-sjpark@amazon.de/) - Add 'Reviewed-by' and 'Acked-by' from Roger Pau Monné - Update the commit message for overhead test of the 2nd path Changes from v8 (https://lore.kernel.org/xen-devel/20191213130211.24011-1-sjpark@amazon.de/) - Drop 'Reviewed-by: Juergen' from the second patch (suggested by Roger Pau Monné) - Update contact of the new module param to SeongJae Park (suggested by Roger Pau Monné) - Wordsmith the description of the parameter (suggested by Roger Pau Monné) - Fix dumb bugs (suggested by Roger Pau Monné) - Move module param definition to xenbus.c and reduce the number of lines for this change (suggested by Roger Pau Monné) - Add a comment for the new callback, reclaim_memory, as other callbacks also have - Add another trivial cleanup of xenbus.c file (4th patch) Changes from v7 (https://lore.kernel.org/xen-devel/20191211181016.14366-1-sjpark@amazon.de/) - Update sysfs-driver-xen-blkback for new parameter (suggested by Roger Pau Monné) - Use per-xen_blkif buffer_squeeze_end instead of global variable (suggested by Roger Pau Monné) Changes from v6 (https://lore.kernel.org/linux-block/20191211042428.5961-1-sjpark@amazon.de/) - Remove more unnecessary prefixes (suggested by Roger Pau Monné) - Constify a variable (suggested by Roger Pau Monné) - Rename 'reclaim' into 'reclaim_memory' (suggested by Roger Pau Monné) - More wordsmith of the commit message (suggested by Roger Pau Monné) Changes from v5 (https://lore.kernel.org/linux-block/20191210080628.5264-1-sjpark@amazon.de/) - Wordsmith the commit messages (suggested by Roger Pau Monné) - Change the reclaim callback return type (suggested by Roger Pau Monné) - Change the type of the blkback squeeze duration variable (suggested by Roger Pau Monné) - Add a patch for removal of unnecessary static variable name prefixes (suggested by Roger Pau Monné) - Fix checkpatch.pl warnings Changes from v4 (https://lore.kernel.org/xen-devel/20191209194305.20828-1-sjpark@amazon.com/) - Remove domain id parameter from the callback (suggested by Juergen Gross) - Rename xen-blkback module parameter (suggested by Stefan Nuernburger) Changes from v3 (https://lore.kernel.org/xen-devel/20191209085839.21215-1-sjpark@amazon.com/) - Add general callback in xen_driver and use it (suggested by Juergen Gross) Changes from v2 (https://lore.kernel.org/linux-block/af195033-23d5-38ed-b73b-f6e2e3b34541@amazon.com) - Rename the module parameter and variables for brevity (aggressive shrinking -> squeezing) Changes from v1 (https://lore.kernel.org/xen-devel/20191204113419.2298-1-sjpark@amazon.com/) - Adjust the description to not use the term, `arbitrarily` (suggested by Paul Durrant) - Specify time unit of the duration in the parameter description, (suggested by Maximilian Heyne) - Change default aggressive shrinking duration from 1ms to 10ms - Merge two patches into one single patch SeongJae Park (6): xenbus/backend: Add memory pressure handler callback xenbus/backend: Protect xenbus callback with lock xen/blkback: Squeeze page pools if a memory pressure is detected xen/blkback: Protect 'reclaim_memory()' with 'reclaim_lock' xen/blkback: Remove unnecessary static variable name prefixes xen/blkback: Consistently insert one empty line between functions .../ABI/testing/sysfs-driver-xen-blkback | 10 +++++ drivers/block/xen-blkback/blkback.c | 42 +++++++++---------- drivers/block/xen-blkback/common.h | 1 + drivers/block/xen-blkback/xenbus.c | 37 +++++++++++++--- drivers/xen/xenbus/xenbus_probe.c | 1 + drivers/xen/xenbus/xenbus_probe_backend.c | 38 +++++++++++++++++ include/xen/xenbus.h | 3 ++ 7 files changed, 106 insertions(+), 26 deletions(-) -- 2.17.1 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=-7.5 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 02819C43603 for ; Tue, 17 Dec 2019 16:08:51 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 C7F3521582 for ; Tue, 17 Dec 2019 16:08:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="bnCH8CLC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C7F3521582 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihFOl-00067Z-4V; Tue, 17 Dec 2019 16:08:35 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihFOj-00067U-Ue for xen-devel@lists.xenproject.org; Tue, 17 Dec 2019 16:08:34 +0000 X-Inumbo-ID: 792ad07e-20e7-11ea-88e7-bc764e2007e4 Received: from smtp-fw-9101.amazon.com (unknown [207.171.184.25]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 792ad07e-20e7-11ea-88e7-bc764e2007e4; Tue, 17 Dec 2019 16:08:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576598913; x=1608134913; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=k0I76KDoH+Ci1ztva7Qrivr8vQ9oSswMnJqX6noDdf0=; b=bnCH8CLC6cHzIOkJWWrL9F8GQqIt7VJugsVm84TG+oeZbNBbjQZFeDoh ap17zB/foSnKYUJlQjHu1+kP0UG7427f24jBwQJg5DxYZB5sBPkDNuDIj vlcAZPBk29YdapHUjeL5QxesX1c9MC1PbnkS2M3JDhkKXcRBGPl9dGIEV Y=; IronPort-SDR: Qfa0OSQrrFWYCmyV+k2qrt5bWTKPedxp2SKK8tZsK9VZpq9mHDZnDdKRNjLUEfwgyCCzGs2OOD LC8tOGTXcTzA== X-IronPort-AV: E=Sophos;i="5.69,326,1571702400"; d="scan'208";a="5642827" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2a-22cc717f.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9101.sea19.amazon.com with ESMTP; 17 Dec 2019 16:08:22 +0000 Received: from EX13MTAUEA002.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2a-22cc717f.us-west-2.amazon.com (Postfix) with ESMTPS id 925E6A25DB; Tue, 17 Dec 2019 16:08:19 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA002.ant.amazon.com (10.43.61.77) with Microsoft SMTP Server (TLS) id 15.0.1236.3; Tue, 17 Dec 2019 16:08:19 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.179) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 16:08:14 +0000 From: SeongJae Park To: , , , Date: Tue, 17 Dec 2019 17:07:42 +0100 Message-ID: <20191217160748.693-1-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [10.43.161.179] X-ClientProxiedBy: EX13d09UWC002.ant.amazon.com (10.43.162.102) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Precedence: Bulk Subject: [Xen-devel] [PATCH v11 0/6] xenbus/backend: Add a memory pressure handler callback X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: linux-block@vger.kernel.org, SeongJae Park , pdurrant@amazon.com, linux-kernel@vger.kernel.org, sj38.park@gmail.com, xen-devel@lists.xenproject.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" R3JhbnRpbmcgcGFnZXMgY29uc3VtZXMgYmFja2VuZCBzeXN0ZW0gbWVtb3J5LiAgSW4gc3lzdGVt cyBjb25maWd1cmVkCndpdGggaW5zdWZmaWNpZW50IHNwYXJlIG1lbW9yeSBmb3IgdGhvc2UgcGFn ZXMsIGl0IGNhbiBjYXVzZSBhIG1lbW9yeQpwcmVzc3VyZSBzaXR1YXRpb24uICBIb3dldmVyLCBm aW5kaW5nIHRoZSBvcHRpbWFsIGFtb3VudCBvZiB0aGUgc3BhcmUKbWVtb3J5IGlzIGNoYWxsZW5n aW5nIGZvciBsYXJnZSBzeXN0ZW1zIGhhdmluZyBkeW5hbWljIHJlc291cmNlCnV0aWxpemF0aW9u IHBhdHRlcm5zLiAgQWxzbywgc3VjaCBhIHN0YXRpYyBjb25maWd1cmF0aW9uIG1pZ2h0IGxhY2sK ZmxleGliaWxpdHkuCgpUbyBtaXRpZ2F0ZSBzdWNoIHByb2JsZW1zLCB0aGlzIHBhdGNoc2V0IGFk ZHMgYSBtZW1vcnkgcmVjbGFpbSBjYWxsYmFjawp0byAneGVuYnVzX2RyaXZlcicgKHBhdGNoIDEp IGFuZCB0aGVuIGludHJvZHVjZSBhIGxvY2sgZm9yIHJhY2UKY29uZGl0aW9uIGF2b2lkYW5jZSAo cGF0Y2ggMikuICBUaG9zZSB0d28gcGF0Y2hlcyBjb3VsZCBiZSBtZXJnZWQgaW50bwpvbmUgcGF0 Y2ggaWYgbmVjZXNzYXJ5LgoKVGhlIHRoaXJkIHBhdGNoIGFwcGxpZXMgdGhlIGNhbGxiYWNrIG1l Y2hhbmlzbSB0byBtaXRpZ2F0ZSB0aGUgcHJvYmxlbQppbiAneGVuLWJsa2JhY2snIChwYXRjaCAz KSwgYnV0IGl0IGxhY2tzIHVzZSBvZiB0aGUgcmFjZSBjb25kaXRpb24KbWl0aWdhdGlvbi4gIEZv bGxvd2luZyBjaGFuZ2UgKHBhdGNoIDQpIGFwcGxpZXMgdGhlIHJhY2UgcHJvdGVjdGlvbgptZWNo YW5pc20gdG8gdGhlIGJsa2JhY2suICBQYXRjaCAzIGFuZCBwYXRjaCA0IGhhcyBzZXBlcmF0ZWQg Zm9yIG9ubHkKcmV2aWV3IGNvbnZlbmllbmNlLiAgSGlnaGx5IHJlY29tbWVuZCB0byBtZXJnZSB0 aG9zZSBpbnRvIG9uZSBwYXRjaCBhcwpwYXRjaCAzIGFwcGxpZWQgdmVyc2lvbiBtaWdodCBjb25m dXNlIGJpc2VjdGluZy4KClRoZSBmaWZ0aCBhbmQgc2l4dGggcGF0Y2hlcyBhcmUgdHJpdmlhbCBj bGVhbnVwczsgdGhvc2UgZml4IG5pdHMgd2UKZm91bmQgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBv ZiB0aGlzIHBhdGNoc2V0LgoKTm90ZSB0aGF0IHBhdGNoIDEsIDMsIDUsIDYgYXJlIHNhbWUgd2l0 aCBwcmV2aW91cyB2ZXJzaW9uLiAgSSBtYWRlIHRoZQpjaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiB0 byBkaWZmZXJlbnQgY29tbWl0cyAob25seSBzZWNvbmQgYW5kIGZvdXJ0aApwYXRjaGVzKSB0byBt YWtlIHJldmlldyBtb3JlIGNvbWZvcnRhYmxlLiAgRXNwZWNpYWxseSwgdGhlIHRoaXJkIGFuZApm b3VydGggcGF0Y2hlcyBzaG91bGQgYmUgbWVyZ2VkIGludG8gb25lIHBhdGNoLCBhcyB0aGUgdGhp cmQgb25lIGFsb25lCm1pZ2h0IG1ha2UgYmlzZWN0aW5nIGNvbmZ1c2UuICBUdGhlIG5leHQgdmVy c2lvbiBvZiB0aGlzIHBhdGNoc2V0IHdpbGwKYWxzbyBtZXJnZSB0aG9zZS4KCgpCYXNlIFZlcnNp b24KLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIHY1LjQuICBBIGNvbXBsZXRl IHRyZWUgaXMgYWxzbyBhdmFpbGFibGUgYXQgbXkKcHVibGljIGdpdCByZXBvOgpodHRwczovL2dp dGh1Yi5jb20vc2pwMzgvbGludXgvdHJlZS9wYXRjaGVzL2Jsa2JhY2svYnVmZmVyX3NxdWVlemUv djExCgoKUGF0Y2ggSGlzdG9yeQotLS0tLS0tLS0tLS0tCgpDaGFuZ2VzIGZyb20gdjEwCihodHRw czovL2xvcmUua2VybmVsLm9yZy94ZW4tZGV2ZWwvMjAxOTEyMTYxMjQ1MjcuMzAzMDYtMS1zanBh cmtAYW1hem9uLmNvbS8pCiAtIEZpeCByYWNlIGNvbmRpdGlvbiAocmVwb3J0ZWQgYnkgU2VvbmdK YWUsIHN1Z2dlc3RlZCBieSBKdWVyZ2VuKQoKQ2hhbmdlcyBmcm9tIHY5CihodHRwczovL2xvcmUu a2VybmVsLm9yZy94ZW4tZGV2ZWwvMjAxOTEyMTMxNTM1NDYuMTc0MjUtMS1zanBhcmtAYW1hem9u LmRlLykKIC0gQWRkICdSZXZpZXdlZC1ieScgYW5kICdBY2tlZC1ieScgZnJvbSBSb2dlciBQYXUg TW9ubsOpCiAtIFVwZGF0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIG92ZXJoZWFkIHRlc3Qgb2Yg dGhlIDJuZCBwYXRoCgpDaGFuZ2VzIGZyb20gdjgKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hl bi1kZXZlbC8yMDE5MTIxMzEzMDIxMS4yNDAxMS0xLXNqcGFya0BhbWF6b24uZGUvKQogLSBEcm9w ICdSZXZpZXdlZC1ieTogSnVlcmdlbicgZnJvbSB0aGUgc2Vjb25kIHBhdGNoCiAgIChzdWdnZXN0 ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0gVXBkYXRlIGNvbnRhY3Qgb2YgdGhlIG5ldyBtb2R1 bGUgcGFyYW0gdG8gU2VvbmdKYWUgUGFyawogICA8c2pwYXJrQGFtYXpvbi5kZT4KICAgKHN1Z2dl c3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBXb3Jkc21pdGggdGhlIGRlc2NyaXB0aW9uIG9m IHRoZSBwYXJhbWV0ZXIKICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBGaXgg ZHVtYiBidWdzCiAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0gTW92ZSBtb2R1 bGUgcGFyYW0gZGVmaW5pdGlvbiB0byB4ZW5idXMuYyBhbmQgcmVkdWNlIHRoZSBudW1iZXIgb2YK ICAgbGluZXMgZm9yIHRoaXMgY2hhbmdlCiAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7D qSkKIC0gQWRkIGEgY29tbWVudCBmb3IgdGhlIG5ldyBjYWxsYmFjaywgcmVjbGFpbV9tZW1vcnks IGFzIG90aGVyCiAgIGNhbGxiYWNrcyBhbHNvIGhhdmUKIC0gQWRkIGFub3RoZXIgdHJpdmlhbCBj bGVhbnVwIG9mIHhlbmJ1cy5jIGZpbGUgKDR0aCBwYXRjaCkKCkNoYW5nZXMgZnJvbSB2NwooaHR0 cHM6Ly9sb3JlLmtlcm5lbC5vcmcveGVuLWRldmVsLzIwMTkxMjExMTgxMDE2LjE0MzY2LTEtc2pw YXJrQGFtYXpvbi5kZS8pCiAtIFVwZGF0ZSBzeXNmcy1kcml2ZXIteGVuLWJsa2JhY2sgZm9yIG5l dyBwYXJhbWV0ZXIKICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBVc2UgcGVy LXhlbl9ibGtpZiBidWZmZXJfc3F1ZWV6ZV9lbmQgaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGUK ICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQoKQ2hhbmdlcyBmcm9tIHY2CihodHRw czovL2xvcmUua2VybmVsLm9yZy9saW51eC1ibG9jay8yMDE5MTIxMTA0MjQyOC41OTYxLTEtc2pw YXJrQGFtYXpvbi5kZS8pCiAtIFJlbW92ZSBtb3JlIHVubmVjZXNzYXJ5IHByZWZpeGVzIChzdWdn ZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0gQ29uc3RpZnkgYSB2YXJpYWJsZSAoc3VnZ2Vz dGVkIGJ5IFJvZ2VyIFBhdSBNb25uw6kpCiAtIFJlbmFtZSAncmVjbGFpbScgaW50byAncmVjbGFp bV9tZW1vcnknIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0gTW9yZSB3b3Jkc21p dGggb2YgdGhlIGNvbW1pdCBtZXNzYWdlIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkK CkNoYW5nZXMgZnJvbSB2NQooaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtYmxvY2svMjAx OTEyMTAwODA2MjguNTI2NC0xLXNqcGFya0BhbWF6b24uZGUvKQogLSBXb3Jkc21pdGggdGhlIGNv bW1pdCBtZXNzYWdlcyAoc3VnZ2VzdGVkIGJ5IFJvZ2VyIFBhdSBNb25uw6kpCiAtIENoYW5nZSB0 aGUgcmVjbGFpbSBjYWxsYmFjayByZXR1cm4gdHlwZSAoc3VnZ2VzdGVkIGJ5IFJvZ2VyIFBhdQog ICBNb25uw6kpCiAtIENoYW5nZSB0aGUgdHlwZSBvZiB0aGUgYmxrYmFjayBzcXVlZXplIGR1cmF0 aW9uIHZhcmlhYmxlCiAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0gQWRkIGEg cGF0Y2ggZm9yIHJlbW92YWwgb2YgdW5uZWNlc3Nhcnkgc3RhdGljIHZhcmlhYmxlIG5hbWUgcHJl Zml4ZXMKICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBGaXggY2hlY2twYXRj aC5wbCB3YXJuaW5ncwoKQ2hhbmdlcyBmcm9tIHY0CihodHRwczovL2xvcmUua2VybmVsLm9yZy94 ZW4tZGV2ZWwvMjAxOTEyMDkxOTQzMDUuMjA4MjgtMS1zanBhcmtAYW1hem9uLmNvbS8pCiAtIFJl bW92ZSBkb21haW4gaWQgcGFyYW1ldGVyIGZyb20gdGhlIGNhbGxiYWNrIChzdWdnZXN0ZWQgYnkg SnVlcmdlbgogICBHcm9zcykKIC0gUmVuYW1lIHhlbi1ibGtiYWNrIG1vZHVsZSBwYXJhbWV0ZXIg KHN1Z2dlc3RlZCBieSBTdGVmYW4gTnVlcm5idXJnZXIpCgpDaGFuZ2VzIGZyb20gdjMKKGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL3hlbi1kZXZlbC8yMDE5MTIwOTA4NTgzOS4yMTIxNS0xLXNqcGFy a0BhbWF6b24uY29tLykKIC0gQWRkIGdlbmVyYWwgY2FsbGJhY2sgaW4geGVuX2RyaXZlciBhbmQg dXNlIGl0IChzdWdnZXN0ZWQgYnkgSnVlcmdlbgogICBHcm9zcykKCkNoYW5nZXMgZnJvbSB2Mgoo aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtYmxvY2svYWYxOTUwMzMtMjNkNS0zOGVkLWI3 M2ItZjZlMmUzYjM0NTQxQGFtYXpvbi5jb20pCiAtIFJlbmFtZSB0aGUgbW9kdWxlIHBhcmFtZXRl ciBhbmQgdmFyaWFibGVzIGZvciBicmV2aXR5CiAgIChhZ2dyZXNzaXZlIHNocmlua2luZyAtPiBz cXVlZXppbmcpCgpDaGFuZ2VzIGZyb20gdjEKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1k ZXZlbC8yMDE5MTIwNDExMzQxOS4yMjk4LTEtc2pwYXJrQGFtYXpvbi5jb20vKQogLSBBZGp1c3Qg dGhlIGRlc2NyaXB0aW9uIHRvIG5vdCB1c2UgdGhlIHRlcm0sIGBhcmJpdHJhcmlseWAKICAgKHN1 Z2dlc3RlZCBieSBQYXVsIER1cnJhbnQpCiAtIFNwZWNpZnkgdGltZSB1bml0IG9mIHRoZSBkdXJh dGlvbiBpbiB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9uLAogICAoc3VnZ2VzdGVkIGJ5IE1heGlt aWxpYW4gSGV5bmUpCiAtIENoYW5nZSBkZWZhdWx0IGFnZ3Jlc3NpdmUgc2hyaW5raW5nIGR1cmF0 aW9uIGZyb20gMW1zIHRvIDEwbXMKIC0gTWVyZ2UgdHdvIHBhdGNoZXMgaW50byBvbmUgc2luZ2xl IHBhdGNoCgoKU2VvbmdKYWUgUGFyayAoNik6CiAgeGVuYnVzL2JhY2tlbmQ6IEFkZCBtZW1vcnkg cHJlc3N1cmUgaGFuZGxlciBjYWxsYmFjawogIHhlbmJ1cy9iYWNrZW5kOiBQcm90ZWN0IHhlbmJ1 cyBjYWxsYmFjayB3aXRoIGxvY2sKICB4ZW4vYmxrYmFjazogU3F1ZWV6ZSBwYWdlIHBvb2xzIGlm IGEgbWVtb3J5IHByZXNzdXJlIGlzIGRldGVjdGVkCiAgeGVuL2Jsa2JhY2s6IFByb3RlY3QgJ3Jl Y2xhaW1fbWVtb3J5KCknIHdpdGggJ3JlY2xhaW1fbG9jaycKICB4ZW4vYmxrYmFjazogUmVtb3Zl IHVubmVjZXNzYXJ5IHN0YXRpYyB2YXJpYWJsZSBuYW1lIHByZWZpeGVzCiAgeGVuL2Jsa2JhY2s6 IENvbnNpc3RlbnRseSBpbnNlcnQgb25lIGVtcHR5IGxpbmUgYmV0d2VlbiBmdW5jdGlvbnMKCiAu Li4vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLXhlbi1ibGtiYWNrICAgICAgfCAxMCArKysrKwog ZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMgICAgICAgICAgIHwgNDIgKysrKysr KysrLS0tLS0tLS0tLQogZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9jb21tb24uaCAgICAgICAg ICAgIHwgIDEgKwogZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay94ZW5idXMuYyAgICAgICAgICAg IHwgMzcgKysrKysrKysrKysrKy0tLQogZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5j ICAgICAgICAgICAgIHwgIDEgKwogZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZV9iYWNr ZW5kLmMgICAgIHwgMzggKysrKysrKysrKysrKysrKysKIGluY2x1ZGUveGVuL3hlbmJ1cy5oICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrCiA3IGZpbGVzIGNoYW5nZWQsIDEwNiBpbnNl cnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn L21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs