From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 31383C433F5 for ; Thu, 7 Apr 2022 03:37:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=X+frPWSgS1q+ZT8RVcwbJO4mSm8fSu/1QuZIETOUBc4=; b=gS64k4KImPrA3blmpaLYli8z+n jUPnQ1wi8v3/+afTm4qvSwmMTqHXDwYToTdyAj7XTH3wiFiOL7iccb8Y3EPqwiwhYIiT1tKlxzxXR CYqi7MK5V9ZwhENFlgwvdxOxB9L5anlchjMTPDiGg4K5N1AgUWVOde2UrrZ6iI9dyfnZ3uUilBPnu X4qnY76uv12Owlp+4+8/Uc/uXOGz89sdNAt4gZ+NOuitGyf10/fTTtXiiDLZwReQ5LIsx7wTL2cyi DPNtk42SOOTCv2UMIFtdF9tZxyBbZgCf0vp46OIpiqcs7w9o1ii7SP1yW88rb+yQ/a1fPDwak65+9 MLb1EF7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncIvC-0098G6-9S; Thu, 07 Apr 2022 03:34:59 +0000 Received: from mail-yw1-x1149.google.com ([2607:f8b0:4864:20::1149]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncId1-0091d2-3X for linux-arm-kernel@lists.infradead.org; Thu, 07 Apr 2022 03:16:28 +0000 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-2eb5d4fbd54so38426517b3.4 for ; Wed, 06 Apr 2022 20:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=IqBHeb2ap7GYmsXtE+FF5L0dvhut89089+WofBZXUqA=; b=nbG7p1ixP9e8X68/lKHckkVnnk9uBzQNuURnpWQIhDjGg/g5/xs2HRujyi2MPLgXiz plOECzdcuLBZTvQJlNyC1jFIQkmylpSksLMfcvtt6QbfZAoFT6fSudT1un22vO01eTKe Knb1+Ir78K1oQszUm4ptJt6VOv5+o2EWPdR/9k0Xs6cToh5Q9Tu0xY9pu89SB3nOecul 8Ja1SnBNI+bhEdEfX5Va29CkCoiFK3IiNLabvYiQ5sqxzioOOxSjAMzgguJLSmSaQe9i LoXPKi8axkQqx8HQN0ZWrEpUJQfYKexGqW4H5Ww/uSuiQyT+TGjDU+50a2mLkuZMtC6f pNQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=IqBHeb2ap7GYmsXtE+FF5L0dvhut89089+WofBZXUqA=; b=aMwBUGqKoG1dIwmPUexf3oM+SG6E3ZTZRjXTxfrmPBFXHyuXdUa5Sig/pYerD94CQZ qDUiCh9LzASNi7IDW2HHu2H9Zu6k+Tq3CDW6oED8DCcfn3gW09F48KX7XduFmLt3Jjen GUYHJeE0j0IaTMox0R8m4I0HUUI+7BjRwedrcUcpuN2PIarDdantlEdwOoakE3qWe62r pCo5gNsEiJw0ndrLOgcdoBTKCMjZ9m0HQK5O8mqkpwd4qoVG9s4iMglRuVDzkewWLOgQ w/qwO9oVK6xFwE1uIF5Zq/4O10e6CntUFYmYlPfyJ5cK5EnIBO5KjcUD8xyGn75hvlZt 8NRw== X-Gm-Message-State: AOAM532mrR3UYKBteNx2ZSgeDaU0ciTVNoLspIRLZciKLFxy9Uy3B9pZ RIpy7yBbUZKZ+KpW9z51aQVM3muE31w= X-Google-Smtp-Source: ABdhPJzyShE1qjineXwdwHwLgPCPjyeMXPp8W9avCczZdxcnQeknPqAwQRmFCFmdAjsV5aYdR/ZPMFOVmb0= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:9ea2:c755:ae22:6862]) (user=yuzhao job=sendgmr) by 2002:a25:1f04:0:b0:625:3660:a64a with SMTP id f4-20020a251f04000000b006253660a64amr8314234ybf.615.1649301368903; Wed, 06 Apr 2022 20:16:08 -0700 (PDT) Date: Wed, 6 Apr 2022 21:15:20 -0600 In-Reply-To: <20220407031525.2368067-1-yuzhao@google.com> Message-Id: <20220407031525.2368067-9-yuzhao@google.com> Mime-Version: 1.0 References: <20220407031525.2368067-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.1094.g7c7d902a7c-goog Subject: [PATCH v10 08/14] mm: multi-gen LRU: support page table walks From: Yu Zhao To: Stephen Rothwell , linux-mm@kvack.org Cc: Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, page-reclaim@google.com, x86@kernel.org, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220406_201611_404038_046F70C4 X-CRM114-Status: GOOD ( 33.06 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VG8gZnVydGhlciBleHBsb2l0IHNwYXRpYWwgbG9jYWxpdHksIHRoZSBhZ2luZyBwcmVmZXJzIHRv IHdhbGsgcGFnZQp0YWJsZXMgdG8gc2VhcmNoIGZvciB5b3VuZyBQVEVzIGFuZCBwcm9tb3RlIGhv dCBwYWdlcy4gQSBraWxsIHN3aXRjaAp3aWxsIGJlIGFkZGVkIGluIHRoZSBuZXh0IHBhdGNoIHRv IGRpc2FibGUgdGhpcyBiZWhhdmlvci4gV2hlbgpkaXNhYmxlZCwgdGhlIGFnaW5nIHJlbGllcyBv biB0aGUgcm1hcCBvbmx5LgoKTkI6IHRoaXMgYmVoYXZpb3IgaGFzIG5vdGhpbmcgc2ltaWxhciB3 aXRoIHRoZSBwYWdlIHRhYmxlIHNjYW5uaW5nIGluCnRoZSAyLjQga2VybmVsIFsxXSwgd2hpY2gg c2VhcmNoZXMgcGFnZSB0YWJsZXMgZm9yIG9sZCBQVEVzLCBhZGRzIGNvbGQKcGFnZXMgdG8gc3dh cGNhY2hlIGFuZCB1bm1hcHMgdGhlbS4KClRvIGF2b2lkIGNvbmZ1c2lvbiwgdGhlIHRlcm0gIml0 ZXJhdGlvbiIgc3BlY2lmaWNhbGx5IG1lYW5zIHRoZQp0cmF2ZXJzYWwgb2YgYW4gZW50aXJlIG1t X3N0cnVjdCBsaXN0OyB0aGUgdGVybSAid2FsayIgd2lsbCBiZSBhcHBsaWVkCnRvIHBhZ2UgdGFi bGVzIGFuZCB0aGUgcm1hcCwgYXMgdXN1YWwuCgpBbiBtbV9zdHJ1Y3QgbGlzdCBpcyBtYWludGFp bmVkIGZvciBlYWNoIG1lbWNnLCBhbmQgYW4gbW1fc3RydWN0CmZvbGxvd3MgaXRzIG93bmVyIHRh c2sgdG8gdGhlIG5ldyBtZW1jZyB3aGVuIHRoaXMgdGFzayBpcyBtaWdyYXRlZC4KR2l2ZW4gYW4g bHJ1dmVjLCB0aGUgYWdpbmcgaXRlcmF0ZXMgbHJ1dmVjX21lbWNnKCktPm1tX2xpc3QgYW5kIGNh bGxzCndhbGtfcGFnZV9yYW5nZSgpIHdpdGggZWFjaCBtbV9zdHJ1Y3Qgb24gdGhpcyBsaXN0IHRv IHByb21vdGUgaG90CnBhZ2VzIGJlZm9yZSBpdCBpbmNyZW1lbnRzIG1heF9zZXEuCgpXaGVuIG11 bHRpcGxlIHBhZ2UgdGFibGUgd2Fsa2VycyBpdGVyYXRlIHRoZSBzYW1lIGxpc3QsIGVhY2ggb2Yg dGhlbQpnZXRzIGEgdW5pcXVlIG1tX3N0cnVjdDsgdGhlcmVmb3JlIHRoZXkgY2FuIHJ1biBjb25j dXJyZW50bHkuIFBhZ2UKdGFibGUgd2Fsa2VycyBpZ25vcmUgYW55IG1pc3BsYWNlZCBwYWdlcywg ZS5nLiwgaWYgYW4gbW1fc3RydWN0IHdhcwptaWdyYXRlZCwgcGFnZXMgaXQgbGVmdCBpbiB0aGUg cHJldmlvdXMgbWVtY2cgd2lsbCBub3QgYmUgcHJvbW90ZWQKd2hlbiBpdHMgY3VycmVudCBtZW1j ZyBpcyB1bmRlciByZWNsYWltLiBTaW1pbGFybHksIHBhZ2UgdGFibGUgd2Fsa2Vycwp3aWxsIG5v dCBwcm9tb3RlIHBhZ2VzIGZyb20gbm9kZXMgb3RoZXIgdGhhbiB0aGUgb25lIHVuZGVyIHJlY2xh aW0uCgpUaGlzIHBhdGNoIHVzZXMgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb25zIHdoZW4gd2Fs a2luZyBwYWdlIHRhYmxlczoKMS4gSXQgdHJhY2tzIHRoZSB1c2FnZSBvZiBtbV9zdHJ1Y3QncyBi ZXR3ZWVuIGNvbnRleHQgc3dpdGNoZXMgc28gdGhhdAogICBwYWdlIHRhYmxlIHdhbGtlcnMgY2Fu IHNraXAgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBiZWVuIHNsZWVwaW5nIHNpbmNlCiAgIHRoZSBsYXN0 IGl0ZXJhdGlvbi4KMi4gSXQgdXNlcyBnZW5lcmF0aW9uYWwgQmxvb20gZmlsdGVycyB0byByZWNv cmQgcG9wdWxhdGVkIGJyYW5jaGVzIHNvCiAgIHRoYXQgcGFnZSB0YWJsZSB3YWxrZXJzIGNhbiBy ZWR1Y2UgdGhlaXIgc2VhcmNoIHNwYWNlIGJhc2VkIG9uIHRoZQogICBxdWVyeSByZXN1bHRzLCBl LmcuLCB0byBza2lwIHBhZ2UgdGFibGVzIGNvbnRhaW5pbmcgbW9zdGx5IGhvbGVzIG9yCiAgIG1p c3BsYWNlZCBwYWdlcy4KMy4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBhY2Nlc3NlZCBiaXQg aW4gbm9uLWxlYWYgUE1EIGVudHJpZXMgd2hlbgogICBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9Q TURfWU9VTkc9eS4KNC4gSXQgZG9lcyBub3QgemlnemFnIGJldHdlZW4gYSBQR0QgdGFibGUgYW5k IHRoZSBzYW1lIFBNRCB0YWJsZQogICBzcGFubmluZyBtdWx0aXBsZSBWTUFzLiBJT1csIGl0IGZp bmlzaGVzIGFsbCB0aGUgVk1BcyB3aXRoaW4gdGhlCiAgIHJhbmdlIG9mIHRoZSBzYW1lIFBNRCB0 YWJsZSBiZWZvcmUgaXQgcmV0dXJucyB0byBhIFBHRCB0YWJsZS4gVGhpcwogICBpbXByb3ZlcyB0 aGUgY2FjaGUgcGVyZm9ybWFuY2UgZm9yIHdvcmtsb2FkcyB0aGF0IGhhdmUgbGFyZ2UKICAgbnVt YmVycyBvZiB0aW55IFZNQXMgWzJdLCBlc3BlY2lhbGx5IHdoZW4gQ09ORklHX1BHVEFCTEVfTEVW RUxTPTUuCgpTZXJ2ZXIgYmVuY2htYXJrIHJlc3VsdHM6CiAgU2luZ2xlIHdvcmtsb2FkOgogICAg ZmlvIChidWZmZXJlZCBJL08pOiBubyBjaGFuZ2UKCiAgU2luZ2xlIHdvcmtsb2FkOgogICAgbWVt Y2FjaGVkIChhbm9uKTogK1s4LCAxMF0lCiAgICAgICAgICAgICAgICBPcHMvc2VjICAgICAgS0Iv c2VjCiAgICAgIHBhdGNoMS03OiAxMTkzOTE4LjkzICAgNDY0MzguMTUKICAgICAgcGF0Y2gxLTg6 IDEzMDE5NTQuNDQgICA1MDY0MC4yNwoKICBDb25maWd1cmF0aW9uczoKICAgIG5vIGNoYW5nZQoK Q2xpZW50IGJlbmNobWFyayByZXN1bHRzOgogIGtzd2FwZCBwcm9maWxlczoKICAgIHBhdGNoMS03 CiAgICAgIDQ1LjkwJSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAgOS4x NCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgICA2LjgxJSAgX3Jhd19zcGluX3VubG9ja19p cnEKICAgICAgIDIuODAlICBwdGVwX2NsZWFyX2ZsdXNoCiAgICAgICAyLjM0JSAgX196cmFtX2J2 ZWNfd3JpdGUKICAgICAgIDIuMjklICBkb19yYXdfc3Bpbl9sb2NrCiAgICAgICAxLjg0JSAgbHJ1 X2dlbl9sb29rX2Fyb3VuZAogICAgICAgMS43OCUgIG1lbW1vdmUKICAgICAgIDEuNzQlICBvYmpf bWFsbG9jCiAgICAgICAxLjUwJSAgZnJlZV91bnJlZl9wYWdlX2xpc3QKCiAgICBwYXRjaDEtOAog ICAgICA0Ni45NiUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKICAgICAgIDcuNTUl ICBwYWdlX3ZtYV9tYXBwZWRfd2FsawogICAgICAgNS44OSUgIF9yYXdfc3Bpbl91bmxvY2tfaXJx CiAgICAgICAzLjMzJSAgd2Fsa19wdGVfcmFuZ2UKICAgICAgIDIuNjUlICBwdGVwX2NsZWFyX2Zs dXNoCiAgICAgICAyLjIzJSAgX196cmFtX2J2ZWNfd3JpdGUKICAgICAgIDIuMDglICBkb19yYXdf c3Bpbl9sb2NrCiAgICAgICAxLjgzJSAgbWVtbW92ZQogICAgICAgMS42NSUgIG9ial9tYWxsb2MK ICAgICAgIDEuNDclICBmcmVlX3VucmVmX3BhZ2VfbGlzdAoKICBDb25maWd1cmF0aW9uczoKICAg IG5vIGNoYW5nZQoKWzFdIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy8yMzczMi8KWzJdIGh0dHBz Oi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvdGVjaC9kZWJ1Zy9zY3VkbwoKU2lnbmVkLW9m Zi1ieTogWXUgWmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24g PGJnZWZmb25AZ29vZ2xlLmNvbT4KQWNrZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhl ZnRpZykgPGhlZnRpZ0BhcmNobGludXgub3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5r byA8b2xla3NhbmRyQG5hdGFsZW5rby5uYW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0 ZXZlbkBsaXF1b3JpeC5uZXQ+CkFja2VkLWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBn b29nbGUuY29tPgpUZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0 ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIg SG9mZnN0w6R0dGUgPGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtv bnN0YW50aW4gS2hhcmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5n IFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxz b2ZpYS50cmluaEBlZGkud29ya3M+ClRlc3RlZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2QGxp bnV4LmlibS5jb20+Ci0tLQogZnMvZXhlYy5jICAgICAgICAgICAgICAgICAgfCAgIDIgKwogaW5j bHVkZS9saW51eC9tZW1jb250cm9sLmggfCAgIDUgKwogaW5jbHVkZS9saW51eC9tbV90eXBlcy5o ICAgfCAgNzggKysrCiBpbmNsdWRlL2xpbnV4L21tem9uZS5oICAgICB8ICA1OSArKysKIGluY2x1 ZGUvbGludXgvc3dhcC5oICAgICAgIHwgICA0ICsKIGtlcm5lbC9leGl0LmMgICAgICAgICAgICAg IHwgICAxICsKIGtlcm5lbC9mb3JrLmMgICAgICAgICAgICAgIHwgICA5ICsKIGtlcm5lbC9zY2hl ZC9jb3JlLmMgICAgICAgIHwgICAxICsKIG1tL21lbWNvbnRyb2wuYyAgICAgICAgICAgIHwgIDI0 ICsKIG1tL3Ztc2Nhbi5jICAgICAgICAgICAgICAgIHwgOTc1ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDExNDQgaW5zZXJ0aW9ucygrKSwg MTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4 IGUzZTU1ZDVlMGJlMS4uYmJhOGZjNDQ5MjZmIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIv ZnMvZXhlYy5jCkBAIC0xMDExLDYgKzEwMTEsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1 Y3QgbW1fc3RydWN0ICptbSkKIAlhY3RpdmVfbW0gPSB0c2stPmFjdGl2ZV9tbTsKIAl0c2stPmFj dGl2ZV9tbSA9IG1tOwogCXRzay0+bW0gPSBtbTsKKwlscnVfZ2VuX2FkZF9tbShtbSk7CiAJLyoK IAkgKiBUaGlzIHByZXZlbnRzIHByZWVtcHRpb24gd2hpbGUgYWN0aXZlX21tIGlzIGJlaW5nIGxv YWRlZCBhbmQKIAkgKiBpdCBhbmQgbW0gYXJlIGJlaW5nIHVwZGF0ZWQsIHdoaWNoIGNvdWxkIGNh dXNlIHByb2JsZW1zIGZvcgpAQCAtMTAyMyw2ICsxMDI0LDcgQEAgc3RhdGljIGludCBleGVjX21t YXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJYWN0aXZhdGVfbW0oYWN0aXZlX21tLCBtbSk7CiAJ aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTSkpCiAJ CWxvY2FsX2lycV9lbmFibGUoKTsKKwlscnVfZ2VuX3VzZV9tbShtbSk7CiAJdHNrLT5tbS0+dm1h Y2FjaGVfc2VxbnVtID0gMDsKIAl2bWFjYWNoZV9mbHVzaCh0c2spOwogCXRhc2tfdW5sb2NrKHRz ayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGlu dXgvbWVtY29udHJvbC5oCmluZGV4IDQ2MzE2OGZhMTY3MC4uOTU0YzU0NjUyNzM2IDEwMDY0NAot LS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNv bnRyb2wuaApAQCAtMzQ0LDYgKzM0NCwxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAJc3RydWN0 IGRlZmVycmVkX3NwbGl0IGRlZmVycmVkX3NwbGl0X3F1ZXVlOwogI2VuZGlmCiAKKyNpZmRlZiBD T05GSUdfTFJVX0dFTgorCS8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqLworCXN0cnVjdCBs cnVfZ2VuX21tX2xpc3QgbW1fbGlzdDsKKyNlbmRpZgorCiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVy X25vZGUgKm5vZGVpbmZvW107CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5 cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggODgzNGUzOGMwNmE0Li5lZWUy OWY3MDBmYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNs dWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTMsNiArMyw3IEBACiAjZGVmaW5lIF9MSU5VWF9NTV9U WVBFU19ICiAKICNpbmNsdWRlIDxsaW51eC9tbV90eXBlc190YXNrLmg+CisjaW5jbHVkZSA8bGlu dXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgogI2luY2x1ZGUgPGxpbnV4 L2tyZWYuaD4KQEAgLTE3LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLWxh eW91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Nl cWxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21t ZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIApAQCAtNjU1LDYgKzY1OCwyMiBAQCBz dHJ1Y3QgbW1fc3RydWN0IHsKICNpZmRlZiBDT05GSUdfSU9NTVVfU1ZBCiAJCXUzMiBwYXNpZDsK ICNlbmRpZgorI2lmZGVmIENPTkZJR19MUlVfR0VOCisJCXN0cnVjdCB7CisJCQkvKiB0aGlzIG1t X3N0cnVjdCBpcyBvbiBscnVfZ2VuX21tX2xpc3QgKi8KKwkJCXN0cnVjdCBsaXN0X2hlYWQgbGlz dDsKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwkJCS8qIHBvaW50cyB0byB0aGUgbWVtY2cgb2YgIm93 bmVyIiBhYm92ZSAqLworCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOworI2VuZGlmCisJCQkv KgorCQkJICogU2V0IHdoZW4gc3dpdGNoaW5nIHRvIHRoaXMgbW1fc3RydWN0LCBhcyBhIGhpbnQg b2YKKwkJCSAqIHdoZXRoZXIgaXQgaGFzIGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHBl ci1ub2RlCisJCQkgKiBwYWdlIHRhYmxlIHdhbGtlcnMgY2xlYXJlZCB0aGUgY29ycmVzcG9uZGlu ZyBiaXRzLgorCQkJICovCisJCQlub2RlbWFza190IG5vZGVzOworCQl9IGxydV9nZW47CisjZW5k aWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAl9IF9fcmFuZG9taXplX2xheW91dDsKIAogCS8qCkBA IC02ODEsNiArNzAwLDY1IEBAIHN0YXRpYyBpbmxpbmUgY3B1bWFza190ICptbV9jcHVtYXNrKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJldHVybiAoc3RydWN0IGNwdW1hc2sgKikmbW0tPmNwdV9i aXRtYXA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorCitzdHJ1Y3QgbHJ1X2dlbl9tbV9s aXN0IHsKKwkvKiBtbV9zdHJ1Y3QgbGlzdCBmb3IgcGFnZSB0YWJsZSB3YWxrZXJzICovCisJc3Ry dWN0IGxpc3RfaGVhZCBmaWZvOworCS8qIHByb3RlY3RzIHRoZSBsaXN0IGFib3ZlICovCisJc3Bp bmxvY2tfdCBsb2NrOworfTsKKwordm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0 ICptbSk7Cit2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNpZmRl ZiBDT05GSUdfTUVNQ0cKK3ZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X21tKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKQoreworCUlOSVRfTElTVF9IRUFEKCZtbS0+bHJ1X2dlbi5saXN0KTsK KyNpZmRlZiBDT05GSUdfTUVNQ0cKKwltbS0+bHJ1X2dlbi5tZW1jZyA9IE5VTEw7CisjZW5kaWYK Kwlub2Rlc19jbGVhcihtbS0+bHJ1X2dlbi5ub2Rlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwkvKiB1bmxpa2VseSBi dXQgbm90IGEgYnVnIHdoZW4gcmFjaW5nIHdpdGggbHJ1X2dlbl9taWdyYXRlX21tKCkgKi8KKwlW TV9XQVJOX09OKGxpc3RfZW1wdHkoJm1tLT5scnVfZ2VuLmxpc3QpKTsKKworCWlmICghKGN1cnJl bnQtPmZsYWdzICYgUEZfS1RIUkVBRCkgJiYgIW5vZGVzX2Z1bGwobW0tPmxydV9nZW4ubm9kZXMp KQorCQlub2Rlc19zZXRhbGwobW0tPmxydV9nZW4ubm9kZXMpOworfQorCisjZWxzZSAvKiAhQ09O RklHX0xSVV9HRU4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9kZWxf bW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKK3N0 YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0p Cit7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9tbShzdHJ1 Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNl X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX0xSVV9H RU4gKi8KKwogc3RydWN0IG1tdV9nYXRoZXI7CiBleHRlcm4gdm9pZCB0bGJfZ2F0aGVyX21tdShz dHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9p ZCB0bGJfZ2F0aGVyX21tdV9mdWxsbW0oc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IG1t X3N0cnVjdCAqbW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1 ZGUvbGludXgvbW16b25lLmgKaW5kZXggYzY5NTg5YWQyYjA1Li5hMWE5OTk3MWZmOWMgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUu aApAQCAtNDI0LDYgKzQyNCw1OCBAQCBzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgewogCWF0b21pY19s b25nX3QgcmVmYXVsdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJT XTsKIH07CiAKK2VudW0geworCU1NX1BURV9UT1RBTCwJLyogdG90YWwgbGVhZiBlbnRyaWVzICov CisJTU1fUFRFX09MRCwJLyogb2xkIGxlYWYgZW50cmllcyAqLworCU1NX1BURV9ZT1VORywJLyog eW91bmcgbGVhZiBlbnRyaWVzICovCisJTU1fUE1EX1RPVEFMLAkvKiB0b3RhbCBub24tbGVhZiBl bnRyaWVzICovCisJTU1fUE1EX0ZPVU5ELAkvKiBub24tbGVhZiBlbnRyaWVzIGZvdW5kIGluIEJs b29tIGZpbHRlcnMgKi8KKwlNTV9QTURfQURERUQsCS8qIG5vbi1sZWFmIGVudHJpZXMgYWRkZWQg dG8gQmxvb20gZmlsdGVycyAqLworCU5SX01NX1NUQVRTCit9OworCisvKiBtbmVtb25pYyBjb2Rl cyBmb3IgdGhlIG1tIHN0YXRzIGFib3ZlICovCisjZGVmaW5lIE1NX1NUQVRfQ09ERVMJCSJ0b3lk ZmEiCisKKy8qIGRvdWJsZS1idWZmZXJpbmcgQmxvb20gZmlsdGVycyAqLworI2RlZmluZSBOUl9C TE9PTV9GSUxURVJTCTIKKworc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgeworCS8qIHNldCB0byBt YXhfc2VxIGFmdGVyIGVhY2ggaXRlcmF0aW9uICovCisJdW5zaWduZWQgbG9uZyBzZXE7CisJLyog d2hlcmUgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHN0YXJ0cyAoaW5jbHVzaXZlKSAqLworCXN0cnVj dCBsaXN0X2hlYWQgKmhlYWQ7CisJLyogd2hlcmUgdGhlIGxhc3QgaXRlcmF0aW9uIGVuZHMgKGV4 Y2x1c2l2ZSkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YWlsOworCS8qIHRvIHdhaXQgZm9yIHRo ZSBsYXN0IHBhZ2UgdGFibGUgd2Fsa2VyIHRvIGZpbmlzaCAqLworCXN0cnVjdCB3YWl0X3F1ZXVl X2hlYWQgd2FpdDsKKwkvKiBCbG9vbSBmaWx0ZXJzIGZsaXAgYWZ0ZXIgZWFjaCBpdGVyYXRpb24g Ki8KKwl1bnNpZ25lZCBsb25nICpmaWx0ZXJzW05SX0JMT09NX0ZJTFRFUlNdOworCS8qIHRoZSBt bSBzdGF0cyBmb3IgZGVidWdnaW5nICovCisJdW5zaWduZWQgbG9uZyBzdGF0c1tOUl9ISVNUX0dF TlNdW05SX01NX1NUQVRTXTsKKwkvKiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcGFnZSB0YWJs ZSB3YWxrZXJzICovCisJaW50IG5yX3dhbGtlcnM7Cit9OworCitzdHJ1Y3QgbHJ1X2dlbl9tbV93 YWxrIHsKKwkvKiB0aGUgbHJ1dmVjIHVuZGVyIHJlY2xhaW0gKi8KKwlzdHJ1Y3QgbHJ1dmVjICps cnV2ZWM7CisJLyogdW5zdGFibGUgbWF4X3NlcSBmcm9tIGxydV9nZW5fc3RydWN0ICovCisJdW5z aWduZWQgbG9uZyBtYXhfc2VxOworCS8qIHRoZSBuZXh0IGFkZHJlc3Mgd2l0aGluIGFuIG1tIHRv IHNjYW4gKi8KKwl1bnNpZ25lZCBsb25nIG5leHRfYWRkcjsKKwkvKiB0byBiYXRjaCBwYWdlIHRh YmxlIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBsb25nIGJpdG1hcFtCSVRTX1RPX0xPTkdTKE1JTl9M UlVfQkFUQ0gpXTsKKwkvKiB0byBiYXRjaCBwcm9tb3RlZCBwYWdlcyAqLworCWludCBucl9wYWdl c1tNQVhfTlJfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1pPTkVTXTsKKwkvKiB0byBiYXRj aCB0aGUgbW0gc3RhdHMgKi8KKwlpbnQgbW1fc3RhdHNbTlJfTU1fU1RBVFNdOworCS8qIHRvdGFs IGJhdGNoZWQgaXRlbXMgKi8KKwlpbnQgYmF0Y2hlZDsKKwlib29sIGNhbl9zd2FwOworCWJvb2wg ZnVsbF9zY2FuOworfTsKKwogdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMg KmxydXZlYyk7CiB2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBl ZF93YWxrICpwdm13KTsKIApAQCAtNDc0LDYgKzUyNiw4IEBAIHN0cnVjdCBscnV2ZWMgewogI2lm ZGVmIENPTkZJR19MUlVfR0VOCiAJLyogZXZpY3RhYmxlIHBhZ2VzIGRpdmlkZWQgaW50byBnZW5l cmF0aW9ucyAqLwogCXN0cnVjdCBscnVfZ2VuX3N0cnVjdAkJbHJ1Z2VuOworCS8qIHRvIGNvbmN1 cnJlbnRseSBpdGVyYXRlIGxydV9nZW5fbW1fbGlzdCAqLworCXN0cnVjdCBscnVfZ2VuX21tX3N0 YXRlCQltbV9zdGF0ZTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19NRU1DRwogCXN0cnVjdCBwZ2xp c3RfZGF0YSAqcGdkYXQ7CkBAIC0xMDY3LDYgKzExMjEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgcGds aXN0X2RhdGEgewogCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKKyNpZmRlZiBDT05GSUdfTFJV X0dFTgorCS8qIGtzd2FwIG1tIHdhbGsgZGF0YSAqLworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsJ bW1fd2FsazsKKyNlbmRpZgorCiAJWk9ORV9QQURESU5HKF9wYWQyXykKIAogCS8qIFBlci1ub2Rl IHZtc3RhdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9s aW51eC9zd2FwLmgKaW5kZXggMjcwOTNiNDc3YzVmLi43YmRkN2JjYjEzNWQgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0xMzcs NiArMTM3LDEwIEBAIHVuaW9uIHN3YXBfaGVhZGVyIHsKICAqLwogc3RydWN0IHJlY2xhaW1fc3Rh dGUgewogCXVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkX3NsYWI7CisjaWZkZWYgQ09ORklHX0xSVV9H RU4KKwkvKiBwZXItdGhyZWFkIG1tIHdhbGsgZGF0YSAqLworCXN0cnVjdCBscnVfZ2VuX21tX3dh bGsgKm1tX3dhbGs7CisjZW5kaWYKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQg YS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCBmMDcyOTU5ZmNhYjcuLmYyZDRk NDhlYTc5MCAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBA IC00NjYsNiArNDY2LDcgQEAgdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3Ry dWN0ICptbSkKIAkJZ290byByZXRyeTsKIAl9CiAJV1JJVEVfT05DRShtbS0+b3duZXIsIGMpOwor CWxydV9nZW5fbWlncmF0ZV9tbShtbSk7CiAJdGFza191bmxvY2soYyk7CiAJcHV0X3Rhc2tfc3Ry dWN0KGMpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5k ZXggOTc5Njg5NzU2MGFiLi5kMTQyOTdjZTExNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMK KysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTE0OCw2ICsxMTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBt bV9zdHJ1Y3QgKm1tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVj dCAqcCwKIAkJZ290byBmYWlsX25vY29udGV4dDsKIAogCW1tLT51c2VyX25zID0gZ2V0X3VzZXJf bnModXNlcl9ucyk7CisJbHJ1X2dlbl9pbml0X21tKG1tKTsKIAlyZXR1cm4gbW07CiAKIGZhaWxf bm9jb250ZXh0OgpAQCAtMTE5MSw2ICsxMTkyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fbW1w dXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJaWYgKG1tLT5iaW5mbXQpCiAJCW1vZHVsZV9wdXQo bW0tPmJpbmZtdC0+bW9kdWxlKTsKIAltbV9wYXNpZF9kcm9wKG1tKTsKKwlscnVfZ2VuX2RlbF9t bShtbSk7CiAJbW1kcm9wKG1tKTsKIH0KIApAQCAtMjY2MCw2ICsyNjYyLDEzIEBAIHBpZF90IGtl cm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpCiAJCWdldF90YXNrX3N0 cnVjdChwKTsKIAl9CiAKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTFJVX0dFTikgJiYgIShjbG9u ZV9mbGFncyAmIENMT05FX1ZNKSkgeworCQkvKiBsb2NrIHRoZSB0YXNrIHRvIHN5bmNocm9uaXpl IHdpdGggbWVtY2cgbWlncmF0aW9uICovCisJCXRhc2tfbG9jayhwKTsKKwkJbHJ1X2dlbl9hZGRf bW0ocC0+bW0pOworCQl0YXNrX3VubG9jayhwKTsKKwl9CisKIAl3YWtlX3VwX25ld190YXNrKHAp OwogCiAJLyogZm9ya2luZyBjb21wbGV0ZSBhbmQgY2hpbGQgc3RhcnRlZCB0byBydW4sIHRlbGwg cHRyYWNlciAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hl ZC9jb3JlLmMKaW5kZXggZDU3NWI0OTE0OTI1Li44ODE5M2EwZjZkMmIgMTAwNjQ0Ci0tLSBhL2tl cm5lbC9zY2hlZC9jb3JlLmMKKysrIGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtNTA1Nyw2ICs1 MDU3LDcgQEAgY29udGV4dF9zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0 ICpwcmV2LAogCQkgKiBmaW5pc2hfdGFza19zd2l0Y2goKSdzIG1tZHJvcCgpLgogCQkgKi8KIAkJ c3dpdGNoX21tX2lycXNfb2ZmKHByZXYtPmFjdGl2ZV9tbSwgbmV4dC0+bW0sIG5leHQpOworCQls cnVfZ2VuX3VzZV9tbShuZXh0LT5tbSk7CiAKIAkJaWYgKCFwcmV2LT5tbSkgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGZyb20ga2VybmVsCiAJCQkvKiB3aWxsIG1tZHJvcCgpIGluIGZpbmlz aF90YXNrX3N3aXRjaCgpLiAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVt Y29udHJvbC5jCmluZGV4IDgwNjliNThmMjQyMi4uNmE3NjE1MjYxNGM1IDEwMDY0NAotLS0gYS9t bS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC02MDgzLDYgKzYwODMsMjkg QEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2sodm9pZCkKIH0KICNlbmRpZgogCisj aWZkZWYgQ09ORklHX0xSVV9HRU4KK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYXR0YWNoKHN0cnVj dCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAq Y3NzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IE5VTEw7CisKKwljZ3JvdXBfdGFza3Nl dF9mb3JfZWFjaF9sZWFkZXIodGFzaywgY3NzLCB0c2V0KQorCQlicmVhazsKKworCWlmICghdGFz aykKKwkJcmV0dXJuOworCisJdGFza19sb2NrKHRhc2spOworCWlmICh0YXNrLT5tbSAmJiB0YXNr LT5tbS0+b3duZXIgPT0gdGFzaykKKwkJbHJ1X2dlbl9taWdyYXRlX21tKHRhc2stPm1tKTsKKwl0 YXNrX3VubG9jayh0YXNrKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2F0dGFj aChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0xS VV9HRU4gKi8KKwogc3RhdGljIGludCBzZXFfcHV0c19tZW1jZ190dW5hYmxlKHN0cnVjdCBzZXFf ZmlsZSAqbSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlpZiAodmFsdWUgPT0gUEFHRV9DT1VO VEVSX01BWCkKQEAgLTY0MjgsNiArNjQ1MSw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9y eV9jZ3JwX3N1YnN5cyA9IHsKIAkuY3NzX3Jlc2V0ID0gbWVtX2Nncm91cF9jc3NfcmVzZXQsCiAJ LmNzc19yc3RhdF9mbHVzaCA9IG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoLAogCS5jYW5fYXR0 YWNoID0gbWVtX2Nncm91cF9jYW5fYXR0YWNoLAorCS5hdHRhY2ggPSBtZW1fY2dyb3VwX2F0dGFj aCwKIAkuY2FuY2VsX2F0dGFjaCA9IG1lbV9jZ3JvdXBfY2FuY2VsX2F0dGFjaCwKIAkucG9zdF9h dHRhY2ggPSBtZW1fY2dyb3VwX21vdmVfdGFzaywKIAkuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmls ZXMsCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGY0ZGQzYzNj NTg5Yi4uOWUyODEwYTIzMGE0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNj YW4uYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgogI2luY2x1 ZGUgPGxpbnV4L2RheC5oPgogI2luY2x1ZGUgPGxpbnV4L3BzaS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BhZ2V3YWxrLmg+CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KIAogI2luY2x1ZGUgPGFz bS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMzAxNiw3ICszMDE4LDcg QEAgc3RhdGljIGludCBmb2xpb19scnVfdGllcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVy biBscnVfdGllcl9mcm9tX3JlZnMocmVmcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjIF9f bWF5YmVfdW51c2VkICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5p ZCkKK3N0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZywgaW50IG5pZCkKIHsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gTk9ERV9EQVRB KG5pZCk7CiAKQEAgLTMwNjEsNiArMzA2MywzNzQgQEAgc3RhdGljIGJvb2wgX19tYXliZV91bnVz ZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIAkgICAgICAgZ2V0X25yX2dl bnMobHJ1dmVjLCBMUlVfR0VOX0FOT04pIDw9IE1BWF9OUl9HRU5TOwogfQogCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbW1fc3RydWN0IGxpc3QK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0 ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCit7CisJc3RhdGljIHN0cnVj dCBscnVfZ2VuX21tX2xpc3QgbW1fbGlzdCA9IHsKKwkJLmZpZm8gPSBMSVNUX0hFQURfSU5JVCht bV9saXN0LmZpZm8pLAorCQkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG1tX2xpc3QubG9j ayksCisJfTsKKworI2lmZGVmIENPTkZJR19NRU1DRworCWlmIChtZW1jZykKKwkJcmV0dXJuICZt ZW1jZy0+bW1fbGlzdDsKKyNlbmRpZgorCVZNX0JVR19PTighbWVtX2Nncm91cF9kaXNhYmxlZCgp KTsKKworCXJldHVybiAmbW1fbGlzdDsKK30KKwordm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKK3sKKwlpbnQgbmlkOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9 IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pOworCXN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1t X2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisKKwlWTV9CVUdfT05fTU0oIWxpc3RfZW1wdHko Jm1tLT5scnVfZ2VuLmxpc3QpLCBtbSk7CisjaWZkZWYgQ09ORklHX01FTUNHCisJVk1fQlVHX09O X01NKG1tLT5scnVfZ2VuLm1lbWNnLCBtbSk7CisJbW0tPmxydV9nZW4ubWVtY2cgPSBtZW1jZzsK KyNlbmRpZgorCXNwaW5fbG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlmb3JfZWFjaF9ub2RlX3N0 YXRlKG5pZCwgTl9NRU1PUlkpIHsKKwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZl YyhtZW1jZywgbmlkKTsKKworCQlpZiAoIWxydXZlYykKKwkJCWNvbnRpbnVlOworCisJCWlmIChs cnV2ZWMtPm1tX3N0YXRlLnRhaWwgPT0gJm1tX2xpc3QtPmZpZm8pCisJCQlscnV2ZWMtPm1tX3N0 YXRlLnRhaWwgPSAmbW0tPmxydV9nZW4ubGlzdDsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZtbS0+ bHJ1X2dlbi5saXN0LCAmbW1fbGlzdC0+Zmlmbyk7CisKKwlzcGluX3VubG9jaygmbW1fbGlzdC0+ bG9jayk7Cit9CisKK3ZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7 CisJaW50IG5pZDsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0OworCXN0cnVjdCBt ZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7CisKKwlpZiAobGlzdF9lbXB0eSgmbW0tPmxydV9nZW4u bGlzdCkpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19NRU1DRworCW1lbWNnID0gbW0tPmxy dV9nZW4ubWVtY2c7CisjZW5kaWYKKwltbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpOworCisJ c3Bpbl9sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworCWZvcl9lYWNoX25vZGUobmlkKSB7CisJCXN0 cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7CisKKwkJaWYgKCFs cnV2ZWMpCisJCQljb250aW51ZTsKKworCQlpZiAobHJ1dmVjLT5tbV9zdGF0ZS50YWlsID09ICZt bS0+bHJ1X2dlbi5saXN0KQorCQkJbHJ1dmVjLT5tbV9zdGF0ZS50YWlsID0gbHJ1dmVjLT5tbV9z dGF0ZS50YWlsLT5uZXh0OworCisJCWlmIChscnV2ZWMtPm1tX3N0YXRlLmhlYWQgIT0gJm1tLT5s cnVfZ2VuLmxpc3QpCisJCQljb250aW51ZTsKKworCQlscnV2ZWMtPm1tX3N0YXRlLmhlYWQgPSBs cnV2ZWMtPm1tX3N0YXRlLmhlYWQtPm5leHQ7CisJCWlmIChscnV2ZWMtPm1tX3N0YXRlLmhlYWQg PT0gJm1tX2xpc3QtPmZpZm8pCisJCQlXUklURV9PTkNFKGxydXZlYy0+bW1fc3RhdGUuc2VxLCBs cnV2ZWMtPm1tX3N0YXRlLnNlcSArIDEpOworCX0KKworCWxpc3RfZGVsX2luaXQoJm1tLT5scnVf Z2VuLmxpc3QpOworCisJc3Bpbl91bmxvY2soJm1tX2xpc3QtPmxvY2spOworCisjaWZkZWYgQ09O RklHX01FTUNHCisJbWVtX2Nncm91cF9wdXQobW0tPmxydV9nZW4ubWVtY2cpOworCW1tLT5scnVf Z2VuLm1lbWNnID0gTlVMTDsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX01FTUNHCit2b2lk IGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgbWVt X2Nncm91cCAqbWVtY2c7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtbS0+b3duZXItPmFsbG9j X2xvY2spOworCisJLyogZm9yIG1tX3VwZGF0ZV9uZXh0X293bmVyKCkgKi8KKwlpZiAobWVtX2Nn cm91cF9kaXNhYmxlZCgpKQorCQlyZXR1cm47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbWVtY2cg PSBtZW1fY2dyb3VwX2Zyb21fdGFzayhtbS0+b3duZXIpOworCXJjdV9yZWFkX3VubG9jaygpOwor CWlmIChtZW1jZyA9PSBtbS0+bHJ1X2dlbi5tZW1jZykKKwkJcmV0dXJuOworCisJVk1fQlVHX09O X01NKCFtbS0+bHJ1X2dlbi5tZW1jZywgbW0pOworCVZNX0JVR19PTl9NTShsaXN0X2VtcHR5KCZt bS0+bHJ1X2dlbi5saXN0KSwgbW0pOworCisJbHJ1X2dlbl9kZWxfbW0obW0pOworCWxydV9nZW5f YWRkX21tKG1tKTsKK30KKyNlbmRpZgorCisvKgorICogQmxvb20gZmlsdGVycyB3aXRoIG09MTw8 MTUsIGs9MiBhbmQgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGVzIG9mIH4xLzUgd2hlbgorICogbj0x MCwwMDAgYW5kIH4xLzIgd2hlbiBuPTIwLDAwMCwgd2hlcmUsIGNvbnZlbnRpb25hbGx5LCBtIGlz IHRoZSBudW1iZXIgb2YKKyAqIGJpdHMgaW4gYSBiaXRtYXAsIGsgaXMgdGhlIG51bWJlciBvZiBo YXNoIGZ1bmN0aW9ucyBhbmQgbiBpcyB0aGUgbnVtYmVyIG9mCisgKiBpbnNlcnRlZCBpdGVtcy4K KyAqCisgKiBQYWdlIHRhYmxlIHdhbGtlcnMgdXNlIG9uZSBvZiB0aGUgdHdvIGZpbHRlcnMgdG8g cmVkdWNlIHRoZWlyIHNlYXJjaCBzcGFjZS4KKyAqIFRvIGdldCByaWQgb2Ygbm9uLWxlYWYgZW50 cmllcyB0aGF0IG5vIGxvbmdlciBoYXZlIGVub3VnaCBsZWFmIGVudHJpZXMsIHRoZQorICogYWdp bmcgdXNlcyB0aGUgZG91YmxlLWJ1ZmZlcmluZyB0ZWNobmlxdWUgdG8gZmxpcCB0byB0aGUgb3Ro ZXIgZmlsdGVyIGVhY2gKKyAqIHRpbWUgaXQgcHJvZHVjZXMgYSBuZXcgZ2VuZXJhdGlvbi4gRm9y IG5vbi1sZWFmIGVudHJpZXMgdGhhdCBoYXZlIGVub3VnaAorICogbGVhZiBlbnRyaWVzLCB0aGUg YWdpbmcgY2FycmllcyB0aGVtIG92ZXIgdG8gdGhlIG5leHQgZ2VuZXJhdGlvbiBpbgorICogd2Fs a19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5n IHRoZSBybWFwCisgKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuCisgKgorICogRm9yIGZ1dHVy ZSBvcHRpbWl6YXRpb25zOgorICogMS4gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGtlZXAgYm90aCBm aWx0ZXJzIGFsbCB0aGUgdGltZS4gVGhlIHNwYXJlIG9uZSBjYW4gYmUKKyAqICAgIGZyZWVkIGFm dGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGFuZCByZWFsbG9jYXRlZCBpZiBuZWVkZWQgYWdhaW4u CisgKiAyLiBBbmQgd2hlbiByZWFsbG9jYXRpbmcsIGl0J3Mgd29ydGggc2NhbGluZyBpdHMgc2l6 ZSBhY2NvcmRpbmcgdG8gdGhlIG51bWJlcgorICogICAgb2YgaW5zZXJ0ZWQgZW50cmllcyBpbiB0 aGUgb3RoZXIgZmlsdGVyLCB0byByZWR1Y2UgdGhlIG1lbW9yeSBvdmVyaGVhZCBvbgorICogICAg c21hbGwgc3lzdGVtcyBhbmQgZmFsc2UgcG9zaXRpdmVzIG9uIGxhcmdlIHN5c3RlbXMuCisgKiAz LiBKZW5raW5zJyBoYXNoIGZ1bmN0aW9uIGlzIGFuIGFsdGVybmF0aXZlIHRvIEtudXRoJ3MuCisg Ki8KKyNkZWZpbmUgQkxPT01fRklMVEVSX1NISUZUCTE1CisKK3N0YXRpYyBpbmxpbmUgaW50IGZp bHRlcl9nZW5fZnJvbV9zZXEodW5zaWduZWQgbG9uZyBzZXEpCit7CisJcmV0dXJuIHNlcSAlIE5S X0JMT09NX0ZJTFRFUlM7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVt LCBpbnQgKmtleSkKK3sKKwl1MzIgaGFzaCA9IGhhc2hfcHRyKGl0ZW0sIEJMT09NX0ZJTFRFUl9T SElGVCAqIDIpOworCisJQlVJTERfQlVHX09OKEJMT09NX0ZJTFRFUl9TSElGVCAqIDIgPiBCSVRT X1BFUl9UWVBFKHUzMikpOworCisJa2V5WzBdID0gaGFzaCAmIChCSVQoQkxPT01fRklMVEVSX1NI SUZUKSAtIDEpOworCWtleVsxXSA9IGhhc2ggPj4gQkxPT01fRklMVEVSX1NISUZUOworfQorCitz dGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNp Z25lZCBsb25nIHNlcSkKK3sKKwl1bnNpZ25lZCBsb25nICpmaWx0ZXI7CisJaW50IGdlbiA9IGZp bHRlcl9nZW5fZnJvbV9zZXEoc2VxKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmdldF9tbV9s aXN0KGxydXZlY19tZW1jZyhscnV2ZWMpKS0+bG9jayk7CisKKwlmaWx0ZXIgPSBscnV2ZWMtPm1t X3N0YXRlLmZpbHRlcnNbZ2VuXTsKKwlpZiAoZmlsdGVyKSB7CisJCWJpdG1hcF9jbGVhcihmaWx0 ZXIsIDAsIEJJVChCTE9PTV9GSUxURVJfU0hJRlQpKTsKKwkJcmV0dXJuOworCX0KKworCWZpbHRl ciA9IGJpdG1hcF96YWxsb2MoQklUKEJMT09NX0ZJTFRFUl9TSElGVCksIEdGUF9BVE9NSUMpOwor CVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5maWx0ZXJzW2dlbl0sIGZpbHRlcik7Cit9CisK K3N0YXRpYyB2b2lkIHVwZGF0ZV9ibG9vbV9maWx0ZXIoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1 bnNpZ25lZCBsb25nIHNlcSwgdm9pZCAqaXRlbSkKK3sKKwlpbnQga2V5WzJdOworCXVuc2lnbmVk IGxvbmcgKmZpbHRlcjsKKwlpbnQgZ2VuID0gZmlsdGVyX2dlbl9mcm9tX3NlcShzZXEpOworCisJ ZmlsdGVyID0gUkVBRF9PTkNFKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dKTsKKwlpZiAo IWZpbHRlcikKKwkJcmV0dXJuOworCisJZ2V0X2l0ZW1fa2V5KGl0ZW0sIGtleSk7CisKKwlpZiAo IXRlc3RfYml0KGtleVswXSwgZmlsdGVyKSkKKwkJc2V0X2JpdChrZXlbMF0sIGZpbHRlcik7CisJ aWYgKCF0ZXN0X2JpdChrZXlbMV0sIGZpbHRlcikpCisJCXNldF9iaXQoa2V5WzFdLCBmaWx0ZXIp OworfQorCitzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCB2b2lkICppdGVtKQoreworCWludCBrZXlbMl07CisJdW5z aWduZWQgbG9uZyAqZmlsdGVyOworCWludCBnZW4gPSBmaWx0ZXJfZ2VuX2Zyb21fc2VxKHNlcSk7 CisKKwlmaWx0ZXIgPSBSRUFEX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5maWx0ZXJzW2dlbl0pOwor CWlmICghZmlsdGVyKQorCQlyZXR1cm4gdHJ1ZTsKKworCWdldF9pdGVtX2tleShpdGVtLCBrZXkp OworCisJcmV0dXJuIHRlc3RfYml0KGtleVswXSwgZmlsdGVyKSAmJiB0ZXN0X2JpdChrZXlbMV0s IGZpbHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnV2ZWMg KmxydXZlYywgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywgYm9vbCBsYXN0KQoreworCWlu dCBpOworCWludCBoaXN0OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ2V0X21tX2xpc3QobHJ1 dmVjX21lbWNnKGxydXZlYykpLT5sb2NrKTsKKworCWlmICh3YWxrKSB7CisJCWhpc3QgPSBscnVf aGlzdF9mcm9tX3NlcSh3YWxrLT5tYXhfc2VxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlJfTU1f U1RBVFM7IGkrKykgeworCQkJV1JJVEVfT05DRShscnV2ZWMtPm1tX3N0YXRlLnN0YXRzW2hpc3Rd W2ldLAorCQkJCSAgIGxydXZlYy0+bW1fc3RhdGUuc3RhdHNbaGlzdF1baV0gKyB3YWxrLT5tbV9z dGF0c1tpXSk7CisJCQl3YWxrLT5tbV9zdGF0c1tpXSA9IDA7CisJCX0KKwl9CisKKwlpZiAoTlJf SElTVF9HRU5TID4gMSAmJiBsYXN0KSB7CisJCWhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnV2 ZWMtPm1tX3N0YXRlLnNlcSArIDEpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9NTV9TVEFUUzsg aSsrKQorCQkJV1JJVEVfT05DRShscnV2ZWMtPm1tX3N0YXRlLnN0YXRzW2hpc3RdW2ldLCAwKTsK Kwl9Cit9CisKK3N0YXRpYyBib29sIHNob3VsZF9za2lwX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1t LCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCWludCB0eXBlOworCXVuc2lnbmVk IGxvbmcgc2l6ZSA9IDA7CisJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2Rh dCh3YWxrLT5scnV2ZWMpOworCisJaWYgKCF3YWxrLT5mdWxsX3NjYW4gJiYgY3B1bWFza19lbXB0 eShtbV9jcHVtYXNrKG1tKSkgJiYKKwkgICAgIW5vZGVfaXNzZXQocGdkYXQtPm5vZGVfaWQsIG1t LT5scnVfZ2VuLm5vZGVzKSkKKwkJcmV0dXJuIHRydWU7CisKKwlub2RlX2NsZWFyKHBnZGF0LT5u b2RlX2lkLCBtbS0+bHJ1X2dlbi5ub2Rlcyk7CisKKwlmb3IgKHR5cGUgPSAhd2Fsay0+Y2FuX3N3 YXA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHsKKwkJc2l6ZSArPSB0eXBlID8gZ2V0 X21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUykgOgorCQkJICAgICAgIGdldF9tbV9jb3VudGVy KG1tLCBNTV9BTk9OUEFHRVMpICsKKwkJCSAgICAgICBnZXRfbW1fY291bnRlcihtbSwgTU1fU0hN RU1QQUdFUyk7CisJfQorCisJaWYgKHNpemUgPCBNSU5fTFJVX0JBVENIKQorCQlyZXR1cm4gdHJ1 ZTsKKworCWlmIChtbV9pc19vb21fdmljdGltKG1tKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1 cm4gIW1tZ2V0X25vdF96ZXJvKG1tKTsKK30KKworc3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0 KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywKKwkJ CSAgICBzdHJ1Y3QgbW1fc3RydWN0ICoqaXRlcikKK3sKKwlib29sIGZpcnN0ID0gZmFsc2U7CisJ Ym9vbCBsYXN0ID0gdHJ1ZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7CisJc3RydWN0 IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CisJc3RydWN0IGxydV9n ZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTsKKwlzdHJ1Y3QgbHJ1X2dl bl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSAmbHJ1dmVjLT5tbV9zdGF0ZTsKKworCS8qCisJICogVGhl cmUgYXJlIGZvdXIgaW50ZXJlc3RpbmcgY2FzZXMgZm9yIHRoaXMgcGFnZSB0YWJsZSB3YWxrZXI6 CisJICogMS4gSXQgdHJpZXMgdG8gc3RhcnQgYSBuZXcgaXRlcmF0aW9uIG9mIG1tX2xpc3Qgd2l0 aCBhIHN0YWxlIG1heF9zZXE7CisJICogICAgdGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lLgor CSAqIDIuIEl0J3MgdGhlIGZpcnN0IG9mIHRoZSBjdXJyZW50IGdlbmVyYXRpb24sIGFuZCBpdCBu ZWVkcyB0byByZXNldAorCSAqICAgIHRoZSBCbG9vbSBmaWx0ZXIgZm9yIHRoZSBuZXh0IGdlbmVy YXRpb24uCisJICogMy4gSXQgcmVhY2hlcyB0aGUgZW5kIG9mIG1tX2xpc3QsIGFuZCBpdCBuZWVk cyB0byBpbmNyZW1lbnQKKwkgKiAgICBtbV9zdGF0ZS0+c2VxOyB0aGUgaXRlcmF0aW9uIGlzIGRv bmUuCisJICogNC4gSXQncyB0aGUgbGFzdCBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBhbmQg aXQgbmVlZHMgdG8gcmVzZXQgdGhlCisJICogICAgbW0gc3RhdHMgY291bnRlcnMgZm9yIHRoZSBu ZXh0IGdlbmVyYXRpb24uCisJICovCisJaWYgKCppdGVyKQorCQltbXB1dF9hc3luYygqaXRlcik7 CisJZWxzZSBpZiAod2Fsay0+bWF4X3NlcSA8PSBSRUFEX09OQ0UobW1fc3RhdGUtPnNlcSkpCisJ CXJldHVybiBmYWxzZTsKKworCXNwaW5fbG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlWTV9CVUdf T04obW1fc3RhdGUtPnNlcSArIDEgPCB3YWxrLT5tYXhfc2VxKTsKKwlWTV9CVUdfT04oKml0ZXIg JiYgbW1fc3RhdGUtPnNlcSA+IHdhbGstPm1heF9zZXEpOworCVZNX0JVR19PTigqaXRlciAmJiAh bW1fc3RhdGUtPm5yX3dhbGtlcnMpOworCisJaWYgKHdhbGstPm1heF9zZXEgPD0gbW1fc3RhdGUt PnNlcSkgeworCQlpZiAoISppdGVyKQorCQkJbGFzdCA9IGZhbHNlOworCQlnb3RvIGRvbmU7CisJ fQorCisJaWYgKCFtbV9zdGF0ZS0+bnJfd2Fsa2VycykgeworCQlWTV9CVUdfT04obW1fc3RhdGUt PmhlYWQgJiYgbW1fc3RhdGUtPmhlYWQgIT0gJm1tX2xpc3QtPmZpZm8pOworCisJCW1tX3N0YXRl LT5oZWFkID0gbW1fbGlzdC0+Zmlmby5uZXh0OworCQlmaXJzdCA9IHRydWU7CisJfQorCisJd2hp bGUgKCFtbSAmJiBtbV9zdGF0ZS0+aGVhZCAhPSAmbW1fbGlzdC0+ZmlmbykgeworCQltbSA9IGxp c3RfZW50cnkobW1fc3RhdGUtPmhlYWQsIHN0cnVjdCBtbV9zdHJ1Y3QsIGxydV9nZW4ubGlzdCk7 CisKKwkJbW1fc3RhdGUtPmhlYWQgPSBtbV9zdGF0ZS0+aGVhZC0+bmV4dDsKKworCQkvKiBmdWxs IHNjYW4gZm9yIHRob3NlIGFkZGVkIGFmdGVyIHRoZSBsYXN0IGl0ZXJhdGlvbiAqLworCQlpZiAo IW1tX3N0YXRlLT50YWlsIHx8IG1tX3N0YXRlLT50YWlsID09ICZtbS0+bHJ1X2dlbi5saXN0KSB7 CisJCQltbV9zdGF0ZS0+dGFpbCA9IG1tX3N0YXRlLT5oZWFkOworCQkJd2Fsay0+ZnVsbF9zY2Fu ID0gdHJ1ZTsKKwkJfQorCisJCWlmIChzaG91bGRfc2tpcF9tbShtbSwgd2FsaykpCisJCQltbSA9 IE5VTEw7CisJfQorCisJaWYgKG1tX3N0YXRlLT5oZWFkID09ICZtbV9saXN0LT5maWZvKQorCQlX UklURV9PTkNFKG1tX3N0YXRlLT5zZXEsIG1tX3N0YXRlLT5zZXEgKyAxKTsKK2RvbmU6CisJaWYg KCppdGVyICYmICFtbSkKKwkJbW1fc3RhdGUtPm5yX3dhbGtlcnMtLTsKKwlpZiAoISppdGVyICYm IG1tKQorCQltbV9zdGF0ZS0+bnJfd2Fsa2VycysrOworCisJaWYgKG1tX3N0YXRlLT5ucl93YWxr ZXJzKQorCQlsYXN0ID0gZmFsc2U7CisKKwlpZiAobW0gJiYgZmlyc3QpCisJCXJlc2V0X2Jsb29t X2ZpbHRlcihscnV2ZWMsIHdhbGstPm1heF9zZXEgKyAxKTsKKworCWlmICgqaXRlciB8fCBsYXN0 KQorCQlyZXNldF9tbV9zdGF0cyhscnV2ZWMsIHdhbGssIGxhc3QpOworCisJc3Bpbl91bmxvY2so Jm1tX2xpc3QtPmxvY2spOworCisJKml0ZXIgPSBtbTsKKworCXJldHVybiBsYXN0OworfQorCitz dGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg dW5zaWduZWQgbG9uZyBtYXhfc2VxKQoreworCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworCXN0cnVj dCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOworCXN0cnVjdCBscnVf Z2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisJc3RydWN0IGxydV9n ZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gJmxydXZlYy0+bW1fc3RhdGU7CisKKwlpZiAobWF4X3Nl cSA8PSBSRUFEX09OQ0UobW1fc3RhdGUtPnNlcSkpCisJCXJldHVybiBmYWxzZTsKKworCXNwaW5f bG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlWTV9CVUdfT04obW1fc3RhdGUtPnNlcSArIDEgPCBt YXhfc2VxKTsKKworCWlmIChtYXhfc2VxID4gbW1fc3RhdGUtPnNlcSAmJiAhbW1fc3RhdGUtPm5y X3dhbGtlcnMpIHsKKwkJVk1fQlVHX09OKG1tX3N0YXRlLT5oZWFkICYmIG1tX3N0YXRlLT5oZWFk ICE9ICZtbV9saXN0LT5maWZvKTsKKworCQlXUklURV9PTkNFKG1tX3N0YXRlLT5zZXEsIG1tX3N0 YXRlLT5zZXEgKyAxKTsKKwkJcmVzZXRfbW1fc3RhdHMobHJ1dmVjLCBOVUxMLCB0cnVlKTsKKwkJ c3VjY2VzcyA9IHRydWU7CisJfQorCisJc3Bpbl91bmxvY2soJm1tX2xpc3QtPmxvY2spOworCisJ cmV0dXJuIHN1Y2Nlc3M7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAg ICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNrIGxvb3AKICAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCkBAIC0zMjE0LDYgKzM1ODQsNDc2IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpCiAJ cmV0dXJuIG5ld19nZW47CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVj dCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCisJCQkgICAgICBp bnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCit7CisJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xy dShmb2xpbyk7CisJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKKwlpbnQgZGVsdGEg PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CisKKwlWTV9CVUdfT04ob2xkX2dlbiA+PSBNQVhfTlJf R0VOUyk7CisJVk1fQlVHX09OKG5ld19nZW4gPj0gTUFYX05SX0dFTlMpOworCisJd2Fsay0+YmF0 Y2hlZCsrOworCisJd2Fsay0+bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLT0gZGVsdGE7 CisJd2Fsay0+bnJfcGFnZXNbbmV3X2dlbl1bdHlwZV1bem9uZV0gKz0gZGVsdGE7Cit9CisKK3N0 YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qg bHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCWludCBnZW4sIHR5cGUsIHpvbmU7CisJc3RydWN0 IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47CisKKwl3YWxrLT5iYXRj aGVkID0gMDsKKworCWZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKSB7CisJ CWVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFOworCQlpbnQgZGVs dGEgPSB3YWxrLT5ucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdOworCisJCWlmICghZGVsdGEpCisJ CQljb250aW51ZTsKKworCQl3YWxrLT5ucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdID0gMDsKKwkJ V1JJVEVfT05DRShscnVnZW4tPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0sCisJCQkgICBscnVn ZW4tPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0gKyBkZWx0YSk7CisKKwkJaWYgKGxydV9nZW5f aXNfYWN0aXZlKGxydXZlYywgZ2VuKSkKKwkJCWxydSArPSBMUlVfQUNUSVZFOworCQlfX3VwZGF0 ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgem9uZSwgZGVsdGEpOworCX0KK30KKworc3RhdGljIGlu dCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQs IHN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5n OworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+dm1hOworCXN0cnVjdCBscnVf Z2VuX21tX3dhbGsgKnByaXYgPSB3YWxrLT5wcml2YXRlOworCisJaWYgKCF2bWFfaXNfYWNjZXNz aWJsZSh2bWEpIHx8IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8CisJICAgICh2bWEtPnZtX2Zs YWdzICYgKFZNX0xPQ0tFRCB8IFZNX1NQRUNJQUwgfCBWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVB RCkpIHx8CisJICAgIHZtYSA9PSBnZXRfZ2F0ZV92bWEodm1hLT52bV9tbSkpCisJCXJldHVybiB0 cnVlOworCisJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKKwkJcmV0dXJuICFwcml2LT5jYW5f c3dhcDsKKworCWlmIChXQVJOX09OX09OQ0UoIXZtYS0+dm1fZmlsZSB8fCAhdm1hLT52bV9maWxl LT5mX21hcHBpbmcpKQorCQlyZXR1cm4gdHJ1ZTsKKworCW1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUt PmZfbWFwcGluZzsKKwlpZiAobWFwcGluZ191bmV2aWN0YWJsZShtYXBwaW5nKSkKKwkJcmV0dXJu IHRydWU7CisKKwkvKiBjaGVjayByZWFkcGFnZSB0byBleGNsdWRlIHNwZWNpYWwgbWFwcGluZ3Mg bGlrZSBkYXgsIGV0Yy4gKi8KKwlyZXR1cm4gc2htZW1fbWFwcGluZyhtYXBwaW5nKSA/ICFwcml2 LT5jYW5fc3dhcCA6ICFtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2U7Cit9CisKKy8qCisgKiBTb21l IHVzZXJzcGFjZSBtZW1vcnkgYWxsb2NhdG9ycyBtYXAgbWFueSBzaW5nbGUtcGFnZSBWTUFzLiBJ bnN0ZWFkIG9mCisgKiByZXR1cm5pbmcgYmFjayB0byB0aGUgUEdEIHRhYmxlIGZvciBlYWNoIG9m IHN1Y2ggVk1BcywgZmluaXNoIGFuIGVudGlyZSBQTUQKKyAqIHRhYmxlIHRvIHJlZHVjZSB6aWd6 YWdzIGFuZCBpbXByb3ZlIGNhY2hlIHBlcmZvcm1hbmNlLgorICovCitzdGF0aWMgYm9vbCBnZXRf bmV4dF92bWEoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu ZWQgbG9uZyBzaXplLAorCQkJIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICpl bmQpCit7CisJdW5zaWduZWQgbG9uZyBuZXh0ID0gcm91bmRfdXAoKmVuZCwgc2l6ZSk7CisKKwlW TV9CVUdfT04obWFzayAmIHNpemUpOworCVZNX0JVR19PTigqc3RhcnQgPj0gKmVuZCk7CisJVk1f QlVHX09OKChuZXh0ICYgbWFzaykgIT0gKCpzdGFydCAmIG1hc2spKTsKKworCXdoaWxlICh3YWxr LT52bWEpIHsKKwkJaWYgKG5leHQgPj0gd2Fsay0+dm1hLT52bV9lbmQpIHsKKwkJCXdhbGstPnZt YSA9IHdhbGstPnZtYS0+dm1fbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChuZXh0 ICYgbWFzaykgIT0gKHdhbGstPnZtYS0+dm1fc3RhcnQgJiBtYXNrKSkKKwkJCXJldHVybiBmYWxz ZTsKKworCQlpZiAoc2hvdWxkX3NraXBfdm1hKHdhbGstPnZtYS0+dm1fc3RhcnQsIHdhbGstPnZt YS0+dm1fZW5kLCB3YWxrKSkgeworCQkJd2Fsay0+dm1hID0gd2Fsay0+dm1hLT52bV9uZXh0Owor CQkJY29udGludWU7CisJCX0KKworCQkqc3RhcnQgPSBtYXgobmV4dCwgd2Fsay0+dm1hLT52bV9z dGFydCk7CisJCW5leHQgPSAobmV4dCB8IH5tYXNrKSArIDE7CisJCS8qIHJvdW5kZWQtdXAgYm91 bmRhcmllcyBjYW4gd3JhcCB0byAwICovCisJCSplbmQgPSBuZXh0ICYmIG5leHQgPCB3YWxrLT52 bWEtPnZtX2VuZCA/IG5leHQgOiB3YWxrLT52bWEtPnZtX2VuZDsKKworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4o aW50IHRvdGFsLCBpbnQgeW91bmcpCit7CisJaW50IG4gPSBjbGFtcF90KGludCwgY2FjaGVfbGlu ZV9zaXplKCkgLyBzaXplb2YocHRlX3QpLCAyLCA4KTsKKworCS8qIHN1aXRhYmxlIGlmIHRoZSBh dmVyYWdlIG51bWJlciBvZiB5b3VuZyBQVEVzIHBlciBjYWNoZWxpbmUgaXMgPj0xICovCisJcmV0 dXJuIHlvdW5nICogbiA+PSB0b3RhbDsKK30KKworc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2Uo cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkg ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlpbnQgaTsKKwlwdGVfdCAqcHRlOworCXNwaW5s b2NrX3QgKnB0bDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHRvdGFsID0gMDsKKwlpbnQg eW91bmcgPSAwOworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnByaXYgPSB3YWxrLT5wcml2YXRl OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhwcml2LT5scnV2ZWMp OworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQocHJpdi0+bHJ1dmVj KTsKKwlpbnQgb2xkX2dlbiwgbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEocHJpdi0+bWF4X3Nl cSk7CisKKwlWTV9CVUdfT04ocG1kX2xlYWYoKnBtZCkpOworCisJcHRsID0gcHRlX2xvY2twdHIo d2Fsay0+bW0sIHBtZCk7CisJaWYgKCFzcGluX3RyeWxvY2socHRsKSkKKwkJcmV0dXJuIGZhbHNl OworCisJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21h cChwbWQsIHN0YXJ0ICYgUE1EX01BU0spOworcmVzdGFydDoKKwlmb3IgKGkgPSBwdGVfaW5kZXgo c3RhcnQpLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpF KSB7CisJCXN0cnVjdCBmb2xpbyAqZm9saW87CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3Bm bihwdGVbaV0pOworCisJCVZNX0JVR19PTihhZGRyIDwgd2Fsay0+dm1hLT52bV9zdGFydCB8fCBh ZGRyID49IHdhbGstPnZtYS0+dm1fZW5kKTsKKworCQl0b3RhbCsrOworCQlwcml2LT5tbV9zdGF0 c1tNTV9QVEVfVE9UQUxdKys7CisKKwkJaWYgKCFwdGVfcHJlc2VudChwdGVbaV0pIHx8IGlzX3pl cm9fcGZuKHBmbikpCisJCQljb250aW51ZTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9kZXZt YXAocHRlW2ldKSB8fCBwdGVfc3BlY2lhbChwdGVbaV0pKSkKKwkJCWNvbnRpbnVlOworCisJCWlm ICghcHRlX3lvdW5nKHB0ZVtpXSkpIHsKKwkJCXByaXYtPm1tX3N0YXRzW01NX1BURV9PTERdKys7 CisJCQljb250aW51ZTsKKwkJfQorCisJCVZNX0JVR19PTighcGZuX3ZhbGlkKHBmbikpOworCQlp ZiAocGZuIDwgcGdkYXQtPm5vZGVfc3RhcnRfcGZuIHx8IHBmbiA+PSBwZ2RhdF9lbmRfcGZuKHBn ZGF0KSkKKwkJCWNvbnRpbnVlOworCisJCWZvbGlvID0gcGZuX2ZvbGlvKHBmbik7CisJCWlmIChm b2xpb19uaWQoZm9saW8pICE9IHBnZGF0LT5ub2RlX2lkKQorCQkJY29udGludWU7CisKKwkJaWYg KGZvbGlvX21lbWNnX3JjdShmb2xpbykgIT0gbWVtY2cpCisJCQljb250aW51ZTsKKworCQlpZiAo IXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcod2Fsay0+dm1hLCBhZGRyLCBwdGUgKyBpKSkKKwkJ CWNvbnRpbnVlOworCisJCXlvdW5nKys7CisJCXByaXYtPm1tX3N0YXRzW01NX1BURV9ZT1VOR10r KzsKKworCQlpZiAocHRlX2RpcnR5KHB0ZVtpXSkgJiYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8p ICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJiYgZm9saW9fdGVzdF9zd2FwYmFj a2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKKwkJ CWZvbGlvX21hcmtfZGlydHkoZm9saW8pOworCisJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2Vu KGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9sZF9nZW4gPj0gMCAmJiBvbGRfZ2VuICE9IG5ld19n ZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZShwcml2LCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7 CisJfQorCisJaWYgKGkgPCBQVFJTX1BFUl9QVEUgJiYgZ2V0X25leHRfdm1hKHdhbGssIFBNRF9N QVNLLCBQQUdFX1NJWkUsICZzdGFydCwgJmVuZCkpCisJCWdvdG8gcmVzdGFydDsKKworCXB0ZV91 bm1hcChwdGUpOworCisJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJc3Bpbl91bmxvY2so cHRsKTsKKworCXJldHVybiBzdWl0YWJsZV90b19zY2FuKHRvdGFsLCB5b3VuZyk7Cit9CisKKyNp ZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdf QVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcpCitzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9s b2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSwKKwkJCQkgIHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nICpzdGFy dCkKK3sKKwlpbnQgaTsKKwlwbWRfdCAqcG1kOworCXNwaW5sb2NrX3QgKnB0bDsKKwlzdHJ1Y3Qg bHJ1X2dlbl9tbV93YWxrICpwcml2ID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbWVtX2Nncm91 cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cocHJpdi0+bHJ1dmVjKTsKKwlzdHJ1Y3QgcGdsaXN0X2Rh dGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHByaXYtPmxydXZlYyk7CisJaW50IG9sZF9nZW4sIG5l d19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHByaXYtPm1heF9zZXEpOworCisJVk1fQlVHX09OKHB1 ZF9sZWFmKCpwdWQpKTsKKworCS8qIHRyeSB0byBiYXRjaCBhdCBtb3N0IDErTUlOX0xSVV9CQVRD SCsxIGVudHJpZXMgKi8KKwlpZiAoKnN0YXJ0ID09IC0xKSB7CisJCSpzdGFydCA9IG5leHQ7CisJ CXJldHVybjsKKwl9CisKKwlpID0gbmV4dCA9PSAtMSA/IDAgOiBwbWRfaW5kZXgobmV4dCkgLSBw bWRfaW5kZXgoKnN0YXJ0KTsKKwlpZiAoaSAmJiBpIDw9IE1JTl9MUlVfQkFUQ0gpIHsKKwkJX19z ZXRfYml0KGkgLSAxLCBwcml2LT5iaXRtYXApOworCQlyZXR1cm47CisJfQorCisJcG1kID0gcG1k X29mZnNldChwdWQsICpzdGFydCk7CisKKwlwdGwgPSBwbWRfbG9ja3B0cih3YWxrLT5tbSwgcG1k KTsKKwlpZiAoIXNwaW5fdHJ5bG9jayhwdGwpKQorCQlnb3RvIGRvbmU7CisKKwlhcmNoX2VudGVy X2xhenlfbW11X21vZGUoKTsKKworCWRvIHsKKwkJc3RydWN0IGZvbGlvICpmb2xpbzsKKwkJdW5z aWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKHBtZFtpXSk7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9 IGkgPyAoKnN0YXJ0ICYgUE1EX01BU0spICsgaSAqIFBNRF9TSVpFIDogKnN0YXJ0OworCisJCVZN X0JVR19PTihhZGRyIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyID49IHZtYS0+dm1fZW5kKTsKKwor CQlpZiAoIXBtZF9wcmVzZW50KHBtZFtpXSkgfHwgaXNfaHVnZV96ZXJvX3BtZChwbWRbaV0pKQor CQkJZ290byBuZXh0OworCisJCWlmIChXQVJOX09OX09OQ0UocG1kX2Rldm1hcChwbWRbaV0pKSkK KwkJCWdvdG8gbmV4dDsKKworCQlpZiAoIXBtZF90cmFuc19odWdlKHBtZFtpXSkpIHsKKwkJCWlm IChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORykpCisJCQkJcG1k cF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHBtZCArIGkpOworCQkJZ290byBuZXh0 OworCQl9CisKKwkJVk1fQlVHX09OKCFwZm5fdmFsaWQocGZuKSk7CisJCWlmIChwZm4gPCBwZ2Rh dC0+bm9kZV9zdGFydF9wZm4gfHwgcGZuID49IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJZ290 byBuZXh0OworCisJCWZvbGlvID0gcGZuX2ZvbGlvKHBmbik7CisJCWlmIChmb2xpb19uaWQoZm9s aW8pICE9IHBnZGF0LT5ub2RlX2lkKQorCQkJZ290byBuZXh0OworCisJCWlmIChmb2xpb19tZW1j Z19yY3UoZm9saW8pICE9IG1lbWNnKQorCQkJZ290byBuZXh0OworCisJCWlmICghcG1kcF90ZXN0 X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHBtZCArIGkpKQorCQkJZ290byBuZXh0OworCisJ CXByaXYtPm1tX3N0YXRzW01NX1BURV9ZT1VOR10rKzsKKworCQlpZiAocG1kX2RpcnR5KHBtZFtp XSkgJiYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5v bihmb2xpbykgJiYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9s aW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKKwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwor CisJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9s ZF9nZW4gPj0gMCAmJiBvbGRfZ2VuICE9IG5ld19nZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZShw cml2LCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CituZXh0OgorCQlpID0gaSA+IE1JTl9MUlVf QkFUQ0ggPyAwIDoKKwkJICAgIGZpbmRfbmV4dF9iaXQocHJpdi0+Yml0bWFwLCBNSU5fTFJVX0JB VENILCBpKSArIDE7CisJfSB3aGlsZSAoaSA8PSBNSU5fTFJVX0JBVENIKTsKKworCWFyY2hfbGVh dmVfbGF6eV9tbXVfbW9kZSgpOworCXNwaW5fdW5sb2NrKHB0bCk7Citkb25lOgorCSpzdGFydCA9 IC0xOworCWJpdG1hcF96ZXJvKHByaXYtPmJpdG1hcCwgTUlOX0xSVV9CQVRDSCk7Cit9CisjZWxz ZQorc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVk IGxvbmcgbmV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICBzdHJ1Y3QgbW1f d2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyAqc3RhcnQpCit7Cit9CisjZW5kaWYKKworc3RhdGlj IHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgbG9uZyBlbmQsCisJCQkgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlpbnQgaTsK KwlwbWRfdCAqcG1kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7 CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBwb3MgPSAtMTsK KwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpwcml2ID0gd2Fsay0+cHJpdmF0ZTsKKworCVZNX0JV R19PTihwdWRfbGVhZigqcHVkKSk7CisKKwkvKgorCSAqIEZpbmlzaCBhbiBlbnRpcmUgUE1EIGlu IHR3byBwYXNzZXM6IHRoZSBmaXJzdCBvbmx5IHJlYWNoZXMgdG8gUFRFCisJICogdGFibGVzIHRv IGF2b2lkIHRha2luZyB0aGUgUE1EIGxvY2s7IHRoZSBzZWNvbmQsIGlmIG5lY2Vzc2FyeSwgdGFr ZXMKKwkgKiB0aGUgUE1EIGxvY2sgdG8gY2xlYXIgdGhlIGFjY2Vzc2VkIGJpdCBpbiBQTUQgZW50 cmllcy4KKwkgKi8KKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgc3RhcnQgJiBQVURfTUFTSyk7City ZXN0YXJ0OgorCS8qIHdhbGtfcHRlX3JhbmdlKCkgbWF5IGNhbGwgZ2V0X25leHRfdm1hKCkgKi8K Kwl2bWEgPSB3YWxrLT52bWE7CisJZm9yIChpID0gcG1kX2luZGV4KHN0YXJ0KSwgYWRkciA9IHN0 YXJ0OyBhZGRyICE9IGVuZDsgaSsrLCBhZGRyID0gbmV4dCkgeworCQlwbWRfdCB2YWwgPSBwbWRf cmVhZF9hdG9taWMocG1kICsgaSk7CisKKwkJLyogZm9yIHBtZF9yZWFkX2F0b21pYygpICovCisJ CWJhcnJpZXIoKTsKKworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisKKwkJaWYg KCFwbWRfcHJlc2VudCh2YWwpKSB7CisJCQlwcml2LT5tbV9zdGF0c1tNTV9QVEVfVE9UQUxdKys7 CisJCQljb250aW51ZTsKKwkJfQorCisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdF CisJCWlmIChwbWRfdHJhbnNfaHVnZSh2YWwpKSB7CisJCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBt ZF9wZm4odmFsKTsKKwkJCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQo cHJpdi0+bHJ1dmVjKTsKKworCQkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX1RPVEFMXSsrOworCisJ CQlpZiAoaXNfaHVnZV96ZXJvX3BtZCh2YWwpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIXBt ZF95b3VuZyh2YWwpKSB7CisJCQkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX09MRF0rKzsKKwkJCQlj b250aW51ZTsKKwkJCX0KKworCQkJaWYgKHBmbiA8IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiB8fCBw Zm4gPj0gcGdkYXRfZW5kX3BmbihwZ2RhdCkpCisJCQkJY29udGludWU7CisKKwkJCXdhbGtfcG1k X3JhbmdlX2xvY2tlZChwdWQsIGFkZHIsIHZtYSwgd2FsaywgJnBvcyk7CisJCQljb250aW51ZTsK KwkJfQorI2VuZGlmCisJCXByaXYtPm1tX3N0YXRzW01NX1BNRF9UT1RBTF0rKzsKKworI2lmZGVm IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORworCQlpZiAoIXBtZF95b3VuZyh2YWwp KQorCQkJY29udGludWU7CisKKwkJd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZCwgYWRkciwgdm1h LCB3YWxrLCAmcG9zKTsKKyNlbmRpZgorCQlpZiAoIXByaXYtPmZ1bGxfc2NhbiAmJiAhdGVzdF9i bG9vbV9maWx0ZXIocHJpdi0+bHJ1dmVjLCBwcml2LT5tYXhfc2VxLCBwbWQgKyBpKSkKKwkJCWNv bnRpbnVlOworCisJCXByaXYtPm1tX3N0YXRzW01NX1BNRF9GT1VORF0rKzsKKworCQlpZiAoIXdh bGtfcHRlX3JhbmdlKCZ2YWwsIGFkZHIsIG5leHQsIHdhbGspKQorCQkJY29udGludWU7CisKKwkJ cHJpdi0+bW1fc3RhdHNbTU1fUE1EX0FEREVEXSsrOworCisJCS8qIGNhcnJ5IG92ZXIgdG8gdGhl IG5leHQgZ2VuZXJhdGlvbiAqLworCQl1cGRhdGVfYmxvb21fZmlsdGVyKHByaXYtPmxydXZlYywg cHJpdi0+bWF4X3NlcSArIDEsIHBtZCArIGkpOworCX0KKworCXdhbGtfcG1kX3JhbmdlX2xvY2tl ZChwdWQsIC0xLCB2bWEsIHdhbGssICZwb3MpOworCisJaWYgKGkgPCBQVFJTX1BFUl9QTUQgJiYg Z2V0X25leHRfdm1hKHdhbGssIFBVRF9NQVNLLCBQTURfU0laRSwgJnN0YXJ0LCAmZW5kKSkKKwkJ Z290byByZXN0YXJ0OworfQorCitzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQs IHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICBzdHJ1Y3QgbW1f d2FsayAqd2FsaykKK3sKKwlpbnQgaTsKKwlwdWRfdCAqcHVkOworCXVuc2lnbmVkIGxvbmcgYWRk cjsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqcHJpdiA9 IHdhbGstPnByaXZhdGU7CisKKwlWTV9CVUdfT04ocDRkX2xlYWYoKnA0ZCkpOworCisJcHVkID0g cHVkX29mZnNldChwNGQsIHN0YXJ0ICYgUDREX01BU0spOworcmVzdGFydDoKKwlmb3IgKGkgPSBw dWRfaW5kZXgoc3RhcnQpLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kOyBpKyssIGFkZHIgPSBu ZXh0KSB7CisJCXB1ZF90IHZhbCA9IFJFQURfT05DRShwdWRbaV0pOworCisJCW5leHQgPSBwdWRf YWRkcl9lbmQoYWRkciwgZW5kKTsKKworCQlpZiAoIXB1ZF9wcmVzZW50KHZhbCkgfHwgV0FSTl9P Tl9PTkNFKHB1ZF9sZWFmKHZhbCkpKQorCQkJY29udGludWU7CisKKwkJd2Fsa19wbWRfcmFuZ2Uo JnZhbCwgYWRkciwgbmV4dCwgd2Fsayk7CisKKwkJaWYgKHByaXYtPmJhdGNoZWQgPj0gTUFYX0xS VV9CQVRDSCkgeworCQkJZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICsgMTsKKwkJCWdvdG8gZG9u ZTsKKwkJfQorCX0KKworCWlmIChpIDwgUFRSU19QRVJfUFVEICYmIGdldF9uZXh0X3ZtYSh3YWxr LCBQNERfTUFTSywgUFVEX1NJWkUsICZzdGFydCwgJmVuZCkpCisJCWdvdG8gcmVzdGFydDsKKwor CWVuZCA9IHJvdW5kX3VwKGVuZCwgUDREX1NJWkUpOworZG9uZToKKwkvKiByb3VuZGVkLXVwIGJv dW5kYXJpZXMgY2FuIHdyYXAgdG8gMCAqLworCXByaXYtPm5leHRfYWRkciA9IGVuZCAmJiB3YWxr LT52bWEgPyBtYXgoZW5kLCB3YWxrLT52bWEtPnZtX3N0YXJ0KSA6IDA7CisKKwlyZXR1cm4gLUVB R0FJTjsKK30KKworc3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCXN0 YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbW1fd2Fsa19vcHMgPSB7CisJCS50ZXN0X3dh bGsgPSBzaG91bGRfc2tpcF92bWEsCisJCS5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSwKKwl9 OworCisJaW50IGVycjsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2co bHJ1dmVjKTsKKworCXdhbGstPm5leHRfYWRkciA9IEZJUlNUX1VTRVJfQUREUkVTUzsKKworCWRv IHsKKwkJZXJyID0gLUVCVVNZOworCisJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSByZXF1aXJlcyBz dGFibGUgZm9saW9fbWVtY2coKSAqLworCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5bG9ja19wYWdlcyht ZW1jZykpCisJCQlicmVhazsKKworCQkvKiB0aGUgY2FsbGVyIG1pZ2h0IGJlIGhvbGRpbmcgdGhl IGxvY2sgZm9yIHdyaXRlICovCisJCWlmIChtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHsKKwkJCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSB3YWxrLT5uZXh0X2FkZHI7CisJCQl1bnNpZ25lZCBsb25nIGVu ZCA9IG1tLT5oaWdoZXN0X3ZtX2VuZDsKKworCQkJZXJyID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBz dGFydCwgZW5kLCAmbW1fd2Fsa19vcHMsIHdhbGspOworCisJCQltbWFwX3JlYWRfdW5sb2NrKG1t KTsKKworCQkJaWYgKHdhbGstPmJhdGNoZWQpIHsKKwkJCQlzcGluX2xvY2tfaXJxKCZscnV2ZWMt PmxydV9sb2NrKTsKKwkJCQlyZXNldF9iYXRjaF9zaXplKGxydXZlYywgd2Fsayk7CisJCQkJc3Bp bl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKwkJCX0KKwkJfQorCisJCW1lbV9jZ3Jv dXBfdW5sb2NrX3BhZ2VzKCk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAoZXJyID09 IC1FQUdBSU4gJiYgd2Fsay0+bmV4dF9hZGRyICYmICFtbV9pc19vb21fdmljdGltKG1tKSk7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICphbGxvY19tbV93YWxrKHZvaWQpCit7 CisJaWYgKGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgJiYgY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+ bW1fd2FsaykKKwkJcmV0dXJuIGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGs7CisKKwly ZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxydV9nZW5fbW1fd2FsayksCisJCSAgICAgICBf X0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTik7Cit9CisKK3N0YXRp YyB2b2lkIGZyZWVfbW1fd2FsayhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCWlm ICghY3VycmVudC0+cmVjbGFpbV9zdGF0ZSB8fCAhY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1f d2FsaykKKwkJa2ZyZWUod2Fsayk7Cit9CisKIHN0YXRpYyB2b2lkIGluY19taW5fc2VxKHN0cnVj dCBscnV2ZWMgKmxydXZlYykKIHsKIAlpbnQgdHlwZTsKQEAgLTMyNzIsNyArNDExMiw3IEBAIHN0 YXRpYyBib29sIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wg Y2FuX3N3YXApCiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyB2b2lkIGluY19tYXhfc2Vx KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxKQorc3RhdGljIHZv aWQgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogewogCWludCBwcmV2LCBuZXh0 OwogCWludCB0eXBlLCB6b25lOwpAQCAtMzI4Miw5ICs0MTIyLDYgQEAgc3RhdGljIHZvaWQgaW5j X21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEpCiAK IAlWTV9CVUdfT04oIXNlcV9pc192YWxpZChscnV2ZWMpKTsKIAotCWlmIChtYXhfc2VxICE9IGxy dWdlbi0+bWF4X3NlcSkKLQkJZ290byB1bmxvY2s7Ci0KIAlpbmNfbWluX3NlcShscnV2ZWMpOwog CiAJLyoKQEAgLTMzMTYsMTAgKzQxNTMsNzIgQEAgc3RhdGljIHZvaWQgaW5jX21heF9zZXEoc3Ry dWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEpCiAKIAkvKiBtYWtlIHN1 cmUgcHJlY2VkaW5nIG1vZGlmaWNhdGlvbnMgYXBwZWFyICovCiAJc21wX3N0b3JlX3JlbGVhc2Uo JmxydWdlbi0+bWF4X3NlcSwgbHJ1Z2VuLT5tYXhfc2VxICsgMSk7Ci11bmxvY2s6CisKIAlzcGlu X3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwogfQogCitzdGF0aWMgYm9vbCB0cnlfdG9f aW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEs CisJCQkgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgY2FuX3N3YXAsIGJvb2wg ZnVsbF9zY2FuKQoreworCWJvb2wgc3VjY2VzczsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3 YWxrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1 Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKworCVZNX0JVR19PTihtYXhfc2VxID4gUkVB RF9PTkNFKGxydWdlbi0+bWF4X3NlcSkpOworCisJLyoKKwkgKiBJZiB0aGUgaGFyZHdhcmUgZG9l c24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFjaworCSAqIHRv IGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJp dCBpbiBhCisJICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIg YSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5CisJICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBh dm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLgorCSAqLworCWlmICghZnVsbF9zY2FuICYmICFhcmNo X2hhc19od19wdGVfeW91bmcoKSkgeworCQlzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0X25vd2Fs ayhscnV2ZWMsIG1heF9zZXEpOworCQlnb3RvIGRvbmU7CisJfQorCisJd2FsayA9IGFsbG9jX21t X3dhbGsoKTsKKwlpZiAoIXdhbGspIHsKKwkJc3VjY2VzcyA9IGl0ZXJhdGVfbW1fbGlzdF9ub3dh bGsobHJ1dmVjLCBtYXhfc2VxKTsKKwkJZ290byBkb25lOworCX0KKworCXdhbGstPmxydXZlYyA9 IGxydXZlYzsKKwl3YWxrLT5tYXhfc2VxID0gbWF4X3NlcTsKKwl3YWxrLT5jYW5fc3dhcCA9IGNh bl9zd2FwOworCXdhbGstPmZ1bGxfc2NhbiA9IGZ1bGxfc2NhbjsKKworCWRvIHsKKwkJc3VjY2Vz cyA9IGl0ZXJhdGVfbW1fbGlzdChscnV2ZWMsIHdhbGssICZtbSk7CisJCWlmIChtbSkKKwkJCXdh bGtfbW0obHJ1dmVjLCBtbSwgd2Fsayk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAo bW0pOworCisJZnJlZV9tbV93YWxrKHdhbGspOworZG9uZToKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJ aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpICYmICFzYy0+cHJpb3JpdHkpCisJCQl3YWl0X2V2ZW50 X2tpbGxhYmxlKGxydXZlYy0+bW1fc3RhdGUud2FpdCwKKwkJCQkJICAgIG1heF9zZXEgPCBSRUFE X09OQ0UobHJ1Z2VuLT5tYXhfc2VxKSk7CisKKwkJcmV0dXJuIG1heF9zZXEgPCBSRUFEX09OQ0Uo bHJ1Z2VuLT5tYXhfc2VxKTsKKwl9CisKKwlWTV9CVUdfT04obWF4X3NlcSAhPSBSRUFEX09OQ0Uo bHJ1Z2VuLT5tYXhfc2VxKSk7CisKKwlpbmNfbWF4X3NlcShscnV2ZWMpOworCS8qIGVpdGhlciB0 aGlzIHNlZXMgYW55IHdhaXRlcnMgb3IgdGhleSB3aWxsIHNlZSB1cGRhdGVkIG1heF9zZXEgKi8K KwlpZiAod3FfaGFzX3NsZWVwZXIoJmxydXZlYy0+bW1fc3RhdGUud2FpdCkpCisJCXdha2VfdXBf YWxsKCZscnV2ZWMtPm1tX3N0YXRlLndhaXQpOworCisJd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhX Ql9SRUFTT05fVk1TQ0FOKTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgbG9uZyBnZXRf bnJfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2Vx LAogCQkJICAgICB1bnNpZ25lZCBsb25nICptaW5fc2VxLCBib29sIGNhbl9zd2FwLCBib29sICpu ZWVkX2FnaW5nKQogewpAQCAtMzQwMSw3ICs0MzAwLDcgQEAgc3RhdGljIHZvaWQgYWdlX2xydXZl YyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCQlucl90 b19zY2FuKys7CiAKIAlpZiAobnJfdG9fc2NhbiAmJiBuZWVkX2FnaW5nICYmICghbWVtX2Nncm91 cF9iZWxvd19sb3cobWVtY2cpIHx8IHNjLT5tZW1jZ19sb3dfcmVjbGFpbSkpCi0JCWluY19tYXhf c2VxKGxydXZlYywgbWF4X3NlcSk7CisJCXRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9z ZXEsIHNjLCBzd2FwcGluZXNzLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxydV9nZW5fYWdl X25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2Mp CkBAIC0zNDEwLDYgKzQzMDksOCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVj dCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCiAJVk1fQlVH X09OKCFjdXJyZW50X2lzX2tzd2FwZCgpKTsKIAorCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1t X3dhbGsgPSAmcGdkYXQtPm1tX3dhbGs7CisKIAltZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxM LCBOVUxMLCBOVUxMKTsKIAlkbyB7CiAJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3Jv dXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CkBAIC0zNDE4LDExICs0MzE5LDE2IEBAIHN0YXRpYyB2 b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNj YW5fY29udHJvbCAqc2MpCiAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfSB3aGlsZSAoKG1lbWNnID0g bWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpOworCisJY3VycmVudC0+cmVjbGFp bV9zdGF0ZS0+bW1fd2FsayA9IE5VTEw7CiB9CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGV4cGxv aXRzIHNwYXRpYWwgbG9jYWxpdHkgd2hlbiBzaHJpbmtfcGFnZV9saXN0KCkgd2Fsa3MgdGhlCiAg KiBybWFwLiBJdCBzY2FucyB0aGUgYWRqYWNlbnQgUFRFcyBvZiBhIHlvdW5nIFBURSBhbmQgcHJv bW90ZXMgaG90IHBhZ2VzLgorICogSWYgdGhlIHNjYW4gd2FzIGRvbmUgY2FjaGVsaW5lIGVmZmlj aWVudGx5LCBpdCBhZGRzIHRoZSBQTUQgZW50cnkgcG9pbnRpbmcKKyAqIHRvIHRoZSBQVEUgdGFi bGUgdG8gdGhlIEJsb29tIGZpbHRlci4gVGhpcyBwcm9jZXNzIGlzIGEgZmVlZGJhY2sgbG9vcCBm cm9tCisgKiB0aGUgZXZpY3Rpb24gdG8gdGhlIGFnaW5nLgogICovCiB2b2lkIGxydV9nZW5fbG9v a19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogewpAQCAtMzQzMSw2 ICs0MzM3LDggQEAgdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBw ZWRfd2FsayAqcHZtdykKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZW5k OwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwor CWludCB5b3VuZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBiaXRtYXBbQklUU19UT19MT05HUyhNSU5f TFJVX0JBVENIKV0gPSB7fTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGZuX2ZvbGlvKHB2bXct PnBmbik7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwpA QCAtMzQ5Miw2ICs0NDAwLDggQEAgdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdl X3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJaWYgKCFwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5n KHB2bXctPnZtYSwgYWRkciwgcHRlICsgaSkpCiAJCQljb250aW51ZTsKIAorCQl5b3VuZysrOwor CiAJCWlmIChwdGVfZGlydHkocHRlW2ldKSAmJiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJiYK IAkJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X3N3YXBiYWNrZWQo Zm9saW8pICYmCiAJCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQpAQCAtMzUw Nyw3ICs0NDE3LDEzIEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFf bWFwcGVkX3dhbGsgKnB2bXcpCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJcmN1X3Jl YWRfdW5sb2NrKCk7CiAKLQlpZiAoYml0bWFwX3dlaWdodChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gp IDwgUEFHRVZFQ19TSVpFKSB7CisJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFn ZSB0YWJsZSB3YWxrZXJzICovCisJaWYgKHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQorCQl1 cGRhdGVfYmxvb21fZmlsdGVyKGxydXZlYywgbWF4X3NlcSwgcHZtdy0+cG1kKTsKKworCXdhbGsg PSBjdXJyZW50LT5yZWNsYWltX3N0YXRlID8gY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2Fs ayA6IE5VTEw7CisKKwlpZiAoIXdhbGsgJiYgYml0bWFwX3dlaWdodChiaXRtYXAsIE1JTl9MUlVf QkFUQ0gpIDwgUEFHRVZFQ19TSVpFKSB7CiAJCWZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBN SU5fTFJVX0JBVENIKSB7CiAJCQlmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZVtpXSkpOwog CQkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwpAQCAtMzUxOSw4ICs0NDM1LDEwIEBAIHZvaWQgbHJ1 X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJaWYg KCFtZW1fY2dyb3VwX3RyeWxvY2tfcGFnZXMobWVtY2cpKQogCQlyZXR1cm47CiAKLQlzcGluX2xv Y2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKLQluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShs cnV2ZWMtPmxydWdlbi5tYXhfc2VxKTsKKwlpZiAoIXdhbGspIHsKKwkJc3Bpbl9sb2NrX2lycSgm bHJ1dmVjLT5scnVfbG9jayk7CisJCW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydXZlYy0+ bHJ1Z2VuLm1heF9zZXEpOworCX0KIAogCWZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBNSU5f TFJVX0JBVENIKSB7CiAJCWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlW2ldKSk7CkBAIC0z NTMxLDEwICs0NDQ5LDE0IEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92 bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCWlmIChvbGRfZ2VuIDwgMCB8fCBvbGRfZ2VuID09IG5l d19nZW4pCiAJCQljb250aW51ZTsKIAotCQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9s aW8sIG9sZF9nZW4sIG5ld19nZW4pOworCQlpZiAod2FsaykKKwkJCXVwZGF0ZV9iYXRjaF9zaXpl KHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKKwkJZWxzZQorCQkJbHJ1X2dlbl91cGRh dGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAl9CiAKLQlzcGluX3Vu bG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOworCWlmICghd2FsaykKKwkJc3Bpbl91bmxvY2tf aXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKIAogCW1lbV9jZ3JvdXBfdW5sb2NrX3BhZ2VzKCk7CiB9 CkBAIC0zODAxLDYgKzQ3MjMsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcAogCXN0cnVjdCBm b2xpbyAqZm9saW87CiAJZW51bSB2bV9ldmVudF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1f c3RhdCBzdGF0OworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0IG1lbV9j Z3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRh ICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCkBAIC0zODQwLDYgKzQ3NjMsMTAgQEAg c3RhdGljIGludCBldmljdF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nh bl9jb250cm9sICpzYywgaW50IHN3YXAKIAogCW1vdmVfcGFnZXNfdG9fbHJ1KGxydXZlYywgJmxp c3QpOwogCisJd2FsayA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPyBjdXJyZW50LT5yZWNsYWlt X3N0YXRlLT5tbV93YWxrIDogTlVMTDsKKwlpZiAod2FsayAmJiB3YWxrLT5iYXRjaGVkKQorCQly ZXNldF9iYXRjaF9zaXplKGxydXZlYywgd2Fsayk7CisKIAlpdGVtID0gY3VycmVudF9pc19rc3dh cGQoKSA/IFBHU1RFQUxfS1NXQVBEIDogUEdTVEVBTF9ESVJFQ1Q7CiAJaWYgKCFjZ3JvdXBfcmVj bGFpbShzYykpCiAJCV9fY291bnRfdm1fZXZlbnRzKGl0ZW0sIHJlY2xhaW1lZCk7CkBAIC0zODk0 LDIwICs0ODIxLDI1IEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMg KmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wKIAkJcmV0dXJuIDA7CiAJfQog Ci0JaW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxKTsKKwlpZiAodHJ5X3RvX2luY19tYXhfc2Vx KGxydXZlYywgbWF4X3NlcSwgc2MsIGNhbl9zd2FwLCBmYWxzZSkpCisJCXJldHVybiBucl90b19z Y2FuOwogCi0JcmV0dXJuIG5yX3RvX3NjYW47CisJcmV0dXJuIG1pbl9zZXFbTFJVX0dFTl9GSUxF XSArIE1JTl9OUl9HRU5TIDw9IG1heF9zZXEgPyBucl90b19zY2FuIDogMDsKIH0KIAogc3RhdGlj IHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IGJsa19wbHVnIHBsdWc7CiAJbG9uZyBzY2Fu bmVkID0gMDsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZl Yyk7CiAKIAlscnVfYWRkX2RyYWluKCk7CiAKIAlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAKKwlp ZiAoY3VycmVudF9pc19rc3dhcGQoKSkKKwkJY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2Fs ayA9ICZwZ2RhdC0+bW1fd2FsazsKKwogCXdoaWxlICh0cnVlKSB7CiAJCWludCBkZWx0YTsKIAkJ aW50IHN3YXBwaW5lc3M7CkBAIC0zOTM1LDYgKzQ4NjcsOSBAQCBzdGF0aWMgdm9pZCBscnVfZ2Vu X3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9s ICpzYwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKKwlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkK KwkJY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2FsayA9IE5VTEw7CisKIAlibGtfZmluaXNo X3BsdWcoJnBsdWcpOwogfQogCkBAIC0zOTUxLDE1ICs0ODg2LDIxIEBAIHZvaWQgbHJ1X2dlbl9p bml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAlmb3JfZWFjaF9nZW5fdHlwZV96 b25lKGdlbiwgdHlwZSwgem9uZSkKIAkJSU5JVF9MSVNUX0hFQUQoJmxydWdlbi0+bGlzdHNbZ2Vu XVt0eXBlXVt6b25lXSk7CisKKwlscnV2ZWMtPm1tX3N0YXRlLnNlcSA9IE1JTl9OUl9HRU5TOwor CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxydXZlYy0+bW1fc3RhdGUud2FpdCk7CiB9CiAKICNpZmRl ZiBDT05GSUdfTUVNQ0cKIHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3Vw ICptZW1jZykKIHsKKwlJTklUX0xJU1RfSEVBRCgmbWVtY2ctPm1tX2xpc3QuZmlmbyk7CisJc3Bp bl9sb2NrX2luaXQoJm1lbWNnLT5tbV9saXN0LmxvY2spOwogfQogCiB2b2lkIGxydV9nZW5fZXhp dF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CisJaW50IGk7CiAJaW50IG5pZDsK IAogCWZvcl9lYWNoX25vZGUobmlkKSB7CkBAIC0zOTY3LDYgKzQ5MDgsMTEgQEAgdm9pZCBscnVf Z2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCiAJCVZNX0JVR19PTiht ZW1jaHJfaW52KGxydXZlYy0+bHJ1Z2VuLm5yX3BhZ2VzLCAwLAogCQkJCSAgICAgc2l6ZW9mKGxy dXZlYy0+bHJ1Z2VuLm5yX3BhZ2VzKSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9CTE9PTV9G SUxURVJTOyBpKyspIHsKKwkJCWJpdG1hcF9mcmVlKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tp XSk7CisJCQlscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbaV0gPSBOVUxMOworCQl9CiAJfQogfQog I2VuZGlmCkBAIC0zOTc1LDYgKzQ5MjEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9n ZW4odm9pZCkKIHsKIAlCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxID49IE1BWF9OUl9HRU5T KTsKIAlCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIDw9IE1BWF9OUl9HRU5TKTsKKwlC VUlMRF9CVUdfT04oc2l6ZW9mKE1NX1NUQVRfQ09ERVMpICE9IE5SX01NX1NUQVRTICsgMSk7CiAK IAlyZXR1cm4gMDsKIH07Ci0tIAoyLjM1LjEuMTA5NC5nN2M3ZDkwMmE3Yy1nb29nCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=