Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp923976rdg; Fri, 13 Oct 2023 05:31:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGLUu/wjY6c9cU/iXlJw4ovs2Ub2ag0cYEVwWeuYMWR7SLxVQq4V8GYYUQ4E6N8s1qfp3eE X-Received: by 2002:a05:6a20:dd87:b0:171:a3e8:8c09 with SMTP id kw7-20020a056a20dd8700b00171a3e88c09mr8944900pzb.60.1697200289445; Fri, 13 Oct 2023 05:31:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697200289; cv=none; d=google.com; s=arc-20160816; b=lqmTDZVpCHUMUN/ucOmDotbKQdVQGnkrwyQF9cr1ZvoN40XDEvnpFMKx4hghPn3LDW GUPCEh7tYrB/AY8I8x+A30rG5dXJHkADe2mEEGt6wNEw0uzSRsMtauAQ3yorbuAQ/NUS Yp0Qz6+rT7pmmspy2ceJ/6oCC0v/1GO6WKU5oByqeshkYvI1gQ1e6JxDhV9K9y11eGJY /RLh6+KzecsUeNyqXtJxRK2IqLlRwCzDXAu+5+CZbx5x2bksSTpmSiqaswb4KS9dDTXh oeqqbSxNz1WXfrVvDXihsi8boMsEEbmdQ9ZAyzngRL/6eRKNOun3xsxOMd2/AMvcqPlD 5Jcw== 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=YTc8p42ZcFL1m/quC1XRV43kb6mQYwFWNWAJRyn1xD4=; fh=htvIroZrbKeU2x4AOko0NW3x9xa19Yggb7QfVOG/ARs=; b=onY9sIjvtTu8YgmKADc/NiU9sYU73cYTdpusWtDLaWWv2NcILn+8SoG5QuF5rhXPKn ShIjkbaaseDHmyGbHo4sumNLFxxkQaW6Pkgtl5EusEp9W9efD+aGd9qYIM9cixEjThm8 F5LIwM49HOGg6PDnUfrsh2myWbRE0xh+Wqxg2SxUWekzXrgjXbjdpip5BtO2abM/EN+O LeQVrggZrFnLB/CpnU7bTs2JUmW7J++NTxwQOg2JWZLqTJ+eZZ4ytT345pM5BX3S2HiC 0tqw6BCC6NktdU5NPbjRmNsnvUbtfxVDHHUIOmiVzB8IOU25FJn5r5Pc2yvxh/AEpTBW dWKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=k1PghC+h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 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. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id q7-20020a656247000000b00578bb009dd1si4447675pgv.809.2023.10.13.05.31.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Oct 2023 05:31:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=k1PghC+h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 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 2E0C983A15B7; Fri, 13 Oct 2023 05:31:23 -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 S231661AbjJMMao (ORCPT + 99 others); Fri, 13 Oct 2023 08:30:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231283AbjJMMam (ORCPT ); Fri, 13 Oct 2023 08:30:42 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4092A9 for ; Fri, 13 Oct 2023 05:30:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697200237; x=1728736237; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=YTc8p42ZcFL1m/quC1XRV43kb6mQYwFWNWAJRyn1xD4=; b=k1PghC+hgnf1Eg9cIJCSoOflVnR2hOmrjKru9rfCA1kD5jTBnViAsnsl XUFC0WNRqvyI0JZnGLwhpkV2/SYuzlX3RkhnwtnQoqRQLoo0Hkvo8SDMI 8fTdSyMG6CGZyL3FrhgraONR0lNPEb2VmahyK9hP1peaqg/c9BI2ubuYl f46cuipwOWxCotQmMZhd2F6+JDtKq96i4+59L7ghqKy3HjoYfSKulW5Nx TYxsu1lolBP/wEASOjworg5WVDmltVLablszlNAcp2Sb8o+kwBaZWfsnA hUbLfsKQQMSruGpkBm07mk7jXqxFGuOc1Va8nYilUFVpXdsJ6zWaiXHTp A==; X-IronPort-AV: E=McAfee;i="6600,9927,10862"; a="449361593" X-IronPort-AV: E=Sophos;i="6.03,222,1694761200"; d="scan'208";a="449361593" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2023 05:30:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10861"; a="878526492" X-IronPort-AV: E=Sophos;i="6.03,222,1694761200"; d="scan'208";a="878526492" Received: from dstacken-mobl1.ger.corp.intel.com (HELO [10.249.254.172]) ([10.249.254.172]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2023 05:30:32 -0700 Message-ID: <7b16e8af088e875674cc10a74cfdf6bed830db04.camel@linux.intel.com> Subject: Re: [PATCH drm-misc-next v6 3/6] 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: Fri, 13 Oct 2023 14:30:29 +0200 In-Reply-To: <20231008233212.13815-4-dakr@redhat.com> References: <20231008233212.13815-1-dakr@redhat.com> <20231008233212.13815-4-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=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS 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]); Fri, 13 Oct 2023 05:31:23 -0700 (PDT) T24gTW9uLCAyMDIzLTEwLTA5IGF0IDAxOjMyICswMjAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl 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 bS9kcm1fZ3B1dm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAzMzIgKysrKysrKysrKysrKysr KysrKysrLS0KPiAtLQo+IMKgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMg fMKgIDY0ICsrKy0tCj4gwqBpbmNsdWRlL2RybS9kcm1fZ2VtLmjCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoCAzMiArLS0KPiDCoGluY2x1ZGUvZHJtL2RybV9ncHV2bS5owqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTc3ICsrKysrKysrKysrKy0KPiDCoDQgZmls ZXMgY2hhbmdlZCwgNTIxIGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZ3B1dm0uYwo+IGluZGV4IDYzNjhkZmRiZTlkZC4uMjgyODIyODNkZGFmIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZ3B1dm0uYwo+IEBAIC03MCw2ICs3MCwxOCBAQAo+IMKgICogJmRybV9nZW1fb2JqZWN0LCBz dWNoIGFzIHRoZSAmZHJtX2dlbV9vYmplY3QgY29udGFpbmluZyB0aGUgcm9vdAo+IHBhZ2UgdGFi bGUsCj4gwqAgKiBidXQgaXQgY2FuIGFsc28gYmUgYSAnZHVtbXknIG9iamVjdCwgd2hpY2ggY2Fu IGJlIGFsbG9jYXRlZCB3aXRoCj4gwqAgKiBkcm1fZ3B1dm1fcm9vdF9vYmplY3RfYWxsb2MoKS4K PiArICoKPiArICogSW4gb3JkZXIgdG8gY29ubmVjdCBhIHN0cnVjdCBkcm1fZ3B1dmEgaXRzIGJh Y2tpbmcKPiAmZHJtX2dlbV9vYmplY3QgZWFjaApOSVQ6IFNhbWUgYXMgcHJldmlvdXMgcGF0Y2gg cmVnYXJkaW5nIGtlcm5lbGRvYyByZWZlcmVuY2VzCgo+ICsgKiAmZHJtX2dlbV9vYmplY3QgbWFp bnRhaW5zIGEgbGlzdCBvZiAmZHJtX2dwdXZtX2JvIHN0cnVjdHVyZXMsIGFuZAo+IGVhY2gKPiAr ICogJmRybV9ncHV2bV9ibyBjb250YWlucyBhIGxpc3Qgb2YgJiZkcm1fZ3B1dmEgc3RydWN0dXJl cy4KPiArICoKPiArICogQSAmZHJtX2dwdXZtX2JvIGlzIGFuIGFic3RyYWN0aW9uIHRoYXQgcmVw cmVzZW50cyBhIGNvbWJpbmF0aW9uCj4gb2YgYQo+ICsgKiAmZHJtX2dwdXZtIGFuZCBhICZkcm1f Z2VtX29iamVjdC4gRXZlcnkgc3VjaCBjb21iaW5hdGlvbiBzaG91bGQKPiBiZSB1bmlxdWUuCj4g KyAqIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgQVBJIHRocm91Z2ggZHJtX2dwdXZtX2JvX29idGFp bigpIGFuZAo+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKCkgd2hpY2ggZmlyc3Qg bG9vayBpbnRvIHRoZQo+IGNvcnJlc3BvbmRpbmcKPiArICogJmRybV9nZW1fb2JqZWN0IGxpc3Qg b2YgJmRybV9ncHV2bV9ib3MgZm9yIGFuIGV4aXN0aW5nIGluc3RhbmNlCj4gb2YgdGhpcwo+ICsg KiBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uLiBJZiBub3QgZXhpc3RlbnQgYSBuZXcgaW5zdGFuY2Ug aXMgY3JlYXRlZAo+IGFuZCBsaW5rZWQKPiArICogdG8gdGhlICZkcm1fZ2VtX29iamVjdC4KPiDC oCAqLwo+IMKgCj4gwqAvKioKPiBAQCAtMzk1LDIxICs0MDcsMjggQEAKPiDCoC8qKgo+IMKgICog RE9DOiBMb2NraW5nCj4gwqAgKgo+IC0gKiBHZW5lcmFsbHksIHRoZSBHUFUgVkEgbWFuYWdlciBk b2VzIG5vdCB0YWtlIGNhcmUgb2YgbG9ja2luZwo+IGl0c2VsZiwgaXQgaXMKPiAtICogdGhlIGRy aXZlcnMgcmVzcG9uc2liaWxpdHkgdG8gdGFrZSBjYXJlIGFib3V0IGxvY2tpbmcuIERyaXZlcnMK PiBtaWdodCB3YW50IHRvCj4gLSAqIHByb3RlY3QgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOiBp bnNlcnRpbmcsIHJlbW92aW5nIGFuZAo+IGl0ZXJhdGluZwo+IC0gKiAmZHJtX2dwdXZhIG9iamVj dHMgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGFsbCBraW5kcyBvZiBvcGVyYXRpb25zLAo+IHN1Y2gg YXMKPiAtICogc3BsaXQgLyBtZXJnZSBvciBwcmVmZXRjaC4KPiAtICoKPiAtICogVGhlIEdQVSBW QSBtYW5hZ2VyIGFsc28gZG9lcyBub3QgdGFrZSBjYXJlIG9mIHRoZSBsb2NraW5nIG9mIHRoZQo+ IGJhY2tpbmcKPiAtICogJmRybV9nZW1fb2JqZWN0IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGJ5IGl0 c2VsZjsgZHJpdmVycyBhcmUKPiByZXNwb25zaWJsZSB0bwo+IC0gKiBlbmZvcmNlIG11dHVhbCBl eGNsdXNpb24gdXNpbmcgZWl0aGVyIHRoZSBHRU1zIGRtYV9yZXN2IGxvY2sgb3IKPiBhbHRlcm5h dGl2ZWx5Cj4gLSAqIGEgZHJpdmVyIHNwZWNpZmljIGV4dGVybmFsIGxvY2suIEZvciB0aGUgbGF0 dGVyIHNlZSBhbHNvCj4gLSAqIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiAtICoKPiAtICog SG93ZXZlciwgdGhlIEdQVSBWQSBtYW5hZ2VyIGNvbnRhaW5zIGxvY2tkZXAgY2hlY2tzIHRvIGVu c3VyZQo+IGNhbGxlcnMgb2YgaXRzCj4gLSAqIEFQSSBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGxv Y2sgd2hlbmV2ZXIgdGhlICZkcm1fZ2VtX29iamVjdHMgR1BVCj4gVkEgbGlzdCBpcwo+IC0gKiBh Y2Nlc3NlZCBieSBmdW5jdGlvbnMgc3VjaCBhcyBkcm1fZ3B1dmFfbGluaygpIG9yCj4gZHJtX2dw dXZhX3VubGluaygpLgo+ICsgKiBJbiB0ZXJtcyBvZiBtYW5hZ2luZyAmZHJtX2dwdXZhIGVudHJp ZXMgRFJNIEdQVVZNIGRvZXMgbm90IHRha2UKPiBjYXJlIG9mCj4gKyAqIGxvY2tpbmcgaXRzZWxm LCBpdCBpcyB0aGUgZHJpdmVycyByZXNwb25zaWJpbGl0eSB0byB0YWtlIGNhcmUKPiBhYm91dCBs b2NraW5nLgo+ICsgKiBEcml2ZXJzIG1pZ2h0IHdhbnQgdG8gcHJvdGVjdCB0aGUgZm9sbG93aW5n IG9wZXJhdGlvbnM6Cj4gaW5zZXJ0aW5nLCByZW1vdmluZwo+ICsgKiBhbmQgaXRlcmF0aW5nICZk cm1fZ3B1dmEgb2JqZWN0cyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgYWxsIGtpbmRzCj4gb2YKPiAr ICogb3BlcmF0aW9ucywgc3VjaCBhcyBzcGxpdCAvIG1lcmdlIG9yIHByZWZldGNoLgo+ICsgKgo+ ICsgKiBEUk0gR1BVVk0gYWxzbyBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgdGhlIGxvY2tpbmcgb2Yg dGhlIGJhY2tpbmcKPiArICogJmRybV9nZW1fb2JqZWN0IGJ1ZmZlcnMgR1BVIFZBIGxpc3RzIGFu ZCAmZHJtX2dwdXZtX2JvCj4gYWJzdHJhY3Rpb25zIGJ5Cj4gKyAqIGl0c2VsZjsgZHJpdmVycyBh cmUgcmVzcG9uc2libGUgdG8gZW5mb3JjZSBtdXR1YWwgZXhjbHVzaW9uIHVzaW5nCj4gZWl0aGVy IHRoZQo+ICsgKiBHRU1zIGRtYV9yZXN2IGxvY2sgb3IgYWx0ZXJuYXRpdmVseSBhIGRyaXZlciBz cGVjaWZpYyBleHRlcm5hbAo+IGxvY2suIEZvciB0aGUKPiArICogbGF0dGVyIHNlZSBhbHNvIGRy bV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiArICoKPiArICogSG93ZXZlciwgRFJNIEdQVVZNIGNv bnRhaW5zIGxvY2tkZXAgY2hlY2tzIHRvIGVuc3VyZSBjYWxsZXJzIG9mCj4gaXRzIEFQSSBob2xk Cj4gKyAqIHRoZSBjb3JyZXNwb25kaW5nIGxvY2sgd2hlbmV2ZXIgdGhlICZkcm1fZ2VtX29iamVj dHMgR1BVIFZBIGxpc3QKPiBpcyBhY2Nlc3NlZAo+ICsgKiBieSBmdW5jdGlvbnMgc3VjaCBhcyBk cm1fZ3B1dmFfbGluaygpIG9yIGRybV9ncHV2YV91bmxpbmsoKSwgYnV0Cj4gYWxzbwo+ICsgKiBk cm1fZ3B1dm1fYm9fb2J0YWluKCkgYW5kIGRybV9ncHV2bV9ib19wdXQoKS4KPiArICoKPiArICog VGhlIGxhdHRlciBpcyByZXF1aXJlZCBzaW5jZSBvbiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24g b2YgYQo+ICZkcm1fZ3B1dm1fYm8KPiArICogdGhlICZkcm1fZ3B1dm1fYm8gaXMgYXR0YWNoZWQg LyByZW1vdmVkIGZyb20gdGhlICZkcm1fZ2VtX29iamVjdHMKPiBncHV2YSBsaXN0Lgo+ICsgKiBT dWJzZXF1ZW50IGNhbGxzIHRvIGRybV9ncHV2bV9ib19vYnRhaW4oKSBmb3IgdGhlIHNhbWUgJmRy bV9ncHV2bQo+IGFuZAo+ICsgKiAmZHJtX2dlbV9vYmplY3QgbXVzdCBiZSBhYmxlIHRvIG9ic2Vy dmUgcHJldmlvdXMgY3JlYXRpb25zIGFuZAo+IGRlc3RydWN0aW9ucwo+ICsgKiBvZiAmZHJtX2dw dXZtX2JvcyBpbiBvcmRlciB0byBrZWVwIGluc3RhbmNlcyB1bmlxdWUuCj4gwqAgKi8KPiDCoAo+ IMKgLyoqCj4gQEAgLTQzOSw2ICs0NTgsNyBAQAo+IMKgICrCoMKgwqDCoMKgewo+IMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHM7Cj4gwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3AKPiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+IMKgICoK PiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfbG9ja192YV9zcGFjZSgpOwo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wcyA9IGRybV9ncHV2bV9zbV9tYXBfb3Bz X2NyZWF0ZShncHV2bSwgYWRkciwgcmFuZ2UsCj4gQEAgLTQ0Niw2ICs0NjYsMTAgQEAKPiDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKG9wcykpCj4gwqAgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKG9wcyk7Cj4g wqAgKgo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1fYm8gPSBkcm1fZ3B1dm1fYm9f b2J0YWluKGdwdXZtLCBvYmopOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElT X0VSUih2bV9ibykpCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIFBUUl9FUlIodm1fYm8pOwo+ICsgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhOwo+IMKg ICoKPiBAQCAtNDU4LDcgKzQ4Miw3IEBACj4gwqAgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3ZtX21hcCgpOwo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZHJtX2dwdXZhX21hcChncHV2bSwgdmEsICZvcC0+bWFwKTsKPiAtICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZh X2xpbmsodmEpOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayh2YSwgdm1fYm8pOwo+IMKgICoKPiDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj YXNlIERSTV9HUFVWQV9PUF9SRU1BUDogewo+IEBAIC00ODUsMTEgKzUwOSwxMSBAQAo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHJpdmVyX3ZtX3JlbWFwKCk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfcmVtYXAocHJldiwgbmV4dCwgJm9w LQo+ID5yZW1hcCk7Cj4gwqAgKgo+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZhKTsKPiDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChwcmV2KQo+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldik7Cj4gKyAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhwcmV2LCB2YS0KPiA+dm1fYm8pOwo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKG5leHQpCj4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhuZXh0KTsK PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKG5leHQsIHZhLQo+ID52bV9ibyk7 Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV91bmxpbmsodmEpOwo+IMKgICoKPiDCoCAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gQEAgLTUwNSw2ICs1 MjksNyBAQAo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsKPiDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfdW5sb2NrX3ZhX3NwYWNlKCk7Cj4gwqAgKgo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+IEBAIC01MTQsNiArNTM5 LDcgQEAKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqBzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgewo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtOwo+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4g wqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV3X3ZhOwo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnByZXZfdmE7 Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV4dF92 YTsKPiBAQCAtNTM0LDYgKzU2MCw3IEBACj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgdTY0Cj4gb2Zmc2V0KQo+IMKgICrCoMKgwqDCoMKgewo+IMKgICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcml2ZXJfY29udGV4dCBjdHg7Cj4gKyAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiDCoCAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzOwo+IMKgICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wOwo+IMKgICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+IEBAIC01NDMsMTYgKzU3MCwyMyBAQAo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5uZXdfdmEgPSBremFsbG9jKHNpemVv ZigqY3R4Lm5ld192YSksCj4gR0ZQX0tFUk5FTCk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY3R4LnByZXZfdmEgPSBremFsbG9jKHNpemVvZigqY3R4LnByZXZfdmEpLAo+IEdGUF9L RVJORUwpOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5uZXh0X3ZhID0ga3ph bGxvYyhzaXplb2YoKmN0eC5uZXh0X3ZhKSwKPiBHRlBfS0VSTkVMKTsKPiAtICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICghY3R4Lm5ld192YSB8fCAhY3R4LnByZXZfdmEgfHwgIWN0eC5u ZXh0X3ZhKSB7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgudm1fYm8gPSBkcm1f Z3B1dm1fYm9fY3JlYXRlKGdwdXZtLCBvYmopOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKCFjdHgubmV3X3ZhIHx8ICFjdHgucHJldl92YSB8fCAhY3R4Lm5leHRfdmEgfHwKPiAh dm1fYm8pIHsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0ID0gLUVOT01FTTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ290byBvdXQ7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgICoK PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8vIFR5cGljYWxseSBwcm90ZWN0ZWQgd2l0 aCBhIGRyaXZlciBzcGVjaWZpYyBHRU0KPiBncHV2YSBsb2NrCj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvLyB1c2VkIGluIHRoZSBmZW5jZSBzaWduYWxpbmcgcGF0aCBmb3IKPiBkcm1f Z3B1dmFfbGluaygpIGFuZAo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gZHJtX2dw dXZhX3VubGluaygpLCBoZW5jZSBwcmUtYWxsb2NhdGUuCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjdHgudm1fYm8gPSBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKGN0eC52bV9i byk7Cj4gKyAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tfdmFf c3BhY2UoKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZ3B1dm1f c21fbWFwKGdwdXZtLCAmY3R4LCBhZGRyLCByYW5nZSwgb2JqLAo+IG9mZnNldCk7Cj4gwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3VubG9ja192YV9zcGFjZSgpOwo+IMKgICoK PiDCoCAqwqDCoMKgwqDCoG91dDoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9n cHV2bV9ib19wdXQoY3R4LnZtX2JvKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBr ZnJlZShjdHgubmV3X3ZhKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShj dHgucHJldl92YSk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2ZyZWUoY3R4Lm5l eHRfdmEpOwo+IEBAIC01NjUsNyArNTk5LDcgQEAKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX21hcChjdHgtPnZtLCBjdHgtPm5ld192YSwgJm9wLT5tYXAp Owo+IMKgICoKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0 eC0+bmV3X3ZhKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5r KGN0eC0+bmV3X3ZhLCBjdHgtPnZtX2JvKTsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLy8gcHJldmVudCB0aGUgbmV3IEdQVVZBIGZyb20gYmVpbmcgZnJlZWQgaW4KPiDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBkcml2ZXJfbWFwcGluZ19jcmVhdGUoKQo+ IEBAIC01NzcsMjIgKzYxMSwyMyBAQAo+IMKgICrCoMKgwqDCoMKgaW50IGRyaXZlcl9ncHV2YV9y ZW1hcChzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcCwgdm9pZCAqX19jdHgpCj4gwqAgKsKgwqDCoMKg wqB7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9jb250ZXh0 ICpjdHggPSBfX2N0eDsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dmEgKnZhID0gb3AtPnJlbWFwLnVubWFwLT52YTsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbWFwKGN0eC0+cHJldl92YSwgY3R4LT5uZXh0X3Zh LCAmb3AtCj4gPnJlbWFwKTsKPiDCoCAqCj4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk cm1fZ3B1dmFfdW5saW5rKG9wLT5yZW1hcC51bm1hcC0+dmEpOwo+IC0gKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKga2ZyZWUob3AtPnJlbWFwLnVubWFwLT52YSk7Cj4gLSAqCj4gwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5yZW1hcC5wcmV2KSB7Cj4gLSAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoY3R4LT5wcmV2 X3ZhKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dmFfbGluayhjdHgtPnByZXZfdmEsIHZhLT52bV9ibyk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC0+cHJldl92YSA9IE5VTEw7Cj4gwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgICoKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAob3AtPnJlbWFwLm5leHQpIHsKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhjdHgtPm5leHRfdmEpOwo+ICsgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0 eC0+bmV4dF92YSwgdmEtPnZtX2JvKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY3R4LT5uZXh0X3ZhID0gTlVMTDsKPiDCoCAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gwqAgKgo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dw dXZhX3VubGluayh2YSk7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZSh2YSk7 Cj4gKyAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqAgKsKg wqDCoMKgwqB9Cj4gwqAgKgo+IEBAIC03NzEsNiArODA2LDE5NCBAQCBkcm1fZ3B1dm1fZGVzdHJv eShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSkKPiDCoH0KPiDCoEVYUE9SVF9TWU1CT0xfR1BMKGRy bV9ncHV2bV9kZXN0cm95KTsKPiDCoAo+ICsvKioKPiArICogZHJtX2dwdXZtX2JvX2NyZWF0ZSgp IC0gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHN0cnVjdAo+IGRybV9ncHV2bV9ibwo+ICsgKiBA Z3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiArICogQG9iajog VGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiArICoKPiAr ICogSWYgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSAmZHJt X2dwdXZtX29wcwo+ICsgKiB2bV9ib19hbGxvYygpIGNhbGxiYWNrIHRvIGFsbG9jYXRlLgo+ICsg Kgo+ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8gb24gc3VjY2Vz cywgTlVMTCBvbgoKS2VybmVsZG9jIHVzZXMgIlJldHVybjoiIHJhdGhlciB0aGFuICJSZXR1cm5z OiIsIChUaGlzIHNlZW1zIHRvIGEKY29tbW9uIHRoaW5nIHRocm91Z2hvdXQgdGhlIHNlcmllcyku Cgo+IGZhaWx1cmUKPiArICovCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gKgoKQW55IHBhcnRpY3Vs YXIgcmVhc29uIHRoZXJlJ3MgbGluZS1icmVhayBhZnRlciB0aGUgZnVuY3Rpb24gdHlwZSBldmVu CndoZW4gaXQgZml0cyB0aGUgfjEwMCBjaGFyIGxpbWl0PwoKPiArZHJtX2dwdXZtX2JvX2NyZWF0 ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoKCgo+ICt7Cj4gK8KgwqDCoMKg wqDCoMKgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9vcHMgKm9wcyA9IGdwdXZtLT5vcHM7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGlmIChvcHMgJiYgb3BzLT52bV9ib19hbGxvYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdm1fYm8gPSBvcHMtPnZtX2JvX2FsbG9jKCk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxz ZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGt6YWxsb2Moc2l6ZW9m KCp2bV9ibyksIEdGUF9LRVJORUwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHko IXZtX2JvKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHZtX2JvLT52bSA9IGdwdXZtOwo+ICvCoMKgwqDCoMKgwqDCoHZt X2JvLT5vYmogPSBvYmo7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGtyZWZfaW5pdCgmdm1fYm8tPmty ZWYpOwo+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bV9iby0+bGlzdC5ncHV2YSk7 Cj4gK8KgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fb2JqZWN0X2dldChvYmopOwoKUGVyaGFwcyBn cm91cCB0aGlzIHdpdGggdGhlIHZtX2JvLT5vYmogYXNzaWdubWVudCB0byBlbXBoYXNpemUgdGhh dAp0aGF0J3MgdGhlIHBvaW50ZXIgdGhhdCBnZXRzIHRoZSByZWZlcmVuY2U/Cgo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dw dXZtX2JvX2NyZWF0ZSk7Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtkcm1fZ3B1dm1fYm9fZGVzdHJv eShzdHJ1Y3Qga3JlZiAqa3JlZikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1 dm1fYm8gKnZtX2JvID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdAo+IGRybV9ncHV2bV9ibywK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtyZWYpOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtID0gdm1fYm8tPnZtOwo+ICvCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1fYm8tPm9iajsKPiAr wqDCoMKgwqDCoMKgwqBib29sIGxvY2sgPSAhZHJtX2dwdXZtX3Jlc3ZfcHJvdGVjdGVkKGdwdXZt KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9i aik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFsb2NrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dm1fcmVzdl9hc3NlcnRfaGVsZChncHV2bSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGxpc3RfZGVsKCZ2bV9iby0+bGlzdC5lbnRyeS5nZW0pOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBkcm1fZ2VtX29iamVjdF9wdXQob2JqKTsKCk5vdCBzdXJlIGlmIHdlIGhhdmUgYW55IGRy aXZlcnMgdXRpbGl6aW5nIHZtX2JvX2ZyZWUoKSB5ZXQsIGJ1dCBpdAptaWdodCBtYWtlIHNlbnNl IHRvIG1vdmUgdGhlIGRybV9nZW1fb2JqZWN0X3B1dCgpIHVudGlsIGFmdGVyIHRoZQpmcmVlaW5n IGJlbG93LCBpbiBjYXNlIHZtX2JvX2ZyZWUoKSB3YW50cyB0byB1c2UgaXQ/Cgo+ICsKPiArwqDC oMKgwqDCoMKgwqBpZiAob3BzICYmIG9wcy0+dm1fYm9fZnJlZSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgb3BzLT52bV9ib19mcmVlKHZtX2JvKTsKPiArwqDCoMKgwqDCoMKgwqBl bHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKHZtX2JvKTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGRybV9ncHV2bV9ib19wdXQoKSAtIGRyb3AgYSBzdHJ1Y3QgZHJtX2dw dXZtX2JvIHJlZmVyZW5jZQo+ICsgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvIHRvIHJlbGVh c2UgdGhlIHJlZmVyZW5jZSBvZgo+ICsgKgo+ICsgKiBUaGlzIHJlbGVhc2VzIGEgcmVmZXJlbmNl IHRvIEB2bV9iby4KPiArICoKPiArICogSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6 ZXJvLCB0aGUgJmdwdXZtX2JvIGlzIGRlc3Ryb3llZCwKPiB3aGljaAo+ICsgKiBpbmNsdWRlcyBy ZW1vdmluZyBpdCBmcm9tIHRoZSBHRU1zIGdwdXZhIGxpc3QuIEhlbmNlLCBpZiBhIGNhbGwKPiB0 byB0aGlzCj4gKyAqIGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBsZXQgdGhlIHJlZmVyZW5jZSBj b3VudCB0byB6ZXJvIHRoZQo+IGNhbGxlciBtdXN0Cj4gKyAqIGhvbGQgdGhlIGRtYS1yZXN2IG9y IGRyaXZlciBzcGVjaWZpYyBHRU0gZ3B1dmEgbG9jay4KPiArICovCj4gK3ZvaWQKPiArZHJtX2dw dXZtX2JvX3B1dChzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibykKPiArewo+ICvCoMKgwqDCoMKg wqDCoGlmICh2bV9ibykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga3JlZl9wdXQo JnZtX2JvLT5rcmVmLCBkcm1fZ3B1dm1fYm9fZGVzdHJveSk7Cj4gK30KPiArRVhQT1JUX1NZTUJP TF9HUEwoZHJtX2dwdXZtX2JvX3B1dCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9ncHV2bV9i byAqCj4gK19fZHJtX2dwdXZtX2JvX2ZpbmQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibyh2bV9ibywgb2Jq KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodm1fYm8tPnZtID09IGdwdXZt KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGRybV9ncHV2bV9ib19maW5kKCkgLSBmaW5kIHRoZSAmZHJtX2dwdXZtX2JvIGZvciB0 aGUgZ2l2ZW4KPiArICogJmRybV9ncHV2bSBhbmQgJmRybV9nZW1fb2JqZWN0Cj4gKyAqIEBncHV2 bTogVGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ICsgKiBAb2JqOiBUaGUg JmRybV9nZW1fb2JqZWN0IGJlaW5nIG1hcHBlZCBpbiB0aGUgQGdwdXZtLgo+ICsgKgo+ICsgKiBG aW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YgdGhl IGdpdmVuCj4gKyAqICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVjdC4gSWYgZm91bmQsIGlu Y3JlYXNlcyB0aGUgcmVmZXJlbmNlCj4gKyAqIGNvdW50IG9mIHRoZSAmZHJtX2dwdXZtX2JvIGFj Y29yZGluZ2x5Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1 dm1fYm8gb24gc3VjY2VzcywgTlVMTCBvbgo+IGZhaWx1cmUKPiArICovCj4gK3N0cnVjdCBkcm1f Z3B1dm1fYm8gKgo+ICtkcm1fZ3B1dm1fYm9fZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyA9 IF9fZHJtX2dwdXZtX2JvX2ZpbmQoZ3B1dm0sIG9iaik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiB2bV9ibyA/IGRybV9ncHV2bV9ib19nZXQodm1fYm8pIDogTlVMTDsKPiArfQo+ICtFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fZmluZCk7Cj4gKwo+ICsvKioKPiArICogZHJtX2dw dXZtX2JvX29idGFpbigpIC0gb2J0YWlucyBhbmQgaW5zdGFuY2Ugb2YgdGhlICZkcm1fZ3B1dm1f Ym8KPiBmb3IgdGhlCj4gKyAqIGdpdmVuICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVjdAo+ ICsgKiBAZ3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiArICog QG9iajogVGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiAr ICoKPiArICogRmluZCB0aGUgJmRybV9ncHV2bV9ibyByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmF0 aW9uIG9mIHRoZSBnaXZlbgo+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QuIElm IGZvdW5kLCBpbmNyZWFzZXMgdGhlIHJlZmVyZW5jZQo+ICsgKiBjb3VudCBvZiB0aGUgJmRybV9n cHV2bV9ibyBhY2NvcmRpbmdseS4gSWYgbm90IGZvdW5kLCBhbGxvY2F0ZXMgYQo+IG5ldwo+ICsg KiAmZHJtX2dwdXZtX2JvLgo+ICsgKgo+ICsgKiBBIG5ldyAmZHJtX2dwdXZtX2JvIGlzIGFkZGVk IHRvIHRoZSBHRU1zIGdwdXZhIGxpc3QuCj4gKyAqCj4gKyAqIFJldHVybnM6IGEgcG9pbnRlciB0 byB0aGUgJmRybV9ncHV2bV9ibyBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uCj4gZmFpbHVyZQo+ ICsgKi8KPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2RybV9ncHV2bV9ib19vYnRhaW4oc3Ry dWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRy bV9ncHV2bV9ib19maW5kKGdwdXZtLCBvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19jcmVhdGUoZ3B1dm0sIG9iaik7Cj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCF2bV9ibykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3Rh aWwoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSwgJm9iai0+Z3B1dmEubGlzdCk7CgpMb2NrZGVwIGNo ZWNrPwoKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ICt9Cj4gK0VYUE9SVF9T WU1CT0xfR1BMKGRybV9ncHV2bV9ib19vYnRhaW4pOwo+ICsKPiArLyoqCj4gKyAqIGRybV9ncHV2 bV9ib19vYnRhaW5fcHJlYWxsb2MoKSAtIG9idGFpbnMgYW5kIGluc3RhbmNlIG9mIHRoZQo+ICZk cm1fZ3B1dm1fYm8KPiArICogZm9yIHRoZSBnaXZlbiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9v YmplY3QKPiArICogQF9fdm1fYm86IEEgcHJlLWFsbG9jYXRlZCBzdHJ1Y3QgZHJtX2dwdXZtX2Jv Lgo+ICsgKgo+ICsgKiBGaW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29t YmluYXRpb24gb2YgdGhlIGdpdmVuCj4gKyAqICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVj dC4gSWYgZm91bmQsIGluY3JlYXNlcyB0aGUgcmVmZXJlbmNlCj4gKyAqIGNvdW50IG9mIHRoZSBm b3VuZCAmZHJtX2dwdXZtX2JvIGFjY29yZGluZ2x5LCB3aGlsZSB0aGUgQF9fdm1fYm8KPiByZWZl cmVuY2UKPiArICogY291bnQgaXMgZGVjcmVhc2VkLiBJZiBub3QgZm91bmQgQF9fdm1fYm8gaXMg cmV0dXJuZWQgd2l0aG91dAo+IGZ1cnRoZXIKPiArICogaW5jcmVhc2Ugb2YgdGhlIHJlZmVyZW5j ZSBjb3VudC4KPiArICoKPiArICogQSBuZXcgJmRybV9ncHV2bV9ibyBpcyBhZGRlZCB0byB0aGUg R0VNcyBncHV2YSBsaXN0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIGZv dW5kICZkcm1fZ3B1dm1fYm8gb3IgQF9fdm1fYm8gaWYgbm8KPiBleGlzdGluZwo+ICsgKiAmZHJt X2dwdXZtX2JvIHdhcyBmb3VuZAo+ICsgKi8KPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2Ry bV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2Moc3RydWN0IGRybV9ncHV2bV9ibyAqX192bV9ibykK PiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtID0gX192bV9iby0+ dm07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBfX3ZtX2Jv LT5vYmo7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHZtX2JvID0gZHJtX2dwdXZtX2JvX2ZpbmQoZ3B1dm0sIG9iaik7Cj4g K8KgwqDCoMKgwqDCoMKgaWYgKHZtX2JvKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2bV9ib19wdXQoX192bV9ibyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiB2bV9ibzsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGxpc3RfYWRkX3RhaWwoJl9fdm1fYm8tPmxpc3QuZW50cnkuZ2VtLCAmb2JqLT5ncHV2YS5s aXN0KTsKClBlcmhhcHMgYSBsb2NrZGVwIGNoZWNrIGhlcmU/Cgo+ICsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gX192bV9ibzsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9f b2J0YWluX3ByZWFsbG9jKTsKPiArCj4gwqBzdGF0aWMgaW50Cj4gwqBfX2RybV9ncHV2YV9pbnNl cnQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+IEBAIC04NjAsMjQgKzEwODMsMzMgQEAg RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZhX3JlbW92ZSk7Cj4gwqAvKioKPiDCoCAqIGRybV9n cHV2YV9saW5rKCkgLSBsaW5rIGEgJmRybV9ncHV2YQo+IMKgICogQHZhOiB0aGUgJmRybV9ncHV2 YSB0byBsaW5rCj4gKyAqIEB2bV9ibzogdGhlICZkcm1fZ3B1dm1fYm8gdG8gYWRkIHRoZSAmZHJt X2dwdXZhIHRvCj4gwqAgKgo+IC0gKiBUaGlzIGFkZHMgdGhlIGdpdmVuICZ2YSB0byB0aGUgR1BV IFZBIGxpc3Qgb2YgdGhlICZkcm1fZ2VtX29iamVjdAo+IGl0IGlzCj4gLSAqIGFzc29jaWF0ZWQg d2l0aC4KPiArICogVGhpcyBhZGRzIHRoZSBnaXZlbiAmdmEgdG8gdGhlIEdQVSBWQSBsaXN0IG9m IHRoZSAmZHJtX2dwdXZtX2JvCj4gYW5kIHRoZQo+ICsgKiAmZHJtX2dwdXZtX2JvIHRvIHRoZSAm ZHJtX2dlbV9vYmplY3QgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLgo+ICsgKgo+ICsgKiBGb3IgZXZl cnkgJmRybV9ncHV2YSBlbnRyeSBhZGRlZCB0byB0aGUgJmRybV9ncHV2bV9ibyBhbgo+IGFkZGl0 aW9uYWwKPiArICogcmVmZXJlbmNlIG9mIHRoZSBsYXR0ZXIgaXMgdGFrZW4uCj4gwqAgKgo+IMKg ICogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoZSBjYWxsZXIgdG8gcHJvdGVjdCB0aGUgR0VNJ3Mg R1BVVkEgbGlzdAo+IGFnYWluc3QKCk5JVDogUmVmZXJyaW5nIHRvIGEgImdlbSBvYmplY3QiIGFz IGEgIkdFTSIgY2F0Y2hlcyBteSBleWUgZXZlcnkgdGltZS4KUGVyaGFwcyB0aGF0IGhhcyBiZWNv bWUgY29tbW9uIHByYWN0aWNlPyBXaXRoIG15ICJpdCB1c2VkIHRvIGJlIGxpa2UuLiIKaGF0IG9u LCBJJ2QgdXNlIGdlbSBvYmplY3QuCgo+IC0gKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyB0aGUg R0VNcyBkbWFfcmVzdiBsb2NrLgo+ICsgKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyBlaXRoZXIg dGhlIEdFTXMgZG1hX3Jlc3YgbG9jayBvciBhIGRyaXZlcgo+IHNwZWNpZmljCj4gKyAqIGxvY2sg c2V0IHRocm91Z2ggZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygpLgo+IMKgICovCj4gwqB2b2lkCj4g LWRybV9ncHV2YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+ICtkcm1fZ3B1dmFfbGluayhz dHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4gwqB7Cj4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdmEtPmdlbS5vYmo7 Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KCFvYmopKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgV0FSTl9P TihvYmogIT0gdm1fYm8tPm9iaik7CgpDYW4gd2UgdXNlIGRybV9XQVJOIGhlcmU/Cgo+IMKgwqDC oMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiDCoAo+IC3C oMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJnZhLT5nZW0uZW50cnksICZvYmotPmdwdXZhLmxp c3QpOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19nZXQodm1fYm8pOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB2YS0+dm1fYm8gPSB2bV9ibzsKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2FkZF90 YWlsKCZ2YS0+Z2VtLmVudHJ5LCAmdm1fYm8tPmxpc3QuZ3B1dmEpOwo+IMKgfQo+IMKgRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2dwdXZhX2xpbmspOwo+IMKgCj4gQEAgLTg4OCwxMyArMTEyMCwyMiBA QCBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dmFfbGluayk7Cj4gwqAgKiBUaGlzIHJlbW92ZXMg dGhlIGdpdmVuICZ2YSBmcm9tIHRoZSBHUFUgVkEgbGlzdCBvZiB0aGUKPiAmZHJtX2dlbV9vYmpl Y3QgaXQgaXMKPiDCoCAqIGFzc29jaWF0ZWQgd2l0aC4KPiDCoCAqCj4gKyAqIFRoaXMgcmVtb3Zl cyB0aGUgZ2l2ZW4gJnZhIGZyb20gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ICZkcm1fZ3B1dm1f Ym8gYW5kCj4gKyAqIHRoZSAmZHJtX2dwdXZtX2JvIGZyb20gdGhlICZkcm1fZ2VtX29iamVjdCBp dCBpcyBhc3NvY2lhdGVkIHdpdGgKPiBpbiBjYXNlCj4gKyAqIHRoaXMgY2FsbCB1bmxpbmtzIHRo ZSBsYXN0ICZkcm1fZ3B1dmEgZnJvbSB0aGUgJmRybV9ncHV2bV9iby4KPiArICoKPiArICogRm9y IGV2ZXJ5ICZkcm1fZ3B1dmEgZW50cnkgcmVtb3ZlZCBmcm9tIHRoZSAmZHJtX2dwdXZtX2JvIGEK PiByZWZlcmVuY2Ugb2YKPiArICogdGhlIGxhdHRlciBpcyBkcm9wcGVkLgo+ICsgKgo+IMKgICog VGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoZSBjYWxsZXIgdG8gcHJvdGVjdCB0aGUgR0VNJ3MgR1BV VkEgbGlzdAo+IGFnYWluc3QKPiAtICogY29uY3VycmVudCBhY2Nlc3MgdXNpbmcgdGhlIEdFTXMg ZG1hX3Jlc3YgbG9jay4KPiArICogY29uY3VycmVudCBhY2Nlc3MgdXNpbmcgZWl0aGVyIHRoZSBH RU1zIGRtYV9yZXN2IGxvY2sgb3IgYSBkcml2ZXIKPiBzcGVjaWZpYwo+ICsgKiBsb2NrIHNldCB0 aHJvdWdoIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiDCoCAqLwo+IMKgdm9pZAo+IMKgZHJt X2dwdXZhX3VubGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSkKPiDCoHsKPiDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2YS0+Z2VtLm9iajsKPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyA9IHZhLT52bV9ibzsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqBpZiAodW5saWtlbHkoIW9iaikpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm47Cj4gQEAgLTkwMiw2ICsxMTQzLDkgQEAgZHJtX2dwdXZhX3VubGluayhz dHJ1Y3QgZHJtX2dwdXZhICp2YSkKPiDCoMKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3Nl cnRfbG9ja19oZWxkKG9iaik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9kZWxfaW5pdCgm dmEtPmdlbS5lbnRyeSk7Cj4gK8KgwqDCoMKgwqDCoMKgdmEtPnZtX2JvID0gTlVMTDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dCh2bV9ibyk7Cj4gwqB9Cj4gwqBFWFBPUlRf U1lNQk9MX0dQTChkcm1fZ3B1dmFfdW5saW5rKTsKPiDCoAo+IEBAIC0xMDQ2LDEwICsxMjkwLDEw IEBAIGRybV9ncHV2YV9yZW1hcChzdHJ1Y3QgZHJtX2dwdXZhICpwcmV2LAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV4dCwKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BfcmVtYXAgKm9wKQo+IMKg ewo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKmN1cnIgPSBvcC0+dW5tYXAtPnZh Owo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtID0gY3Vyci0+dm07Cj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmEgPSBvcC0+dW5tYXAtPnZhOwo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtID0gdmEtPnZtOwo+IMKgCj4gLcKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbW92ZShjdXJyKTsKPiArwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dmFfcmVtb3ZlKHZhKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPnByZXYpIHsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pbml0X2Zyb21fb3Ao cHJldiwgb3AtPnByZXYpOwo+IEBAIC0xNjkzLDkgKzE5MzcsOCBAQCBkcm1fZ3B1dm1fcHJlZmV0 Y2hfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtCj4gKmdwdXZtLAo+IMKgRVhQT1JUX1NZTUJP TF9HUEwoZHJtX2dwdXZtX3ByZWZldGNoX29wc19jcmVhdGUpOwo+IMKgCj4gwqAvKioKPiAtICog ZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKCkgLSBjcmVhdGVzIHRoZSAmZHJtX2dwdXZh X29wcyB0bwo+IHVubWFwIGEgR0VNCj4gLSAqIEBncHV2bTogdGhlICZkcm1fZ3B1dm0gcmVwcmVz ZW50aW5nIHRoZSBHUFUgVkEgc3BhY2UKPiAtICogQG9iajogdGhlICZkcm1fZ2VtX29iamVjdCB0 byB1bm1hcAo+ICsgKiBkcm1fZ3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0 aGUgJmRybV9ncHV2YV9vcHMgdG8KPiB1bm1hcCBhIEdFTQo+ICsgKiBAdm1fYm86IHRoZSAmZHJt X2dwdXZtX2JvIGFic3RyYWN0aW9uCj4gwqAgKgo+IMKgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVz IGEgbGlzdCBvZiBvcGVyYXRpb25zIHRvIHBlcmZvcm0gdW5tYXBwaW5nCj4gZm9yIGV2ZXJ5Cj4g wqAgKiBHUFVWQSBhdHRhY2hlZCB0byBhIEdFTS4KPiBAQCAtMTcxMiwxNSArMTk1NSwxNCBAQAo+ IEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9wcmVmZXRjaF9vcHNfY3JlYXRlKTsKPiDCoCAq IFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgJmRybV9ncHV2YV9vcHMgb24gc3VjY2VzcywgYW4g RVJSX1BUUgo+IG9uIGZhaWx1cmUKPiDCoCAqLwo+IMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKgo+ IC1kcm1fZ3B1dm1fZ2VtX3VubWFwX29wc19jcmVhdGUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0s Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK2RybV9ncHV2bV9ib191bm1hcF9v cHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKQo+IMKgewo+IMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZhX29wICpvcDsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7 Cj4gwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBkcm1fZ2Vt X2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dw dXZhX2Fzc2VydF9sb2NrX2hlbGQodm1fYm8tPm9iaik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg b3BzID0ga3phbGxvYyhzaXplb2YoKm9wcyksIEdGUF9LRVJORUwpOwo+IMKgwqDCoMKgwqDCoMKg wqBpZiAoIW9wcykKPiBAQCAtMTcyOCw4ICsxOTcwLDggQEAgZHJtX2dwdXZtX2dlbV91bm1hcF9v cHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0KPiAqZ3B1dm0sCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgSU5JVF9MSVNUX0hFQUQoJm9wcy0+bGlzdCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBkcm1f Z2VtX2Zvcl9lYWNoX2dwdXZhKHZhLCBvYmopIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgb3AgPSBncHV2YV9vcF9hbGxvYyhncHV2bSk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dw dXZtX2JvX2Zvcl9lYWNoX3ZhKHZhLCB2bV9ibykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBvcCA9IGdwdXZhX29wX2FsbG9jKHZtX2JvLT52bSk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIW9wKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT01FTTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9mcmVlX29wczsKPiBAQCAtMTc0 MywxMCArMTk4NSwxMCBAQCBkcm1fZ3B1dm1fZ2VtX3VubWFwX29wc19jcmVhdGUoc3RydWN0Cj4g ZHJtX2dwdXZtICpncHV2bSwKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG9wczsKPiDCoAo+IMKg ZXJyX2ZyZWVfb3BzOgo+IC3CoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9vcHNfZnJlZShncHV2bSwg b3BzKTsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfb3BzX2ZyZWUodm1fYm8tPnZtLCBvcHMp Owo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihyZXQpOwo+IMKgfQo+IC1FWFBPUlRf U1lNQk9MX0dQTChkcm1fZ3B1dm1fZ2VtX3VubWFwX29wc19jcmVhdGUpOwo+ICtFWFBPUlRfU1lN Qk9MX0dQTChkcm1fZ3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0ZSk7Cj4gwqAKPiDCoC8qKgo+IMKg ICogZHJtX2dwdXZhX29wc19mcmVlKCkgLSBmcmVlIHRoZSBnaXZlbiAmZHJtX2dwdXZhX29wcwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYwo+IGIv ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiBpbmRleCA5M2FkMmJhN2Vj OGIuLjRlNDZmODUwZTY1ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X3V2bW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZt bS5jCj4gQEAgLTYyLDYgKzYyLDggQEAgc3RydWN0IGJpbmRfam9iX29wIHsKPiDCoMKgwqDCoMKg wqDCoMKgZW51bSB2bV9iaW5kX29wIG9wOwo+IMKgwqDCoMKgwqDCoMKgwqB1MzIgZmxhZ3M7Cj4g wqAKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiArCj4gwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 NjQgYWRkcjsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCByYW5nZTsKPiBA QCAtMTExMywyMiArMTExNSwyOCBAQCBiaW5kX3ZhbGlkYXRlX3JlZ2lvbihzdHJ1Y3Qgbm91dmVh dV9qb2IgKmpvYikKPiDCoH0KPiDCoAo+IMKgc3RhdGljIHZvaWQKPiAtYmluZF9saW5rX2dwdXZh cyhzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzLCBzdHJ1Y3QKPiBub3V2ZWF1X3V2bWFfcHJlYWxs b2MgKm5ldykKPiArYmluZF9saW5rX2dwdXZhcyhzdHJ1Y3QgYmluZF9qb2Jfb3AgKmJvcCkKPiDC oHsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91dm1hX3ByZWFsbG9jICpuZXcgPSAm Ym9wLT5uZXc7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8gPSBi b3AtPnZtX2JvOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHMgPSBi b3AtPm9wczsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3A7Cj4gwqAK PiDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2Zvcl9lYWNoX29wKG9wLCBvcHMpIHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAob3AtPm9wKSB7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9HUFVWQV9PUF9NQVA6Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3 LT5tYXAtPnZhKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9saW5rKCZuZXctPm1hcC0+dmEsIHZtX2JvKTsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1BfUkVNQVA6Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOiB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhICp2 YSA9IG9wLT5yZW1hcC51bm1hcC0+dmE7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAucHJldikKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1 dmFfbGluaygmbmV3LT5wcmV2LT52YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+cHJl di0+dmEsIHZhLQo+ID52bV9ibyk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5yZW1hcC5uZXh0KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5r KCZuZXctPm5leHQtPnZhKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRybV9ncHV2YV91bmxpbmsob3AtPnJlbWFwLnVubWFwLT52YSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHJtX2dwdXZhX2xpbmsoJm5ldy0+bmV4dC0+dmEsIHZhLQo+ID52bV9ibyk7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZh KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1BfVU5NQVA6Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayhvcC0+dW5t YXAudmEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+IEBAIC0xMTUwLDEwICsxMTU4LDE4IEBAIG5vdXZlYXVfdXZtbV9iaW5kX2pvYl9z dWJtaXQoc3RydWN0Cj4gbm91dmVhdV9qb2IgKmpvYikKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBs aXN0X2Zvcl9lYWNoX29wKG9wLCAmYmluZF9qb2ItPm9wcykgewo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5vcCA9PSBPUF9NQVApIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wLT5nZW0ub2JqID0gZHJtX2dlbV9vYmpl Y3RfbG9va3VwKGpvYi0KPiA+ZmlsZV9wcml2LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0KPiA+Z2VtLmhhbmRsZSk7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW9wLT5n ZW0ub2JqKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGpvYi0+ ZmlsZV9wcml2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG9wLT5nZW0uaGFuZGxlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmICghKG9wLT5nZW0ub2JqID0gb2JqKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9F TlQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZG1hX3Jlc3ZfbG9jayhvYmotPnJlc3YsIE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPnZtX2JvID0gZHJtX2dwdXZtX2JvX29idGFpbigm dXZtbS0+YmFzZSwKPiBvYmopOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZG1hX3Jlc3ZfdW5sb2NrKG9iai0+cmVzdik7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKG9wLT52bV9ibykpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIFBUUl9FUlIob3AtPnZtX2JvKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0g YmluZF92YWxpZGF0ZV9vcChqb2IsIG9wKTsKPiBAQCAtMTM2NCw3ICsxMzgwLDcgQEAgbm91dmVh dV91dm1tX2JpbmRfam9iX3N1Ym1pdChzdHJ1Y3Qgbm91dmVhdV9qb2IKPiAqam9iKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBPUF9VTk1BUF9TUEFSU0U6Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE9QX01BUDoKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNhc2UgT1BfVU5NQVA6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiaW5kX2xpbmtfZ3B1dmFzKG9wLT5vcHMsICZvcC0+bmV3 KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJpbmRf bGlua19ncHV2YXMob3ApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVmYXVs dDoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiBAQCAtMTUxMSw2ICsxNTI3LDEyIEBAIG5vdXZlYXVfdXZtbV9iaW5kX2pvYl9mcmVlX3dv cmtfZm4oc3RydWN0Cj4gd29ya19zdHJ1Y3QgKndvcmspCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoIUlTX0VSUl9PUl9OVUxMKG9wLT5vcHMpKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9vcHNfZnJlZSgmdXZt bS0+YmFzZSwgb3AtPm9wcyk7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFJU19FUlJfT1JfTlVMTChvcC0+dm1fYm8pKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9sb2NrKG9iai0+cmVzdiwgTlVMTCk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1 dm1fYm9fcHV0KG9wLT52bV9ibyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkbWFfcmVzdl91bmxvY2sob2JqLT5yZXN2KTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChvYmopCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiBAQCAtMTc3 NiwxNSArMTc5OCwxOCBAQCB2b2lkCj4gwqBub3V2ZWF1X3V2bW1fYm9fbWFwX2FsbChzdHJ1Y3Qg bm91dmVhdV9ibyAqbnZibywgc3RydWN0IG5vdXZlYXVfbWVtCj4gKm1lbSkKPiDCoHsKPiDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmbnZiby0+Ym8uYmFzZTsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jl c3ZfYXNzZXJ0X2hlbGQob2JqLT5yZXN2KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGRybV9nZW1f Zm9yX2VhY2hfZ3B1dmEodmEsIG9iaikgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0gdXZtYV9mcm9tX3ZhKHZhKTsKPiArwqDCoMKg wqDCoMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvKHZtX2JvLCBvYmopIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX2Zvcl9lYWNoX3ZhKHZhLCB2bV9i bykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9IHV2bWFfZnJvbV92YSh2YSk7Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1hX21hcCh1dm1hLCBtZW0pOwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52YWxpZGF0ZSh2YSwgZmFs c2UpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm91 dmVhdV91dm1hX21hcCh1dm1hLCBtZW0pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFsaWRhdGUodmEsIGZhbHNlKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqB9Cj4g wqAKPiBAQCAtMTc5MiwxNSArMTgxNywxOCBAQCB2b2lkCj4gwqBub3V2ZWF1X3V2bW1fYm9fdW5t YXBfYWxsKHN0cnVjdCBub3V2ZWF1X2JvICpudmJvKQo+IMKgewo+IMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZudmJvLT5iby5iYXNlOwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZhICp2YTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVs ZChvYmotPnJlc3YpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2 YSh2YSwgb2JqKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBub3V2 ZWF1X3V2bWEgKnV2bWEgPSB1dm1hX2Zyb21fdmEodmEpOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9n ZW1fZm9yX2VhY2hfZ3B1dm1fYm8odm1fYm8sIG9iaikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmEodmEsIHZtX2JvKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91 dm1hICp1dm1hID0gdXZtYV9mcm9tX3ZhKHZhKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfdW5tYXAodXZtYSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pbnZhbGlkYXRlKHZhLCB0cnVlKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdXZlYXVfdXZtYV91bm1hcCh1 dm1hKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRy bV9ncHV2YV9pbnZhbGlkYXRlKHZhLCB0cnVlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqB9Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2dlbS5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gaW5kZXggMTYzNjQ0 ODdmZGU5Li4zNjk1MDU0NDdhY2QgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5o Cj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gQEAgLTU4MCw3ICs1ODAsNyBAQCBpbnQg ZHJtX2dlbV9ldmljdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gwqAgKiBkcm1fZ2Vt X2dwdXZhX2luaXQoKSAtIGluaXRpYWxpemUgdGhlIGdwdXZhIGxpc3Qgb2YgYSBHRU0gb2JqZWN0 Cj4gwqAgKiBAb2JqOiB0aGUgJmRybV9nZW1fb2JqZWN0Cj4gwqAgKgo+IC0gKiBUaGlzIGluaXRp YWxpemVzIHRoZSAmZHJtX2dlbV9vYmplY3QncyAmZHJtX2dwdXZhIGxpc3QuCj4gKyAqIFRoaXMg aW5pdGlhbGl6ZXMgdGhlICZkcm1fZ2VtX29iamVjdCdzICZkcm1fZ3B1dm1fYm8gbGlzdC4KPiDC oCAqCj4gwqAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWNlc3NhcnkgZm9yIGRy aXZlcnMgaW50ZW5kaW5nIHRvCj4gc3VwcG9ydCB0aGUKPiDCoCAqICZkcm1fZHJpdmVyX2ZlYXR1 cmUgRFJJVkVSX0dFTV9HUFVWQS4KPiBAQCAtNTkzLDI4ICs1OTMsMjggQEAgc3RhdGljIGlubGlu ZSB2b2lkIGRybV9nZW1fZ3B1dmFfaW5pdChzdHJ1Y3QKPiBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ IMKgfQo+IMKgCj4gwqAvKioKPiAtICogZHJtX2dlbV9mb3JfZWFjaF9ncHV2YSgpIC0gaXRlcm5h dG9yIHRvIHdhbGsgb3ZlciBhIGxpc3Qgb2YKPiBncHV2YXMKPiAtICogQGVudHJ5X186ICZkcm1f Z3B1dmEgc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbgo+IHN0ZXAKPiAt ICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dwdXZhcyB0byB3YWxrIGFy ZQo+IGFzc29jaWF0ZWQgd2l0aAo+ICsgKiBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvKCkgLSBp dGVyYXRvciB0byB3YWxrIG92ZXIgYSBsaXN0IG9mCj4gJmRybV9ncHV2bV9ibwo+ICsgKiBAZW50 cnlfXzogJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmUgdG8gYXNzaWduIHRvIGluIGVhY2ggaXRlcmF0 aW9uCj4gc3RlcAo+ICsgKiBAb2JqX186IHRoZSAmZHJtX2dlbV9vYmplY3QgdGhlICZkcm1fZ3B1 dm1fYm8gdG8gd2FsayBhcmUKPiBhc3NvY2lhdGVkIHdpdGgKPiDCoCAqCj4gLSAqIFRoaXMgaXRl cmF0b3Igd2Fsa3Mgb3ZlciBhbGwgJmRybV9ncHV2YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQKPiB3 aXRoIHRoZQo+IC0gKiAmZHJtX2dwdXZhX21hbmFnZXIuCj4gKyAqIFRoaXMgaXRlcmF0b3Igd2Fs a3Mgb3ZlciBhbGwgJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQKPiB3aXRoIHRo ZQo+ICsgKiAmZHJtX2dlbV9vYmplY3QuCj4gwqAgKi8KPiAtI2RlZmluZSBkcm1fZ2VtX2Zvcl9l YWNoX2dwdXZhKGVudHJ5X18sIG9ial9fKSBcCj4gLcKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFj aF9lbnRyeShlbnRyeV9fLCAmKG9ial9fKS0+Z3B1dmEubGlzdCwgZ2VtLmVudHJ5KQo+ICsjZGVm aW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm8oZW50cnlfXywgb2JqX18pIFwKPiArwqDCoMKg wqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5X18sICYob2JqX18pLT5ncHV2YS5saXN0 LAo+IGxpc3QuZW50cnkuZ2VtKQo+IMKgCj4gwqAvKioKPiAtICogZHJtX2dlbV9mb3JfZWFjaF9n cHV2YV9zYWZlKCkgLSBpdGVybmF0b3IgdG8gc2FmZWx5IHdhbGsgb3ZlciBhCj4gbGlzdCBvZgo+ IC0gKiBncHV2YXMKPiAtICogQGVudHJ5X186ICZkcm1fZ3B1dmEgc3RydWN0dXJlIHRvIGFzc2ln biB0byBpbiBlYWNoIGl0ZXJhdGlvbgo+IHN0ZXAKPiAtICogQG5leHRfXzogJm5leHQgJmRybV9n cHV2YSB0byBzdG9yZSB0aGUgbmV4dCBzdGVwCj4gLSAqIEBvYmpfXzogdGhlICZkcm1fZ2VtX29i amVjdCB0aGUgJmRybV9ncHV2YXMgdG8gd2FsayBhcmUKPiBhc3NvY2lhdGVkIHdpdGgKPiArICog ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ib19zYWZlKCkgLSBpdGVyYXRvciB0byBzYWZlbHkgd2Fs ayBvdmVyIGEKPiBsaXN0IG9mCj4gKyAqICZkcm1fZ3B1dm1fYm8KPiArICogQGVudHJ5X186ICZk cm1fZ3B1dm1fYm9zdHJ1Y3R1cmUgdG8gYXNzaWduIHRvIGluIGVhY2ggaXRlcmF0aW9uCj4gc3Rl cAo+ICsgKiBAbmV4dF9fOiAmbmV4dCAmZHJtX2dwdXZtX2JvIHRvIHN0b3JlIHRoZSBuZXh0IHN0 ZXAKPiArICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dwdXZtX2JvIHRv IHdhbGsgYXJlCj4gYXNzb2NpYXRlZCB3aXRoCj4gwqAgKgo+IC0gKiBUaGlzIGl0ZXJhdG9yIHdh bGtzIG92ZXIgYWxsICZkcm1fZ3B1dmEgc3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gd2l0aCB0aGUK PiArICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dwdXZtX2JvIHN0cnVjdHVy ZXMgYXNzb2NpYXRlZAo+IHdpdGggdGhlCj4gwqAgKiAmZHJtX2dlbV9vYmplY3QuIEl0IGlzIGlt cGxlbWVudGVkIHdpdGgKPiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoKSwgaGVuY2UKPiDCoCAq IGl0IGlzIHNhdmUgYWdhaW5zdCByZW1vdmFsIG9mIGVsZW1lbnRzLgo+IMKgICovCj4gLSNkZWZp bmUgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YV9zYWZlKGVudHJ5X18sIG5leHRfXywgb2JqX18pIFwK PiAtwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnlfXywgbmV4dF9f LCAmKG9ial9fKS0KPiA+Z3B1dmEubGlzdCwgZ2VtLmVudHJ5KQo+ICsjZGVmaW5lIGRybV9nZW1f Zm9yX2VhY2hfZ3B1dm1fYm9fc2FmZShlbnRyeV9fLCBuZXh0X18sIG9ial9fKSBcCj4gK8KgwqDC oMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5X18sIG5leHRfXywgJihvYmpf XyktCj4gPmdwdXZhLmxpc3QsIGxpc3QuZW50cnkuZ2VtKQo+IMKgCj4gwqAjZW5kaWYgLyogX19E Uk1fR0VNX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaCBiL2lu Y2x1ZGUvZHJtL2RybV9ncHV2bS5oCj4gaW5kZXggMTM1MzlmMzJjMmUyLi5kZGIwYjhkMzIzY2Yg MTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiArKysgYi9pbmNsdWRlL2Ry bS9kcm1fZ3B1dm0uaAo+IEBAIC0yNiwxMiArMjYsMTQgQEAKPiDCoCAqLwo+IMKgCj4gwqAjaW5j bHVkZSA8bGludXgvbGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLXJlc3YuaD4KPiDCoCNp bmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KPiDCoCNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+IMKg Cj4gwqAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiDCoAo+IMKgc3RydWN0IGRybV9ncHV2bTsK PiArc3RydWN0IGRybV9ncHV2bV9ibzsKPiDCoHN0cnVjdCBkcm1fZ3B1dm1fb3BzOwo+IMKgCj4g wqAvKioKPiBAQCAtNzIsNiArNzQsMTIgQEAgc3RydWN0IGRybV9ncHV2YSB7Cj4gwqDCoMKgwqDC oMKgwqDCoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiDCoAo+ ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEB2bV9ibzogdGhlICZkcm1f Z3B1dm1fYm8gYWJzdHJhY3Rpb24gZm9yIHRoZSBtYXBwZWQKPiArwqDCoMKgwqDCoMKgwqAgKiAm ZHJtX2dlbV9vYmplY3QKPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoC8qKgo+IMKgwqDC oMKgwqDCoMKgwqAgKiBAZmxhZ3M6IHRoZSAmZHJtX2dwdXZhX2ZsYWdzIGZvciB0aGlzIG1hcHBp bmcKPiDCoMKgwqDCoMKgwqDCoMKgICovCj4gQEAgLTEwNyw3ICsxMTUsNyBAQCBzdHJ1Y3QgZHJt X2dwdXZhIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGVudHJ5OiB0aGUgJmxpc3RfaGVh ZCB0byBhdHRhY2ggdGhpcyBvYmplY3QgdG8gYQo+ICZkcm1fZ2VtX29iamVjdAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAZW50cnk6IHRoZSAmbGlzdF9oZWFkIHRvIGF0dGFj aCB0aGlzIG9iamVjdCB0byBhCj4gJmRybV9ncHV2bV9ibwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg bGlzdF9oZWFkIGVudHJ5Owo+IMKgwqDCoMKgwqDCoMKgwqB9IGdlbTsKPiBAQCAtMTQwLDcgKzE0 OCw3IEBAIHN0cnVjdCBkcm1fZ3B1dmEgewo+IMKgaW50IGRybV9ncHV2YV9pbnNlcnQoc3RydWN0 IGRybV9ncHV2bSAqZ3B1dm0sIHN0cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiDCoHZvaWQgZHJtX2dw dXZhX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXZhICp2YSk7Cj4gwqAKPiAtdm9pZCBkcm1fZ3B1dmFf bGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSk7Cj4gK3ZvaWQgZHJtX2dwdXZhX2xpbmsoc3RydWN0 IGRybV9ncHV2YSAqdmEsIHN0cnVjdCBkcm1fZ3B1dm1fYm8KPiAqdm1fYm8pOwo+IMKgdm9pZCBk cm1fZ3B1dmFfdW5saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiDCoAo+IMKgc3RydWN0IGRy bV9ncHV2YSAqZHJtX2dwdXZhX2ZpbmQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gQEAgLTE4 NywxMCArMTk1LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkcm1fZ3B1dmFfaW52YWxpZGF0ZWQo c3RydWN0Cj4gZHJtX2dwdXZhICp2YSkKPiDCoCAqIGVudW0gZHJtX2dwdXZtX2ZsYWdzIC0gZmxh Z3MgZm9yIHN0cnVjdCBkcm1fZ3B1dm0KPiDCoCAqLwo+IMKgZW51bSBkcm1fZ3B1dm1fZmxhZ3Mg ewo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBEUk1fR1BVVk1fUkVT Vl9QUk9URUNURUQ6IEdQVVZNIGlzIHByb3RlY3RlZCBleHRlcm5hbGx5Cj4gYnkgdGhlCj4gK8Kg wqDCoMKgwqDCoMKgICogR1BVVk0ncyAmZG1hX3Jlc3YgbG9jawo+ICvCoMKgwqDCoMKgwqDCoCAq Lwo+ICvCoMKgwqDCoMKgwqDCoERSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRCA9ICgxIDw8IDApLAo+ ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gwqDCoMKgwqDCoMKgwqDCoCAqIEBEUk1fR1BVVk1f VVNFUkJJVFM6IHVzZXIgZGVmaW5lZCBiaXRzCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IC3CoMKg wqDCoMKgwqDCoERSTV9HUFVWTV9VU0VSQklUUyA9ICgxIDw8IDApLAo+ICvCoMKgwqDCoMKgwqDC oERSTV9HUFVWTV9VU0VSQklUUyA9ICgxIDw8IDEpLAo+IMKgfTsKPiDCoAo+IMKgLyoqCj4gQEAg LTI3Miw2ICsyODYsMTkgQEAgYm9vbCBkcm1fZ3B1dm1faW50ZXJ2YWxfZW1wdHkoc3RydWN0IGRy bV9ncHV2bQo+ICpncHV2bSwgdTY0IGFkZHIsIHU2NCByYW5nZSk7Cj4gwqBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKgo+IMKgZHJtX2dwdXZtX3Jvb3Rfb2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pOwo+IMKgCj4gKy8qKgo+ICsgKiBkcm1fZ3B1dm1fcmVzdl9wcm90ZWN0ZWQoKSAt IGluZGljYXRlcyB3aGV0aGVyCj4gJkRSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRCBpcwo+ICsgKiBz ZXQKPiArICogQGdwdXZtOiB0aGUgJmRybV9ncHV2bQo+ICsgKgo+ICsgKiBSZXR1cm5zOiB0cnVl IGlmICZEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQgaXMgc2V0LCBmYWxzZQo+IG90aGVyd2lzZS4K PiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9vbAo+ICtkcm1fZ3B1dm1fcmVzdl9wcm90ZWN0ZWQo c3RydWN0IGRybV9ncHV2bSAqZ3B1dm0pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZ3B1 dm0tPmZsYWdzICYgRFJNX0dQVVZNX1JFU1ZfUFJPVEVDVEVEOwo+ICt9Cj4gKwo+IMKgLyoqCj4g wqAgKiBkcm1fZ3B1dm1fcmVzdigpIC0gcmV0dXJucyB0aGUgJmRybV9ncHV2bSdzICZkbWFfcmVz dgo+IMKgICogQGdwdXZtX186IHRoZSAmZHJtX2dwdXZtCj4gQEAgLTI5MCw2ICszMTcsMTIgQEAg ZHJtX2dwdXZtX3Jvb3Rfb2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlCj4gKmRybSk7Cj4g wqAgKi8KPiDCoCNkZWZpbmUgZHJtX2dwdXZtX3Jlc3Zfb2JqKGdwdXZtX18pICgoZ3B1dm1fXykt PnJfb2JqKQo+IMKgCj4gKyNkZWZpbmUgZHJtX2dwdXZtX3Jlc3ZfaGVsZChncHV2bV9fKSBcCj4g K8KgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfaGVsZChkcm1fZ3B1dm1fcmVzdihncHV2bV9fKSkKPiAr Cj4gKyNkZWZpbmUgZHJtX2dwdXZtX3Jlc3ZfYXNzZXJ0X2hlbGQoZ3B1dm1fXykgXAo+ICvCoMKg wqDCoMKgwqDCoGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRybV9ncHV2bV9yZXN2KGdwdXZtX18pKQo+ ICsKPiDCoCNkZWZpbmUgZHJtX2dwdXZtX3Jlc3ZfaGVsZChncHV2bV9fKSBcCj4gwqDCoMKgwqDC oMKgwqDCoGRtYV9yZXN2X2hlbGQoZHJtX2dwdXZtX3Jlc3YoZ3B1dm1fXykpCj4gwqAKPiBAQCAt Mzc0LDYgKzQwNywxMTcgQEAgX19kcm1fZ3B1dmFfbmV4dChzdHJ1Y3QgZHJtX2dwdXZhICp2YSkK PiDCoCNkZWZpbmUgZHJtX2dwdXZtX2Zvcl9lYWNoX3ZhX3NhZmUodmFfXywgbmV4dF9fLCBncHV2 bV9fKSBcCj4gwqDCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YV9fLCBu ZXh0X18sICYoZ3B1dm1fXyktPnJiLmxpc3QsCj4gcmIuZW50cnkpCj4gwqAKPiArLyoqCj4gKyAq IHN0cnVjdCBkcm1fZ3B1dm1fYm8gLSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgJmRybV9ncHV2 bSBhbmQKPiArICogJmRybV9nZW1fb2JqZWN0IGNvbWJpbmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMg c3RydWN0dXJlIGlzIGFuIGFic3RyYWN0aW9uIHJlcHJlc2VudGluZyBhICZkcm1fZ3B1dm0gYW5k Cj4gKyAqICZkcm1fZ2VtX29iamVjdCBjb21iaW5hdGlvbi4gSXQgc2VydmVzIGFzIGFuIGluZGly ZWN0aW9uIHRvCj4gYWNjZWxlcmF0ZQo+ICsgKiBpdGVyYXRpbmcgYWxsICZkcm1fZ3B1dmFzIHdp dGhpbiBhICZkcm1fZ3B1dm0gYmFja2VkIGJ5IHRoZSBzYW1lCj4gKyAqICZkcm1fZ2VtX29iamVj dC4KPiArICoKPiArICogRnVydGhlcm1vcmUgaXQgaXMgdXNlZCBjYWNoZSBldmljdGVkIEdFTSBv YmplY3RzIGZvciBhIGNlcnRhaW4KPiBHUFUtVk0gdG8KPiArICogYWNjZWxlcmF0ZSB2YWxpZGF0 aW9uLgo+ICsgKgo+ICsgKiBUeXBpY2FsbHksIGRyaXZlcnMgd2FudCB0byBjcmVhdGUgYW4gaW5z dGFuY2Ugb2YgYSBzdHJ1Y3QKPiBkcm1fZ3B1dm1fYm8gb25jZQo+ICsgKiBhIEdFTSBvYmplY3Qg aXMgbWFwcGVkIGZpcnN0IGluIGEgR1BVLVZNIGFuZCByZWxlYXNlIHRoZSBpbnN0YW5jZQo+IG9u Y2UgdGhlCj4gKyAqIGxhc3QgbWFwcGluZyBvZiB0aGUgR0VNIG9iamVjdCBpbiB0aGlzIEdQVS1W TSBpcyB1bm1hcHBlZC4KPiArICovCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gewo+ICsKPiArwqDC oMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqAgKiBAdm06IFRoZSAmZHJtX2dwdXZtIHRo ZSBAb2JqIGlzIG1hcHBlZCBpbi4KTm90IHJlZmNvdW50ZWQuIEB2bSBtYXkgcG90ZW50aWFsbHkg YmUgZnJlZWQgdW5kZXIgdXMgaW4gdGhlCiFSRVNWX1BST1RFQ1RFRCBjYXNlLgoKPiArwqDCoMKg wqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQG9iajogVGhlICZkcm1fZ2Vt X29iamVjdCBiZWluZyBtYXBwZWQgaW4gQHZtLgoKUmVmY291bnRlZCBwb2ludGVyLgoKPiArwqDC oMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGtyZWY6IFRo ZSByZWZlcmVuY2UgY291bnQgZm9yIHRoaXMgJmRybV9ncHV2bV9iby4KPiArwqDCoMKgwqDCoMKg wqAgKi8KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qga3JlZiBrcmVmOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqAgKiBAbGlzdDogU3RydWN0dXJlIGNvbnRhaW5pbmcg YWxsICZsaXN0X2hlYWRzLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAZ3B1dmE6IFRoZSBsaXN0IG9mIGxpbmtlZCAmZHJtX2dw dXZhcy4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCgpIZXJlIHdlIHNob3Vs ZCBhbHNvIGRvY3VtZW50IGhvdyB3ZSBlbnN1cmUgZ3B2dWFzIGFyZSBrZXB0IGFsaXZlLgood2hp Y2ggSSBwcmVzdW1lIGlzIHRoZSBsb2NrIHByb3RlY3RpbmcgdGhlIGdlbSBvYmplY3QncyB2bV9i byBsaXN0Cm11c3QgYmUgaGVsZCBhbGwgdGhlIHRpbWUgYW55IGdwdXZhIG9idGFpbmVkIGZyb20g dGhpcyBsaXN0IGlzIGJlaW5nCmFjY2Vzc2VkKS4KCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgZ3B1dmE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGVudHJ5 OiBTdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgJmxpc3RfaGVhZHMKPiBzZXJ2aW5nIGFzCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGVudHJ5Lgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGdlbTog TGlzdCBlbnRyeSB0byBhdHRhY2ggdG8gdGhlCj4gJmRybV9nZW1fb2JqZWN0cwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZ3B1dmEgbGlzdC4KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGxpc3RfaGVh ZCBnZW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZW50cnk7Cj4gK8KgwqDC oMKgwqDCoMKgfSBsaXN0Owo+ICt9Owo+ICsKPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2Ry bV9ncHV2bV9ib19jcmVhdGUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4g Kwo+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiArZHJtX2dwdXZtX2JvX29idGFpbihzdHJ1Y3Qg ZHJtX2dwdXZtICpncHV2bSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArc3RydWN0IGRybV9ncHV2bV9ibyAqCj4g K2RybV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2Moc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8p Owo+ICsKPiArLyoqCj4gKyAqIGRybV9ncHV2bV9ib19nZXQoKSAtIGFjcXVpcmUgYSBzdHJ1Y3Qg ZHJtX2dwdXZtX2JvIHJlZmVyZW5jZQo+ICsgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvIHRv IGFjcXVpcmUgdGhlIHJlZmVyZW5jZSBvZgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGFjcXVp cmVzIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIEB2bV9iby4gSXQgaXMKPiBpbGxlZ2FsIHRv Cj4gKyAqIGNhbGwgdGhpcyB3aXRob3V0IGFscmVhZHkgaG9sZGluZyBhIHJlZmVyZW5jZS4gTm8g bG9ja3MgcmVxdWlyZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZ3B1dm1f Ym8gKgo+ICtkcm1fZ3B1dm1fYm9fZ2V0KHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKga3JlZl9nZXQoJnZtX2JvLT5rcmVmKTsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gdm1fYm87Cj4gK30KPiArCj4gK3ZvaWQgZHJtX2dwdXZtX2JvX3B1dChzdHJ1Y3Qg ZHJtX2dwdXZtX2JvICp2bV9ibyk7Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiArZHJt X2dwdXZtX2JvX2ZpbmQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiArCj4gKy8q Kgo+ICsgKiBkcm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmEoKSAtIGl0ZXJhdG9yIHRvIHdhbGsgb3Zl ciBhIGxpc3Qgb2YKPiAmZHJtX2dwdXZhCj4gKyAqIEB2YV9fOiAmZHJtX2dwdXZhIHN0cnVjdHVy ZSB0byBhc3NpZ24gdG8gaW4gZWFjaCBpdGVyYXRpb24gc3RlcAo+ICsgKiBAdm1fYm9fXzogdGhl ICZkcm1fZ3B1dm1fYm8gdGhlICZkcm1fZ3B1dmEgdG8gd2FsayBhcmUgYXNzb2NpYXRlZAo+IHdp dGgKPiArICoKPiArICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dwdXZhIHN0 cnVjdHVyZXMgYXNzb2NpYXRlZAo+IHdpdGggdGhlCj4gKyAqICZkcm1fZ3B1dm1fYm8uCgpNdXN0 IGhvbGQgdGhlIC4uLiBsb2NrLgoKCj4gKyAqLwo+ICsjZGVmaW5lIGRybV9ncHV2bV9ib19mb3Jf ZWFjaF92YSh2YV9fLCB2bV9ib19fKSBcCj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9l bnRyeSh2YV9fLCAmKHZtX2JvKS0+bGlzdC5ncHV2YSwgZ2VtLmVudHJ5KQo+ICsKPiArLyoqCj4g KyAqIGRybV9ncHV2bV9ib19mb3JfZWFjaF92YV9zYWZlKCkgLSBpdGVyYXRvciB0byBzYWZlbHkg d2FsayBvdmVyIGEKPiBsaXN0IG9mCj4gKyAqICZkcm1fZ3B1dmEKPiArICogQHZhX186ICZkcm1f Z3B1dmEgc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbiBzdGVwCj4gKyAq IEBuZXh0X186ICZuZXh0ICZkcm1fZ3B1dmEgdG8gc3RvcmUgdGhlIG5leHQgc3RlcAo+ICsgKiBA dm1fYm9fXzogdGhlICZkcm1fZ3B1dm1fYm8gdGhlICZkcm1fZ3B1dmEgdG8gd2FsayBhcmUgYXNz b2NpYXRlZAo+IHdpdGgKPiArICoKPiArICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAm ZHJtX2dwdXZhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZAo+IHdpdGggdGhlCj4gKyAqICZkcm1fZ3B1 dm1fYm8uIEl0IGlzIGltcGxlbWVudGVkIHdpdGggbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCks Cj4gaGVuY2UKPiArICogaXQgaXMgc2F2ZSBhZ2FpbnN0IHJlbW92YWwgb2YgZWxlbWVudHMuCj4g KyAqLwo+ICsjZGVmaW5lIGRybV9ncHV2bV9ib19mb3JfZWFjaF92YV9zYWZlKHZhX18sIG5leHRf Xywgdm1fYm9fXykgXAo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2 YV9fLCBuZXh0X18sICYodm1fYm8pLT5saXN0LmdwdXZhLAo+IGdlbS5lbnRyeSkKClNhbWUgaGVy ZS4KCj4gKwo+IMKgLyoqCj4gwqAgKiBlbnVtIGRybV9ncHV2YV9vcF90eXBlIC0gR1BVIFZBIG9w ZXJhdGlvbiB0eXBlCj4gwqAgKgo+IEBAIC02NDMsOCArNzg3LDcgQEAgZHJtX2dwdXZtX3ByZWZl dGNoX29wc19jcmVhdGUoc3RydWN0IGRybV9ncHV2bQo+ICpncHV2bSwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBh ZGRyLCB1NjQgcmFuZ2UpOwo+IMKgCj4gwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqCj4gLWRybV9n cHV2bV9nZW1fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gK2RybV9ncHV2bV9ib191bm1hcF9vcHNfY3Jl YXRlKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKTsKPiDCoAo+IMKgdm9pZCBkcm1fZ3B1dmFf b3BzX2ZyZWUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wcyk7Cj4g QEAgLTY4OCw2ICs4MzEsMzAgQEAgc3RydWN0IGRybV9ncHV2bV9vcHMgewo+IMKgwqDCoMKgwqDC oMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgdm9pZCAoKm9wX2ZyZWUpKHN0cnVjdCBkcm1fZ3B1 dmFfb3AgKm9wKTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAq IEB2bV9ib19hbGxvYzogY2FsbGVkIHdoZW4gdGhlICZkcm1fZ3B1dm0gYWxsb2NhdGVzCj4gK8Kg wqDCoMKgwqDCoMKgICogYSBzdHJ1Y3QgZHJtX2dwdXZtX2JvCj4gK8KgwqDCoMKgwqDCoMKgICoK PiArwqDCoMKgwqDCoMKgwqAgKiBTb21lIGRyaXZlcnMgbWF5IHdhbnQgdG8gZW1iZWQgc3RydWN0 IGRybV9ncHV2bV9ibyBpbnRvCj4gZHJpdmVyCj4gK8KgwqDCoMKgwqDCoMKgICogc3BlY2lmaWMg c3RydWN0dXJlcy4gQnkgaW1wbGVtZW50aW5nIHRoaXMgY2FsbGJhY2sgZHJpdmVycwo+IGNhbgo+ ICvCoMKgwqDCoMKgwqDCoCAqIGFsbG9jYXRlIG1lbW9yeSBhY2NvcmRpbmdseS4KPiArwqDCoMKg wqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwu Cj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9i byAqKCp2bV9ib19hbGxvYykodm9pZCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKg wqDCoMKgwqDCoCAqIEB2bV9ib19mcmVlOiBjYWxsZWQgd2hlbiB0aGUgJmRybV9ncHV2bSBmcmVl cyBhCj4gK8KgwqDCoMKgwqDCoMKgICogc3RydWN0IGRybV9ncHV2bV9ibwo+ICvCoMKgwqDCoMKg wqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogU29tZSBkcml2ZXJzIG1heSB3YW50IHRvIGVtYmVk IHN0cnVjdCBkcm1fZ3B1dm1fYm8gaW50bwo+IGRyaXZlcgo+ICvCoMKgwqDCoMKgwqDCoCAqIHNw ZWNpZmljIHN0cnVjdHVyZXMuIEJ5IGltcGxlbWVudGluZyB0aGlzIGNhbGxiYWNrIGRyaXZlcnMK PiBjYW4KPiArwqDCoMKgwqDCoMKgwqAgKiBmcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBt ZW1vcnkgYWNjb3JkaW5nbHkuCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqAg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKg wqDCoMKgwqDCoHZvaWQgKCp2bV9ib19mcmVlKShzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyk7 Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqAvKioKPiDCoMKgwqDCoMKgwqDCoMKgICogQHNtX3N0ZXBf bWFwOiBjYWxsZWQgZnJvbSAmZHJtX2dwdXZtX3NtX21hcCB0byBmaW5hbGx5Cj4gaW5zZXJ0IHRo ZQo+IMKgwqDCoMKgwqDCoMKgwqAgKiBtYXBwaW5nIG9uY2UgYWxsIHByZXZpb3VzIHN0ZXBzIHdl cmUgY29tcGxldGVkCgpUaGFua3MsClRob21hcwoK