From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966448AbeBNBvY (ORCPT ); Tue, 13 Feb 2018 20:51:24 -0500 Received: from mga02.intel.com ([134.134.136.20]:56116 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966387AbeBNBvW (ORCPT ); Tue, 13 Feb 2018 20:51:22 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,510,1511856000"; d="scan'208";a="34498931" From: Dongwon Kim To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: dri-devel@lists.freedesktop.org, dongwon.kim@intel.com, mateuszx.potrola@intel.com, sumit.semwal@linaro.org Subject: [RFC PATCH v2 0/9] hyper_dmabuf: Hyper_DMABUF driver Date: Tue, 13 Feb 2018 17:49:59 -0800 Message-Id: <20180214015008.9513-1-dongwon.kim@intel.com> X-Mailer: git-send-email 2.16.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch series contains the implementation of a new device driver, hyper_DMABUF driver, which provides a way to expand the boundary of Linux DMA-BUF sharing to across different VM instances in Multi-OS platform enabled by a Hypervisor (e.g. XEN) This version 2 series is basically refactored version of old series starting with "[RFC PATCH 01/60] hyper_dmabuf: initial working version of hyper_dmabuf drv" Implementation details of this driver are described in the reference guide added by the second patch, "[RFC PATCH v2 2/5] hyper_dmabuf: architecture specification and reference guide". Attaching 'Overview' section here as a quick summary. ------------------------------------------------------------------------------ Section 1. Overview ------------------------------------------------------------------------------ Hyper_DMABUF driver is a Linux device driver running on multiple Virtual achines (VMs), which expands DMA-BUF sharing capability to the VM environment where multiple different OS instances need to share same physical data without data-copy across VMs. To share a DMA_BUF across VMs, an instance of the Hyper_DMABUF drv on the exporting VM (so called, “exporter”) imports a local DMA_BUF from the original producer of the buffer, then re-exports it with an unique ID, hyper_dmabuf_id for the buffer to the importing VM (so called, “importer”). Another instance of the Hyper_DMABUF driver on importer registers a hyper_dmabuf_id together with reference information for the shared physical pages associated with the DMA_BUF to its database when the export happens. The actual mapping of the DMA_BUF on the importer’s side is done by the Hyper_DMABUF driver when user space issues the IOCTL command to access the shared DMA_BUF. The Hyper_DMABUF driver works as both an importing and exporting driver as is, that is, no special configuration is required. Consequently, only a single module per VM is needed to enable cross-VM DMA_BUF exchange. ------------------------------------------------------------------------------ There is a git repository at github.com where this series of patches are all integrated in Linux kernel tree based on the commit: commit ae64f9bd1d3621b5e60d7363bc20afb46aede215 Author: Linus Torvalds Date: Sun Dec 3 11:01:47 2018 -0500 Linux 4.15-rc2 https://github.com/downor/linux_hyper_dmabuf.git hyper_dmabuf_integration_v4 Dongwon Kim, Mateusz Polrola (9): hyper_dmabuf: initial upload of hyper_dmabuf drv core framework hyper_dmabuf: architecture specification and reference guide MAINTAINERS: adding Hyper_DMABUF driver section in MAINTAINERS hyper_dmabuf: user private data attached to hyper_DMABUF hyper_dmabuf: hyper_DMABUF synchronization across VM hyper_dmabuf: query ioctl for retreiving various hyper_DMABUF info hyper_dmabuf: event-polling mechanism for detecting a new hyper_DMABUF hyper_dmabuf: threaded interrupt in Xen-backend hyper_dmabuf: default backend for XEN hypervisor Documentation/hyper-dmabuf-sharing.txt | 734 ++++++++++++++++ MAINTAINERS | 11 + drivers/dma-buf/Kconfig | 2 + drivers/dma-buf/Makefile | 1 + drivers/dma-buf/hyper_dmabuf/Kconfig | 50 ++ drivers/dma-buf/hyper_dmabuf/Makefile | 44 + .../backends/xen/hyper_dmabuf_xen_comm.c | 944 +++++++++++++++++++++ .../backends/xen/hyper_dmabuf_xen_comm.h | 78 ++ .../backends/xen/hyper_dmabuf_xen_comm_list.c | 158 ++++ .../backends/xen/hyper_dmabuf_xen_comm_list.h | 67 ++ .../backends/xen/hyper_dmabuf_xen_drv.c | 46 + .../backends/xen/hyper_dmabuf_xen_drv.h | 53 ++ .../backends/xen/hyper_dmabuf_xen_shm.c | 525 ++++++++++++ .../backends/xen/hyper_dmabuf_xen_shm.h | 46 + drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c | 410 +++++++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.h | 122 +++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c | 122 +++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.h | 38 + drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_id.c | 135 +++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_id.h | 53 ++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ioctl.c | 794 +++++++++++++++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ioctl.h | 52 ++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_list.c | 295 +++++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_list.h | 73 ++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_msg.c | 416 +++++++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_msg.h | 89 ++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ops.c | 415 +++++++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ops.h | 34 + drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_query.c | 174 ++++ drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_query.h | 36 + .../hyper_dmabuf/hyper_dmabuf_remote_sync.c | 324 +++++++ .../hyper_dmabuf/hyper_dmabuf_remote_sync.h | 32 + .../dma-buf/hyper_dmabuf/hyper_dmabuf_sgl_proc.c | 257 ++++++ .../dma-buf/hyper_dmabuf/hyper_dmabuf_sgl_proc.h | 43 + drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_struct.h | 143 ++++ include/uapi/linux/hyper_dmabuf.h | 134 +++ 36 files changed, 6950 insertions(+) create mode 100644 Documentation/hyper-dmabuf-sharing.txt create mode 100644 drivers/dma-buf/hyper_dmabuf/Kconfig create mode 100644 drivers/dma-buf/hyper_dmabuf/Makefile create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_comm.c create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_comm.h create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_comm_list.c create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_comm_list.h create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_drv.c create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_drv.h create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_shm.c create mode 100644 drivers/dma-buf/hyper_dmabuf/backends/xen/hyper_dmabuf_xen_shm.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_id.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_id.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ioctl.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ioctl.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_list.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_list.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_msg.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_msg.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ops.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_ops.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_query.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_query.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_remote_sync.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_remote_sync.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_sgl_proc.c create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_sgl_proc.h create mode 100644 drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_struct.h create mode 100644 include/uapi/linux/hyper_dmabuf.h -- 2.16.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH v2 0/9] hyper_dmabuf: Hyper_DMABUF driver Date: Tue, 13 Feb 2018 17:49:59 -0800 Message-ID: <20180214015008.9513-1-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D06756E32D for ; Wed, 14 Feb 2018 01:51:24 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: dongwon.kim@intel.com, dri-devel@lists.freedesktop.org, mateuszx.potrola@intel.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBzZXJpZXMgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbmV3IGRl dmljZSBkcml2ZXIsCmh5cGVyX0RNQUJVRiBkcml2ZXIsIHdoaWNoIHByb3ZpZGVzIGEgd2F5IHRv IGV4cGFuZCB0aGUgYm91bmRhcnkgb2YKTGludXggRE1BLUJVRiBzaGFyaW5nIHRvIGFjcm9zcyBk aWZmZXJlbnQgVk0gaW5zdGFuY2VzIGluIE11bHRpLU9TIHBsYXRmb3JtCmVuYWJsZWQgYnkgYSBI eXBlcnZpc29yIChlLmcuIFhFTikKClRoaXMgdmVyc2lvbiAyIHNlcmllcyBpcyBiYXNpY2FsbHkg cmVmYWN0b3JlZCB2ZXJzaW9uIG9mIG9sZCBzZXJpZXMgc3RhcnRpbmcKd2l0aCAiW1JGQyBQQVRD SCAwMS82MF0gaHlwZXJfZG1hYnVmOiBpbml0aWFsIHdvcmtpbmcgdmVyc2lvbiBvZiBoeXBlcl9k bWFidWYKZHJ2IgoKSW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGlzIGRyaXZlciBhcmUgZGVz Y3JpYmVkIGluIHRoZSByZWZlcmVuY2UgZ3VpZGUKYWRkZWQgYnkgdGhlIHNlY29uZCBwYXRjaCwg IltSRkMgUEFUQ0ggdjIgMi81XSBoeXBlcl9kbWFidWY6IGFyY2hpdGVjdHVyZQpzcGVjaWZpY2F0 aW9uIGFuZCByZWZlcmVuY2UgZ3VpZGUiLgoKQXR0YWNoaW5nICdPdmVydmlldycgc2VjdGlvbiBo ZXJlIGFzIGEgcXVpY2sgc3VtbWFyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTZWN0aW9uIDEu IE92ZXJ2aWV3Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSHlwZXJfRE1BQlVGIGRyaXZlciBpcyBh IExpbnV4IGRldmljZSBkcml2ZXIgcnVubmluZyBvbiBtdWx0aXBsZSBWaXJ0dWFsCmFjaGluZXMg KFZNcyksIHdoaWNoIGV4cGFuZHMgRE1BLUJVRiBzaGFyaW5nIGNhcGFiaWxpdHkgdG8gdGhlIFZN IGVudmlyb25tZW50CndoZXJlIG11bHRpcGxlIGRpZmZlcmVudCBPUyBpbnN0YW5jZXMgbmVlZCB0 byBzaGFyZSBzYW1lIHBoeXNpY2FsIGRhdGEgd2l0aG91dApkYXRhLWNvcHkgYWNyb3NzIFZNcy4K ClRvIHNoYXJlIGEgRE1BX0JVRiBhY3Jvc3MgVk1zLCBhbiBpbnN0YW5jZSBvZiB0aGUgSHlwZXJf RE1BQlVGIGRydiBvbiB0aGUKZXhwb3J0aW5nIFZNIChzbyBjYWxsZWQsIOKAnGV4cG9ydGVy4oCd KSBpbXBvcnRzIGEgbG9jYWwgRE1BX0JVRiBmcm9tIHRoZSBvcmlnaW5hbApwcm9kdWNlciBvZiB0 aGUgYnVmZmVyLCB0aGVuIHJlLWV4cG9ydHMgaXQgd2l0aCBhbiB1bmlxdWUgSUQsIGh5cGVyX2Rt YWJ1Zl9pZApmb3IgdGhlIGJ1ZmZlciB0byB0aGUgaW1wb3J0aW5nIFZNIChzbyBjYWxsZWQsIOKA nGltcG9ydGVy4oCdKS4KCkFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIEh5cGVyX0RNQUJVRiBkcml2 ZXIgb24gaW1wb3J0ZXIgcmVnaXN0ZXJzCmEgaHlwZXJfZG1hYnVmX2lkIHRvZ2V0aGVyIHdpdGgg cmVmZXJlbmNlIGluZm9ybWF0aW9uIGZvciB0aGUgc2hhcmVkIHBoeXNpY2FsCnBhZ2VzIGFzc29j aWF0ZWQgd2l0aCB0aGUgRE1BX0JVRiB0byBpdHMgZGF0YWJhc2Ugd2hlbiB0aGUgZXhwb3J0IGhh cHBlbnMuCgpUaGUgYWN0dWFsIG1hcHBpbmcgb2YgdGhlIERNQV9CVUYgb24gdGhlIGltcG9ydGVy 4oCZcyBzaWRlIGlzIGRvbmUgYnkKdGhlIEh5cGVyX0RNQUJVRiBkcml2ZXIgd2hlbiB1c2VyIHNw YWNlIGlzc3VlcyB0aGUgSU9DVEwgY29tbWFuZCB0byBhY2Nlc3MKdGhlIHNoYXJlZCBETUFfQlVG LiBUaGUgSHlwZXJfRE1BQlVGIGRyaXZlciB3b3JrcyBhcyBib3RoIGFuIGltcG9ydGluZyBhbmQK ZXhwb3J0aW5nIGRyaXZlciBhcyBpcywgdGhhdCBpcywgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9u IGlzIHJlcXVpcmVkLgpDb25zZXF1ZW50bHksIG9ubHkgYSBzaW5nbGUgbW9kdWxlIHBlciBWTSBp cyBuZWVkZWQgdG8gZW5hYmxlIGNyb3NzLVZNIERNQV9CVUYKZXhjaGFuZ2UuCgotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KClRoZXJlIGlzIGEgZ2l0IHJlcG9zaXRvcnkgYXQgZ2l0aHViLmNvbSB3aGVy ZSB0aGlzIHNlcmllcyBvZiBwYXRjaGVzIGFyZSBhbGwKaW50ZWdyYXRlZCBpbiBMaW51eCBrZXJu ZWwgdHJlZSBiYXNlZCBvbiB0aGUgY29tbWl0OgoKICAgICAgICBjb21taXQgYWU2NGY5YmQxZDM2 MjFiNWU2MGQ3MzYzYmMyMGFmYjQ2YWVkZTIxNQogICAgICAgIEF1dGhvcjogTGludXMgVG9ydmFs ZHMgPHRvcnZhbGRzQHh4eHh4eHh4eHh4eHh4eHh4eHh4PgogICAgICAgIERhdGU6ICAgU3VuIERl YyAzIDExOjAxOjQ3IDIwMTggLTA1MDAKCiAgICAgICAgICAgIExpbnV4IDQuMTUtcmMyCgpodHRw czovL2dpdGh1Yi5jb20vZG93bm9yL2xpbnV4X2h5cGVyX2RtYWJ1Zi5naXQgaHlwZXJfZG1hYnVm X2ludGVncmF0aW9uX3Y0CgpEb25nd29uIEtpbSwgTWF0ZXVzeiBQb2xyb2xhICg5KToKICBoeXBl cl9kbWFidWY6IGluaXRpYWwgdXBsb2FkIG9mIGh5cGVyX2RtYWJ1ZiBkcnYgY29yZSBmcmFtZXdv cmsKICBoeXBlcl9kbWFidWY6IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9uIGFuZCByZWZlcmVu Y2UgZ3VpZGUKICBNQUlOVEFJTkVSUzogYWRkaW5nIEh5cGVyX0RNQUJVRiBkcml2ZXIgc2VjdGlv biBpbiBNQUlOVEFJTkVSUwogIGh5cGVyX2RtYWJ1ZjogdXNlciBwcml2YXRlIGRhdGEgYXR0YWNo ZWQgdG8gaHlwZXJfRE1BQlVGCiAgaHlwZXJfZG1hYnVmOiBoeXBlcl9ETUFCVUYgc3luY2hyb25p emF0aW9uIGFjcm9zcyBWTQogIGh5cGVyX2RtYWJ1ZjogcXVlcnkgaW9jdGwgZm9yIHJldHJlaXZp bmcgdmFyaW91cyBoeXBlcl9ETUFCVUYgaW5mbwogIGh5cGVyX2RtYWJ1ZjogZXZlbnQtcG9sbGlu ZyBtZWNoYW5pc20gZm9yIGRldGVjdGluZyBhIG5ldyBoeXBlcl9ETUFCVUYKICBoeXBlcl9kbWFi dWY6IHRocmVhZGVkIGludGVycnVwdCBpbiBYZW4tYmFja2VuZAogIGh5cGVyX2RtYWJ1ZjogZGVm YXVsdCBiYWNrZW5kIGZvciBYRU4gaHlwZXJ2aXNvcgoKIERvY3VtZW50YXRpb24vaHlwZXItZG1h YnVmLXNoYXJpbmcudHh0ICAgICAgICAgICAgIHwgNzM0ICsrKysrKysrKysrKysrKysKIE1BSU5U QUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExICsKIGRy aXZlcnMvZG1hLWJ1Zi9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsK IGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvS2NvbmZpZyAgICAgICAgICAgICAgIHwg IDUwICsrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlICAgICAgICAgICAg ICB8ICA0NCArCiAuLi4vYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jICAgICAg ICAgICB8IDk0NCArKysrKysrKysrKysrKysrKysrKysKIC4uLi9iYWNrZW5kcy94ZW4vaHlwZXJf ZG1hYnVmX3hlbl9jb21tLmggICAgICAgICAgIHwgIDc4ICsrCiAuLi4vYmFja2VuZHMveGVuL2h5 cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMgICAgICB8IDE1OCArKysrCiAuLi4vYmFja2VuZHMv eGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmggICAgICB8ICA2NyArKwogLi4uL2JhY2tl bmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5jICAgICAgICAgICAgfCAgNDYgKwogLi4uL2Jh Y2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5oICAgICAgICAgICAgfCAgNTMgKysKIC4u Li9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uYyAgICAgICAgICAgIHwgNTI1ICsr KysrKysrKysrKwogLi4uL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5oICAgICAg ICAgICAgfCAgNDYgKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf ZHJ2LmMgICAgfCA0MTAgKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9kcnYuaCAgICB8IDEyMiArKysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX2V2ZW50LmMgIHwgMTIyICsrKwogZHJpdmVycy9kbWEtYnVmL2h5cGVy X2RtYWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuaCAgfCAgMzggKwogZHJpdmVycy9kbWEtYnVmL2h5 cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaWQuYyAgICAgfCAxMzUgKysrCiBkcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oICAgICB8ICA1MyArKwogZHJpdmVycy9k bWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyAgfCA3OTQgKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lvY3Rs LmggIHwgIDUyICsrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9s aXN0LmMgICB8IDI5NSArKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVy X2RtYWJ1Zl9saXN0LmggICB8ICA3MyArKwogZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9o eXBlcl9kbWFidWZfbXNnLmMgICAgfCA0MTYgKysrKysrKysrCiBkcml2ZXJzL2RtYS1idWYvaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaCAgICB8ICA4OSArKwogZHJpdmVycy9kbWEtYnVm L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMgICAgfCA0MTUgKysrKysrKysrCiBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuaCAgICB8ICAzNCArCiBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5jICB8IDE3NCAr KysrCiBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oICB8 ICAzNiArCiAuLi4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5jICAgICAg ICB8IDMyNCArKysrKysrCiAuLi4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3lu Yy5oICAgICAgICB8ICAzMiArCiAuLi4vZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVm X3NnbF9wcm9jLmMgICB8IDI1NyArKysrKysKIC4uLi9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfc2dsX3Byb2MuaCAgIHwgIDQzICsKIGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX3N0cnVjdC5oIHwgMTQzICsrKysKIGluY2x1ZGUvdWFwaS9saW51eC9o eXBlcl9kbWFidWYuaCAgICAgICAgICAgICAgICAgIHwgMTM0ICsrKwogMzYgZmlsZXMgY2hhbmdl ZCwgNjk1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9o eXBlci1kbWFidWYtc2hhcmluZy50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1i dWYvaHlwZXJfZG1hYnVmL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hl bi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvYmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tl bmRzL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9iYWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hl bl9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv YmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2JhY2tlbmRzL3hlbi9oeXBlcl9kbWFidWZfeGVu X3NobS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9i YWNrZW5kcy94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9ldmVudC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfZXZlbnQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX2lvY3RsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Rt YS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9saXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21z Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfb3BzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJf ZG1hYnVmL2h5cGVyX2RtYWJ1Zl9vcHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3F1ZXJ5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9xdWVyeS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf cmVtb3RlX3N5bmMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zZ2xfcHJvYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfc2ds X3Byb2MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX3N0cnVjdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xp bnV4L2h5cGVyX2RtYWJ1Zi5oCgotLSAKMi4xNi4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK