Received: by 2002:a05:7412:f589:b0:e2:908c:2ebd with SMTP id eh9csp145031rdb; Tue, 31 Oct 2023 03:33:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHU5pG0iX+jwNc/SeuZeRQtewIasTuiGl3kN+JWS9LGbANsZJrBV+UStU/5vrwAWdFcGJzW X-Received: by 2002:a05:6a20:3a8f:b0:17d:d70f:a2c4 with SMTP id d15-20020a056a203a8f00b0017dd70fa2c4mr9482326pzh.26.1698748432234; Tue, 31 Oct 2023 03:33:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698748432; cv=none; d=google.com; s=arc-20160816; b=lsqPaT/l5GtPKdn/TxlVhG+zoJXpdq6pKEG5Q+EJ3uaWY2PYX6P1RFJZ8AuEktpP1R AXVmZEsJh+sojf8nFL4gUbtyc4OZA2pQ3RctjkKaEIzW+q5xmSIi9LP9NvpSkVNvcjb0 IKuafdoV+1XZx/MXR4NJXdsO09DnZAU8wes7IhBNn+0iPjzYjuTg2sLLfc0MEHSzn3BO rPKTJ00yPf6VlZNa4SL07uvVTAm4PjpPvPuJASoJbZdtsrox+1HHb4CIiUfstDZPzeRO Gow2+1vedYX7yqpakwYwFIfI6l0QDkP8/qdPSUil/WHiL4mNU45TggTo4T2EbTS+3aPA kyrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:organization:references:in-reply-to:date :cc:to:from:subject:message-id:dkim-signature; bh=MhLWMCx4p7MmWBrbU5uTzk9uCvi5zJ2PTNnxXGOG3oQ=; fh=htvIroZrbKeU2x4AOko0NW3x9xa19Yggb7QfVOG/ARs=; b=Bk0poser7fqn6POFx0wX2U35ZLq70Xe1FaIWZPSG6Wlv9/mib8i0ZcSoGp0jUpUyPp T4iIIwoJg+sjuk8vGNRTyk6gXVZQMjDVjkuN3ND8+9U3AU871I8eCg5Kc0RucUjy2rTz yqh5fdf31n+hOKV2zUOaL/tkKEv7G8sf+5lD7yi3YgnLRE5PFgC/sIY3RSkIDrztcdMw WHesIlBfnNsHoEKp1sNjlJVmQ51sglz75AC3IN+EvH8tCNqcyt6va/3XuD4FpCLzM2E1 6/Wt79ZOAvR3RdwVMd8yfMCAzDPmmeMz5y0B8iG1yQKd5P80QuW5bJe8vK0j9Dg6cYcu GGMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fLW8d7pe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id l66-20020a633e45000000b0055fd1bfb109si833354pga.679.2023.10.31.03.33.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Oct 2023 03:33:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fLW8d7pe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 71C2380301CE; Tue, 31 Oct 2023 03:33:45 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343960AbjJaKdA (ORCPT + 99 others); Tue, 31 Oct 2023 06:33:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343963AbjJaKc6 (ORCPT ); Tue, 31 Oct 2023 06:32:58 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9EF7CFD for ; Tue, 31 Oct 2023 03:32:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698748371; x=1730284371; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=MhLWMCx4p7MmWBrbU5uTzk9uCvi5zJ2PTNnxXGOG3oQ=; b=fLW8d7peykrMFQ2kyvtbxfsGhP0X3jmDkVCYXVTkDhGaSGmoDgstBQDr DWMybSXVWG46yrjnOFcyVkRCsjYDMg5AL4cN3FRPEOMi5/Dn+ZXfF0j7v BW3JJe0Xbs6gUrs55N0ebL2TUB3zbOWsE27XP0buSlnowIjkfsUzbS1nl Rt59wbdC4bvm8TjZz7KYsWNlvElj6SO8vO4zSClzOdKZKuhSSwHx5fbpT WTY1LZkaUjbO/bQTx/ysLM6oiJ0yRe+a/kUBNtBtkVm2MoSe9jKSGHc82 5bdWMVtlhzXkU80DFN+jruKs2fqD5BQXZO34VQq1q3XBAQ+6Nk6RDw4H3 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10879"; a="373311263" X-IronPort-AV: E=Sophos;i="6.03,265,1694761200"; d="scan'208";a="373311263" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2023 03:32:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.03,265,1694761200"; d="scan'208";a="1758397" Received: from olindum-mobl1.ger.corp.intel.com (HELO [10.249.254.59]) ([10.249.254.59]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Oct 2023 03:32:48 -0700 Message-ID: Subject: Re: [PATCH drm-misc-next v7 4/7] drm/gpuvm: add an abstraction for a VM / BO combination From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Danilo Krummrich , airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, sarah.walker@imgtec.com, donald.robson@imgtec.com, boris.brezillon@collabora.com, christian.koenig@amd.com, faith@gfxstrand.net Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org Date: Tue, 31 Oct 2023 11:32:45 +0100 In-Reply-To: <20231023201659.25332-5-dakr@redhat.com> References: <20231023201659.25332-1-dakr@redhat.com> <20231023201659.25332-5-dakr@redhat.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 31 Oct 2023 03:33:45 -0700 (PDT) T24gTW9uLCAyMDIzLTEwLTIzIGF0IDIyOjE2ICswMjAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl Ogo+IEFkZCBhbiBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuIHRoZSBkcm1fZ3B1dmEgbWFwcGlu Z3Mgb2YgYQo+IHBhcnRpY3VsYXIKPiBkcm1fZ2VtX29iamVjdCBhbmQgdGhpcyBHRU0gb2JqZWN0 IGl0c2VsZi4gVGhlIGFic3RyYWN0aW9uIHJlcHJlc2VudHMKPiBhCj4gY29tYmluYXRpb24gb2Yg YSBkcm1fZ2VtX29iamVjdCBhbmQgZHJtX2dwdXZtLiBUaGUgZHJtX2dlbV9vYmplY3QKPiBob2xk cwo+IGEgbGlzdCBvZiBkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcyAodGhlIHN0cnVjdHVyZSByZXBy ZXNlbnRpbmcgdGhpcwo+IGFic3RyYWN0aW9uKSwgd2hpbGUgZWFjaCBkcm1fZ3B1dm1fYm8gY29u dGFpbnMgbGlzdCBvZiBtYXBwaW5ncyBvZgo+IHRoaXMKPiBHRU0gb2JqZWN0Lgo+IAo+IFRoaXMg aGFzIG11bHRpcGxlIGFkdmFudGFnZXM6Cj4gCj4gMSkgV2UgY2FuIHVzZSB0aGUgZHJtX2dwdXZt X2JvIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8gdmFyaW91cwo+IGxpc3RzCj4gwqDCoCBvZiB0 aGUgZHJtX2dwdXZtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdHJhY2tpbmcgZXh0ZXJuYWwgYW5kIGV2 aWN0ZWQKPiDCoMKgIG9iamVjdHMgcGVyIFZNLCB3aGljaCBpcyBpbnRyb2R1Y2VkIGluIHN1YnNl cXVlbnQgcGF0Y2hlcy4KPiAKPiAyKSBGaW5kaW5nIG1hcHBpbmdzIG9mIGEgY2VydGFpbiBkcm1f Z2VtX29iamVjdCBtYXBwZWQgaW4gYSBjZXJ0YWluCj4gwqDCoCBkcm1fZ3B1dm0gYmVjb21lcyBt dWNoIGNoZWFwZXIuCj4gCj4gMykgRHJpdmVycyBjYW4gZGVyaXZlIGFuZCBleHRlbmQgdGhlIHN0 cnVjdHVyZSB0byBlYXNpbHkgcmVwcmVzZW50Cj4gwqDCoCBkcml2ZXIgc3BlY2lmaWMgc3RhdGVz IG9mIGEgQk8gZm9yIGEgY2VydGFpbiBHUFVWTS4KPiAKPiBUaGUgaWRlYSBvZiB0aGlzIGFic3Ry YWN0aW9uIHdhcyB0YWtlbiBmcm9tIGFtZGdwdSwgaGVuY2UgdGhlIGNyZWRpdAo+IGZvcgo+IHRo aXMgaWRlYSBnb2VzIHRvIHRoZSBkZXZlbG9wZXJzIG9mIGFtZGdwdS4KPiAKPiBDYzogQ2hyaXN0 aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERh bmlsbyBLcnVtbXJpY2ggPGRha3JAcmVkaGF0LmNvbT4KPiAtLS0KPiDCoGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZ3B1dm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAzMzUgKysrKysrKysrKysrKysr KysrKysrLS0KPiAtLQo+IMKgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMg fMKgIDY0ICsrKy0tCj4gwqBpbmNsdWRlL2RybS9kcm1fZ2VtLmjCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoCAzMiArLS0KPiDCoGluY2x1ZGUvZHJtL2RybV9ncHV2bS5owqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTg4ICsrKysrKysrKysrKystCj4gwqA0IGZp bGVzIGNoYW5nZWQsIDUzMyBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2dwdXZtLmMKPiBpbmRleCBjMDMzMzI4ODM0MzIuLjdmNGY1OTE5Zjg0YyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2dwdXZtLmMKPiBAQCAtNzAsNiArNzAsMTggQEAKPiDCoCAqICZkcm1fZ2VtX29iamVjdCwg c3VjaCBhcyB0aGUgJmRybV9nZW1fb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvb3QKPiBwYWdlIHRh YmxlLAo+IMKgICogYnV0IGl0IGNhbiBhbHNvIGJlIGEgJ2R1bW15JyBvYmplY3QsIHdoaWNoIGNh biBiZSBhbGxvY2F0ZWQgd2l0aAo+IMKgICogZHJtX2dwdXZtX3Jlc3Zfb2JqZWN0X2FsbG9jKCku Cj4gKyAqCj4gKyAqIEluIG9yZGVyIHRvIGNvbm5lY3QgYSBzdHJ1Y3QgZHJtX2dwdXZhIGl0cyBi YWNraW5nCj4gJmRybV9nZW1fb2JqZWN0IGVhY2gKPiArICogJmRybV9nZW1fb2JqZWN0IG1haW50 YWlucyBhIGxpc3Qgb2YgJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmVzLCBhbmQKPiBlYWNoCj4gKyAq ICZkcm1fZ3B1dm1fYm8gY29udGFpbnMgYSBsaXN0IG9mICZkcm1fZ3B1dmEgc3RydWN0dXJlcy4K PiArICoKPiArICogQSAmZHJtX2dwdXZtX2JvIGlzIGFuIGFic3RyYWN0aW9uIHRoYXQgcmVwcmVz ZW50cyBhIGNvbWJpbmF0aW9uCj4gb2YgYQo+ICsgKiAmZHJtX2dwdXZtIGFuZCBhICZkcm1fZ2Vt X29iamVjdC4gRXZlcnkgc3VjaCBjb21iaW5hdGlvbiBzaG91bGQKPiBiZSB1bmlxdWUuCj4gKyAq IFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgQVBJIHRocm91Z2ggZHJtX2dwdXZtX2JvX29idGFpbigp IGFuZAo+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKCkgd2hpY2ggZmlyc3QgbG9v ayBpbnRvIHRoZQo+IGNvcnJlc3BvbmRpbmcKPiArICogJmRybV9nZW1fb2JqZWN0IGxpc3Qgb2Yg JmRybV9ncHV2bV9ib3MgZm9yIGFuIGV4aXN0aW5nIGluc3RhbmNlCj4gb2YgdGhpcwo+ICsgKiBw YXJ0aWN1bGFyIGNvbWJpbmF0aW9uLiBJZiBub3QgZXhpc3RlbnQgYSBuZXcgaW5zdGFuY2UgaXMg Y3JlYXRlZAo+IGFuZCBsaW5rZWQKPiArICogdG8gdGhlICZkcm1fZ2VtX29iamVjdC4KPiDCoCAq Lwo+IMKgCj4gwqAvKioKPiBAQCAtMzk1LDIxICs0MDcsMjggQEAKPiDCoC8qKgo+IMKgICogRE9D OiBMb2NraW5nCj4gwqAgKgo+IC0gKiBHZW5lcmFsbHksIHRoZSBHUFUgVkEgbWFuYWdlciBkb2Vz IG5vdCB0YWtlIGNhcmUgb2YgbG9ja2luZwo+IGl0c2VsZiwgaXQgaXMKPiAtICogdGhlIGRyaXZl cnMgcmVzcG9uc2liaWxpdHkgdG8gdGFrZSBjYXJlIGFib3V0IGxvY2tpbmcuIERyaXZlcnMKPiBt aWdodCB3YW50IHRvCj4gLSAqIHByb3RlY3QgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOiBpbnNl cnRpbmcsIHJlbW92aW5nIGFuZAo+IGl0ZXJhdGluZwo+IC0gKiAmZHJtX2dwdXZhIG9iamVjdHMg YXMgd2VsbCBhcyBnZW5lcmF0aW5nIGFsbCBraW5kcyBvZiBvcGVyYXRpb25zLAo+IHN1Y2ggYXMK PiAtICogc3BsaXQgLyBtZXJnZSBvciBwcmVmZXRjaC4KPiAtICoKPiAtICogVGhlIEdQVSBWQSBt YW5hZ2VyIGFsc28gZG9lcyBub3QgdGFrZSBjYXJlIG9mIHRoZSBsb2NraW5nIG9mIHRoZQo+IGJh Y2tpbmcKPiAtICogJmRybV9nZW1fb2JqZWN0IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGJ5IGl0c2Vs ZjsgZHJpdmVycyBhcmUKPiByZXNwb25zaWJsZSB0bwo+IC0gKiBlbmZvcmNlIG11dHVhbCBleGNs dXNpb24gdXNpbmcgZWl0aGVyIHRoZSBHRU1zIGRtYV9yZXN2IGxvY2sgb3IKPiBhbHRlcm5hdGl2 ZWx5Cj4gLSAqIGEgZHJpdmVyIHNwZWNpZmljIGV4dGVybmFsIGxvY2suIEZvciB0aGUgbGF0dGVy IHNlZSBhbHNvCj4gLSAqIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiAtICoKPiAtICogSG93 ZXZlciwgdGhlIEdQVSBWQSBtYW5hZ2VyIGNvbnRhaW5zIGxvY2tkZXAgY2hlY2tzIHRvIGVuc3Vy ZQo+IGNhbGxlcnMgb2YgaXRzCj4gLSAqIEFQSSBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGxvY2sg d2hlbmV2ZXIgdGhlICZkcm1fZ2VtX29iamVjdHMgR1BVCj4gVkEgbGlzdCBpcwo+IC0gKiBhY2Nl c3NlZCBieSBmdW5jdGlvbnMgc3VjaCBhcyBkcm1fZ3B1dmFfbGluaygpIG9yCj4gZHJtX2dwdXZh X3VubGluaygpLgo+ICsgKiBJbiB0ZXJtcyBvZiBtYW5hZ2luZyAmZHJtX2dwdXZhIGVudHJpZXMg RFJNIEdQVVZNIGRvZXMgbm90IHRha2UKPiBjYXJlIG9mCj4gKyAqIGxvY2tpbmcgaXRzZWxmLCBp dCBpcyB0aGUgZHJpdmVycyByZXNwb25zaWJpbGl0eSB0byB0YWtlIGNhcmUKPiBhYm91dCBsb2Nr aW5nLgo+ICsgKiBEcml2ZXJzIG1pZ2h0IHdhbnQgdG8gcHJvdGVjdCB0aGUgZm9sbG93aW5nIG9w ZXJhdGlvbnM6Cj4gaW5zZXJ0aW5nLCByZW1vdmluZwo+ICsgKiBhbmQgaXRlcmF0aW5nICZkcm1f Z3B1dmEgb2JqZWN0cyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgYWxsIGtpbmRzCj4gb2YKPiArICog b3BlcmF0aW9ucywgc3VjaCBhcyBzcGxpdCAvIG1lcmdlIG9yIHByZWZldGNoLgo+ICsgKgo+ICsg KiBEUk0gR1BVVk0gYWxzbyBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgdGhlIGxvY2tpbmcgb2YgdGhl IGJhY2tpbmcKPiArICogJmRybV9nZW1fb2JqZWN0IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGFuZCAm ZHJtX2dwdXZtX2JvCj4gYWJzdHJhY3Rpb25zIGJ5Cj4gKyAqIGl0c2VsZjsgZHJpdmVycyBhcmUg cmVzcG9uc2libGUgdG8gZW5mb3JjZSBtdXR1YWwgZXhjbHVzaW9uIHVzaW5nCj4gZWl0aGVyIHRo ZQo+ICsgKiBHRU1zIGRtYV9yZXN2IGxvY2sgb3IgYWx0ZXJuYXRpdmVseSBhIGRyaXZlciBzcGVj aWZpYyBleHRlcm5hbAo+IGxvY2suIEZvciB0aGUKPiArICogbGF0dGVyIHNlZSBhbHNvIGRybV9n ZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiArICoKPiArICogSG93ZXZlciwgRFJNIEdQVVZNIGNvbnRh aW5zIGxvY2tkZXAgY2hlY2tzIHRvIGVuc3VyZSBjYWxsZXJzIG9mCj4gaXRzIEFQSSBob2xkCj4g KyAqIHRoZSBjb3JyZXNwb25kaW5nIGxvY2sgd2hlbmV2ZXIgdGhlICZkcm1fZ2VtX29iamVjdHMg R1BVIFZBIGxpc3QKPiBpcyBhY2Nlc3NlZAo+ICsgKiBieSBmdW5jdGlvbnMgc3VjaCBhcyBkcm1f Z3B1dmFfbGluaygpIG9yIGRybV9ncHV2YV91bmxpbmsoKSwgYnV0Cj4gYWxzbwo+ICsgKiBkcm1f Z3B1dm1fYm9fb2J0YWluKCkgYW5kIGRybV9ncHV2bV9ib19wdXQoKS4KPiArICoKPiArICogVGhl IGxhdHRlciBpcyByZXF1aXJlZCBzaW5jZSBvbiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2Yg YQo+ICZkcm1fZ3B1dm1fYm8KPiArICogdGhlICZkcm1fZ3B1dm1fYm8gaXMgYXR0YWNoZWQgLyBy ZW1vdmVkIGZyb20gdGhlICZkcm1fZ2VtX29iamVjdHMKPiBncHV2YSBsaXN0Lgo+ICsgKiBTdWJz ZXF1ZW50IGNhbGxzIHRvIGRybV9ncHV2bV9ib19vYnRhaW4oKSBmb3IgdGhlIHNhbWUgJmRybV9n cHV2bQo+IGFuZAo+ICsgKiAmZHJtX2dlbV9vYmplY3QgbXVzdCBiZSBhYmxlIHRvIG9ic2VydmUg cHJldmlvdXMgY3JlYXRpb25zIGFuZAo+IGRlc3RydWN0aW9ucwo+ICsgKiBvZiAmZHJtX2dwdXZt X2JvcyBpbiBvcmRlciB0byBrZWVwIGluc3RhbmNlcyB1bmlxdWUuCj4gwqAgKi8KPiDCoAo+IMKg LyoqCj4gQEAgLTQzOSw2ICs0NTgsNyBAQAo+IMKgICrCoMKgwqDCoMKgewo+IMKgICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHM7Cj4gwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3AKPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+IMKgICoKPiDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfbG9ja192YV9zcGFjZSgpOwo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wcyA9IGRybV9ncHV2bV9zbV9tYXBfb3BzX2Ny ZWF0ZShncHV2bSwgYWRkciwgcmFuZ2UsCj4gQEAgLTQ0Niw2ICs0NjYsMTAgQEAKPiDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKG9wcykpCj4gwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKG9wcyk7Cj4gwqAg Kgo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1fYm8gPSBkcm1fZ3B1dm1fYm9fb2J0 YWluKGdwdXZtLCBvYmopOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VS Uih2bV9ibykpCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIFBUUl9FUlIodm1fYm8pOwo+ICsgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhOwo+IMKgICoK PiBAQCAtNDU4LDcgKzQ4Miw3IEBACj4gwqAgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3ZtX21hcCgpOwo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2dwdXZhX21hcChncHV2bSwgdmEsICZvcC0+bWFwKTsKPiAtICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xp bmsodmEpOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayh2YSwgdm1fYm8pOwo+IMKgICoKPiDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNl IERSTV9HUFVWQV9PUF9SRU1BUDogewo+IEBAIC00ODUsMTEgKzUwOSwxMSBAQAo+IMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJp dmVyX3ZtX3JlbWFwKCk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfcmVtYXAocHJldiwgbmV4dCwgJm9wLQo+ ID5yZW1hcCk7Cj4gwqAgKgo+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZhKTsKPiDCoCAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChw cmV2KQo+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldik7Cj4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhwcmV2LCB2YS0KPiA+dm1fYm8pOwo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKG5leHQpCj4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhuZXh0KTsKPiAr ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKG5leHQsIHZhLQo+ID52bV9ibyk7Cj4g KyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV91bmxpbmsodmEpOwo+IMKgICoKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gQEAgLTUwNSw2ICs1Mjks NyBAQAo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKyAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsKPiDCoCAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfdW5sb2NrX3ZhX3NwYWNlKCk7Cj4gwqAgKgo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+IEBAIC01MTQsNiArNTM5LDcg QEAKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqBzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgewo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtOwo+ICsgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gwqAg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV3X3ZhOwo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnByZXZfdmE7Cj4g wqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV4dF92YTsK PiBAQCAtNTM0LDYgKzU2MCw3IEBACj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdTY0Cj4gb2Zmc2V0KQo+IMKgICrCoMKgwqDCoMKgewo+IMKgICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcml2ZXJfY29udGV4dCBjdHg7Cj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiDCoCAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzOwo+IMKgICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wOwo+IMKgICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+IEBAIC01NDMsMTYgKzU3MCwyMyBAQAo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5uZXdfdmEgPSBremFsbG9jKHNpemVvZigq Y3R4Lm5ld192YSksCj4gR0ZQX0tFUk5FTCk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY3R4LnByZXZfdmEgPSBremFsbG9jKHNpemVvZigqY3R4LnByZXZfdmEpLAo+IEdGUF9LRVJO RUwpOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5uZXh0X3ZhID0ga3phbGxv YyhzaXplb2YoKmN0eC5uZXh0X3ZhKSwKPiBHRlBfS0VSTkVMKTsKPiAtICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghY3R4Lm5ld192YSB8fCAhY3R4LnByZXZfdmEgfHwgIWN0eC5uZXh0 X3ZhKSB7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgudm1fYm8gPSBkcm1fZ3B1 dm1fYm9fY3JlYXRlKGdwdXZtLCBvYmopOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFjdHgubmV3X3ZhIHx8ICFjdHgucHJldl92YSB8fCAhY3R4Lm5leHRfdmEgfHwKPiAhdm1f Ym8pIHsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gLUVOT01FTTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBvdXQ7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgICoKPiAr ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8vIFR5cGljYWxseSBwcm90ZWN0ZWQgd2l0aCBh IGRyaXZlciBzcGVjaWZpYyBHRU0KPiBncHV2YSBsb2NrCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAvLyB1c2VkIGluIHRoZSBmZW5jZSBzaWduYWxpbmcgcGF0aCBmb3IKPiBkcm1fZ3B1 dmFfbGluaygpIGFuZAo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gZHJtX2dwdXZh X3VubGluaygpLCBoZW5jZSBwcmUtYWxsb2NhdGUuCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjdHgudm1fYm8gPSBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKGN0eC52bV9ibyk7 Cj4gKyAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tfdmFfc3Bh Y2UoKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZ3B1dm1fc21f bWFwKGdwdXZtLCAmY3R4LCBhZGRyLCByYW5nZSwgb2JqLAo+IG9mZnNldCk7Cj4gwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3VubG9ja192YV9zcGFjZSgpOwo+IMKgICoKPiDC oCAqwqDCoMKgwqDCoG91dDoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 bV9ib19wdXQoY3R4LnZtX2JvKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJl ZShjdHgubmV3X3ZhKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShjdHgu cHJldl92YSk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2ZyZWUoY3R4Lm5leHRf dmEpOwo+IEBAIC01NjUsNyArNTk5LDcgQEAKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2dwdXZhX21hcChjdHgtPnZtLCBjdHgtPm5ld192YSwgJm9wLT5tYXApOwo+ IMKgICoKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0eC0+ bmV3X3ZhKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0 eC0+bmV3X3ZhLCBjdHgtPnZtX2JvKTsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLy8gcHJldmVudCB0aGUgbmV3IEdQVVZBIGZyb20gYmVpbmcgZnJlZWQgaW4KPiDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBkcml2ZXJfbWFwcGluZ19jcmVhdGUoKQo+IEBA IC01NzcsMjIgKzYxMSwyMyBAQAo+IMKgICrCoMKgwqDCoMKgaW50IGRyaXZlcl9ncHV2YV9yZW1h cChzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcCwgdm9pZCAqX19jdHgpCj4gwqAgKsKgwqDCoMKgwqB7 Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9jb250ZXh0ICpj dHggPSBfX2N0eDsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1 dmEgKnZhID0gb3AtPnJlbWFwLnVubWFwLT52YTsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbWFwKGN0eC0+cHJldl92YSwgY3R4LT5uZXh0X3ZhLCAm b3AtCj4gPnJlbWFwKTsKPiDCoCAqCj4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dmFfdW5saW5rKG9wLT5yZW1hcC51bm1hcC0+dmEpOwo+IC0gKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKga2ZyZWUob3AtPnJlbWFwLnVubWFwLT52YSk7Cj4gLSAqCj4gwqAgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5yZW1hcC5wcmV2KSB7Cj4gLSAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoY3R4LT5wcmV2X3Zh KTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1 dmFfbGluayhjdHgtPnByZXZfdmEsIHZhLT52bV9ibyk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC0+cHJldl92YSA9IE5VTEw7Cj4gwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgICoKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAob3AtPnJlbWFwLm5leHQpIHsKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhjdHgtPm5leHRfdmEpOwo+ICsgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0eC0+ bmV4dF92YSwgdmEtPnZtX2JvKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY3R4LT5uZXh0X3ZhID0gTlVMTDsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gwqAgKgo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZh X3VubGluayh2YSk7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZSh2YSk7Cj4g KyAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqAgKsKgwqDC oMKgwqB9Cj4gwqAgKgo+IEBAIC03NzQsNiArODA5LDE5NCBAQCBkcm1fZ3B1dm1fZGVzdHJveShz dHJ1Y3QgZHJtX2dwdXZtICpncHV2bSkKPiDCoH0KPiDCoEVYUE9SVF9TWU1CT0xfR1BMKGRybV9n cHV2bV9kZXN0cm95KTsKPiDCoAo+ICsvKioKPiArICogZHJtX2dwdXZtX2JvX2NyZWF0ZSgpIC0g Y3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHN0cnVjdAo+IGRybV9ncHV2bV9ibwo+ICsgKiBAZ3B1 dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiArICogQG9iajogVGhl ICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiArICoKPiArICog SWYgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSAmZHJtX2dw dXZtX29wcwo+ICsgKiB2bV9ib19hbGxvYygpIGNhbGxiYWNrIHRvIGFsbG9jYXRlLgo+ICsgKgo+ ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8gb24gc3VjY2Vzcywg TlVMTCBvbgoKU3RpbGwgbmVlZHMgcy9SZXR1cm5zOi9SZXR1cm46L2cKCj4gZmFpbHVyZQo+ICsg Ki8KPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2RybV9ncHV2bV9ib19jcmVhdGUoc3RydWN0 IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0 IHN0cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob3Bz ICYmIG9wcy0+dm1fYm9fYWxsb2MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZt X2JvID0gb3BzLT52bV9ib19hbGxvYygpOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1fYm8gPSBremFsbG9jKHNpemVvZigqdm1fYm8pLCBH RlBfS0VSTkVMKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KCF2bV9ibykpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ICsKPiArwqDCoMKg wqDCoMKgwqB2bV9iby0+dm0gPSBncHV2bTsKPiArwqDCoMKgwqDCoMKgwqB2bV9iby0+b2JqID0g b2JqOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fb2JqZWN0X2dldChvYmopOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBrcmVmX2luaXQoJnZtX2JvLT5rcmVmKTsKPiArwqDCoMKgwqDCoMKgwqBJTklU X0xJU1RfSEVBRCgmdm1fYm8tPmxpc3QuZ3B1dmEpOwo+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElT VF9IRUFEKCZ2bV9iby0+bGlzdC5lbnRyeS5nZW0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gdm1fYm87Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX2NyZWF0ZSk7 Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtkcm1fZ3B1dm1fYm9fZGVzdHJveShzdHJ1Y3Qga3JlZiAq a3JlZikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvID0g Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdAo+IGRybV9ncHV2bV9ibywKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtyZWYpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dm0gKmdwdXZtID0gdm1fYm8tPnZtOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0 cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1fYm8tPm9iajsKPiArwqDCoMKgwqDCoMKgwqBi b29sIGxvY2sgPSAhZHJtX2dwdXZtX3Jlc3ZfcHJvdGVjdGVkKGdwdXZtKTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgaWYgKCFsb2NrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dm1fcmVzdl9hc3NlcnRfaGVsZChncHV2bSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9n ZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZGVs KCZ2bV9iby0+bGlzdC5lbnRyeS5nZW0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob3BzICYm IG9wcy0+dm1fYm9fZnJlZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3BzLT52 bV9ib19mcmVlKHZtX2JvKTsKPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGtmcmVlKHZtX2JvKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dl bV9vYmplY3RfcHV0KG9iaik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZ3B1dm1fYm9fcHV0 KCkgLSBkcm9wIGEgc3RydWN0IGRybV9ncHV2bV9ibyByZWZlcmVuY2UKPiArICogQHZtX2JvOiB0 aGUgJmRybV9ncHV2bV9ibyB0byByZWxlYXNlIHRoZSByZWZlcmVuY2Ugb2YKPiArICoKPiArICog VGhpcyByZWxlYXNlcyBhIHJlZmVyZW5jZSB0byBAdm1fYm8uCj4gKyAqCj4gKyAqIElmIHRoZSBy ZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVybywgdGhlICZncHV2bV9ibyBpcyBkZXN0cm95ZWQs Cj4gd2hpY2gKPiArICogaW5jbHVkZXMgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgR0VNcyBncHV2YSBs aXN0LiBIZW5jZSwgaWYgYSBjYWxsCj4gdG8gdGhpcwo+ICsgKiBmdW5jdGlvbiBjYW4gcG90ZW50 aWFsbHkgbGV0IHRoZSByZWZlcmVuY2UgY291bnQgdG8gemVybyB0aGUKPiBjYWxsZXIgbXVzdAo+ ICsgKiBob2xkIHRoZSBkbWEtcmVzdiBvciBkcml2ZXIgc3BlY2lmaWMgR0VNIGdwdXZhIGxvY2su Cj4gKyAqLwo+ICt2b2lkCj4gK2RybV9ncHV2bV9ib19wdXQoc3RydWN0IGRybV9ncHV2bV9ibyAq dm1fYm8pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpZiAodm1fYm8pCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGtyZWZfcHV0KCZ2bV9iby0+a3JlZiwgZHJtX2dwdXZtX2JvX2Rlc3Ry b3kpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9ib19wdXQpOwo+ICsKPiAr c3RhdGljIHN0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ICtfX2RybV9ncHV2bV9ib19maW5kKHN0cnVj dCBkcm1fZ3B1dm0gKmdwdXZtLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2 YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFj aF9ncHV2bV9ibyh2bV9ibywgb2JqKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAodm1fYm8tPnZtID09IGdwdXZtKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g TlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRybV9ncHV2bV9ib19maW5kKCkgLSBmaW5kIHRo ZSAmZHJtX2dwdXZtX2JvIGZvciB0aGUgZ2l2ZW4KPiArICogJmRybV9ncHV2bSBhbmQgJmRybV9n ZW1fb2JqZWN0Cj4gKyAqIEBncHV2bTogVGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVk IGluLgo+ICsgKiBAb2JqOiBUaGUgJmRybV9nZW1fb2JqZWN0IGJlaW5nIG1hcHBlZCBpbiB0aGUg QGdwdXZtLgo+ICsgKgo+ICsgKiBGaW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0 aGUgY29tYmluYXRpb24gb2YgdGhlIGdpdmVuCj4gKyAqICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2Vt X29iamVjdC4gSWYgZm91bmQsIGluY3JlYXNlcyB0aGUgcmVmZXJlbmNlCj4gKyAqIGNvdW50IG9m IHRoZSAmZHJtX2dwdXZtX2JvIGFjY29yZGluZ2x5Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBhIHBv aW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8gb24gc3VjY2VzcywgTlVMTCBvbgo+IGZhaWx1cmUK PiArICovCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ICtkcm1fZ3B1dm1fYm9fZmluZChzdHJ1 Y3QgZHJtX2dwdXZtICpncHV2bSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZtX2JvICp2bV9ibyA9IF9fZHJtX2dwdXZtX2JvX2ZpbmQoZ3B1dm0sIG9iaik7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibyA/IGRybV9ncHV2bV9ib19nZXQodm1fYm8p IDogTlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fZmluZCk7Cj4g Kwo+ICsvKioKPiArICogZHJtX2dwdXZtX2JvX29idGFpbigpIC0gb2J0YWlucyBhbmQgaW5zdGFu Y2Ugb2YgdGhlICZkcm1fZ3B1dm1fYm8KPiBmb3IgdGhlCj4gKyAqIGdpdmVuICZkcm1fZ3B1dm0g YW5kICZkcm1fZ2VtX29iamVjdAo+ICsgKiBAZ3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2Jq IGlzIG1hcHBlZCBpbi4KPiArICogQG9iajogVGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBw ZWQgaW4gdGhlIEBncHV2bS4KPiArICoKPiArICogRmluZCB0aGUgJmRybV9ncHV2bV9ibyByZXBy ZXNlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBnaXZlbgo+ICsgKiAmZHJtX2dwdXZtIGFu ZCAmZHJtX2dlbV9vYmplY3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlIHJlZmVyZW5jZQo+ICsg KiBjb3VudCBvZiB0aGUgJmRybV9ncHV2bV9ibyBhY2NvcmRpbmdseS4gSWYgbm90IGZvdW5kLCBh bGxvY2F0ZXMgYQo+IG5ldwo+ICsgKiAmZHJtX2dwdXZtX2JvLgo+ICsgKgo+ICsgKiBBIG5ldyAm ZHJtX2dwdXZtX2JvIGlzIGFkZGVkIHRvIHRoZSBHRU1zIGdwdXZhIGxpc3QuCj4gKyAqCj4gKyAq IFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgJmRybV9ncHV2bV9ibyBvbiBzdWNjZXNzLCBhbiBF UlJfUFRSIG9uCj4gZmFpbHVyZQo+ICsgKi8KPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2Ry bV9ncHV2bV9ib19vYnRhaW4oc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19maW5kKGdwdXZtLCBvYmopOwo+ICvCoMKg wqDCoMKgwqDCoGlmICh2bV9ibykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19jcmVh dGUoZ3B1dm0sIG9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCF2bV9ibykKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChvYmopOwo+ICvCoMKgwqDC oMKgwqDCoGxpc3RfYWRkX3RhaWwoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSwgJm9iai0+Z3B1dmEu bGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibzsKPiArfQo+ICtFWFBPUlRf U1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fb2J0YWluKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ3B1 dm1fYm9fb2J0YWluX3ByZWFsbG9jKCkgLSBvYnRhaW5zIGFuZCBpbnN0YW5jZSBvZiB0aGUKPiAm ZHJtX2dwdXZtX2JvCj4gKyAqIGZvciB0aGUgZ2l2ZW4gJmRybV9ncHV2bSBhbmQgJmRybV9nZW1f b2JqZWN0Cj4gKyAqIEBfX3ZtX2JvOiBBIHByZS1hbGxvY2F0ZWQgc3RydWN0IGRybV9ncHV2bV9i by4KPiArICoKPiArICogRmluZCB0aGUgJmRybV9ncHV2bV9ibyByZXByZXNlbnRpbmcgdGhlIGNv bWJpbmF0aW9uIG9mIHRoZSBnaXZlbgo+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmpl Y3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlIHJlZmVyZW5jZQo+ICsgKiBjb3VudCBvZiB0aGUg Zm91bmQgJmRybV9ncHV2bV9ibyBhY2NvcmRpbmdseSwgd2hpbGUgdGhlIEBfX3ZtX2JvCj4gcmVm ZXJlbmNlCj4gKyAqIGNvdW50IGlzIGRlY3JlYXNlZC4gSWYgbm90IGZvdW5kIEBfX3ZtX2JvIGlz IHJldHVybmVkIHdpdGhvdXQKPiBmdXJ0aGVyCj4gKyAqIGluY3JlYXNlIG9mIHRoZSByZWZlcmVu Y2UgY291bnQuCj4gKyAqCj4gKyAqIEEgbmV3ICZkcm1fZ3B1dm1fYm8gaXMgYWRkZWQgdG8gdGhl IEdFTXMgZ3B1dmEgbGlzdC4KPiArICoKPiArICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBm b3VuZCAmZHJtX2dwdXZtX2JvIG9yIEBfX3ZtX2JvIGlmIG5vCj4gZXhpc3RpbmcKPiArICogJmRy bV9ncHV2bV9ibyB3YXMgZm91bmQKPiArICovCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ICtk cm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKl9fdm1fYm8p Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IF9fdm1fYm8t PnZtOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gX192bV9i by0+b2JqOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsK PiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19maW5kKGdwdXZtLCBvYmopOwo+ ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dm1fYm9fcHV0KF9fdm1fYm8pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiArwqDCoMKgwqDCoMKg wqBsaXN0X2FkZF90YWlsKCZfX3ZtX2JvLT5saXN0LmVudHJ5LmdlbSwgJm9iai0+Z3B1dmEubGlz dCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBfX3ZtX2JvOwo+ICt9Cj4gK0VYUE9SVF9T WU1CT0xfR1BMKGRybV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2MpOwo+ICsKPiDCoHN0YXRpYyBp bnQKPiDCoF9fZHJtX2dwdXZhX2luc2VydChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9ncHV2YSAqdmEpCj4g QEAgLTg2NCwyNCArMTA4NywzMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dmFfcmVtb3Zl KTsKPiDCoC8qKgo+IMKgICogZHJtX2dwdXZhX2xpbmsoKSAtIGxpbmsgYSAmZHJtX2dwdXZhCj4g wqAgKiBAdmE6IHRoZSAmZHJtX2dwdXZhIHRvIGxpbmsKPiArICogQHZtX2JvOiB0aGUgJmRybV9n cHV2bV9ibyB0byBhZGQgdGhlICZkcm1fZ3B1dmEgdG8KPiDCoCAqCj4gLSAqIFRoaXMgYWRkcyB0 aGUgZ2l2ZW4gJnZhIHRvIHRoZSBHUFUgVkEgbGlzdCBvZiB0aGUgJmRybV9nZW1fb2JqZWN0Cj4g aXQgaXMKPiAtICogYXNzb2NpYXRlZCB3aXRoLgo+ICsgKiBUaGlzIGFkZHMgdGhlIGdpdmVuICZ2 YSB0byB0aGUgR1BVIFZBIGxpc3Qgb2YgdGhlICZkcm1fZ3B1dm1fYm8KPiBhbmQgdGhlCj4gKyAq ICZkcm1fZ3B1dm1fYm8gdG8gdGhlICZkcm1fZ2VtX29iamVjdCBpdCBpcyBhc3NvY2lhdGVkIHdp dGguCj4gKyAqCj4gKyAqIEZvciBldmVyeSAmZHJtX2dwdXZhIGVudHJ5IGFkZGVkIHRvIHRoZSAm ZHJtX2dwdXZtX2JvIGFuCj4gYWRkaXRpb25hbAo+ICsgKiByZWZlcmVuY2Ugb2YgdGhlIGxhdHRl ciBpcyB0YWtlbi4KPiDCoCAqCj4gwqAgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIGNhbGxl ciB0byBwcm90ZWN0IHRoZSBHRU0ncyBHUFVWQSBsaXN0Cj4gYWdhaW5zdAo+IC0gKiBjb25jdXJy ZW50IGFjY2VzcyB1c2luZyB0aGUgR0VNcyBkbWFfcmVzdiBsb2NrLgo+ICsgKiBjb25jdXJyZW50 IGFjY2VzcyB1c2luZyBlaXRoZXIgdGhlIEdFTXMgZG1hX3Jlc3YgbG9jayBvciBhIGRyaXZlcgo+ IHNwZWNpZmljCj4gKyAqIGxvY2sgc2V0IHRocm91Z2ggZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygp Lgo+IMKgICovCj4gwqB2b2lkCj4gLWRybV9ncHV2YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZh KQo+ICtkcm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2 bV9ibyAqdm1fYm8pCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqID0gdmEtPmdlbS5vYmo7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAq Z3B1dm0gPSB2YS0+dm07Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KCFvYmop KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gK8KgwqDCoMKg wqDCoMKgZHJtX1dBUk5fT04oZ3B1dm0tPmRybSwgb2JqICE9IHZtX2JvLT5vYmopOwo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFpbCgmdmEtPmdlbS5lbnRyeSwgJm9iai0+Z3B1dmEu bGlzdCk7Cj4gK8KgwqDCoMKgwqDCoMKgdmEtPnZtX2JvID0gZHJtX2dwdXZtX2JvX2dldCh2bV9i byk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChv YmopOwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJnZhLT5nZW0uZW50cnksICZ2bV9i by0+bGlzdC5ncHV2YSk7Cj4gwqB9Cj4gwqBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dmFfbGlu ayk7Cj4gwqAKPiBAQCAtODkyLDIwICsxMTI0LDMxIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9n cHV2YV9saW5rKTsKPiDCoCAqIFRoaXMgcmVtb3ZlcyB0aGUgZ2l2ZW4gJnZhIGZyb20gdGhlIEdQ VSBWQSBsaXN0IG9mIHRoZQo+ICZkcm1fZ2VtX29iamVjdCBpdCBpcwo+IMKgICogYXNzb2NpYXRl ZCB3aXRoLgo+IMKgICoKPiArICogVGhpcyByZW1vdmVzIHRoZSBnaXZlbiAmdmEgZnJvbSB0aGUg R1BVIFZBIGxpc3Qgb2YgdGhlCj4gJmRybV9ncHV2bV9ibyBhbmQKPiArICogdGhlICZkcm1fZ3B1 dm1fYm8gZnJvbSB0aGUgJmRybV9nZW1fb2JqZWN0IGl0IGlzIGFzc29jaWF0ZWQgd2l0aAo+IGlu IGNhc2UKPiArICogdGhpcyBjYWxsIHVubGlua3MgdGhlIGxhc3QgJmRybV9ncHV2YSBmcm9tIHRo ZSAmZHJtX2dwdXZtX2JvLgo+ICsgKgo+ICsgKiBGb3IgZXZlcnkgJmRybV9ncHV2YSBlbnRyeSBy ZW1vdmVkIGZyb20gdGhlICZkcm1fZ3B1dm1fYm8gYQo+IHJlZmVyZW5jZSBvZgo+ICsgKiB0aGUg bGF0dGVyIGlzIGRyb3BwZWQuCj4gKyAqCj4gwqAgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhl IGNhbGxlciB0byBwcm90ZWN0IHRoZSBHRU0ncyBHUFVWQSBsaXN0Cj4gYWdhaW5zdAo+IC0gKiBj b25jdXJyZW50IGFjY2VzcyB1c2luZyB0aGUgR0VNcyBkbWFfcmVzdiBsb2NrLgo+ICsgKiBjb25j dXJyZW50IGFjY2VzcyB1c2luZyBlaXRoZXIgdGhlIEdFTXMgZG1hX3Jlc3YgbG9jayBvciBhIGRy aXZlcgo+IHNwZWNpZmljCj4gKyAqIGxvY2sgc2V0IHRocm91Z2ggZHJtX2dlbV9ncHV2YV9zZXRf bG9jaygpLgo+IMKgICovCj4gwqB2b2lkCj4gwqBkcm1fZ3B1dmFfdW5saW5rKHN0cnVjdCBkcm1f Z3B1dmEgKnZhKQo+IMKgewo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9IHZhLT5nZW0ub2JqOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8g KnZtX2JvID0gdmEtPnZtX2JvOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseSgh b2JqKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiAtCj4g wqDCoMKgwqDCoMKgwqDCoGxpc3RfZGVsX2luaXQoJnZhLT5nZW0uZW50cnkpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB2YS0+dm1fYm8gPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9i b19wdXQodm1fYm8pOwo+IMKgfQo+IMKgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZhX3VubGlu ayk7Cj4gwqAKPiBAQCAtMTA1MCwxMCArMTI5MywxMCBAQCBkcm1fZ3B1dmFfcmVtYXAoc3RydWN0 IGRybV9ncHV2YSAqcHJldiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dmEgKm5leHQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZhX29wX3JlbWFwICpvcCkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZhICpjdXJyID0gb3AtPnVubWFwLT52YTsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZtICpncHV2bSA9IGN1cnItPnZtOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dmEgKnZhID0gb3AtPnVubWFwLT52YTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dw dXZtICpncHV2bSA9IHZhLT52bTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9yZW1v dmUoY3Vycik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbW92ZSh2YSk7Cj4gwqAKPiDC oMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5wcmV2KSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dmFfaW5pdF9mcm9tX29wKHByZXYsIG9wLT5wcmV2KTsKPiBAQCAtMTY5 NSw5ICsxOTM4LDggQEAgZHJtX2dwdXZtX3ByZWZldGNoX29wc19jcmVhdGUoc3RydWN0IGRybV9n cHV2bQo+ICpncHV2bSwKPiDCoEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9wcmVmZXRjaF9v cHNfY3JlYXRlKTsKPiDCoAo+IMKgLyoqCj4gLSAqIGRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2Ny ZWF0ZSgpIC0gY3JlYXRlcyB0aGUgJmRybV9ncHV2YV9vcHMgdG8KPiB1bm1hcCBhIEdFTQo+IC0g KiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtIHJlcHJlc2VudGluZyB0aGUgR1BVIFZBIHNwYWNlCj4g LSAqIEBvYmo6IHRoZSAmZHJtX2dlbV9vYmplY3QgdG8gdW5tYXAKPiArICogZHJtX2dwdXZtX2Jv X3VubWFwX29wc19jcmVhdGUoKSAtIGNyZWF0ZXMgdGhlICZkcm1fZ3B1dmFfb3BzIHRvCj4gdW5t YXAgYSBHRU0KPiArICogQHZtX2JvOiB0aGUgJmRybV9ncHV2bV9ibyBhYnN0cmFjdGlvbgo+IMKg ICoKPiDCoCAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0byBw ZXJmb3JtIHVubWFwcGluZwo+IGZvciBldmVyeQo+IMKgICogR1BVVkEgYXR0YWNoZWQgdG8gYSBH RU0uCj4gQEAgLTE3MTQsMTUgKzE5NTYsMTQgQEAKPiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1 dm1fcHJlZmV0Y2hfb3BzX2NyZWF0ZSk7Cj4gwqAgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhl ICZkcm1fZ3B1dmFfb3BzIG9uIHN1Y2Nlc3MsIGFuIEVSUl9QVFIKPiBvbiBmYWlsdXJlCj4gwqAg Ki8KPiDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICoKPiAtZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNf Y3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICtkcm1fZ3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZt X2JvICp2bV9ibykKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMg Km9wczsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3A7Cj4gwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Owo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9i aik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKHZtX2Jv LT5vYmopOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoG9wcyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHMp LCBHRlBfS0VSTkVMKTsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcHMpCj4gQEAgLTE3MzAsOCAr MTk3MSw4IEBAIGRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZt Cj4gKmdwdXZtLAo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZvcHMtPmxp c3QpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YSh2YSwgb2Jq KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wID0gZ3B1dmFfb3BfYWxsb2Mo Z3B1dm0pOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19mb3JfZWFjaF92YSh2YSwgdm1f Ym8pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AgPSBncHV2YV9vcF9hbGxv Yyh2bV9iby0+dm0pOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcCkg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9 IC1FTk9NRU07Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBlcnJfZnJlZV9vcHM7Cj4gQEAgLTE3NDUsMTAgKzE5ODYsMTAgQEAgZHJtX2dwdXZt X2dlbV91bm1hcF9vcHNfY3JlYXRlKHN0cnVjdAo+IGRybV9ncHV2bSAqZ3B1dm0sCj4gwqDCoMKg wqDCoMKgwqDCoHJldHVybiBvcHM7Cj4gwqAKPiDCoGVycl9mcmVlX29wczoKPiAtwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dmFfb3BzX2ZyZWUoZ3B1dm0sIG9wcyk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJt X2dwdXZhX29wc19mcmVlKHZtX2JvLT52bSwgb3BzKTsKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IEVSUl9QVFIocmV0KTsKPiDCoH0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2dlbV91 bm1hcF9vcHNfY3JlYXRlKTsKPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX3VubWFw X29wc19jcmVhdGUpOwo+IMKgCj4gwqAvKioKPiDCoCAqIGRybV9ncHV2YV9vcHNfZnJlZSgpIC0g ZnJlZSB0aGUgZ2l2ZW4gJmRybV9ncHV2YV9vcHMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25v dXZlYXVfdXZtbS5jCj4gaW5kZXggZWQ0MzliZjQwMzJmLi4xZTk1YjBhMWIwNDcgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYwo+IEBAIC02Miw2ICs2Miw4IEBAIHN0 cnVjdCBiaW5kX2pvYl9vcCB7Cj4gwqDCoMKgwqDCoMKgwqDCoGVudW0gdm1fYmluZF9vcCBvcDsK PiDCoMKgwqDCoMKgwqDCoMKgdTMyIGZsYWdzOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IGFkZHI7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1NjQgcmFuZ2U7Cj4gQEAgLTExMTMsMjIgKzExMTUsMjggQEAgYmlu ZF92YWxpZGF0ZV9yZWdpb24oc3RydWN0IG5vdXZlYXVfam9iICpqb2IpCj4gwqB9Cj4gwqAKPiDC oHN0YXRpYyB2b2lkCj4gLWJpbmRfbGlua19ncHV2YXMoc3RydWN0IGRybV9ncHV2YV9vcHMgKm9w cywgc3RydWN0Cj4gbm91dmVhdV91dm1hX3ByZWFsbG9jICpuZXcpCj4gK2JpbmRfbGlua19ncHV2 YXMoc3RydWN0IGJpbmRfam9iX29wICpib3ApCj4gwqB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG5vdXZlYXVfdXZtYV9wcmVhbGxvYyAqbmV3ID0gJmJvcC0+bmV3Owo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvID0gYm9wLT52bV9ibzsKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzID0gYm9wLT5vcHM7Cj4gwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzd2l0Y2ggKG9wLT5vcCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2Fz ZSBEUk1fR1BVVkFfT1BfTUFQOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+bWFwLT52YSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5t YXAtPnZhLCB2bV9ibyk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYnJlYWs7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJN X0dQVVZBX09QX1JFTUFQOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERS TV9HUFVWQV9PUF9SRU1BUDogewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmEgPSBvcC0+cmVtYXAudW5tYXAtPnZhOwo+ ICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo b3AtPnJlbWFwLnByZXYpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+cHJldi0+dmEpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV9saW5rKCZuZXctPnByZXYtPnZhLCB2YS0KPiA+dm1fYm8pOwo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVt YXAubmV4dCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5uZXh0LT52YSk7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5r KG9wLT5yZW1hcC51bm1hcC0+dmEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKCZuZXctPm5leHQt PnZhLCB2YS0KPiA+dm1fYm8pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayh2YSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQ VVZBX09QX1VOTUFQOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV91bmxpbmsob3AtPnVubWFwLnZhKTsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiBAQCAtMTE1MCwxMCArMTE1 OCwxOCBAQCBub3V2ZWF1X3V2bW1fYmluZF9qb2Jfc3VibWl0KHN0cnVjdAo+IG5vdXZlYXVfam9i ICpqb2IpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9vcChvcCwgJmJpbmRf am9iLT5vcHMpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+b3Ag PT0gT1BfTUFQKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBvcC0+Z2VtLm9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChqb2ItCj4gPmZpbGVfcHJp diwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgb3AtCj4gPmdlbS5oYW5kbGUpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcC0+Z2VtLm9iaikKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9i aiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChqb2ItPmZpbGVfcHJpdiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+Z2VtLmhhbmRsZSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIShvcC0+Z2VtLm9i aiA9IG9iaikpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PRU5UOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X2xvY2sob2JqLT5yZXN2LCBO VUxMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9w LT52bV9ibyA9IGRybV9ncHV2bV9ib19vYnRhaW4oJnV2bW0tPmJhc2UsCj4gb2JqKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X3VubG9j ayhvYmotPnJlc3YpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKElTX0VSUihvcC0+dm1fYm8pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKG9wLT52 bV9ibyk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGJpbmRfdmFsaWRhdGVfb3Aoam9iLCBvcCk7 Cj4gQEAgLTEzNjQsNyArMTM4MCw3IEBAIG5vdXZlYXVfdXZtbV9iaW5kX2pvYl9zdWJtaXQoc3Ry dWN0IG5vdXZlYXVfam9iCj4gKmpvYikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNhc2UgT1BfVU5NQVBfU1BBUlNFOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y2FzZSBPUF9NQVA6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1VO TUFQOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYmlu ZF9saW5rX2dwdXZhcyhvcC0+b3BzLCAmb3AtPm5ldyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiaW5kX2xpbmtfZ3B1dmFzKG9wKTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gQEAgLTE1MTEsNiArMTUyNywxMiBA QCBub3V2ZWF1X3V2bW1fYmluZF9qb2JfZnJlZV93b3JrX2ZuKHN0cnVjdAo+IHdvcmtfc3RydWN0 ICp3b3JrKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFJU19FUlJfT1Jf TlVMTChvcC0+b3BzKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dmFfb3BzX2ZyZWUoJnV2bW0tPmJhc2UsIG9wLT5vcHMpOwo+IMKgCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghSVNfRVJSX09SX05VTEwob3AtPnZt X2JvKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZG1hX3Jlc3ZfbG9jayhvYmotPnJlc3YsIE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dChvcC0+dm1fYm8pOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfdW5s b2NrKG9iai0+cmVzdik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob2JqKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9nZW1fb2JqZWN0X3B1dChvYmop Owo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gQEAgLTE3NzYsMTUgKzE3OTgsMTggQEAgdm9pZAo+IMKg bm91dmVhdV91dm1tX2JvX21hcF9hbGwoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHN0cnVjdCBu b3V2ZWF1X21lbQo+ICptZW0pCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gJm52Ym8tPmJvLmJhc2U7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9ncHV2bV9ibyAqdm1fYm87Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZh Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X2Fzc2VydF9oZWxkKG9iai0+cmVzdik7 Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZhKHZhLCBvYmopIHsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZt YSA9IHV2bWFfZnJvbV92YSh2YSk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9n cHV2bV9ibyh2bV9ibywgb2JqKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRy bV9ncHV2bV9ib19mb3JfZWFjaF92YSh2YSwgdm1fYm8pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBub3V2ZWF1X3V2bWEgKnV2bWEgPSB1 dm1hX2Zyb21fdmEodmEpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5v dXZlYXVfdXZtYV9tYXAodXZtYSwgbWVtKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2dwdXZhX2ludmFsaWRhdGUodmEsIGZhbHNlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdXZlYXVfdXZtYV9tYXAodXZtYSwgbWVtKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 YV9pbnZhbGlkYXRlKHZhLCBmYWxzZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgfQo+IMKgCj4gQEAgLTE3OTIsMTUgKzE4MTcsMTgg QEAgdm9pZAo+IMKgbm91dmVhdV91dm1tX2JvX3VubWFwX2FsbChzdHJ1Y3Qgbm91dmVhdV9ibyAq bnZibykKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmog PSAmbnZiby0+Ym8uYmFzZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2 bV9ibzsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQob2JqLT5yZXN2KTsKPiDCoAo+IC3CoMKg wqDCoMKgwqDCoGRybV9nZW1fZm9yX2VhY2hfZ3B1dmEodmEsIG9iaikgewo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0gdXZtYV9mcm9t X3ZhKHZhKTsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvKHZtX2Jv LCBvYmopIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX2Zv cl9lYWNoX3ZhKHZhLCB2bV9ibykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9IHV2bWFfZnJvbV92YSh2 YSk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1hX3Vu bWFwKHV2bWEpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52 YWxpZGF0ZSh2YSwgdHJ1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfdW5tYXAodXZtYSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52YWxpZGF0ZSh2YSwgdHJ1 ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKg fQo+IMKgfQo+IMKgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaCBiL2luY2x1 ZGUvZHJtL2RybV9nZW0uaAo+IGluZGV4IDE2MzY0NDg3ZmRlOS4uMzY5NTA1NDQ3YWNkIDEwMDY0 NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9n ZW0uaAo+IEBAIC01ODAsNyArNTgwLDcgQEAgaW50IGRybV9nZW1fZXZpY3Qoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwo+IMKgICogZHJtX2dlbV9ncHV2YV9pbml0KCkgLSBpbml0aWFsaXpl IHRoZSBncHV2YSBsaXN0IG9mIGEgR0VNIG9iamVjdAo+IMKgICogQG9iajogdGhlICZkcm1fZ2Vt X29iamVjdAo+IMKgICoKPiAtICogVGhpcyBpbml0aWFsaXplcyB0aGUgJmRybV9nZW1fb2JqZWN0 J3MgJmRybV9ncHV2YSBsaXN0Lgo+ICsgKiBUaGlzIGluaXRpYWxpemVzIHRoZSAmZHJtX2dlbV9v YmplY3QncyAmZHJtX2dwdXZtX2JvIGxpc3QuCj4gwqAgKgo+IMKgICogQ2FsbGluZyB0aGlzIGZ1 bmN0aW9uIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBkcml2ZXJzIGludGVuZGluZyB0bwo+IHN1cHBv cnQgdGhlCj4gwqAgKiAmZHJtX2RyaXZlcl9mZWF0dXJlIERSSVZFUl9HRU1fR1BVVkEuCj4gQEAg LTU5MywyOCArNTkzLDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ2VtX2dwdXZhX2luaXQo c3RydWN0Cj4gZHJtX2dlbV9vYmplY3QgKm9iaikKPiDCoH0KPiDCoAo+IMKgLyoqCj4gLSAqIGRy bV9nZW1fZm9yX2VhY2hfZ3B1dmEoKSAtIGl0ZXJuYXRvciB0byB3YWxrIG92ZXIgYSBsaXN0IG9m Cj4gZ3B1dmFzCj4gLSAqIEBlbnRyeV9fOiAmZHJtX2dwdXZhIHN0cnVjdHVyZSB0byBhc3NpZ24g dG8gaW4gZWFjaCBpdGVyYXRpb24KPiBzdGVwCj4gLSAqIEBvYmpfXzogdGhlICZkcm1fZ2VtX29i amVjdCB0aGUgJmRybV9ncHV2YXMgdG8gd2FsayBhcmUKPiBhc3NvY2lhdGVkIHdpdGgKPiArICog ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibygpIC0gaXRlcmF0b3IgdG8gd2FsayBvdmVyIGEgbGlz dCBvZgo+ICZkcm1fZ3B1dm1fYm8KPiArICogQGVudHJ5X186ICZkcm1fZ3B1dm1fYm8gc3RydWN0 dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbgo+IHN0ZXAKPiArICogQG9ial9fOiB0 aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dwdXZtX2JvIHRvIHdhbGsgYXJlCj4gYXNzb2Np YXRlZCB3aXRoCj4gwqAgKgo+IC0gKiBUaGlzIGl0ZXJhdG9yIHdhbGtzIG92ZXIgYWxsICZkcm1f Z3B1dmEgc3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gd2l0aCB0aGUKPiAtICogJmRybV9ncHV2YV9t YW5hZ2VyLgo+ICsgKiBUaGlzIGl0ZXJhdG9yIHdhbGtzIG92ZXIgYWxsICZkcm1fZ3B1dm1fYm8g c3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gd2l0aCB0aGUKPiArICogJmRybV9nZW1fb2JqZWN0Lgo+ IMKgICovCj4gLSNkZWZpbmUgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YShlbnRyeV9fLCBvYmpfXykg XAo+IC3CoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnlfXywgJihvYmpfXykt PmdwdXZhLmxpc3QsIGdlbS5lbnRyeSkKPiArI2RlZmluZSBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZt X2JvKGVudHJ5X18sIG9ial9fKSBcCj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRy eShlbnRyeV9fLCAmKG9ial9fKS0+Z3B1dmEubGlzdCwKPiBsaXN0LmVudHJ5LmdlbSkKPiDCoAo+ IMKgLyoqCj4gLSAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmFfc2FmZSgpIC0gaXRlcm5hdG9yIHRv IHNhZmVseSB3YWxrIG92ZXIgYQo+IGxpc3Qgb2YKPiAtICogZ3B1dmFzCj4gLSAqIEBlbnRyeV9f OiAmZHJtX2dwdXZhIHN0cnVjdHVyZSB0byBhc3NpZ24gdG8gaW4gZWFjaCBpdGVyYXRpb24KPiBz dGVwCj4gLSAqIEBuZXh0X186ICZuZXh0ICZkcm1fZ3B1dmEgdG8gc3RvcmUgdGhlIG5leHQgc3Rl cAo+IC0gKiBAb2JqX186IHRoZSAmZHJtX2dlbV9vYmplY3QgdGhlICZkcm1fZ3B1dmFzIHRvIHdh bGsgYXJlCj4gYXNzb2NpYXRlZCB3aXRoCj4gKyAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm9f c2FmZSgpIC0gaXRlcmF0b3IgdG8gc2FmZWx5IHdhbGsgb3ZlciBhCj4gbGlzdCBvZgo+ICsgKiAm ZHJtX2dwdXZtX2JvCj4gKyAqIEBlbnRyeV9fOiAmZHJtX2dwdXZtX2Jvc3RydWN0dXJlIHRvIGFz c2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbgo+IHN0ZXAKPiArICogQG5leHRfXzogJm5leHQgJmRy bV9ncHV2bV9ibyB0byBzdG9yZSB0aGUgbmV4dCBzdGVwCj4gKyAqIEBvYmpfXzogdGhlICZkcm1f Z2VtX29iamVjdCB0aGUgJmRybV9ncHV2bV9ibyB0byB3YWxrIGFyZQo+IGFzc29jaWF0ZWQgd2l0 aAo+IMKgICoKPiAtICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dwdXZhIHN0 cnVjdHVyZXMgYXNzb2NpYXRlZAo+IHdpdGggdGhlCj4gKyAqIFRoaXMgaXRlcmF0b3Igd2Fsa3Mg b3ZlciBhbGwgJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQKPiB3aXRoIHRoZQo+ IMKgICogJmRybV9nZW1fb2JqZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCB3aXRoCj4gbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKCksIGhlbmNlCj4gwqAgKiBpdCBpcyBzYXZlIGFnYWluc3QgcmVtb3Zh bCBvZiBlbGVtZW50cy4KPiDCoCAqLwo+IC0jZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmFf c2FmZShlbnRyeV9fLCBuZXh0X18sIG9ial9fKSBcCj4gLcKgwqDCoMKgwqDCoMKgbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGVudHJ5X18sIG5leHRfXywgJihvYmpfXyktCj4gPmdwdXZhLmxpc3Qs IGdlbS5lbnRyeSkKPiArI2RlZmluZSBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvX3NhZmUoZW50 cnlfXywgbmV4dF9fLCBvYmpfXykgXAo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShlbnRyeV9fLCBuZXh0X18sICYob2JqX18pLQo+ID5ncHV2YS5saXN0LCBsaXN0LmVu dHJ5LmdlbSkKPiDCoAo+IMKgI2VuZGlmIC8qIF9fRFJNX0dFTV9IX18gKi8KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmggYi9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaAo+IGlu ZGV4IDQ3Y2JhY2IyNDRiOS4uNDY2ZmRkNzZjNzFhIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJt L2RybV9ncHV2bS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiBAQCAtMjUsNiAr MjUsNyBAQAo+IMKgICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+IMKgICovCj4g wqAKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1yZXN2Lmg+Cj4gwqAjaW5jbHVkZSA8bGludXgvbGlz dC5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gQEAgLTMzLDYgKzM0LDcgQEAKPiDCoCNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ IMKgCj4gwqBzdHJ1Y3QgZHJtX2dwdXZtOwo+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvOwo+IMKgc3Ry dWN0IGRybV9ncHV2bV9vcHM7Cj4gwqAKPiDCoC8qKgo+IEBAIC03Myw2ICs3NSwxMiBAQCBzdHJ1 Y3QgZHJtX2dwdXZhIHsKPiDCoMKgwqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkcm1fZ3B1dm0gKnZtOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKg wqDCoMKgICogQHZtX2JvOiB0aGUgJmRybV9ncHV2bV9ibyBhYnN0cmFjdGlvbiBmb3IgdGhlIG1h cHBlZAo+ICvCoMKgwqDCoMKgwqDCoCAqICZkcm1fZ2VtX29iamVjdAo+ICvCoMKgwqDCoMKgwqDC oCAqLwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiDC oMKgwqDCoMKgwqDCoMKgLyoqCj4gwqDCoMKgwqDCoMKgwqDCoCAqIEBmbGFnczogdGhlICZkcm1f Z3B1dmFfZmxhZ3MgZm9yIHRoaXMgbWFwcGluZwo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiBAQCAt MTA4LDcgKzExNiw3IEBAIHN0cnVjdCBkcm1fZ3B1dmEgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBAZW50cnk6IHRoZSAmbGlzdF9oZWFkIHRvIGF0dGFjaCB0aGlzIG9iamVjdCB0byBhCj4g JmRybV9nZW1fb2JqZWN0Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBlbnRy eTogdGhlICZsaXN0X2hlYWQgdG8gYXR0YWNoIHRoaXMgb2JqZWN0IHRvIGEKPiAmZHJtX2dwdXZt X2JvCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cj4gwqDCoMKgwqDCoMKg wqDCoH0gZ2VtOwo+IEBAIC0xNDEsNyArMTQ5LDcgQEAgc3RydWN0IGRybV9ncHV2YSB7Cj4gwqBp bnQgZHJtX2dwdXZhX2luc2VydChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwgc3RydWN0IGRybV9n cHV2YSAqdmEpOwo+IMKgdm9pZCBkcm1fZ3B1dmFfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1dmEgKnZh KTsKPiDCoAo+IC12b2lkIGRybV9ncHV2YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiAr dm9pZCBkcm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2 bV9ibwo+ICp2bV9ibyk7Cj4gwqB2b2lkIGRybV9ncHV2YV91bmxpbmsoc3RydWN0IGRybV9ncHV2 YSAqdmEpOwo+IMKgCj4gwqBzdHJ1Y3QgZHJtX2dwdXZhICpkcm1fZ3B1dmFfZmluZChzdHJ1Y3Qg ZHJtX2dwdXZtICpncHV2bSwKPiBAQCAtMTg4LDEwICsxOTYsMTYgQEAgc3RhdGljIGlubGluZSBi b29sIGRybV9ncHV2YV9pbnZhbGlkYXRlZChzdHJ1Y3QKPiBkcm1fZ3B1dmEgKnZhKQo+IMKgICog ZW51bSBkcm1fZ3B1dm1fZmxhZ3MgLSBmbGFncyBmb3Igc3RydWN0IGRybV9ncHV2bQo+IMKgICov Cj4gwqBlbnVtIGRybV9ncHV2bV9mbGFncyB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDC oMKgwqDCoMKgICogQERSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRDogR1BVVk0gaXMgcHJvdGVjdGVk IGV4dGVybmFsbHkKPiBieSB0aGUKPiArwqDCoMKgwqDCoMKgwqAgKiBHUFVWTSdzICZkbWFfcmVz diBsb2NrCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0dQVVZNX1JF U1ZfUFJPVEVDVEVEID0gQklUKDApLAo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gwqDCoMKg wqDCoMKgwqDCoCAqIEBEUk1fR1BVVk1fVVNFUkJJVFM6IHVzZXIgZGVmaW5lZCBiaXRzCj4gwqDC oMKgwqDCoMKgwqDCoCAqLwo+IC3CoMKgwqDCoMKgwqDCoERSTV9HUFVWTV9VU0VSQklUUyA9IEJJ VCgwKSwKPiArwqDCoMKgwqDCoMKgwqBEUk1fR1BVVk1fVVNFUkJJVFMgPSBCSVQoMSksCj4gwqB9 Owo+IMKgCj4gwqAvKioKPiBAQCAtMjgwLDYgKzI5NCwxOSBAQCBib29sIGRybV9ncHV2bV9pbnRl cnZhbF9lbXB0eShzdHJ1Y3QgZHJtX2dwdXZtCj4gKmdwdXZtLCB1NjQgYWRkciwgdTY0IHJhbmdl KTsKPiDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCj4gwqBkcm1fZ3B1dm1fcmVzdl9vYmplY3Rf YWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gwqAKPiArLyoqCj4gKyAqIGRybV9ncHV2 bV9yZXN2X3Byb3RlY3RlZCgpIC0gaW5kaWNhdGVzIHdoZXRoZXIKPiAmRFJNX0dQVVZNX1JFU1Zf UFJPVEVDVEVEIGlzCj4gKyAqIHNldAo+ICsgKiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtCj4gKyAq Cj4gKyAqIFJldHVybnM6IHRydWUgaWYgJkRSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRCBpcyBzZXQs IGZhbHNlCj4gb3RoZXJ3aXNlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sCj4gK2RybV9n cHV2bV9yZXN2X3Byb3RlY3RlZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSkKPiArewo+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBncHV2bS0+ZmxhZ3MgJiBEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQ7 Cj4gK30KPiArCj4gwqAvKioKPiDCoCAqIGRybV9ncHV2bV9yZXN2KCkgLSByZXR1cm5zIHRoZSAm ZHJtX2dwdXZtJ3MgJmRtYV9yZXN2Cj4gwqAgKiBAZ3B1dm1fXzogdGhlICZkcm1fZ3B1dm0KPiBA QCAtMjk4LDYgKzMyNSwxMiBAQCBkcm1fZ3B1dm1fcmVzdl9vYmplY3RfYWxsb2Moc3RydWN0IGRy bV9kZXZpY2UKPiAqZHJtKTsKPiDCoCAqLwo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9vYmoo Z3B1dm1fXykgKChncHV2bV9fKS0+cl9vYmopCj4gwqAKPiArI2RlZmluZSBkcm1fZ3B1dm1fcmVz dl9oZWxkKGdwdXZtX18pIFwKPiArwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9oZWxkKGRybV9ncHV2 bV9yZXN2KGdwdXZtX18pKQo+ICsKPiArI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9hc3NlcnRfaGVs ZChncHV2bV9fKSBcCj4gK8KgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZHJtX2dw dXZtX3Jlc3YoZ3B1dm1fXykpCj4gKwo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9oZWxkKGdw dXZtX18pIFwKPiDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfaGVsZChkcm1fZ3B1dm1fcmVzdihn cHV2bV9fKSkKPiDCoAo+IEBAIC0zODIsNiArNDE1LDEyOCBAQCBfX2RybV9ncHV2YV9uZXh0KHN0 cnVjdCBkcm1fZ3B1dmEgKnZhKQo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fZm9yX2VhY2hfdmFfc2Fm ZSh2YV9fLCBuZXh0X18sIGdwdXZtX18pIFwKPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHZhX18sIG5leHRfXywgJihncHV2bV9fKS0+cmIubGlzdCwKPiByYi5lbnRy eSkKPiDCoAo+ICsvKioKPiArICogc3RydWN0IGRybV9ncHV2bV9ibyAtIHN0cnVjdHVyZSByZXBy ZXNlbnRpbmcgYSAmZHJtX2dwdXZtIGFuZAo+ICsgKiAmZHJtX2dlbV9vYmplY3QgY29tYmluYXRp b24KPiArICoKPiArICogVGhpcyBzdHJ1Y3R1cmUgaXMgYW4gYWJzdHJhY3Rpb24gcmVwcmVzZW50 aW5nIGEgJmRybV9ncHV2bSBhbmQKPiArICogJmRybV9nZW1fb2JqZWN0IGNvbWJpbmF0aW9uLiBJ dCBzZXJ2ZXMgYXMgYW4gaW5kaXJlY3Rpb24gdG8KPiBhY2NlbGVyYXRlCj4gKyAqIGl0ZXJhdGlu ZyBhbGwgJmRybV9ncHV2YXMgd2l0aGluIGEgJmRybV9ncHV2bSBiYWNrZWQgYnkgdGhlIHNhbWUK PiArICogJmRybV9nZW1fb2JqZWN0Lgo+ICsgKgo+ICsgKiBGdXJ0aGVybW9yZSBpdCBpcyB1c2Vk IGNhY2hlIGV2aWN0ZWQgR0VNIG9iamVjdHMgZm9yIGEgY2VydGFpbgo+IEdQVS1WTSB0bwo+ICsg KiBhY2NlbGVyYXRlIHZhbGlkYXRpb24uCj4gKyAqCj4gKyAqIFR5cGljYWxseSwgZHJpdmVycyB3 YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIHN0cnVjdAo+IGRybV9ncHV2bV9ibyBvbmNl Cj4gKyAqIGEgR0VNIG9iamVjdCBpcyBtYXBwZWQgZmlyc3QgaW4gYSBHUFUtVk0gYW5kIHJlbGVh c2UgdGhlIGluc3RhbmNlCj4gb25jZSB0aGUKPiArICogbGFzdCBtYXBwaW5nIG9mIHRoZSBHRU0g b2JqZWN0IGluIHRoaXMgR1BVLVZNIGlzIHVubWFwcGVkLgo+ICsgKi8KPiArc3RydWN0IGRybV9n cHV2bV9ibyB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQHZtOiBU aGUgJmRybV9ncHV2bSB0aGUgQG9iaiBpcyBtYXBwZWQgaW4uIFRoaXMgcG9pbnRlciBpcwo+IG5v dAo+ICvCoMKgwqDCoMKgwqDCoCAqIHJlZmVyZW5jZSBjb3VudGVkLgo+ICvCoMKgwqDCoMKgwqDC oCAqCj4gK8KgwqDCoMKgwqDCoMKgICogQSBzdHJ1Y3QgZHJtX2dwdXZtX2JvIGlzIG5vdCBhbGxv d2VkIHRvIG91dC1saXZlIGl0cwo+ICZkcm1fZ3B1dm0KPiArwqDCoMKgwqDCoMKgwqAgKiBjb250 ZXh0LiBJbXBsaWNpdGx5LCB0aGlzIGlzIGVuc3VyZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUKPiBk cml2ZXIgaXMKPiArwqDCoMKgwqDCoMKgwqAgKiByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhlIFZN IGRvZXNuJ3QgY29udGFpbiBtYXBwaW5ncyBvbmNlCj4gaXQncwo+ICvCoMKgwqDCoMKgwqDCoCAq IGZyZWVkLCBzaW5jZSBhIHN0cnVjdCBkcm1fZ3B1dm1fYm8gc2hvdWxkIGJlIGZyZWVkIG9uY2UK PiB0aGUgbGFzdAo+ICvCoMKgwqDCoMKgwqDCoCAqIG1hcHBpbmcgYmVpbmcgYmFja2VkIGJ5IHRo ZSBjb3JyZXNwb25kaW5nIGJ1ZmZlciBvYmplY3QgaXMKPiB1bm1hcHBlZC4KPiArwqDCoMKgwqDC oMKgwqAgKi8KCgpJIGRvbid0IHRoaW5rIHRoZSBhYm92ZSBpcyBjb21wbGV0ZWx5IHRydWUuIExl dCdzIGFzc3VtZSBpbiB0aGUKIVJFU1ZfUFJPVEVDVEVEIGNhc2UgdGhhdCBhIHJlZmVyZW5jZSBp cyBncmFiYmVkIG9uIHRoZSBkcm1fZ3B1dm1fYm8KZHVyaW5nIGFuIGl0ZXJhdGlvbiBvdmVyIGEg bGlzdC4gVGhlbiB1c2VyLXNwYWNlIGNsb3NlcyB0aGUgdm0gYW5kIGFsbAp2bWFzIGFyZSB1bmxp bmtlZCwgYnV0IHRoaXMgcmVmZXJlbmNlIHJlbWFpbnMgYnV0IHRoZSB2bSBwb2ludGVyCmJlY29t ZXMgc3RhbGUuIEluIHRoZSBSRVNWX1BST1RFQ1RFRCBjYXNlIHRoaXMgaXMgZW5zdXJlZCBub3Qg dG8gaGFwcGVuCmlmIGJ5IHRoZSB2bS0+cmVzdiBiZWluZyBncmFiYmVkIGR1cmluZyB1bmxpbmss IGJ1dCBpbiB0aGUKIVJFU1ZfUFJPVEVDVEVEIGNhc2UsIHRoZSBhYm92ZSB3b3JkaW5nIGlzbid0 IHN1ZmZpY2llbnQuIFRoZSBjYWxsZXIKbmVlZHMgdG8gZW5zdXJlIHRoZSB2bSBzdGF5cyBhbGl2 ZSB1c2luZyBzb21lIHNvcnQgb2Ygc2ltaWxhciBydWxlIG9yCnVzZSBrcmVmX2dldF91bmxlc3Nf emVybygpIG9uIHRoZSB2bSB1bmRlciB0aGUgc3BpbmxvY2sgaWYKZGVyZWZlcmVuY2VkLgoKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg LyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQG9iajogVGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBt YXBwZWQgaW4gQHZtLiBUaGlzIGlzIGEKPiByZWZlcmVuY2UKPiArwqDCoMKgwqDCoMKgwqAgKiBj b3VudGVkIHBvaW50ZXIuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKg wqDCoMKgwqDCoCAqIEBrcmVmOiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzICZkcm1fZ3B1 dm1fYm8uCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGtyZWYg a3JlZjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGxpc3Q6 IFN0cnVjdHVyZSBjb250YWluaW5nIGFsbCAmbGlzdF9oZWFkcy4KPiArwqDCoMKgwqDCoMKgwqAg Ki8KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGdwdXZhOiBUaGUg bGlzdCBvZiBsaW5rZWQgJmRybV9ncHV2YXMuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFk IGdwdXZhOwoKU3RpbGwgbWlzc2luZyBkb2Mgb24gaG93IHRoZSBAZ3B1dmEgc3RheXMgYWxpdmUg ZHVyaW5nIGl0ZXJhdGlvbiBvdmVyCnRoZSBsaXN0PwoKCgo4PC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoYW5rcywKVGhvbWFz Cgo=