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 3F0B3C43603 for ; Wed, 18 Dec 2019 18:37:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F3DF0206D7 for ; Wed, 18 Dec 2019 18:37:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="I/0aU+mO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726998AbfLRShs (ORCPT ); Wed, 18 Dec 2019 13:37:48 -0500 Received: from smtp-fw-4101.amazon.com ([72.21.198.25]:20524 "EHLO smtp-fw-4101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726698AbfLRShs (ORCPT ); Wed, 18 Dec 2019 13:37:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576694268; x=1608230268; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=6aYnzds9BF7bd/ktBuL6CxJjY5pmEpuzxZF1/5BjyeM=; b=I/0aU+mO4Da1I0R6mjsb2MN3Cwa+gTRva7OAA37nIjS4wpqC9TE95KdT nb9c0x9MdgDOPdoYHRYJ+XH/zJoYAC25Nd7SS4FE7lS3TFEH/jhpa1z6x HMwU+AltiFQOG/hjdN7oqN2hvfrkyN5whNeXblPpp2m3XWdROVhe6mEm1 I=; IronPort-SDR: XQPrqb/oNc03XfSNsIFpBqjAx3UW2KfrL9lLsvXIYbxL8I597b9H8rXHCUirM9tac4Kf/l+32z Dl7AwWb7xp9A== X-IronPort-AV: E=Sophos;i="5.69,330,1571702400"; d="scan'208";a="9082721" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2b-55156cd4.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-4101.iad4.amazon.com with ESMTP; 18 Dec 2019 18:37:46 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan2.pdx.amazon.com [10.170.41.162]) by email-inbound-relay-2b-55156cd4.us-west-2.amazon.com (Postfix) with ESMTPS id 35CF9A2511; Wed, 18 Dec 2019 18:37:44 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 18 Dec 2019 18:37:43 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.160.109) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 18 Dec 2019 18:37:38 +0000 From: SeongJae Park To: , , , CC: SeongJae Park , , , , , Subject: [PATCH v13 0/5] xenbus/backend: Add memory pressure handler callback Date: Wed, 18 Dec 2019 19:37:13 +0100 Message-ID: <20191218183718.31719-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.160.109] X-ClientProxiedBy: EX13D10UWB003.ant.amazon.com (10.43.161.106) 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). After that, patch 3 applies the callback mechanism to mitigate the problem in 'xen-blkback'. The fourth and fifth patches are trivial cleanups; those fix nits we found during the development of this patchset. Note that patches 1, 4, and 5 are not changed since v9. 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/v13 Patch History ------------- Changes from v12 (https://lore.kernel.org/xen-devel/20191218104232.9606-1-sjpark@amazon.com/) - Do not unnecessarily disable interrupts (suggested by Juergen) - Hold lock from xenbus side (suggested by Juergen) Changes from v11 (https://lore.kernel.org/xen-devel/20191217160748.693-2-sjpark@amazon.com/) - Fix wrong trylock use (reported by Juergen) - Merge patch 3 and 4 (suggested by Juergen) - Update test result 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 (5): 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: 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 | 28 ++++++++++--- drivers/xen/xenbus/xenbus_probe.c | 8 +++- drivers/xen/xenbus/xenbus_probe_backend.c | 38 +++++++++++++++++ include/xen/xenbus.h | 3 ++ 7 files changed, 103 insertions(+), 27 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 B1803C3F68F for ; Wed, 18 Dec 2019 18:38:13 +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 8886D227BF for ; Wed, 18 Dec 2019 18:38:13 +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="bMejUUzh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8886D227BF 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 1iheCi-0001NC-Dl; Wed, 18 Dec 2019 18:37:48 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iheCh-0001N7-CP for xen-devel@lists.xenproject.org; Wed, 18 Dec 2019 18:37:47 +0000 X-Inumbo-ID: 7c2fa217-21c5-11ea-90ed-12813bfff9fa Received: from smtp-fw-4101.amazon.com (unknown [72.21.198.25]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 7c2fa217-21c5-11ea-90ed-12813bfff9fa; Wed, 18 Dec 2019 18:37:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576694267; x=1608230267; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=6aYnzds9BF7bd/ktBuL6CxJjY5pmEpuzxZF1/5BjyeM=; b=bMejUUzhuvutjYVY3yn5AMEWb4pc8fp2HblnOHXc23JnIHH4YOKzpX6C KbcQX/MYZ0lPaiWKz2E0/FLNYnHBJvd56Eda0A1z0t3Ba4L8qFLGQ9+cr KIK5R0uqQR4cA2U1DB0PVmcF194UhR4E9Bgc+enYvkVBloNFfQJQSQho4 0=; IronPort-SDR: XQPrqb/oNc03XfSNsIFpBqjAx3UW2KfrL9lLsvXIYbxL8I597b9H8rXHCUirM9tac4Kf/l+32z Dl7AwWb7xp9A== X-IronPort-AV: E=Sophos;i="5.69,330,1571702400"; d="scan'208";a="9082721" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2b-55156cd4.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-4101.iad4.amazon.com with ESMTP; 18 Dec 2019 18:37:46 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan2.pdx.amazon.com [10.170.41.162]) by email-inbound-relay-2b-55156cd4.us-west-2.amazon.com (Postfix) with ESMTPS id 35CF9A2511; Wed, 18 Dec 2019 18:37:44 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 18 Dec 2019 18:37:43 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.160.109) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 18 Dec 2019 18:37:38 +0000 From: SeongJae Park To: , , , Date: Wed, 18 Dec 2019 19:37:13 +0100 Message-ID: <20191218183718.31719-1-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [10.43.160.109] X-ClientProxiedBy: EX13D10UWB003.ant.amazon.com (10.43.161.106) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Precedence: Bulk Subject: [Xen-devel] [PATCH v13 0/5] xenbus/backend: Add 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 cGF0Y2ggMikuICBBZnRlciB0aGF0LCBwYXRjaCAzIGFwcGxpZXMgdGhlIGNhbGxiYWNrCm1lY2hh bmlzbSB0byBtaXRpZ2F0ZSB0aGUgcHJvYmxlbSBpbiAneGVuLWJsa2JhY2snLiAgVGhlIGZvdXJ0 aCBhbmQKZmlmdGggcGF0Y2hlcyBhcmUgdHJpdmlhbCBjbGVhbnVwczsgdGhvc2UgZml4IG5pdHMg d2UgZm91bmQgZHVyaW5nIHRoZQpkZXZlbG9wbWVudCBvZiB0aGlzIHBhdGNoc2V0LgoKTm90ZSB0 aGF0IHBhdGNoZXMgMSwgNCwgYW5kIDUgYXJlIG5vdCBjaGFuZ2VkIHNpbmNlIHY5LgoKCkJhc2Ug VmVyc2lvbgotLS0tLS0tLS0tLS0KClRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gdjUuNC4gIEEgY29t cGxldGUgdHJlZSBpcyBhbHNvIGF2YWlsYWJsZSBhdCBteQpwdWJsaWMgZ2l0IHJlcG86Cmh0dHBz Oi8vZ2l0aHViLmNvbS9zanAzOC9saW51eC90cmVlL3BhdGNoZXMvYmxrYmFjay9idWZmZXJfc3F1 ZWV6ZS92MTMKCgpQYXRjaCBIaXN0b3J5Ci0tLS0tLS0tLS0tLS0KCkNoYW5nZXMgZnJvbSB2MTIK KGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1kZXZlbC8yMDE5MTIxODEwNDIzMi45NjA2LTEt c2pwYXJrQGFtYXpvbi5jb20vKQogLSBEbyBub3QgdW5uZWNlc3NhcmlseSBkaXNhYmxlIGludGVy cnVwdHMgKHN1Z2dlc3RlZCBieSBKdWVyZ2VuKQogLSBIb2xkIGxvY2sgZnJvbSB4ZW5idXMgc2lk ZSAoc3VnZ2VzdGVkIGJ5IEp1ZXJnZW4pCgpDaGFuZ2VzIGZyb20gdjExCihodHRwczovL2xvcmUu a2VybmVsLm9yZy94ZW4tZGV2ZWwvMjAxOTEyMTcxNjA3NDguNjkzLTItc2pwYXJrQGFtYXpvbi5j b20vKQogLSBGaXggd3JvbmcgdHJ5bG9jayB1c2UgKHJlcG9ydGVkIGJ5IEp1ZXJnZW4pCiAtIE1l cmdlIHBhdGNoIDMgYW5kIDQgKHN1Z2dlc3RlZCBieSBKdWVyZ2VuKQogLSBVcGRhdGUgdGVzdCBy ZXN1bHQKCkNoYW5nZXMgZnJvbSB2MTAKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1kZXZl bC8yMDE5MTIxNjEyNDUyNy4zMDMwNi0xLXNqcGFya0BhbWF6b24uY29tLykKIC0gRml4IHJhY2Ug Y29uZGl0aW9uIChyZXBvcnRlZCBieSBTZW9uZ0phZSwgc3VnZ2VzdGVkIGJ5IEp1ZXJnZW4pCgpD aGFuZ2VzIGZyb20gdjkKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1kZXZlbC8yMDE5MTIx MzE1MzU0Ni4xNzQyNS0xLXNqcGFya0BhbWF6b24uZGUvKQogLSBBZGQgJ1Jldmlld2VkLWJ5JyBh bmQgJ0Fja2VkLWJ5JyBmcm9tIFJvZ2VyIFBhdSBNb25uw6kKIC0gVXBkYXRlIHRoZSBjb21taXQg bWVzc2FnZSBmb3Igb3ZlcmhlYWQgdGVzdCBvZiB0aGUgMm5kIHBhdGgKCkNoYW5nZXMgZnJvbSB2 OAooaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcveGVuLWRldmVsLzIwMTkxMjEzMTMwMjExLjI0MDEx LTEtc2pwYXJrQGFtYXpvbi5kZS8pCiAtIERyb3AgJ1Jldmlld2VkLWJ5OiBKdWVyZ2VuJyBmcm9t IHRoZSBzZWNvbmQgcGF0Y2gKICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBV cGRhdGUgY29udGFjdCBvZiB0aGUgbmV3IG1vZHVsZSBwYXJhbSB0byBTZW9uZ0phZSBQYXJrCiAg IDxzanBhcmtAYW1hem9uLmRlPgogICAoc3VnZ2VzdGVkIGJ5IFJvZ2VyIFBhdSBNb25uw6kpCiAt IFdvcmRzbWl0aCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcgogICAoc3VnZ2VzdGVk IGJ5IFJvZ2VyIFBhdSBNb25uw6kpCiAtIEZpeCBkdW1iIGJ1Z3MKICAgKHN1Z2dlc3RlZCBieSBS b2dlciBQYXUgTW9ubsOpKQogLSBNb3ZlIG1vZHVsZSBwYXJhbSBkZWZpbml0aW9uIHRvIHhlbmJ1 cy5jIGFuZCByZWR1Y2UgdGhlIG51bWJlciBvZgogICBsaW5lcyBmb3IgdGhpcyBjaGFuZ2UKICAg KHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogLSBBZGQgYSBjb21tZW50IGZvciB0aGUg bmV3IGNhbGxiYWNrLCByZWNsYWltX21lbW9yeSwgYXMgb3RoZXIKICAgY2FsbGJhY2tzIGFsc28g aGF2ZQogLSBBZGQgYW5vdGhlciB0cml2aWFsIGNsZWFudXAgb2YgeGVuYnVzLmMgZmlsZSAoNHRo IHBhdGNoKQoKQ2hhbmdlcyBmcm9tIHY3CihodHRwczovL2xvcmUua2VybmVsLm9yZy94ZW4tZGV2 ZWwvMjAxOTEyMTExODEwMTYuMTQzNjYtMS1zanBhcmtAYW1hem9uLmRlLykKIC0gVXBkYXRlIHN5 c2ZzLWRyaXZlci14ZW4tYmxrYmFjayBmb3IgbmV3IHBhcmFtZXRlcgogICAoc3VnZ2VzdGVkIGJ5 IFJvZ2VyIFBhdSBNb25uw6kpCiAtIFVzZSBwZXIteGVuX2Jsa2lmIGJ1ZmZlcl9zcXVlZXplX2Vu ZCBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZQogICAoc3VnZ2VzdGVkIGJ5IFJvZ2VyIFBhdSBN b25uw6kpCgpDaGFuZ2VzIGZyb20gdjYKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWJs b2NrLzIwMTkxMjExMDQyNDI4LjU5NjEtMS1zanBhcmtAYW1hem9uLmRlLykKIC0gUmVtb3ZlIG1v cmUgdW5uZWNlc3NhcnkgcHJlZml4ZXMgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQog LSBDb25zdGlmeSBhIHZhcmlhYmxlIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1IE1vbm7DqSkKIC0g UmVuYW1lICdyZWNsYWltJyBpbnRvICdyZWNsYWltX21lbW9yeScgKHN1Z2dlc3RlZCBieSBSb2dl ciBQYXUgTW9ubsOpKQogLSBNb3JlIHdvcmRzbWl0aCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgKHN1 Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQoKQ2hhbmdlcyBmcm9tIHY1CihodHRwczovL2xv cmUua2VybmVsLm9yZy9saW51eC1ibG9jay8yMDE5MTIxMDA4MDYyOC41MjY0LTEtc2pwYXJrQGFt YXpvbi5kZS8pCiAtIFdvcmRzbWl0aCB0aGUgY29tbWl0IG1lc3NhZ2VzIChzdWdnZXN0ZWQgYnkg Um9nZXIgUGF1IE1vbm7DqSkKIC0gQ2hhbmdlIHRoZSByZWNsYWltIGNhbGxiYWNrIHJldHVybiB0 eXBlIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1CiAgIE1vbm7DqSkKIC0gQ2hhbmdlIHRoZSB0eXBl IG9mIHRoZSBibGtiYWNrIHNxdWVlemUgZHVyYXRpb24gdmFyaWFibGUKICAgKHN1Z2dlc3RlZCBi eSBSb2dlciBQYXUgTW9ubsOpKQogLSBBZGQgYSBwYXRjaCBmb3IgcmVtb3ZhbCBvZiB1bm5lY2Vz c2FyeSBzdGF0aWMgdmFyaWFibGUgbmFtZSBwcmVmaXhlcwogICAoc3VnZ2VzdGVkIGJ5IFJvZ2Vy IFBhdSBNb25uw6kpCiAtIEZpeCBjaGVja3BhdGNoLnBsIHdhcm5pbmdzCgpDaGFuZ2VzIGZyb20g djQKKGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1kZXZlbC8yMDE5MTIwOTE5NDMwNS4yMDgy OC0xLXNqcGFya0BhbWF6b24uY29tLykKIC0gUmVtb3ZlIGRvbWFpbiBpZCBwYXJhbWV0ZXIgZnJv bSB0aGUgY2FsbGJhY2sgKHN1Z2dlc3RlZCBieSBKdWVyZ2VuCiAgIEdyb3NzKQogLSBSZW5hbWUg eGVuLWJsa2JhY2sgbW9kdWxlIHBhcmFtZXRlciAoc3VnZ2VzdGVkIGJ5IFN0ZWZhbiBOdWVybmJ1 cmdlcikKCkNoYW5nZXMgZnJvbSB2MwooaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcveGVuLWRldmVs LzIwMTkxMjA5MDg1ODM5LjIxMjE1LTEtc2pwYXJrQGFtYXpvbi5jb20vKQogLSBBZGQgZ2VuZXJh bCBjYWxsYmFjayBpbiB4ZW5fZHJpdmVyIGFuZCB1c2UgaXQgKHN1Z2dlc3RlZCBieSBKdWVyZ2Vu CiAgIEdyb3NzKQoKQ2hhbmdlcyBmcm9tIHYyCihodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1ibG9jay9hZjE5NTAzMy0yM2Q1LTM4ZWQtYjczYi1mNmUyZTNiMzQ1NDFAYW1hem9uLmNvbSkK IC0gUmVuYW1lIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGFuZCB2YXJpYWJsZXMgZm9yIGJyZXZpdHkK ICAgKGFnZ3Jlc3NpdmUgc2hyaW5raW5nIC0+IHNxdWVlemluZykKCkNoYW5nZXMgZnJvbSB2MQoo aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcveGVuLWRldmVsLzIwMTkxMjA0MTEzNDE5LjIyOTgtMS1z anBhcmtAYW1hem9uLmNvbS8pCiAtIEFkanVzdCB0aGUgZGVzY3JpcHRpb24gdG8gbm90IHVzZSB0 aGUgdGVybSwgYGFyYml0cmFyaWx5YAogICAoc3VnZ2VzdGVkIGJ5IFBhdWwgRHVycmFudCkKIC0g U3BlY2lmeSB0aW1lIHVuaXQgb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBwYXJhbWV0ZXIgZGVzY3Jp cHRpb24sCiAgIChzdWdnZXN0ZWQgYnkgTWF4aW1pbGlhbiBIZXluZSkKIC0gQ2hhbmdlIGRlZmF1 bHQgYWdncmVzc2l2ZSBzaHJpbmtpbmcgZHVyYXRpb24gZnJvbSAxbXMgdG8gMTBtcwogLSBNZXJn ZSB0d28gcGF0Y2hlcyBpbnRvIG9uZSBzaW5nbGUgcGF0Y2gKCgpTZW9uZ0phZSBQYXJrICg1KToK ICB4ZW5idXMvYmFja2VuZDogQWRkIG1lbW9yeSBwcmVzc3VyZSBoYW5kbGVyIGNhbGxiYWNrCiAg eGVuYnVzL2JhY2tlbmQ6IFByb3RlY3QgeGVuYnVzIGNhbGxiYWNrIHdpdGggbG9jawogIHhlbi9i bGtiYWNrOiBTcXVlZXplIHBhZ2UgcG9vbHMgaWYgYSBtZW1vcnkgcHJlc3N1cmUgaXMgZGV0ZWN0 ZWQKICB4ZW4vYmxrYmFjazogUmVtb3ZlIHVubmVjZXNzYXJ5IHN0YXRpYyB2YXJpYWJsZSBuYW1l IHByZWZpeGVzCiAgeGVuL2Jsa2JhY2s6IENvbnNpc3RlbnRseSBpbnNlcnQgb25lIGVtcHR5IGxp bmUgYmV0d2VlbiBmdW5jdGlvbnMKCiAuLi4vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLXhlbi1i bGtiYWNrICAgICAgfCAxMCArKysrKwogZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNr LmMgICAgICAgICAgIHwgNDIgKysrKysrKysrLS0tLS0tLS0tLQogZHJpdmVycy9ibG9jay94ZW4t YmxrYmFjay9jb21tb24uaCAgICAgICAgICAgIHwgIDEgKwogZHJpdmVycy9ibG9jay94ZW4tYmxr YmFjay94ZW5idXMuYyAgICAgICAgICAgIHwgMjggKysrKysrKysrKy0tLQogZHJpdmVycy94ZW4v eGVuYnVzL3hlbmJ1c19wcm9iZS5jICAgICAgICAgICAgIHwgIDggKysrLQogZHJpdmVycy94ZW4v eGVuYnVzL3hlbmJ1c19wcm9iZV9iYWNrZW5kLmMgICAgIHwgMzggKysrKysrKysrKysrKysrKysK IGluY2x1ZGUveGVuL3hlbmJ1cy5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrCiA3 IGZpbGVzIGNoYW5nZWQsIDEwMyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCi0tIAoy LjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs