From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34194) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cjOcN-0003ah-KY for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cjOcL-0005Pj-G4 for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:55 -0500 Received: from smtp02.citrix.com ([66.165.176.63]:13220) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1cjOcL-0005PI-7r for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:53 -0500 From: Paul Durrant Date: Thu, 2 Mar 2017 11:09:42 +0000 Message-ID: <1488452986-24501-2-git-send-email-paul.durrant@citrix.com> In-Reply-To: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH v2 1/5] xen: make use of xen_xc implicit in xen_common.h inlines List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org Cc: Paul Durrant , Stefano Stabellini Doing this will make the transition to using the new libxendevicemodel interface less intrusive on the callers of these functions, since using the new library will require a change of handle. NOTE: The patch also moves the 'externs' for xen_xc and xen_fmem from xen_backend.h to xen_common.h, and the declarations from xen_backend.c to xen-common.c, which is where they belong. Signed-off-by: Paul Durrant Reviewed-by: Anthony Perard --- Cc: Stefano Stabellini --- hw/xen/xen_backend.c | 2 - include/hw/xen/xen_backend.h | 2 - include/hw/xen/xen_common.h | 90 +++++++++++++++++++++++--------------------- xen-common.c | 3 ++ xen-hvm.c | 20 +++++----- 5 files changed, 60 insertions(+), 57 deletions(-) diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c index 6c21c37..d34c49e 100644 --- a/hw/xen/xen_backend.c +++ b/hw/xen/xen_backend.c @@ -43,8 +43,6 @@ BusState *xen_sysbus; /* ------------------------------------------------------------- */ /* public */ -xc_interface *xen_xc = NULL; -xenforeignmemory_handle *xen_fmem = NULL; struct xs_handle *xenstore = NULL; const char *xen_protocol; diff --git a/include/hw/xen/xen_backend.h b/include/hw/xen/xen_backend.h index 4f4799a..30811a1 100644 --- a/include/hw/xen/xen_backend.h +++ b/include/hw/xen/xen_backend.h @@ -14,8 +14,6 @@ OBJECT_CHECK(XenDevice, (obj), TYPE_XENBACKEND) /* variables */ -extern xc_interface *xen_xc; -extern xenforeignmemory_handle *xen_fmem; extern struct xs_handle *xenstore; extern const char *xen_protocol; extern DeviceState *xen_sysdev; diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h index dce76ee..1e08b98 100644 --- a/include/hw/xen/xen_common.h +++ b/include/hw/xen/xen_common.h @@ -20,6 +20,8 @@ #include "qemu/queue.h" #include "hw/xen/trace.h" +extern xc_interface *xen_xc; + /* * We don't support Xen prior to 4.2.0. */ @@ -73,6 +75,8 @@ static inline void *xenforeignmemory_map(xc_interface *h, uint32_t dom, #endif +extern xenforeignmemory_handle *xen_fmem; + void destroy_hvm_domain(bool reboot); /* shutdown/destroy current domain because of an error */ @@ -107,8 +111,7 @@ static inline int xen_get_vmport_regs_pfn(xc_interface *xc, domid_t dom, #endif -static inline int xen_get_default_ioreq_server_info(xc_interface *xc, - domid_t dom, +static inline int xen_get_default_ioreq_server_info(domid_t dom, xen_pfn_t *ioreq_pfn, xen_pfn_t *bufioreq_pfn, evtchn_port_t @@ -117,7 +120,7 @@ static inline int xen_get_default_ioreq_server_info(xc_interface *xc, unsigned long param; int rc; - rc = xc_get_hvm_param(xc, dom, HVM_PARAM_IOREQ_PFN, ¶m); + rc = xc_get_hvm_param(xen_xc, dom, HVM_PARAM_IOREQ_PFN, ¶m); if (rc < 0) { fprintf(stderr, "failed to get HVM_PARAM_IOREQ_PFN\n"); return -1; @@ -125,7 +128,7 @@ static inline int xen_get_default_ioreq_server_info(xc_interface *xc, *ioreq_pfn = param; - rc = xc_get_hvm_param(xc, dom, HVM_PARAM_BUFIOREQ_PFN, ¶m); + rc = xc_get_hvm_param(xen_xc, dom, HVM_PARAM_BUFIOREQ_PFN, ¶m); if (rc < 0) { fprintf(stderr, "failed to get HVM_PARAM_BUFIOREQ_PFN\n"); return -1; @@ -133,7 +136,7 @@ static inline int xen_get_default_ioreq_server_info(xc_interface *xc, *bufioreq_pfn = param; - rc = xc_get_hvm_param(xc, dom, HVM_PARAM_BUFIOREQ_EVTCHN, + rc = xc_get_hvm_param(xen_xc, dom, HVM_PARAM_BUFIOREQ_EVTCHN, ¶m); if (rc < 0) { fprintf(stderr, "failed to get HVM_PARAM_BUFIOREQ_EVTCHN\n"); @@ -156,63 +159,64 @@ static inline int xen_get_default_ioreq_server_info(xc_interface *xc, typedef uint16_t ioservid_t; -static inline void xen_map_memory_section(xc_interface *xc, domid_t dom, +static inline void xen_map_memory_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { } -static inline void xen_unmap_memory_section(xc_interface *xc, domid_t dom, +static inline void xen_unmap_memory_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { } -static inline void xen_map_io_section(xc_interface *xc, domid_t dom, +static inline void xen_map_io_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { } -static inline void xen_unmap_io_section(xc_interface *xc, domid_t dom, +static inline void xen_unmap_io_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { } -static inline void xen_map_pcidev(xc_interface *xc, domid_t dom, +static inline void xen_map_pcidev(domid_t dom, ioservid_t ioservid, PCIDevice *pci_dev) { } -static inline void xen_unmap_pcidev(xc_interface *xc, domid_t dom, +static inline void xen_unmap_pcidev(domid_t dom, ioservid_t ioservid, PCIDevice *pci_dev) { } -static inline void xen_create_ioreq_server(xc_interface *xc, domid_t dom, +static inline void xen_create_ioreq_server(domid_t dom, ioservid_t *ioservid) { } -static inline void xen_destroy_ioreq_server(xc_interface *xc, domid_t dom, +static inline void xen_destroy_ioreq_server(domid_t dom, ioservid_t ioservid) { } -static inline int xen_get_ioreq_server_info(xc_interface *xc, domid_t dom, +static inline int xen_get_ioreq_server_info(domid_t dom, ioservid_t ioservid, xen_pfn_t *ioreq_pfn, xen_pfn_t *bufioreq_pfn, evtchn_port_t *bufioreq_evtchn) { - return xen_get_default_ioreq_server_info(xc, dom, ioreq_pfn, bufioreq_pfn, + return xen_get_default_ioreq_server_info(dom, ioreq_pfn, + bufioreq_pfn, bufioreq_evtchn); } -static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom, +static inline int xen_set_ioreq_server_state(domid_t dom, ioservid_t ioservid, bool enable) { @@ -224,7 +228,7 @@ static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom, static bool use_default_ioreq_server; -static inline void xen_map_memory_section(xc_interface *xc, domid_t dom, +static inline void xen_map_memory_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { @@ -237,11 +241,11 @@ static inline void xen_map_memory_section(xc_interface *xc, domid_t dom, } trace_xen_map_mmio_range(ioservid, start_addr, end_addr); - xc_hvm_map_io_range_to_ioreq_server(xc, dom, ioservid, 1, + xc_hvm_map_io_range_to_ioreq_server(xen_xc, dom, ioservid, 1, start_addr, end_addr); } -static inline void xen_unmap_memory_section(xc_interface *xc, domid_t dom, +static inline void xen_unmap_memory_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { @@ -253,13 +257,12 @@ static inline void xen_unmap_memory_section(xc_interface *xc, domid_t dom, return; } - trace_xen_unmap_mmio_range(ioservid, start_addr, end_addr); - xc_hvm_unmap_io_range_from_ioreq_server(xc, dom, ioservid, 1, - start_addr, end_addr); + xc_hvm_unmap_io_range_from_ioreq_server(xen_xc, dom, ioservid, + 1, start_addr, end_addr); } -static inline void xen_map_io_section(xc_interface *xc, domid_t dom, +static inline void xen_map_io_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { @@ -271,13 +274,12 @@ static inline void xen_map_io_section(xc_interface *xc, domid_t dom, return; } - trace_xen_map_portio_range(ioservid, start_addr, end_addr); - xc_hvm_map_io_range_to_ioreq_server(xc, dom, ioservid, 0, + xc_hvm_map_io_range_to_ioreq_server(xen_xc, dom, ioservid, 0, start_addr, end_addr); } -static inline void xen_unmap_io_section(xc_interface *xc, domid_t dom, +static inline void xen_unmap_io_section(domid_t dom, ioservid_t ioservid, MemoryRegionSection *section) { @@ -290,11 +292,11 @@ static inline void xen_unmap_io_section(xc_interface *xc, domid_t dom, } trace_xen_unmap_portio_range(ioservid, start_addr, end_addr); - xc_hvm_unmap_io_range_from_ioreq_server(xc, dom, ioservid, 0, - start_addr, end_addr); + xc_hvm_unmap_io_range_from_ioreq_server(xen_xc, dom, ioservid, + 0, start_addr, end_addr); } -static inline void xen_map_pcidev(xc_interface *xc, domid_t dom, +static inline void xen_map_pcidev(domid_t dom, ioservid_t ioservid, PCIDevice *pci_dev) { @@ -304,13 +306,13 @@ static inline void xen_map_pcidev(xc_interface *xc, domid_t dom, trace_xen_map_pcidev(ioservid, pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); - xc_hvm_map_pcidev_to_ioreq_server(xc, dom, ioservid, - 0, pci_bus_num(pci_dev->bus), + xc_hvm_map_pcidev_to_ioreq_server(xen_xc, dom, ioservid, 0, + pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); } -static inline void xen_unmap_pcidev(xc_interface *xc, domid_t dom, +static inline void xen_unmap_pcidev(domid_t dom, ioservid_t ioservid, PCIDevice *pci_dev) { @@ -320,16 +322,17 @@ static inline void xen_unmap_pcidev(xc_interface *xc, domid_t dom, trace_xen_unmap_pcidev(ioservid, pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); - xc_hvm_unmap_pcidev_from_ioreq_server(xc, dom, ioservid, - 0, pci_bus_num(pci_dev->bus), + xc_hvm_unmap_pcidev_from_ioreq_server(xen_xc, dom, ioservid, 0, + pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); } -static inline void xen_create_ioreq_server(xc_interface *xc, domid_t dom, +static inline void xen_create_ioreq_server(domid_t dom, ioservid_t *ioservid) { - int rc = xc_hvm_create_ioreq_server(xc, dom, HVM_IOREQSRV_BUFIOREQ_ATOMIC, + int rc = xc_hvm_create_ioreq_server(xen_xc, dom, + HVM_IOREQSRV_BUFIOREQ_ATOMIC, ioservid); if (rc == 0) { @@ -342,7 +345,7 @@ static inline void xen_create_ioreq_server(xc_interface *xc, domid_t dom, trace_xen_default_ioreq_server(); } -static inline void xen_destroy_ioreq_server(xc_interface *xc, domid_t dom, +static inline void xen_destroy_ioreq_server(domid_t dom, ioservid_t ioservid) { if (use_default_ioreq_server) { @@ -350,27 +353,27 @@ static inline void xen_destroy_ioreq_server(xc_interface *xc, domid_t dom, } trace_xen_ioreq_server_destroy(ioservid); - xc_hvm_destroy_ioreq_server(xc, dom, ioservid); + xc_hvm_destroy_ioreq_server(xen_xc, dom, ioservid); } -static inline int xen_get_ioreq_server_info(xc_interface *xc, domid_t dom, +static inline int xen_get_ioreq_server_info(domid_t dom, ioservid_t ioservid, xen_pfn_t *ioreq_pfn, xen_pfn_t *bufioreq_pfn, evtchn_port_t *bufioreq_evtchn) { if (use_default_ioreq_server) { - return xen_get_default_ioreq_server_info(xc, dom, ioreq_pfn, + return xen_get_default_ioreq_server_info(dom, ioreq_pfn, bufioreq_pfn, bufioreq_evtchn); } - return xc_hvm_get_ioreq_server_info(xc, dom, ioservid, + return xc_hvm_get_ioreq_server_info(xen_xc, dom, ioservid, ioreq_pfn, bufioreq_pfn, bufioreq_evtchn); } -static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom, +static inline int xen_set_ioreq_server_state(domid_t dom, ioservid_t ioservid, bool enable) { @@ -379,7 +382,8 @@ static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom, } trace_xen_ioreq_server_state(ioservid, enable); - return xc_hvm_set_ioreq_server_state(xc, dom, ioservid, enable); + return xc_hvm_set_ioreq_server_state(xen_xc, dom, ioservid, + enable); } #endif diff --git a/xen-common.c b/xen-common.c index fd2c928..703e7a5 100644 --- a/xen-common.c +++ b/xen-common.c @@ -25,6 +25,9 @@ do { } while (0) #endif +xc_interface *xen_xc; +xenforeignmemory_handle *xen_fmem; + static int store_dev_info(int domid, Chardev *cs, const char *string) { struct xs_handle *xs = NULL; diff --git a/xen-hvm.c b/xen-hvm.c index 5043beb..dbb8c66 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -454,10 +454,10 @@ static void xen_set_memory(struct MemoryListener *listener, return; } else { if (add) { - xen_map_memory_section(xen_xc, xen_domid, state->ioservid, + xen_map_memory_section(xen_domid, state->ioservid, section); } else { - xen_unmap_memory_section(xen_xc, xen_domid, state->ioservid, + xen_unmap_memory_section(xen_domid, state->ioservid, section); } } @@ -521,7 +521,7 @@ static void xen_io_add(MemoryListener *listener, memory_region_ref(mr); - xen_map_io_section(xen_xc, xen_domid, state->ioservid, section); + xen_map_io_section(xen_domid, state->ioservid, section); } static void xen_io_del(MemoryListener *listener, @@ -534,7 +534,7 @@ static void xen_io_del(MemoryListener *listener, return; } - xen_unmap_io_section(xen_xc, xen_domid, state->ioservid, section); + xen_unmap_io_section(xen_domid, state->ioservid, section); memory_region_unref(mr); } @@ -547,7 +547,7 @@ static void xen_device_realize(DeviceListener *listener, if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { PCIDevice *pci_dev = PCI_DEVICE(dev); - xen_map_pcidev(xen_xc, xen_domid, state->ioservid, pci_dev); + xen_map_pcidev(xen_domid, state->ioservid, pci_dev); } } @@ -559,7 +559,7 @@ static void xen_device_unrealize(DeviceListener *listener, if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { PCIDevice *pci_dev = PCI_DEVICE(dev); - xen_unmap_pcidev(xen_xc, xen_domid, state->ioservid, pci_dev); + xen_unmap_pcidev(xen_domid, state->ioservid, pci_dev); } } @@ -1139,7 +1139,7 @@ static void xen_hvm_change_state_handler(void *opaque, int running, xen_main_loop_prepare(state); } - xen_set_ioreq_server_state(xen_xc, xen_domid, + xen_set_ioreq_server_state(xen_domid, state->ioservid, (rstate == RUN_STATE_RUNNING)); } @@ -1227,7 +1227,7 @@ void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) goto err; } - xen_create_ioreq_server(xen_xc, xen_domid, &state->ioservid); + xen_create_ioreq_server(xen_domid, &state->ioservid); state->exit.notify = xen_exit_notifier; qemu_add_exit_notifier(&state->exit); @@ -1238,7 +1238,7 @@ void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) state->wakeup.notify = xen_wakeup_notifier; qemu_register_wakeup_notifier(&state->wakeup); - rc = xen_get_ioreq_server_info(xen_xc, xen_domid, state->ioservid, + rc = xen_get_ioreq_server_info(xen_domid, state->ioservid, &ioreq_pfn, &bufioreq_pfn, &bufioreq_evtchn); if (rc < 0) { @@ -1288,7 +1288,7 @@ void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) /* Note: cpus is empty at this point in init */ state->cpu_by_vcpu_id = g_malloc0(max_cpus * sizeof(CPUState *)); - rc = xen_set_ioreq_server_state(xen_xc, xen_domid, state->ioservid, true); + rc = xen_set_ioreq_server_state(xen_domid, state->ioservid, true); if (rc < 0) { error_report("failed to enable ioreq server info: error %d handle=%p", errno, xen_xc); -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v2 1/5] xen: make use of xen_xc implicit in xen_common.h inlines Date: Thu, 2 Mar 2017 11:09:42 +0000 Message-ID: <1488452986-24501-2-git-send-email-paul.durrant@citrix.com> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cjOcM-0000dH-5R for xen-devel@lists.xenproject.org; Thu, 02 Mar 2017 11:09:54 +0000 In-Reply-To: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org Cc: Paul Durrant , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org RG9pbmcgdGhpcyB3aWxsIG1ha2UgdGhlIHRyYW5zaXRpb24gdG8gdXNpbmcgdGhlIG5ldyBsaWJ4 ZW5kZXZpY2Vtb2RlbAppbnRlcmZhY2UgbGVzcyBpbnRydXNpdmUgb24gdGhlIGNhbGxlcnMgb2Yg dGhlc2UgZnVuY3Rpb25zLCBzaW5jZSB1c2luZwp0aGUgbmV3IGxpYnJhcnkgd2lsbCByZXF1aXJl IGEgY2hhbmdlIG9mIGhhbmRsZS4KCk5PVEU6IFRoZSBwYXRjaCBhbHNvIG1vdmVzIHRoZSAnZXh0 ZXJucycgZm9yIHhlbl94YyBhbmQgeGVuX2ZtZW0gZnJvbQogICAgICB4ZW5fYmFja2VuZC5oIHRv IHhlbl9jb21tb24uaCwgYW5kIHRoZSBkZWNsYXJhdGlvbnMgZnJvbQogICAgICB4ZW5fYmFja2Vu ZC5jIHRvIHhlbi1jb21tb24uYywgd2hpY2ggaXMgd2hlcmUgdGhleSBiZWxvbmcuCgpTaWduZWQt b2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpSZXZpZXdlZC1i eTogQW50aG9ueSBQZXJhcmQgPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+Ci0tLQpDYzogU3Rl ZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgotLS0KIGh3L3hlbi94ZW5f YmFja2VuZC5jICAgICAgICAgfCAgMiAtCiBpbmNsdWRlL2h3L3hlbi94ZW5fYmFja2VuZC5oIHwg IDIgLQogaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oICB8IDkwICsrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4tY29tbW9uLmMgICAgICAgICAgICAgICAg IHwgIDMgKysKIHhlbi1odm0uYyAgICAgICAgICAgICAgICAgICAgfCAyMCArKysrKy0tLS0tCiA1 IGZpbGVzIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKyksIDU3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2h3L3hlbi94ZW5fYmFja2VuZC5jIGIvaHcveGVuL3hlbl9iYWNrZW5kLmMKaW5kZXgg NmMyMWMzNy4uZDM0YzQ5ZSAxMDA2NDQKLS0tIGEvaHcveGVuL3hlbl9iYWNrZW5kLmMKKysrIGIv aHcveGVuL3hlbl9iYWNrZW5kLmMKQEAgLTQzLDggKzQzLDYgQEAgQnVzU3RhdGUgKnhlbl9zeXNi dXM7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCiAKIC8qIHB1YmxpYyAqLwoteGNfaW50ZXJmYWNlICp4ZW5feGMgPSBO VUxMOwoteGVuZm9yZWlnbm1lbW9yeV9oYW5kbGUgKnhlbl9mbWVtID0gTlVMTDsKIHN0cnVjdCB4 c19oYW5kbGUgKnhlbnN0b3JlID0gTlVMTDsKIGNvbnN0IGNoYXIgKnhlbl9wcm90b2NvbDsKIApk aWZmIC0tZ2l0IGEvaW5jbHVkZS9ody94ZW4veGVuX2JhY2tlbmQuaCBiL2luY2x1ZGUvaHcveGVu L3hlbl9iYWNrZW5kLmgKaW5kZXggNGY0Nzk5YS4uMzA4MTFhMSAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9ody94ZW4veGVuX2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL2h3L3hlbi94ZW5fYmFja2VuZC5o CkBAIC0xNCw4ICsxNCw2IEBACiAgICAgT0JKRUNUX0NIRUNLKFhlbkRldmljZSwgKG9iaiksIFRZ UEVfWEVOQkFDS0VORCkKIAogLyogdmFyaWFibGVzICovCi1leHRlcm4geGNfaW50ZXJmYWNlICp4 ZW5feGM7Ci1leHRlcm4geGVuZm9yZWlnbm1lbW9yeV9oYW5kbGUgKnhlbl9mbWVtOwogZXh0ZXJu IHN0cnVjdCB4c19oYW5kbGUgKnhlbnN0b3JlOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnhlbl9wcm90 b2NvbDsKIGV4dGVybiBEZXZpY2VTdGF0ZSAqeGVuX3N5c2RldjsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvaHcveGVuL3hlbl9jb21tb24uaCBiL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaAppbmRl eCBkY2U3NmVlLi4xZTA4Yjk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9u LmgKKysrIGIvaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oCkBAIC0yMCw2ICsyMCw4IEBACiAj aW5jbHVkZSAicWVtdS9xdWV1ZS5oIgogI2luY2x1ZGUgImh3L3hlbi90cmFjZS5oIgogCitleHRl cm4geGNfaW50ZXJmYWNlICp4ZW5feGM7CisKIC8qCiAgKiBXZSBkb24ndCBzdXBwb3J0IFhlbiBw cmlvciB0byA0LjIuMC4KICAqLwpAQCAtNzMsNiArNzUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg KnhlbmZvcmVpZ25tZW1vcnlfbWFwKHhjX2ludGVyZmFjZSAqaCwgdWludDMyX3QgZG9tLAogCiAj ZW5kaWYKIAorZXh0ZXJuIHhlbmZvcmVpZ25tZW1vcnlfaGFuZGxlICp4ZW5fZm1lbTsKKwogdm9p ZCBkZXN0cm95X2h2bV9kb21haW4oYm9vbCByZWJvb3QpOwogCiAvKiBzaHV0ZG93bi9kZXN0cm95 IGN1cnJlbnQgZG9tYWluIGJlY2F1c2Ugb2YgYW4gZXJyb3IgKi8KQEAgLTEwNyw4ICsxMTEsNyBA QCBzdGF0aWMgaW5saW5lIGludCB4ZW5fZ2V0X3ZtcG9ydF9yZWdzX3Bmbih4Y19pbnRlcmZhY2Ug KnhjLCBkb21pZF90IGRvbSwKIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHhlbl9nZXRf ZGVmYXVsdF9pb3JlcV9zZXJ2ZXJfaW5mbyh4Y19pbnRlcmZhY2UgKnhjLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgZG9tLAorc3Rh dGljIGlubGluZSBpbnQgeGVuX2dldF9kZWZhdWx0X2lvcmVxX3NlcnZlcl9pbmZvKGRvbWlkX3Qg ZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHhlbl9wZm5fdCAqaW9yZXFfcGZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqYnVmaW9yZXFfcGZuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dGNobl9wb3J0X3QKQEAg LTExNyw3ICsxMjAsNyBAQCBzdGF0aWMgaW5saW5lIGludCB4ZW5fZ2V0X2RlZmF1bHRfaW9yZXFf c2VydmVyX2luZm8oeGNfaW50ZXJmYWNlICp4YywKICAgICB1bnNpZ25lZCBsb25nIHBhcmFtOwog ICAgIGludCByYzsKIAotICAgIHJjID0geGNfZ2V0X2h2bV9wYXJhbSh4YywgZG9tLCBIVk1fUEFS QU1fSU9SRVFfUEZOLCAmcGFyYW0pOworICAgIHJjID0geGNfZ2V0X2h2bV9wYXJhbSh4ZW5feGMs IGRvbSwgSFZNX1BBUkFNX0lPUkVRX1BGTiwgJnBhcmFtKTsKICAgICBpZiAocmMgPCAwKSB7CiAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGdldCBIVk1fUEFSQU1fSU9SRVFfUEZO XG4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI1LDcgKzEyOCw3IEBAIHN0YXRpYyBpbmxp bmUgaW50IHhlbl9nZXRfZGVmYXVsdF9pb3JlcV9zZXJ2ZXJfaW5mbyh4Y19pbnRlcmZhY2UgKnhj LAogCiAgICAgKmlvcmVxX3BmbiA9IHBhcmFtOwogCi0gICAgcmMgPSB4Y19nZXRfaHZtX3BhcmFt KHhjLCBkb20sIEhWTV9QQVJBTV9CVUZJT1JFUV9QRk4sICZwYXJhbSk7CisgICAgcmMgPSB4Y19n ZXRfaHZtX3BhcmFtKHhlbl94YywgZG9tLCBIVk1fUEFSQU1fQlVGSU9SRVFfUEZOLCAmcGFyYW0p OwogICAgIGlmIChyYyA8IDApIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8g Z2V0IEhWTV9QQVJBTV9CVUZJT1JFUV9QRk5cbiIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0x MzMsNyArMTM2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgeGVuX2dldF9kZWZhdWx0X2lvcmVxX3Nl cnZlcl9pbmZvKHhjX2ludGVyZmFjZSAqeGMsCiAKICAgICAqYnVmaW9yZXFfcGZuID0gcGFyYW07 CiAKLSAgICByYyA9IHhjX2dldF9odm1fcGFyYW0oeGMsIGRvbSwgSFZNX1BBUkFNX0JVRklPUkVR X0VWVENITiwKKyAgICByYyA9IHhjX2dldF9odm1fcGFyYW0oeGVuX3hjLCBkb20sIEhWTV9QQVJB TV9CVUZJT1JFUV9FVlRDSE4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbSk7CiAg ICAgaWYgKHJjIDwgMCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBnZXQg SFZNX1BBUkFNX0JVRklPUkVRX0VWVENITlxuIik7CkBAIC0xNTYsNjMgKzE1OSw2NCBAQCBzdGF0 aWMgaW5saW5lIGludCB4ZW5fZ2V0X2RlZmF1bHRfaW9yZXFfc2VydmVyX2luZm8oeGNfaW50ZXJm YWNlICp4YywKIAogdHlwZWRlZiB1aW50MTZfdCBpb3NlcnZpZF90OwogCi1zdGF0aWMgaW5saW5l IHZvaWQgeGVuX21hcF9tZW1vcnlfc2VjdGlvbih4Y19pbnRlcmZhY2UgKnhjLCBkb21pZF90IGRv bSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fbWFwX21lbW9yeV9zZWN0aW9uKGRvbWlkX3QgZG9t LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBp b3NlcnZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9y eVJlZ2lvblNlY3Rpb24gKnNlY3Rpb24pCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5f dW5tYXBfbWVtb3J5X3NlY3Rpb24oeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBkb20sCitzdGF0 aWMgaW5saW5lIHZvaWQgeGVuX3VubWFwX21lbW9yeV9zZWN0aW9uKGRvbWlkX3QgZG9tLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlvc2Vy dmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlS ZWdpb25TZWN0aW9uICpzZWN0aW9uKQogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgeGVuX21h cF9pb19zZWN0aW9uKHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGlu ZSB2b2lkIHhlbl9tYXBfaW9fc2VjdGlvbihkb21pZF90IGRvbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpb3NlcnZpZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbikKIHsK IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhlbl91bm1hcF9pb19zZWN0aW9uKHhjX2ludGVyZmFj ZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGluZSB2b2lkIHhlbl91bm1hcF9pb19zZWN0 aW9uKGRvbWlkX3QgZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbikKIHsKIH0KIAotc3RhdGljIGlubGlu ZSB2b2lkIHhlbl9tYXBfcGNpZGV2KHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3Rh dGljIGlubGluZSB2b2lkIHhlbl9tYXBfcGNpZGV2KGRvbWlkX3QgZG9tLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUENJRGV2aWNlICpwY2lfZGV2KQogewogfQogCi1zdGF0aWMg aW5saW5lIHZvaWQgeGVuX3VubWFwX3BjaWRldih4Y19pbnRlcmZhY2UgKnhjLCBkb21pZF90IGRv bSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfcGNpZGV2KGRvbWlkX3QgZG9tLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRfdCBpb3NlcnZpZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSURldmljZSAqcGNpX2RldikKIHsK IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhlbl9jcmVhdGVfaW9yZXFfc2VydmVyKHhjX2ludGVy ZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGluZSB2b2lkIHhlbl9jcmVhdGVfaW9y ZXFfc2VydmVyKGRvbWlkX3QgZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlvc2VydmlkX3QgKmlvc2VydmlkKQogewogfQogCi1zdGF0aWMgaW5saW5lIHZv aWQgeGVuX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9t LAorc3RhdGljIGlubGluZSB2b2lkIHhlbl9kZXN0cm95X2lvcmVxX3NlcnZlcihkb21pZF90IGRv bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWRf dCBpb3NlcnZpZCkKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgeGVuX2dldF9pb3JlcV9zZXJ2 ZXJfaW5mbyh4Y19pbnRlcmZhY2UgKnhjLCBkb21pZF90IGRvbSwKK3N0YXRpYyBpbmxpbmUgaW50 IHhlbl9nZXRfaW9yZXFfc2VydmVyX2luZm8oZG9taWRfdCBkb20sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqaW9yZXFfcGZu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3Qg KmJ1ZmlvcmVxX3BmbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXZ0Y2huX3BvcnRfdCAqYnVmaW9yZXFfZXZ0Y2huKQogewotICAgIHJldHVybiB4ZW5fZ2V0 X2RlZmF1bHRfaW9yZXFfc2VydmVyX2luZm8oeGMsIGRvbSwgaW9yZXFfcGZuLCBidWZpb3JlcV9w Zm4sCisgICAgcmV0dXJuIHhlbl9nZXRfZGVmYXVsdF9pb3JlcV9zZXJ2ZXJfaW5mbyhkb20sIGlv cmVxX3BmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 ZmlvcmVxX3BmbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJ1ZmlvcmVxX2V2dGNobik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHhlbl9zZXRfaW9yZXFf c2VydmVyX3N0YXRlKHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGlu ZSBpbnQgeGVuX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoZG9taWRfdCBkb20sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZpZF90IGlvc2VydmlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGUp CiB7CkBAIC0yMjQsNyArMjI4LDcgQEAgc3RhdGljIGlubGluZSBpbnQgeGVuX3NldF9pb3JlcV9z ZXJ2ZXJfc3RhdGUoeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBkb20sCiAKIHN0YXRpYyBib29s IHVzZV9kZWZhdWx0X2lvcmVxX3NlcnZlcjsKIAotc3RhdGljIGlubGluZSB2b2lkIHhlbl9tYXBf bWVtb3J5X3NlY3Rpb24oeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBkb20sCitzdGF0aWMgaW5s aW5lIHZvaWQgeGVuX21hcF9tZW1vcnlfc2VjdGlvbihkb21pZF90IGRvbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb25TZWN0aW9u ICpzZWN0aW9uKQogewpAQCAtMjM3LDExICsyNDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHhl bl9tYXBfbWVtb3J5X3NlY3Rpb24oeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBkb20sCiAgICAg fQogCiAgICAgdHJhY2VfeGVuX21hcF9tbWlvX3JhbmdlKGlvc2VydmlkLCBzdGFydF9hZGRyLCBl bmRfYWRkcik7Ci0gICAgeGNfaHZtX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoeGMsIGRv bSwgaW9zZXJ2aWQsIDEsCisgICAgeGNfaHZtX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIo eGVuX3hjLCBkb20sIGlvc2VydmlkLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk IHhlbl91bm1hcF9tZW1vcnlfc2VjdGlvbih4Y19pbnRlcmZhY2UgKnhjLCBkb21pZF90IGRvbSwK K3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfbWVtb3J5X3NlY3Rpb24oZG9taWRfdCBkb20s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3Qg aW9zZXJ2aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l bW9yeVJlZ2lvblNlY3Rpb24gKnNlY3Rpb24pCiB7CkBAIC0yNTMsMTMgKzI1NywxMiBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgeGVuX3VubWFwX21lbW9yeV9zZWN0aW9uKHhjX2ludGVyZmFjZSAqeGMs IGRvbWlkX3QgZG9tLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0KICAgICB0cmFjZV94ZW5f dW5tYXBfbW1pb19yYW5nZShpb3NlcnZpZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwotICAgIHhj X2h2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcih4YywgZG9tLCBpb3NlcnZpZCwg MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfYWRk ciwgZW5kX2FkZHIpOworICAgIHhjX2h2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZl cih4ZW5feGMsIGRvbSwgaW9zZXJ2aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKIH0KIAotc3RhdGljIGlubGlu ZSB2b2lkIHhlbl9tYXBfaW9fc2VjdGlvbih4Y19pbnRlcmZhY2UgKnhjLCBkb21pZF90IGRvbSwK K3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fbWFwX2lvX3NlY3Rpb24oZG9taWRfdCBkb20sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvblNlY3Rpb24g KnNlY3Rpb24pCiB7CkBAIC0yNzEsMTMgKzI3NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGVu X21hcF9pb19zZWN0aW9uKHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAogICAgICAgICBy ZXR1cm47CiAgICAgfQogCi0KICAgICB0cmFjZV94ZW5fbWFwX3BvcnRpb19yYW5nZShpb3NlcnZp ZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwotICAgIHhjX2h2bV9tYXBfaW9fcmFuZ2VfdG9faW9y ZXFfc2VydmVyKHhjLCBkb20sIGlvc2VydmlkLCAwLAorICAgIHhjX2h2bV9tYXBfaW9fcmFuZ2Vf dG9faW9yZXFfc2VydmVyKHhlbl94YywgZG9tLCBpb3NlcnZpZCwgMCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9hZGRyLCBlbmRfYWRkcik7CiB9CiAKLXN0 YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfaW9fc2VjdGlvbih4Y19pbnRlcmZhY2UgKnhjLCBk b21pZF90IGRvbSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfaW9fc2VjdGlvbihkb21p ZF90IGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NlcnZp ZF90IGlvc2VydmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l bW9yeVJlZ2lvblNlY3Rpb24gKnNlY3Rpb24pCiB7CkBAIC0yOTAsMTEgKzI5MiwxMSBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgeGVuX3VubWFwX2lvX3NlY3Rpb24oeGNfaW50ZXJmYWNlICp4YywgZG9t aWRfdCBkb20sCiAgICAgfQogCiAgICAgdHJhY2VfeGVuX3VubWFwX3BvcnRpb19yYW5nZShpb3Nl cnZpZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwotICAgIHhjX2h2bV91bm1hcF9pb19yYW5nZV9m cm9tX2lvcmVxX3NlcnZlcih4YywgZG9tLCBpb3NlcnZpZCwgMCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfYWRkciwgZW5kX2FkZHIpOworICAgIHhj X2h2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcih4ZW5feGMsIGRvbSwgaW9zZXJ2 aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHN0YXJ0 X2FkZHIsIGVuZF9hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHhlbl9tYXBfcGNpZGV2 KHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGluZSB2b2lkIHhlbl9t YXBfcGNpZGV2KGRvbWlkX3QgZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UENJRGV2aWNlICpwY2lfZGV2KQogewpAQCAtMzA0LDEzICszMDYsMTMgQEAgc3RhdGljIGlubGlu ZSB2b2lkIHhlbl9tYXBfcGNpZGV2KHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAogCiAg ICAgdHJhY2VfeGVuX21hcF9wY2lkZXYoaW9zZXJ2aWQsIHBjaV9idXNfbnVtKHBjaV9kZXYtPmJ1 cyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLCBQ Q0lfRlVOQyhwY2lfZGV2LT5kZXZmbikpOwotICAgIHhjX2h2bV9tYXBfcGNpZGV2X3RvX2lvcmVx X3NlcnZlcih4YywgZG9tLCBpb3NlcnZpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCwgcGNpX2J1c19udW0ocGNpX2Rldi0+YnVzKSwKKyAgICB4Y19odm1fbWFwX3Bj aWRldl90b19pb3JlcV9zZXJ2ZXIoeGVuX3hjLCBkb20sIGlvc2VydmlkLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfYnVzX251bShwY2lfZGV2LT5idXMpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfU0xPVChwY2lfZGV2LT5k ZXZmbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBj aV9kZXYtPmRldmZuKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfcGNpZGV2 KHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3QgZG9tLAorc3RhdGljIGlubGluZSB2b2lkIHhlbl91 bm1hcF9wY2lkZXYoZG9taWRfdCBkb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpb3NlcnZpZF90IGlvc2VydmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUENJRGV2aWNlICpwY2lfZGV2KQogewpAQCAtMzIwLDE2ICszMjIsMTcgQEAgc3RhdGlj IGlubGluZSB2b2lkIHhlbl91bm1hcF9wY2lkZXYoeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBk b20sCiAKICAgICB0cmFjZV94ZW5fdW5tYXBfcGNpZGV2KGlvc2VydmlkLCBwY2lfYnVzX251bShw Y2lfZGV2LT5idXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX1NMT1QocGNpX2Rl di0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbikpOwotICAgIHhjX2h2bV91bm1hcF9w Y2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoeGMsIGRvbSwgaW9zZXJ2aWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwY2lfYnVzX251bShwY2lfZGV2LT5idXMp LAorICAgIHhjX2h2bV91bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoeGVuX3hjLCBkb20s IGlvc2VydmlkLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGNpX2J1c19udW0ocGNpX2Rldi0+YnVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKSk7CiB9CiAK LXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fY3JlYXRlX2lvcmVxX3NlcnZlcih4Y19pbnRlcmZhY2Ug KnhjLCBkb21pZF90IGRvbSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fY3JlYXRlX2lvcmVxX3Nl cnZlcihkb21pZF90IGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpb3NlcnZpZF90ICppb3NlcnZpZCkKIHsKLSAgICBpbnQgcmMgPSB4Y19odm1fY3JlYXRl X2lvcmVxX3NlcnZlcih4YywgZG9tLCBIVk1fSU9SRVFTUlZfQlVGSU9SRVFfQVRPTUlDLAorICAg IGludCByYyA9IHhjX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyKHhlbl94YywgZG9tLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWTV9JT1JFUVNSVl9CVUZJT1JFUV9B VE9NSUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWQp OwogCiAgICAgaWYgKHJjID09IDApIHsKQEAgLTM0Miw3ICszNDUsNyBAQCBzdGF0aWMgaW5saW5l IHZvaWQgeGVuX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBk b20sCiAgICAgdHJhY2VfeGVuX2RlZmF1bHRfaW9yZXFfc2VydmVyKCk7CiB9CiAKLXN0YXRpYyBp bmxpbmUgdm9pZCB4ZW5fZGVzdHJveV9pb3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4YywgZG9t aWRfdCBkb20sCitzdGF0aWMgaW5saW5lIHZvaWQgeGVuX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKGRv bWlkX3QgZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NlcnZpZF90IGlvc2VydmlkKQogewogICAgIGlmICh1c2VfZGVmYXVsdF9pb3JlcV9zZXJ2ZXIp IHsKQEAgLTM1MCwyNyArMzUzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fZGVzdHJveV9p b3JlcV9zZXJ2ZXIoeGNfaW50ZXJmYWNlICp4YywgZG9taWRfdCBkb20sCiAgICAgfQogCiAgICAg dHJhY2VfeGVuX2lvcmVxX3NlcnZlcl9kZXN0cm95KGlvc2VydmlkKTsKLSAgICB4Y19odm1fZGVz dHJveV9pb3JlcV9zZXJ2ZXIoeGMsIGRvbSwgaW9zZXJ2aWQpOworICAgIHhjX2h2bV9kZXN0cm95 X2lvcmVxX3NlcnZlcih4ZW5feGMsIGRvbSwgaW9zZXJ2aWQpOwogfQogCi1zdGF0aWMgaW5saW5l IGludCB4ZW5fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKHhjX2ludGVyZmFjZSAqeGMsIGRvbWlkX3Qg ZG9tLAorc3RhdGljIGlubGluZSBpbnQgeGVuX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyhkb21pZF90 IGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2 aWRfdCBpb3NlcnZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeGVuX3Bmbl90ICppb3JlcV9wZm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHhlbl9wZm5fdCAqYnVmaW9yZXFfcGZuLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90ICpidWZpb3JlcV9ldnRjaG4p CiB7CiAgICAgaWYgKHVzZV9kZWZhdWx0X2lvcmVxX3NlcnZlcikgewotICAgICAgICByZXR1cm4g eGVuX2dldF9kZWZhdWx0X2lvcmVxX3NlcnZlcl9pbmZvKHhjLCBkb20sIGlvcmVxX3BmbiwKKyAg ICAgICAgcmV0dXJuIHhlbl9nZXRfZGVmYXVsdF9pb3JlcV9zZXJ2ZXJfaW5mbyhkb20sIGlvcmVx X3BmbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi dWZpb3JlcV9wZm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVmaW9yZXFfZXZ0Y2huKTsKICAgICB9CiAKLSAgICByZXR1cm4geGNfaHZtX2dldF9p b3JlcV9zZXJ2ZXJfaW5mbyh4YywgZG9tLCBpb3NlcnZpZCwKKyAgICByZXR1cm4geGNfaHZtX2dl dF9pb3JlcV9zZXJ2ZXJfaW5mbyh4ZW5feGMsIGRvbSwgaW9zZXJ2aWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9yZXFfcGZuLCBidWZpb3JlcV9wZm4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW9yZXFfZXZ0Y2huKTsKIH0K IAotc3RhdGljIGlubGluZSBpbnQgeGVuX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoeGNfaW50ZXJm YWNlICp4YywgZG9taWRfdCBkb20sCitzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X2lvcmVxX3Nl cnZlcl9zdGF0ZShkb21pZF90IGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuYWJsZSkKIHsKQEAgLTM3OSw3ICszODIsOCBA QCBzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSh4Y19pbnRlcmZh Y2UgKnhjLCBkb21pZF90IGRvbSwKICAgICB9CiAKICAgICB0cmFjZV94ZW5faW9yZXFfc2VydmVy X3N0YXRlKGlvc2VydmlkLCBlbmFibGUpOwotICAgIHJldHVybiB4Y19odm1fc2V0X2lvcmVxX3Nl cnZlcl9zdGF0ZSh4YywgZG9tLCBpb3NlcnZpZCwgZW5hYmxlKTsKKyAgICByZXR1cm4geGNfaHZt X3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoeGVuX3hjLCBkb20sIGlvc2VydmlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUpOwogfQogCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3hlbi1jb21tb24uYyBiL3hlbi1jb21tb24uYwppbmRleCBmZDJjOTI4Li43MDNl N2E1IDEwMDY0NAotLS0gYS94ZW4tY29tbW9uLmMKKysrIGIveGVuLWNvbW1vbi5jCkBAIC0yNSw2 ICsyNSw5IEBACiAgICAgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3hjX2ludGVyZmFjZSAq eGVuX3hjOworeGVuZm9yZWlnbm1lbW9yeV9oYW5kbGUgKnhlbl9mbWVtOworCiBzdGF0aWMgaW50 IHN0b3JlX2Rldl9pbmZvKGludCBkb21pZCwgQ2hhcmRldiAqY3MsIGNvbnN0IGNoYXIgKnN0cmlu ZykKIHsKICAgICBzdHJ1Y3QgeHNfaGFuZGxlICp4cyA9IE5VTEw7CmRpZmYgLS1naXQgYS94ZW4t aHZtLmMgYi94ZW4taHZtLmMKaW5kZXggNTA0M2JlYi4uZGJiOGM2NiAxMDA2NDQKLS0tIGEveGVu LWh2bS5jCisrKyBiL3hlbi1odm0uYwpAQCAtNDU0LDEwICs0NTQsMTAgQEAgc3RhdGljIHZvaWQg eGVuX3NldF9tZW1vcnkoc3RydWN0IE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5lciwKICAgICAgICAg cmV0dXJuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhZGQpIHsKLSAgICAgICAgICAgIHhl bl9tYXBfbWVtb3J5X3NlY3Rpb24oeGVuX3hjLCB4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwK KyAgICAgICAgICAgIHhlbl9tYXBfbWVtb3J5X3NlY3Rpb24oeGVuX2RvbWlkLCBzdGF0ZS0+aW9z ZXJ2aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24pOwogICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgeGVuX3VubWFwX21lbW9yeV9zZWN0aW9uKHhlbl94 YywgeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsCisgICAgICAgICAgICB4ZW5fdW5tYXBfbWVt b3J5X3NlY3Rpb24oeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjEs NyArNTIxLDcgQEAgc3RhdGljIHZvaWQgeGVuX2lvX2FkZChNZW1vcnlMaXN0ZW5lciAqbGlzdGVu ZXIsCiAKICAgICBtZW1vcnlfcmVnaW9uX3JlZihtcik7CiAKLSAgICB4ZW5fbWFwX2lvX3NlY3Rp b24oeGVuX3hjLCB4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwgc2VjdGlvbik7CisgICAgeGVu X21hcF9pb19zZWN0aW9uKHhlbl9kb21pZCwgc3RhdGUtPmlvc2VydmlkLCBzZWN0aW9uKTsKIH0K IAogc3RhdGljIHZvaWQgeGVuX2lvX2RlbChNZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIsCkBAIC01 MzQsNyArNTM0LDcgQEAgc3RhdGljIHZvaWQgeGVuX2lvX2RlbChNZW1vcnlMaXN0ZW5lciAqbGlz dGVuZXIsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB4ZW5fdW5tYXBfaW9fc2VjdGlv bih4ZW5feGMsIHhlbl9kb21pZCwgc3RhdGUtPmlvc2VydmlkLCBzZWN0aW9uKTsKKyAgICB4ZW5f dW5tYXBfaW9fc2VjdGlvbih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwgc2VjdGlvbik7CiAK ICAgICBtZW1vcnlfcmVnaW9uX3VucmVmKG1yKTsKIH0KQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0 aWMgdm9pZCB4ZW5fZGV2aWNlX3JlYWxpemUoRGV2aWNlTGlzdGVuZXIgKmxpc3RlbmVyLAogICAg IGlmIChvYmplY3RfZHluYW1pY19jYXN0KE9CSkVDVChkZXYpLCBUWVBFX1BDSV9ERVZJQ0UpKSB7 CiAgICAgICAgIFBDSURldmljZSAqcGNpX2RldiA9IFBDSV9ERVZJQ0UoZGV2KTsKIAotICAgICAg ICB4ZW5fbWFwX3BjaWRldih4ZW5feGMsIHhlbl9kb21pZCwgc3RhdGUtPmlvc2VydmlkLCBwY2lf ZGV2KTsKKyAgICAgICAgeGVuX21hcF9wY2lkZXYoeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQs IHBjaV9kZXYpOwogICAgIH0KIH0KIApAQCAtNTU5LDcgKzU1OSw3IEBAIHN0YXRpYyB2b2lkIHhl bl9kZXZpY2VfdW5yZWFsaXplKERldmljZUxpc3RlbmVyICpsaXN0ZW5lciwKICAgICBpZiAob2Jq ZWN0X2R5bmFtaWNfY2FzdChPQkpFQ1QoZGV2KSwgVFlQRV9QQ0lfREVWSUNFKSkgewogICAgICAg ICBQQ0lEZXZpY2UgKnBjaV9kZXYgPSBQQ0lfREVWSUNFKGRldik7CiAKLSAgICAgICAgeGVuX3Vu bWFwX3BjaWRldih4ZW5feGMsIHhlbl9kb21pZCwgc3RhdGUtPmlvc2VydmlkLCBwY2lfZGV2KTsK KyAgICAgICAgeGVuX3VubWFwX3BjaWRldih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwgcGNp X2Rldik7CiAgICAgfQogfQogCkBAIC0xMTM5LDcgKzExMzksNyBAQCBzdGF0aWMgdm9pZCB4ZW5f aHZtX2NoYW5nZV9zdGF0ZV9oYW5kbGVyKHZvaWQgKm9wYXF1ZSwgaW50IHJ1bm5pbmcsCiAgICAg ICAgIHhlbl9tYWluX2xvb3BfcHJlcGFyZShzdGF0ZSk7CiAgICAgfQogCi0gICAgeGVuX3NldF9p b3JlcV9zZXJ2ZXJfc3RhdGUoeGVuX3hjLCB4ZW5fZG9taWQsCisgICAgeGVuX3NldF9pb3JlcV9z ZXJ2ZXJfc3RhdGUoeGVuX2RvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRlLT5pb3NlcnZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnN0YXRlID09 IFJVTl9TVEFURV9SVU5OSU5HKSk7CiB9CkBAIC0xMjI3LDcgKzEyMjcsNyBAQCB2b2lkIHhlbl9o dm1faW5pdChQQ01hY2hpbmVTdGF0ZSAqcGNtcywgTWVtb3J5UmVnaW9uICoqcmFtX21lbW9yeSkK ICAgICAgICAgZ290byBlcnI7CiAgICAgfQogCi0gICAgeGVuX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIo eGVuX3hjLCB4ZW5fZG9taWQsICZzdGF0ZS0+aW9zZXJ2aWQpOworICAgIHhlbl9jcmVhdGVfaW9y ZXFfc2VydmVyKHhlbl9kb21pZCwgJnN0YXRlLT5pb3NlcnZpZCk7CiAKICAgICBzdGF0ZS0+ZXhp dC5ub3RpZnkgPSB4ZW5fZXhpdF9ub3RpZmllcjsKICAgICBxZW11X2FkZF9leGl0X25vdGlmaWVy KCZzdGF0ZS0+ZXhpdCk7CkBAIC0xMjM4LDcgKzEyMzgsNyBAQCB2b2lkIHhlbl9odm1faW5pdChQ Q01hY2hpbmVTdGF0ZSAqcGNtcywgTWVtb3J5UmVnaW9uICoqcmFtX21lbW9yeSkKICAgICBzdGF0 ZS0+d2FrZXVwLm5vdGlmeSA9IHhlbl93YWtldXBfbm90aWZpZXI7CiAgICAgcWVtdV9yZWdpc3Rl cl93YWtldXBfbm90aWZpZXIoJnN0YXRlLT53YWtldXApOwogCi0gICAgcmMgPSB4ZW5fZ2V0X2lv cmVxX3NlcnZlcl9pbmZvKHhlbl94YywgeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsCisgICAg cmMgPSB4ZW5fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKHhlbl9kb21pZCwgc3RhdGUtPmlvc2Vydmlk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW9yZXFfcGZuLCAmYnVmaW9y ZXFfcGZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmaW9yZXFfZXZ0 Y2huKTsKICAgICBpZiAocmMgPCAwKSB7CkBAIC0xMjg4LDcgKzEyODgsNyBAQCB2b2lkIHhlbl9o dm1faW5pdChQQ01hY2hpbmVTdGF0ZSAqcGNtcywgTWVtb3J5UmVnaW9uICoqcmFtX21lbW9yeSkK ICAgICAvKiBOb3RlOiBjcHVzIGlzIGVtcHR5IGF0IHRoaXMgcG9pbnQgaW4gaW5pdCAqLwogICAg IHN0YXRlLT5jcHVfYnlfdmNwdV9pZCA9IGdfbWFsbG9jMChtYXhfY3B1cyAqIHNpemVvZihDUFVT dGF0ZSAqKSk7CiAKLSAgICByYyA9IHhlbl9zZXRfaW9yZXFfc2VydmVyX3N0YXRlKHhlbl94Yywg eGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsIHRydWUpOworICAgIHJjID0geGVuX3NldF9pb3Jl cV9zZXJ2ZXJfc3RhdGUoeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsIHRydWUpOwogICAgIGlm IChyYyA8IDApIHsKICAgICAgICAgZXJyb3JfcmVwb3J0KCJmYWlsZWQgdG8gZW5hYmxlIGlvcmVx IHNlcnZlciBpbmZvOiBlcnJvciAlZCBoYW5kbGU9JXAiLAogICAgICAgICAgICAgICAgICAgICAg ZXJybm8sIHhlbl94Yyk7Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=