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 85D75C433F5 for ; Tue, 8 Feb 2022 08:23:00 +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=E4R03AhfQH1i+uRatiJflgWnAbE1EzgoowyYFvddfk4=; b=mvA+gVPdSNeJyte3WASdJvaeB/ iuJ6fy2JuePswhpYjTwuu6RdFh1q+yLEzXWwA71iTQfcLkFBSKefmH0b0x9QbYXdrU8n/sJiz3Bxw fasFWX5kMoiVDLibm8520tyizvoY+aHEgwIfUf+A89eDWWG1K2tsBieWLhDe/J17OEZgAQIq/nr8a A/pzhOMf2FWC3aPrvpLsmerHE1ar9/W3hPMfh4xFbI3j1tiHX+BWRKSgHF89VlL9LBqJx5FXRzTFb bu/GsZUMSZcjbTn5nH3t/v81UbRM50oJR7w0ZC5psJpHd5HsUEhps3tKSGCF3GdAkBXWYKImDi922 DvOUk0+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHLk8-00CuUm-Qb; Tue, 08 Feb 2022 08:20:57 +0000 Received: from mail-il1-x149.google.com ([2607:f8b0:4864:20::149]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHLis-00CtxR-Ku for linux-arm-kernel@lists.infradead.org; Tue, 08 Feb 2022 08:19:53 +0000 Received: by mail-il1-x149.google.com with SMTP id h2-20020a92c082000000b002be1a462793so4014595ile.18 for ; Tue, 08 Feb 2022 00:19:37 -0800 (PST) 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=lhn/IIrV0nmMpSq5PhqpwSOgpN7AOQ+ac7RPoM3B+/Y=; b=GLnUhZ/wPRchOsrazX7Ru1Oi4h+53CQe+0veVpJLEBmS/1CS5jvybyJoQinQWMtnSK V0krrEtEEwMf27KfsccHEFnVNsp5rCGR64MgEKHVqf19yLIyOCoozAHaa3tD5O0R2OYQ T0JbqNcug/xsTpHVpmXrsbCvBPMLghKUfhHrCuSKQ1WaqJ7rtdiwvATq32F54BjvbBsz j5+4UxIqjKf6HUCvUdE2yXppMieL0D2Hm3s7jDCD0afvgBjverM5yw04Inpg3UL3l0d6 KVBTIgCPzeu8ujXizVt8CCZZ8jTeIDAr9XxTqbM79YiXnb9psOkk/Pgygd8v2XjoVEEM GDcQ== 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=lhn/IIrV0nmMpSq5PhqpwSOgpN7AOQ+ac7RPoM3B+/Y=; b=ccVaWk7hHML7ZvxUFhYeZrhZEa76iB/yY3m6zsnlXujVYsBWdzohKjPcTkKFxktP+7 wSL5ImzkX/53nW52hrbS/t9wkoJcoV1N8+Azc1N2ySai612bdjYQ9+0R6T6bIIssvzVQ 7FY6ggVzjHruRDEDCyMuHBALtVuZ7w3D4gq4Z3Uvcv6K3FXDba7+Jx+F7rAS/2g4x3jH OGeiyTzLbgoMQ3UOrAVBl+6D/UiAeXh7V2pjxPixpEkt9U++3ViIIoonkamQ6pUbySzN vslIWqOSn9cNmeVqlyOMNvQHJMDqm3TdgBgQpiyW56E8fvYla3oqSlhxtqSh6C0MtTYG Rl9A== X-Gm-Message-State: AOAM533h37ElGOHS3ccUgL4lQDT3y5riZ+L8TLn2sdb1EY2lGc8hK17Q 3p1lh54t4vE69LS5zO5jAipooWdWuy0= X-Google-Smtp-Source: ABdhPJxokPJjI0kohnWE8uXUTHJDM/mlW7ujpUlVWzHWA6tsl8wYJMFm/E08dq8p0qifdLIfBmI9otlDdP0= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:5f31:19c3:21f5:7300]) (user=yuzhao job=sendgmr) by 2002:a05:6638:528:: with SMTP id j8mr1633830jar.24.1644308377123; Tue, 08 Feb 2022 00:19:37 -0800 (PST) Date: Tue, 8 Feb 2022 01:18:57 -0700 In-Reply-To: <20220208081902.3550911-1-yuzhao@google.com> Message-Id: <20220208081902.3550911-8-yuzhao@google.com> Mime-Version: 1.0 References: <20220208081902.3550911-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.0.263.gb82422642f-goog Subject: [PATCH v7 07/12] mm: multigenerational LRU: support page table walks From: Yu Zhao To: Andrew Morton , Johannes Weiner , Mel Gorman , Michal Hocko Cc: Andi Kleen , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Michael Larabel , 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, linux-mm@kvack.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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220208_001938_781666_7F834DCE X-CRM114-Status: GOOD ( 33.30 ) 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 VG8gYXZvaWQgY29uZnVzaW9ucywgdGhlIHRlcm0gIml0ZXJhdGlvbiIgc3BlY2lmaWNhbGx5IG1l YW5zIHRoZQp0cmF2ZXJzYWwgb2YgYW4gZW50aXJlIG1tX3N0cnVjdCBsaXN0OyB0aGUgdGVybSAi d2FsayIgd2lsbCBiZSBhcHBsaWVkCnRvIHBhZ2UgdGFibGVzIGFuZCB0aGUgcm1hcCwgYXMgdXN1 YWwuCgpUbyBmdXJ0aGVyIGV4cGxvaXQgc3BhdGlhbCBsb2NhbGl0eSwgdGhlIGFnaW5nIHByZWZl cnMgdG8gd2FsayBwYWdlCnRhYmxlcyB0byBzZWFyY2ggZm9yIHlvdW5nIFBURXMgYW5kIHByb21v dGUgaG90IHBhZ2VzLiBBIHJ1bnRpbWUKc3dpdGNoIHdpbGwgYmUgYWRkZWQgaW4gdGhlIG5leHQg cGF0Y2ggdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhpcwpmZWF0dXJlLiBXaXRob3V0IGl0LCB0aGUg YWdpbmcgcmVsaWVzIG9uIHRoZSBybWFwIG9ubHkuCgpOQjogdGhpcyBmZWF0dXJlIGhhcyBub3Ro aW5nIHNpbWlsYXIgd2l0aCB0aGUgcGFnZSB0YWJsZSBzY2FubmluZyBpbgp0aGUgMi40IGtlcm5l bCBbMV0sIHdoaWNoIHNlYXJjaGVzIHBhZ2UgdGFibGVzIGZvciBvbGQgUFRFcywgYWRkcyBjb2xk CnBhZ2VzIHRvIHN3YXBjYWNoZSBhbmQgdW5tYXAgdGhlbS4KCkFuIG1tX3N0cnVjdCBsaXN0IGlz IG1haW50YWluZWQgZm9yIGVhY2ggbWVtY2csIGFuZCBhbiBtbV9zdHJ1Y3QKZm9sbG93cyBpdHMg b3duZXIgdGFzayB0byB0aGUgbmV3IG1lbWNnIHdoZW4gdGhpcyB0YXNrIGlzIG1pZ3JhdGVkLgpH aXZlbiBhbiBscnV2ZWMsIHRoZSBhZ2luZyBpdGVyYXRlcyBscnV2ZWNfbWVtY2coKS0+bW1fbGlz dCBhbmQgY2FsbHMKd2Fsa19wYWdlX3JhbmdlKCkgd2l0aCBlYWNoIG1tX3N0cnVjdCBvbiB0aGlz IGxpc3QgdG8gcHJvbW90ZSBob3QKcGFnZXMgYmVmb3JlIGl0IGluY3JlbWVudHMgbWF4X3NlcS4K CldoZW4gbXVsdGlwbGUgcGFnZSB0YWJsZSB3YWxrZXJzICh0aHJlYWRzKSBpdGVyYXRlIHRoZSBz YW1lIGxpc3QsIGVhY2gKb2YgdGhlbSBnZXRzIGEgdW5pcXVlIG1tX3N0cnVjdDsgdGhlcmVmb3Jl IHRoZXkgY2FuIHJ1biBjb25jdXJyZW50bHkuClBhZ2UgdGFibGUgd2Fsa2VycyBpZ25vcmUgYW55 IG1pc3BsYWNlZCBwYWdlcywgZS5nLiwgaWYgYW4gbW1fc3RydWN0CndhcyBtaWdyYXRlZCwgcGFn ZXMgaXQgbGVmdCBpbiB0aGUgcHJldmlvdXMgbWVtY2cgd29uJ3QgYmUgcHJvbW90ZWQKd2hlbiBp dHMgY3VycmVudCBtZW1jZyBpcyB1bmRlciByZWNsYWltLiBTaW1pbGFybHksIHBhZ2UgdGFibGUg d2Fsa2Vycwp3b24ndCBwcm9tb3RlIHBhZ2VzIGZyb20gbm9kZXMgb3RoZXIgdGhhbiB0aGUgb25l IHVuZGVyIHJlY2xhaW0uCgpUaGlzIHBhdGNoIHVzZXMgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRp b25zIHdoZW4gd2Fsa2luZyBwYWdlIHRhYmxlczoKMSkgSXQgdHJhY2tzIHRoZSB1c2FnZSBvZiBt bV9zdHJ1Y3QncyBiZXR3ZWVuIGNvbnRleHQgc3dpdGNoZXMgc28gdGhhdAogICBwYWdlIHRhYmxl IHdhbGtlcnMgY2FuIHNraXAgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBiZWVuIHNsZWVwaW5nIHNpbmNl CiAgIHRoZSBsYXN0IGl0ZXJhdGlvbi4KMikgSXQgdXNlcyBnZW5lcmF0aW9uYWwgQmxvb20gZmls dGVycyB0byByZWNvcmQgcG9wdWxhdGVkIGJyYW5jaGVzIHNvCiAgIHRoYXQgcGFnZSB0YWJsZSB3 YWxrZXJzIGNhbiByZWR1Y2UgdGhlaXIgc2VhcmNoIHNwYWNlIGJhc2VkIG9uIHRoZQogICBxdWVy eSByZXN1bHRzLCBlLmcuLCB0byBza2lwIHBhZ2UgdGFibGVzIGNvbnRhaW5pbmcgbW9zdGx5IGhv bGVzIG9yCiAgIG1pc3BsYWNlZCBwYWdlcy4KMykgSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBh Y2Nlc3NlZCBiaXQgaW4gbm9uLWxlYWYgUE1EIGVudHJpZXMgd2hlbgogICBDT05GSUdfQVJDSF9I QVNfTk9OTEVBRl9QTURfWU9VTkc9eS4KNCkgSXQgZG9lc24ndCB6aWd6YWcgYmV0d2VlbiBhIFBH RCB0YWJsZSBhbmQgdGhlIHNhbWUgUE1EIHRhYmxlCiAgIHNwYW5uaW5nIG11bHRpcGxlIFZNQXMu IElPVywgaXQgZmluaXNoZXMgYWxsIHRoZSBWTUFzIHdpdGhpbiB0aGUKICAgcmFuZ2Ugb2YgdGhl IHNhbWUgUE1EIHRhYmxlIGJlZm9yZSBpdCByZXR1cm5zIHRvIGEgUEdEIHRhYmxlLiBUaGlzCiAg IGltcHJvdmVzIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSBmb3Igd29ya2xvYWRzIHRoYXQgaGF2ZSBs YXJnZQogICBudW1iZXJzIG9mIHRpbnkgVk1BcyBbMl0sIGVzcGVjaWFsbHkgd2hlbiBDT05GSUdf UEdUQUJMRV9MRVZFTFM9NS4KClNlcnZlciBiZW5jaG1hcmsgcmVzdWx0czoKICBTaW5nbGUgd29y a2xvYWQ6CiAgICBmaW8gKGJ1ZmZlcmVkIEkvTyk6IG5vIGNoYW5nZQoKICBTaW5nbGUgd29ya2xv YWQ6CiAgICBtZW1jYWNoZWQgKGFub24pOiArWzUuNSwgNy41XSUKICAgICAgICAgICAgICAgIE9w cy9zZWMgICAgICBLQi9zZWMKICAgICAgcGF0Y2gxLTY6IDEwMTUyOTIuODMgICAzOTQ5MC4zOAog ICAgICBwYXRjaDEtNzogMTA4MDg1Ni44MiAgIDQyMDQwLjUzCgogIENvbmZpZ3VyYXRpb25zOgog ICAgbm8gY2hhbmdlCgpDbGllbnQgYmVuY2htYXJrIHJlc3VsdHM6CiAga3N3YXBkIHByb2ZpbGVz OgogICAgcGF0Y2gxLTYKICAgICAgNDUuNDklICBsem8xeF8xX2RvX2NvbXByZXNzIChyZWFsIHdv cmspCiAgICAgICA3LjM4JSAgcGFnZV92bWFfbWFwcGVkX3dhbGsKICAgICAgIDcuMjQlICBfcmF3 X3NwaW5fdW5sb2NrX2lycQogICAgICAgMi42NCUgIHB0ZXBfY2xlYXJfZmx1c2gKICAgICAgIDIu MzElICBfX3pyYW1fYnZlY193cml0ZQogICAgICAgMi4xMyUgIGRvX3Jhd19zcGluX2xvY2sKICAg ICAgIDIuMDklICBscnVfZ2VuX2xvb2tfYXJvdW5kCiAgICAgICAxLjg5JSAgZnJlZV91bnJlZl9w YWdlX2xpc3QKICAgICAgIDEuODUlICBtZW1tb3ZlCiAgICAgICAxLjc0JSAgb2JqX21hbGxvYwoK ICAgIHBhdGNoMS03CiAgICAgIDQ3LjczJSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3Jr KQogICAgICAgNi44NCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgICA2LjE0JSAgX3Jhd19z cGluX3VubG9ja19pcnEKICAgICAgIDIuODYlICB3YWxrX3B0ZV9yYW5nZQogICAgICAgMi43OSUg IHB0ZXBfY2xlYXJfZmx1c2gKICAgICAgIDIuMjQlICBfX3pyYW1fYnZlY193cml0ZQogICAgICAg Mi4xMCUgIGRvX3Jhd19zcGluX2xvY2sKICAgICAgIDEuOTQlICBmcmVlX3VucmVmX3BhZ2VfbGlz dAogICAgICAgMS44MCUgIG1lbW1vdmUKICAgICAgIDEuNzUlICBvYmpfbWFsbG9jCgogIENvbmZp Z3VyYXRpb25zOgogICAgbm8gY2hhbmdlCgpbMV0gaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzIz NzMyLwpbMl0gaHR0cHM6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy90ZWNoL2RlYnVnL3Nj dWRvCgpTaWduZWQtb2ZmLWJ5OiBZdSBaaGFvIDx5dXpoYW9AZ29vZ2xlLmNvbT4KQWNrZWQtYnk6 IEJyaWFuIEdlZmZvbiA8YmdlZmZvbkBnb29nbGUuY29tPgpBY2tlZC1ieTogSmFuIEFsZXhhbmRl ciBTdGVmZmVucyAoaGVmdGlnKSA8aGVmdGlnQGFyY2hsaW51eC5vcmc+CkFja2VkLWJ5OiBPbGVr c2FuZHIgTmF0YWxlbmtvIDxvbGVrc2FuZHJAbmF0YWxlbmtvLm5hbWU+CkFja2VkLWJ5OiBTdGV2 ZW4gQmFycmV0dCA8c3RldmVuQGxpcXVvcml4Lm5ldD4KQWNrZWQtYnk6IFN1bGVpbWFuIFNvdWhs YWwgPHN1bGVpbWFuQGdvb2dsZS5jb20+ClRlc3RlZC1ieTogRGFuaWVsIEJ5cm5lIDxkamJ5cm5l QG10dS5lZHU+ClRlc3RlZC1ieTogRG9uYWxkIENhcnIgPGRAY2hhb3MtcmVpbnMuY29tPgpUZXN0 ZWQtYnk6IEhvbGdlciBIb2Zmc3TDpHR0ZSA8aG9sZ2VyQGFwcGxpZWQtYXN5bmNocm9ueS5jb20+ ClRlc3RlZC1ieTogS29uc3RhbnRpbiBLaGFybGFtb3YgPEhpLUFuZ2VsQHlhbmRleC5ydT4KVGVz dGVkLWJ5OiBTaHVhbmcgWmhhaSA8c3poYWkyQGNzLnJvY2hlc3Rlci5lZHU+ClRlc3RlZC1ieTog U29maWEgVHJpbmggPHNvZmlhLnRyaW5oQGVkaS53b3Jrcz4KLS0tCiBmcy9leGVjLmMgICAgICAg ICAgICAgICAgICB8ICAgMiArCiBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCB8ICAgNSArCiBp bmNsdWRlL2xpbnV4L21tX3R5cGVzLmggICB8ICA3OCArKysKIGluY2x1ZGUvbGludXgvbW16b25l LmggICAgIHwgIDU4ICsrKwogaW5jbHVkZS9saW51eC9zd2FwLmggICAgICAgfCAgIDQgKwoga2Vy bmVsL2V4aXQuYyAgICAgICAgICAgICAgfCAgIDEgKwoga2VybmVsL2ZvcmsuYyAgICAgICAgICAg ICAgfCAgIDkgKwoga2VybmVsL3NjaGVkL2NvcmUuYyAgICAgICAgfCAgIDEgKwogbW0vbWVtY29u dHJvbC5jICAgICAgICAgICAgfCAgMjQgKwogbW0vdm1zY2FuLmMgICAgICAgICAgICAgICAgfCA5 NjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMTAgZmlsZXMgY2hhbmdl ZCwgMTEzMiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9mcy9l eGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzlmMmM5NDgzMzAyLi43YTY5MDQ2ZTlmZDggMTAwNjQ0 Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEwMDYsNiArMTAwNiw3IEBAIHN0 YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCWFjdGl2ZV9tbSA9IHRz ay0+YWN0aXZlX21tOwogCXRzay0+YWN0aXZlX21tID0gbW07CiAJdHNrLT5tbSA9IG1tOworCWxy dV9nZW5fYWRkX21tKG1tKTsKIAkvKgogCSAqIFRoaXMgcHJldmVudHMgcHJlZW1wdGlvbiB3aGls ZSBhY3RpdmVfbW0gaXMgYmVpbmcgbG9hZGVkIGFuZAogCSAqIGl0IGFuZCBtbSBhcmUgYmVpbmcg dXBkYXRlZCwgd2hpY2ggY291bGQgY2F1c2UgcHJvYmxlbXMgZm9yCkBAIC0xMDE2LDYgKzEwMTcs NyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlpZiAoIUlT X0VOQUJMRUQoQ09ORklHX0FSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTSkpCiAJCWxvY2Fs X2lycV9lbmFibGUoKTsKIAlhY3RpdmF0ZV9tbShhY3RpdmVfbW0sIG1tKTsKKwlscnVfZ2VuX3Vz ZV9tbShtbSk7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJ VkFURV9NTSkpCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl0c2stPm1tLT52bWFjYWNoZV9zZXFu dW0gPSAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRl L2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA1MWM5YmM4ZTk2NWQuLjJmMGQ4ZTkxMmNmZSAxMDA2 NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9t ZW1jb250cm9sLmgKQEAgLTM0Miw2ICszNDIsMTEgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0 cnVjdCBkZWZlcnJlZF9zcGxpdCBkZWZlcnJlZF9zcGxpdF9xdWV1ZTsKICNlbmRpZgogCisjaWZk ZWYgQ09ORklHX0xSVV9HRU4KKwkvKiBwZXItbWVtY2cgbW1fc3RydWN0IGxpc3QgKi8KKwlzdHJ1 Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3Q7CisjZW5kaWYKKwogCXN0cnVjdCBtZW1fY2dyb3Vw X3Blcl9ub2RlICpub2RlaW5mb1tdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9t bV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IDUxNDBlNWZlYjQ4Ni4u OGQyY2RiYmRkNDY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIv aW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0zLDYgKzMsNyBAQAogI2RlZmluZSBfTElOVVhf TU1fVFlQRVNfSAogCiAjaW5jbHVkZSA8bGludXgvbW1fdHlwZXNfdGFzay5oPgorI2luY2x1ZGUg PGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KICNpbmNsdWRlIDxs aW51eC9rcmVmLmg+CkBAIC0xNyw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFn cy1sYXlvdXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51 eC9zZXFsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKyNpbmNsdWRlIDxsaW51 eC9tbWRlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKQEAgLTYzNCw2ICs2MzcsMjIg QEAgc3RydWN0IG1tX3N0cnVjdCB7CiAjaWZkZWYgQ09ORklHX0lPTU1VX1NVUFBPUlQKIAkJdTMy IHBhc2lkOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKwkJc3RydWN0IHsKKwkJCS8q IHRoaXMgbW1fc3RydWN0IGlzIG9uIGxydV9nZW5fbW1fbGlzdCAqLworCQkJc3RydWN0IGxpc3Rf aGVhZCBsaXN0OworI2lmZGVmIENPTkZJR19NRU1DRworCQkJLyogcG9pbnRzIHRvIHRoZSBtZW1j ZyBvZiAib3duZXIiIGFib3ZlICovCisJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisjZW5k aWYKKwkJCS8qCisJCQkgKiBTZXQgd2hlbiBzd2l0Y2hpbmcgdG8gdGhpcyBtbV9zdHJ1Y3QsIGFz IGEgaGludCBvZgorCQkJICogd2hldGhlciBpdCBoYXMgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0 IHRpbWUgcGVyLW5vZGUKKwkJCSAqIHBhZ2UgdGFibGUgd2Fsa2VycyBjbGVhcmVkIHRoZSBjb3Jy ZXNwb25kaW5nIGJpdHMuCisJCQkgKi8KKwkJCW5vZGVtYXNrX3Qgbm9kZXM7CisJCX0gbHJ1X2dl bjsKKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCX0gX19yYW5kb21pemVfbGF5b3V0Owog CiAJLyoKQEAgLTY2MCw2ICs2NzksNjUgQEAgc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKm1tX2Nw dW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJcmV0dXJuIChzdHJ1Y3QgY3B1bWFzayAqKSZt bS0+Y3B1X2JpdG1hcDsKIH0KIAorI2lmZGVmIENPTkZJR19MUlVfR0VOCisKK3N0cnVjdCBscnVf Z2VuX21tX2xpc3QgeworCS8qIG1tX3N0cnVjdCBsaXN0IGZvciBwYWdlIHRhYmxlIHdhbGtlcnMg Ki8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87CisJLyogcHJvdGVjdHMgdGhlIGxpc3QgYWJvdmUg Ki8KKwlzcGlubG9ja190IGxvY2s7Cit9OworCit2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0p OworI2lmZGVmIENPTkZJR19NRU1DRwordm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1t X3N0cnVjdCAqbW0pOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRf bW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJSU5JVF9MSVNUX0hFQUQoJm1tLT5scnVfZ2Vu Lmxpc3QpOworI2lmZGVmIENPTkZJR19NRU1DRworCW1tLT5scnVfZ2VuLm1lbWNnID0gTlVMTDsK KyNlbmRpZgorCW5vZGVzX2NsZWFyKG1tLT5scnVfZ2VuLm5vZGVzKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCS8qIHVu bGlrZWx5IGJ1dCBub3QgYSBidWcgd2hlbiByYWNpbmcgd2l0aCBscnVfZ2VuX21pZ3JhdGVfbW0o KSAqLworCVZNX1dBUk5fT04obGlzdF9lbXB0eSgmbW0tPmxydV9nZW4ubGlzdCkpOworCisJaWYg KCEoY3VycmVudC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSAmJiAhbm9kZXNfZnVsbChtbS0+bHJ1X2dl bi5ub2RlcykpCisJCW5vZGVzX3NldGFsbChtbS0+bHJ1X2dlbi5ub2Rlcyk7Cit9CisKKyNlbHNl IC8qICFDT05GSUdfTFJVX0dFTiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9hZGRf bW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVf Z2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworI2lmZGVmIENPTkZJR19N RU1DRworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3Ry dWN0ICptbSkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0 X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1 X2dlbl91c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKKyNlbmRpZiAvKiBDT05G SUdfTFJVX0dFTiAqLworCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIGV4dGVybiB2b2lkIHRsYl9nYXRo ZXJfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4 dGVybiB2b2lkIHRsYl9nYXRoZXJfbW11X2Z1bGxtbShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBz dHJ1Y3QgbW1fc3RydWN0ICptbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5o IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAzZDZlYTMwYTJiZGIuLmZhMGE3YTg0ZWU1 OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4 L21tem9uZS5oCkBAIC0zODYsNiArMzg2LDU4IEBAIHN0cnVjdCBscnVfZ2VuX3N0cnVjdCB7CiAJ Ym9vbCBlbmFibGVkOwogfTsKIAorZW51bSB7CisJTU1fUFRFX1RPVEFMLAkvKiB0b3RhbCBsZWFm IGVudHJpZXMgKi8KKwlNTV9QVEVfT0xELAkvKiBvbGQgbGVhZiBlbnRyaWVzICovCisJTU1fUFRF X1lPVU5HLAkvKiB5b3VuZyBsZWFmIGVudHJpZXMgKi8KKwlNTV9QTURfVE9UQUwsCS8qIHRvdGFs IG5vbi1sZWFmIGVudHJpZXMgKi8KKwlNTV9QTURfRk9VTkQsCS8qIG5vbi1sZWFmIGVudHJpZXMg Zm91bmQgaW4gQmxvb20gZmlsdGVycyAqLworCU1NX1BNRF9BRERFRCwJLyogbm9uLWxlYWYgZW50 cmllcyBhZGRlZCB0byBCbG9vbSBmaWx0ZXJzICovCisJTlJfTU1fU1RBVFMKK307CisKKy8qIG1u ZW1vbmljIGNvZGVzIGZvciB0aGUgbW0gc3RhdHMgYWJvdmUgKi8KKyNkZWZpbmUgTU1fU1RBVF9D T0RFUwkJInRveWRmYSIKKworLyogZG91YmxlLWJ1ZmZlcmluZyBCbG9vbSBmaWx0ZXJzICovCisj ZGVmaW5lIE5SX0JMT09NX0ZJTFRFUlMJMgorCitzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSB7CisJ Lyogc2V0IHRvIG1heF9zZXEgYWZ0ZXIgZWFjaCBpdGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25n IHNlcTsKKwkvKiB3aGVyZSB0aGUgY3VycmVudCBpdGVyYXRpb24gc3RhcnRzIChpbmNsdXNpdmUp ICovCisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwkvKiB3aGVyZSB0aGUgbGFzdCBpdGVyYXRp b24gZW5kcyAoZXhjbHVzaXZlKSAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnRhaWw7CisJLyogdG8g d2FpdCBmb3IgdGhlIGxhc3QgcGFnZSB0YWJsZSB3YWxrZXIgdG8gZmluaXNoICovCisJc3RydWN0 IHdhaXRfcXVldWVfaGVhZCB3YWl0OworCS8qIEJsb29tIGZpbHRlcnMgZmxpcCBhZnRlciBlYWNo IGl0ZXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgKmZpbHRlcnNbTlJfQkxPT01fRklMVEVSU107 CisJLyogdGhlIG1tIHN0YXRzIGZvciBkZWJ1Z2dpbmcgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXRz W05SX0hJU1RfR0VOU11bTlJfTU1fU1RBVFNdOworCS8qIHRoZSBudW1iZXIgb2YgY29uY3VycmVu dCBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KKwlpbnQgbnJfd2Fsa2VyczsKK307CisKK3N0cnVjdCBs cnVfZ2VuX21tX3dhbGsgeworCS8qIHRoZSBscnV2ZWMgdW5kZXIgcmVjbGFpbSAqLworCXN0cnVj dCBscnV2ZWMgKmxydXZlYzsKKwkvKiB1bnN0YWJsZSBtYXhfc2VxIGZyb20gbHJ1X2dlbl9zdHJ1 Y3QgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9zZXE7CisJLyogdGhlIG5leHQgYWRkcmVzcyB3aXRo aW4gYW4gbW0gdG8gc2NhbiAqLworCXVuc2lnbmVkIGxvbmcgbmV4dF9hZGRyOworCS8qIHRvIGJh dGNoIHBhZ2UgdGFibGUgZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcgYml0bWFwW0JJVFNfVE9f TE9OR1MoTUlOX0xSVV9CQVRDSCldOworCS8qIHRvIGJhdGNoIHByb21vdGVkIHBhZ2VzICovCisJ aW50IG5yX3BhZ2VzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfWk9ORVNdOwor CS8qIHRvIGJhdGNoIHRoZSBtbSBzdGF0cyAqLworCWludCBtbV9zdGF0c1tOUl9NTV9TVEFUU107 CisJLyogdG90YWwgYmF0Y2hlZCBpdGVtcyAqLworCWludCBiYXRjaGVkOworCWJvb2wgY2FuX3N3 YXA7CisJYm9vbCBmdWxsX3NjYW47Cit9OworCiB2b2lkIGxydV9nZW5faW5pdF9zdGF0ZShzdHJ1 Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiB2b2lkIGxydV9n ZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KTsKIApAQCAt NDM2LDYgKzQ4OCw4IEBAIHN0cnVjdCBscnV2ZWMgewogI2lmZGVmIENPTkZJR19MUlVfR0VOCiAJ LyogZXZpY3RhYmxlIHBhZ2VzIGRpdmlkZWQgaW50byBnZW5lcmF0aW9ucyAqLwogCXN0cnVjdCBs cnVfZ2VuX3N0cnVjdAkJbHJ1Z2VuOworCS8qIHRvIGNvbmN1cnJlbnRseSBpdGVyYXRlIGxydV9n ZW5fbW1fbGlzdCAqLworCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlCQltbV9zdGF0ZTsKICNlbmRp ZgogI2lmZGVmIENPTkZJR19NRU1DRwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CkBAIC0x MDI4LDYgKzEwODIsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEgewogCiAJdW5zaWdu ZWQgbG9uZwkJZmxhZ3M7CiAKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorCS8qIGtzd2FwIG1tIHdh bGsgZGF0YSAqLworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsJbW1fd2FsazsKKyNlbmRpZgogCVpP TkVfUEFERElORyhfcGFkMl8pCiAKIAkvKiBQZXItbm9kZSB2bXN0YXRzICovCmRpZmYgLS1naXQg YS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGIzNzUy MGQzZmYxZC4uMDRkODRhYzZkMWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAor KysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMTM3LDYgKzEzNywxMCBAQCB1bmlvbiBzd2Fw X2hlYWRlciB7CiAgKi8KIHN0cnVjdCByZWNsYWltX3N0YXRlIHsKIAl1bnNpZ25lZCBsb25nIHJl Y2xhaW1lZF9zbGFiOworI2lmZGVmIENPTkZJR19MUlVfR0VOCisJLyogcGVyLXRocmVhZCBtbSB3 YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICptbV93YWxrOworI2VuZGlmCiB9 OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5l bC9leGl0LmMKaW5kZXggYjAwYTI1YmI0YWI5Li41NGQyY2U0YjkzZDEgMTAwNjQ0Ci0tLSBhL2tl cm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNDYzLDYgKzQ2Myw3IEBAIHZvaWQg bW1fdXBkYXRlX25leHRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCWdvdG8gcmV0cnk7 CiAJfQogCVdSSVRFX09OQ0UobW0tPm93bmVyLCBjKTsKKwlscnVfZ2VuX21pZ3JhdGVfbW0obW0p OwogCXRhc2tfdW5sb2NrKGMpOwogCXB1dF90YXNrX3N0cnVjdChjKTsKIH0KZGlmZiAtLWdpdCBh L2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGQ3NWE1MjhmN2IyMS4uOGRjZjZj MzdiOTE4IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAg LTEwNzksNiArMTA3OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCWdvdG8gZmFpbF9ub2Nv bnRleHQ7CiAKIAltbS0+dXNlcl9ucyA9IGdldF91c2VyX25zKHVzZXJfbnMpOworCWxydV9nZW5f aW5pdF9tbShtbSk7CiAJcmV0dXJuIG1tOwogCiBmYWlsX25vY29udGV4dDoKQEAgLTExMjEsNiAr MTEyMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1t KQogCX0KIAlpZiAobW0tPmJpbmZtdCkKIAkJbW9kdWxlX3B1dChtbS0+YmluZm10LT5tb2R1bGUp OworCWxydV9nZW5fZGVsX21tKG1tKTsKIAltbWRyb3AobW0pOwogfQogCkBAIC0yNTc2LDYgKzI1 NzgsMTMgQEAgcGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJn cykKIAkJZ2V0X3Rhc2tfc3RydWN0KHApOwogCX0KIAorCWlmIChJU19FTkFCTEVEKENPTkZJR19M UlVfR0VOKSAmJiAhKGNsb25lX2ZsYWdzICYgQ0xPTkVfVk0pKSB7CisJCS8qIGxvY2sgdGhlIHRh c2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi8KKwkJdGFza19sb2NrKHAp OworCQlscnVfZ2VuX2FkZF9tbShwLT5tbSk7CisJCXRhc2tfdW5sb2NrKHApOworCX0KKwogCXdh a2VfdXBfbmV3X3Rhc2socCk7CiAKIAkvKiBmb3JraW5nIGNvbXBsZXRlIGFuZCBjaGlsZCBzdGFy dGVkIHRvIHJ1biwgdGVsbCBwdHJhY2VyICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29y ZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCA4NDhlYWEwZWZlMGUuLmU1ZmNmZDQ1NTdh ZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuYworKysgYi9rZXJuZWwvc2NoZWQvY29y ZS5jCkBAIC00OTcwLDYgKzQ5NzAsNyBAQCBjb250ZXh0X3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBz dHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCSAqIGZpbmlzaF90YXNrX3N3aXRjaCgpJ3MgbW1k cm9wKCkuCiAJCSAqLwogCQlzd2l0Y2hfbW1faXJxc19vZmYocHJldi0+YWN0aXZlX21tLCBuZXh0 LT5tbSwgbmV4dCk7CisJCWxydV9nZW5fdXNlX21tKG5leHQtPm1tKTsKIAogCQlpZiAoIXByZXYt Pm1tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBrZXJuZWwKIAkJCS8qIHdpbGwg bW1kcm9wKCkgaW4gZmluaXNoX3Rhc2tfc3dpdGNoKCkuICovCmRpZmYgLS1naXQgYS9tbS9tZW1j b250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNzQzNzNkZjE5ZDg0Li42NjJlNjUyZjg1 YmEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAg LTYxNTUsNiArNjE1NSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfdGFzayh2b2lk KQogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorc3RhdGljIHZvaWQgbWVtX2Nn cm91cF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQoreworCXN0cnVjdCBjZ3Jv dXBfc3Vic3lzX3N0YXRlICpjc3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gTlVMTDsK KworCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoX2xlYWRlcih0YXNrLCBjc3MsIHRzZXQpCisJCWJy ZWFrOworCisJaWYgKCF0YXNrKQorCQlyZXR1cm47CisKKwl0YXNrX2xvY2sodGFzayk7CisJaWYg KHRhc2stPm1tICYmIHRhc2stPm1tLT5vd25lciA9PSB0YXNrKQorCQlscnVfZ2VuX21pZ3JhdGVf bW0odGFzay0+bW0pOworCXRhc2tfdW5sb2NrKHRhc2spOworfQorI2Vsc2UKK3N0YXRpYyB2b2lk IG1lbV9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3sKK30KKyNl bmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLworCiBzdGF0aWMgaW50IHNlcV9wdXRzX21lbWNnX3R1 bmFibGUoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCWlmICh2 YWx1ZSA9PSBQQUdFX0NPVU5URVJfTUFYKQpAQCAtNjUwMCw2ICs2NTIzLDcgQEAgc3RydWN0IGNn cm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0gewogCS5jc3NfcmVzZXQgPSBtZW1fY2dy b3VwX2Nzc19yZXNldCwKIAkuY3NzX3JzdGF0X2ZsdXNoID0gbWVtX2Nncm91cF9jc3NfcnN0YXRf Zmx1c2gsCiAJLmNhbl9hdHRhY2ggPSBtZW1fY2dyb3VwX2Nhbl9hdHRhY2gsCisJLmF0dGFjaCA9 IG1lbV9jZ3JvdXBfYXR0YWNoLAogCS5jYW5jZWxfYXR0YWNoID0gbWVtX2Nncm91cF9jYW5jZWxf YXR0YWNoLAogCS5wb3N0X2F0dGFjaCA9IG1lbV9jZ3JvdXBfbW92ZV90YXNrLAogCS5kZmxfY2Z0 eXBlcyA9IG1lbW9yeV9maWxlcywKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2Fu LmMKaW5kZXggOTMzZDQ2YWUyZjY4Li41YWI2Y2QzMzJmY2MgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nh bi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSA8bGludXgv cHJpbnRrLmg+CiAjaW5jbHVkZSA8bGludXgvZGF4Lmg+CiAjaW5jbHVkZSA8bGludXgvcHNpLmg+ CisjaW5jbHVkZSA8bGludXgvcGFnZXdhbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5o PgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBA IC0zMTM1LDYgKzMxMzcsMzcxIEBAIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192 YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAJICAgICAgIGdldF9ucl9nZW5zKGxydXZlYywg VFlQRV9BTk9OKSA8PSBNQVhfTlJfR0VOUzsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogICAgICAgICAgICAgICAgICAgICAgICAgIG1tX3N0cnVjdCBsaXN0CisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qo c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQoreworCXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9s aXN0IG1tX2xpc3QgPSB7CisJCS5maWZvID0gTElTVF9IRUFEX0lOSVQobW1fbGlzdC5maWZvKSwK KwkJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChtbV9saXN0LmxvY2spLAorCX07CisKKyNp ZmRlZiBDT05GSUdfTUVNQ0cKKwlpZiAobWVtY2cpCisJCXJldHVybiAmbWVtY2ctPm1tX2xpc3Q7 CisjZW5kaWYKKwlyZXR1cm4gJm1tX2xpc3Q7Cit9CisKK3ZvaWQgbHJ1X2dlbl9hZGRfbW0oc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaW50IG5pZDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVt Y2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0 ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpOworCisJVk1fQlVHX09OX01NKCFsaXN0X2Vt cHR5KCZtbS0+bHJ1X2dlbi5saXN0KSwgbW0pOworI2lmZGVmIENPTkZJR19NRU1DRworCVZNX0JV R19PTl9NTShtbS0+bHJ1X2dlbi5tZW1jZywgbW0pOworCW1tLT5scnVfZ2VuLm1lbWNnID0gbWVt Y2c7CisjZW5kaWYKKwlzcGluX2xvY2soJm1tX2xpc3QtPmxvY2spOworCisJbGlzdF9hZGRfdGFp bCgmbW0tPmxydV9nZW4ubGlzdCwgJm1tX2xpc3QtPmZpZm8pOworCisJZm9yX2VhY2hfbm9kZShu aWQpIHsKKwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTsK KworCQlpZiAoIWxydXZlYykKKwkJCWNvbnRpbnVlOworCisJCWlmIChscnV2ZWMtPm1tX3N0YXRl LnRhaWwgPT0gJm1tX2xpc3QtPmZpZm8pCisJCQlscnV2ZWMtPm1tX3N0YXRlLnRhaWwgPSBscnV2 ZWMtPm1tX3N0YXRlLnRhaWwtPnByZXY7CisJfQorCisJc3Bpbl91bmxvY2soJm1tX2xpc3QtPmxv Y2spOworfQorCit2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorewor CWludCBuaWQ7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdDsKKwlzdHJ1Y3QgbWVt X2Nncm91cCAqbWVtY2cgPSBOVUxMOworCisJaWYgKGxpc3RfZW1wdHkoJm1tLT5scnVfZ2VuLmxp c3QpKQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwltZW1jZyA9IG1tLT5scnVf Z2VuLm1lbWNnOworI2VuZGlmCisJbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTsKKworCXNw aW5fbG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlmb3JfZWFjaF9ub2RlKG5pZCkgeworCQlzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOworCisJCWlmICghbHJ1 dmVjKQorCQkJY29udGludWU7CisKKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUudGFpbCA9PSAmbW0t PmxydV9nZW4ubGlzdCkKKwkJCWxydXZlYy0+bW1fc3RhdGUudGFpbCA9IGxydXZlYy0+bW1fc3Rh dGUudGFpbC0+bmV4dDsKKworCQlpZiAobHJ1dmVjLT5tbV9zdGF0ZS5oZWFkICE9ICZtbS0+bHJ1 X2dlbi5saXN0KQorCQkJY29udGludWU7CisKKwkJbHJ1dmVjLT5tbV9zdGF0ZS5oZWFkID0gbHJ1 dmVjLT5tbV9zdGF0ZS5oZWFkLT5uZXh0OworCQlpZiAobHJ1dmVjLT5tbV9zdGF0ZS5oZWFkID09 ICZtbV9saXN0LT5maWZvKQorCQkJV1JJVEVfT05DRShscnV2ZWMtPm1tX3N0YXRlLnNlcSwgbHJ1 dmVjLT5tbV9zdGF0ZS5zZXEgKyAxKTsKKwl9CisKKwlsaXN0X2RlbF9pbml0KCZtbS0+bHJ1X2dl bi5saXN0KTsKKworCXNwaW5fdW5sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworI2lmZGVmIENPTkZJ R19NRU1DRworCW1lbV9jZ3JvdXBfcHV0KG1tLT5scnVfZ2VuLm1lbWNnKTsKKwltbS0+bHJ1X2dl bi5tZW1jZyA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19NRU1DRwordm9pZCBs cnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IG1lbV9j Z3JvdXAgKm1lbWNnOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW0tPm93bmVyLT5hbGxvY19s b2NrKTsKKworCS8qIGZvciBtbV91cGRhdGVfbmV4dF9vd25lcigpICovCisJaWYgKG1lbV9jZ3Jv dXBfZGlzYWJsZWQoKSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCW1lbWNnID0g bWVtX2Nncm91cF9mcm9tX3Rhc2sobW0tPm93bmVyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlp ZiAobWVtY2cgPT0gbW0tPmxydV9nZW4ubWVtY2cpCisJCXJldHVybjsKKworCVZNX0JVR19PTl9N TSghbW0tPmxydV9nZW4ubWVtY2csIG1tKTsKKwlWTV9CVUdfT05fTU0obGlzdF9lbXB0eSgmbW0t PmxydV9nZW4ubGlzdCksIG1tKTsKKworCWxydV9nZW5fZGVsX21tKG1tKTsKKwlscnVfZ2VuX2Fk ZF9tbShtbSk7Cit9CisjZW5kaWYKKworLyoKKyAqIEJsb29tIGZpbHRlcnMgd2l0aCBtPTE8PDE1 LCBrPTIgYW5kIHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRlcyBvZiB+MS81IHdoZW4KKyAqIG49MTAs MDAwIGFuZCB+MS8yIHdoZW4gbj0yMCwwMDAsIHdoZXJlLCBjb252ZW50aW9uYWxseSwgbSBpcyB0 aGUgbnVtYmVyIG9mCisgKiBiaXRzIGluIGEgYml0bWFwLCBrIGlzIHRoZSBudW1iZXIgb2YgaGFz aCBmdW5jdGlvbnMgYW5kIG4gaXMgdGhlIG51bWJlciBvZgorICogaW5zZXJ0ZWQgaXRlbXMuCisg KgorICogUGFnZSB0YWJsZSB3YWxrZXJzIHVzZSBvbmUgb2YgdGhlIHR3byBmaWx0ZXJzIHRvIHJl ZHVjZSB0aGVpciBzZWFyY2ggc3BhY2UuCisgKiBUbyBnZXQgcmlkIG9mIG5vbi1sZWFmIGVudHJp ZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBlbm91Z2ggbGVhZiBlbnRyaWVzLCB0aGUKKyAqIGFnaW5n IHVzZXMgdGhlIGRvdWJsZS1idWZmZXJpbmcgdGVjaG5pcXVlIHRvIGZsaXAgdG8gdGhlIG90aGVy IGZpbHRlciBlYWNoCisgKiB0aW1lIGl0IHByb2R1Y2VzIGEgbmV3IGdlbmVyYXRpb24uIEZvciBu b24tbGVhZiBlbnRyaWVzIHRoYXQgaGF2ZSBlbm91Z2gKKyAqIGxlYWYgZW50cmllcywgdGhlIGFn aW5nIGNhcnJpZXMgdGhlbSBvdmVyIHRvIHRoZSBuZXh0IGdlbmVyYXRpb24gaW4KKyAqIHdhbGtf cG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0 aGUgcm1hcAorICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLgorICoKKyAqIEZvciBmdXR1cmUg b3B0aW1pemF0aW9uczoKKyAqIDEpIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBrZWVwIGJvdGggZmls dGVycyBhbGwgdGhlIHRpbWUuIFRoZSBzcGFyZSBvbmUgY2FuIGJlCisgKiAgICBmcmVlZCBhZnRl ciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBhbmQgcmVhbGxvY2F0ZWQgaWYgbmVlZGVkIGFnYWluLgor ICogMikgQW5kIHdoZW4gcmVhbGxvY2F0aW5nLCBpdCdzIHdvcnRoIHNjYWxpbmcgaXRzIHNpemUg YWNjb3JkaW5nIHRvIHRoZSBudW1iZXIKKyAqICAgIG9mIGluc2VydGVkIGVudHJpZXMgaW4gdGhl IG90aGVyIGZpbHRlciwgdG8gcmVkdWNlIHRoZSBtZW1vcnkgb3ZlcmhlYWQgb24KKyAqICAgIHNt YWxsIHN5c3RlbXMgYW5kIGZhbHNlIHBvc2l0aXZlcyBvbiBsYXJnZSBzeXN0ZW1zLgorICogMykg SmVua2lucycgaGFzaCBmdW5jdGlvbiBpcyBhbiBhbHRlcm5hdGl2ZSB0byBLbnV0aCdzLgorICov CisjZGVmaW5lIEJMT09NX0ZJTFRFUl9TSElGVAkxNQorCitzdGF0aWMgaW5saW5lIGludCBmaWx0 ZXJfZ2VuX2Zyb21fc2VxKHVuc2lnbmVkIGxvbmcgc2VxKQoreworCXJldHVybiBzZXEgJSBOUl9C TE9PTV9GSUxURVJTOworfQorCitzdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwg aW50ICprZXkpCit7CisJdTMyIGhhc2ggPSBoYXNoX3B0cihpdGVtLCBCTE9PTV9GSUxURVJfU0hJ RlQgKiAyKTsKKworCUJVSUxEX0JVR19PTihCTE9PTV9GSUxURVJfU0hJRlQgKiAyID4gQklUU19Q RVJfVFlQRSh1MzIpKTsKKworCWtleVswXSA9IGhhc2ggJiAoQklUKEJMT09NX0ZJTFRFUl9TSElG VCkgLSAxKTsKKwlrZXlbMV0gPSBoYXNoID4+IEJMT09NX0ZJTFRFUl9TSElGVDsKK30KKworc3Rh dGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWdu ZWQgbG9uZyBzZXEpCit7CisJdW5zaWduZWQgbG9uZyAqZmlsdGVyOworCWludCBnZW4gPSBmaWx0 ZXJfZ2VuX2Zyb21fc2VxKHNlcSk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZnZXRfbW1fbGlz dChscnV2ZWNfbWVtY2cobHJ1dmVjKSktPmxvY2spOworCisJZmlsdGVyID0gbHJ1dmVjLT5tbV9z dGF0ZS5maWx0ZXJzW2dlbl07CisJaWYgKGZpbHRlcikgeworCQliaXRtYXBfY2xlYXIoZmlsdGVy LCAwLCBCSVQoQkxPT01fRklMVEVSX1NISUZUKSk7CisJCXJldHVybjsKKwl9CisKKwlmaWx0ZXIg PSBiaXRtYXBfemFsbG9jKEJJVChCTE9PTV9GSUxURVJfU0hJRlQpLCBHRlBfQVRPTUlDKTsKKwlX UklURV9PTkNFKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dLCBmaWx0ZXIpOworfQorCitz dGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5z aWduZWQgbG9uZyBzZXEsIHZvaWQgKml0ZW0pCit7CisJaW50IGtleVsyXTsKKwl1bnNpZ25lZCBs b25nICpmaWx0ZXI7CisJaW50IGdlbiA9IGZpbHRlcl9nZW5fZnJvbV9zZXEoc2VxKTsKKworCWZp bHRlciA9IFJFQURfT05DRShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbZ2VuXSk7CisJaWYgKCFm aWx0ZXIpCisJCXJldHVybjsKKworCWdldF9pdGVtX2tleShpdGVtLCBrZXkpOworCisJaWYgKCF0 ZXN0X2JpdChrZXlbMF0sIGZpbHRlcikpCisJCXNldF9iaXQoa2V5WzBdLCBmaWx0ZXIpOworCWlm ICghdGVzdF9iaXQoa2V5WzFdLCBmaWx0ZXIpKQorCQlzZXRfYml0KGtleVsxXSwgZmlsdGVyKTsK K30KKworc3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydXZlYyAqbHJ1dmVj LCB1bnNpZ25lZCBsb25nIHNlcSwgdm9pZCAqaXRlbSkKK3sKKwlpbnQga2V5WzJdOworCXVuc2ln bmVkIGxvbmcgKmZpbHRlcjsKKwlpbnQgZ2VuID0gZmlsdGVyX2dlbl9mcm9tX3NlcShzZXEpOwor CisJZmlsdGVyID0gUkVBRF9PTkNFKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dKTsKKwlp ZiAoIWZpbHRlcikKKwkJcmV0dXJuIHRydWU7CisKKwlnZXRfaXRlbV9rZXkoaXRlbSwga2V5KTsK KworCXJldHVybiB0ZXN0X2JpdChrZXlbMF0sIGZpbHRlcikgJiYgdGVzdF9iaXQoa2V5WzFdLCBm aWx0ZXIpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1dmVjICps cnV2ZWMsIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdCkKK3sKKwlpbnQg aTsKKwlpbnQgaGlzdDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmdldF9tbV9saXN0KGxydXZl Y19tZW1jZyhscnV2ZWMpKS0+bG9jayk7CisKKwlpZiAod2FsaykgeworCQloaXN0ID0gbHJ1X2hp c3RfZnJvbV9zZXEod2Fsay0+bWF4X3NlcSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5SX01NX1NU QVRTOyBpKyspIHsKKwkJCVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zdGF0c1toaXN0XVtp XSwKKwkJCQkgICBscnV2ZWMtPm1tX3N0YXRlLnN0YXRzW2hpc3RdW2ldICsgd2Fsay0+bW1fc3Rh dHNbaV0pOworCQkJd2Fsay0+bW1fc3RhdHNbaV0gPSAwOworCQl9CisJfQorCisJaWYgKE5SX0hJ U1RfR0VOUyA+IDEgJiYgbGFzdCkgeworCQloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1dmVj LT5tbV9zdGF0ZS5zZXEgKyAxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlJfTU1fU1RBVFM7IGkr KykKKwkJCVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zdGF0c1toaXN0XVtpXSwgMCk7CisJ fQorfQorCitzdGF0aWMgYm9vbCBzaG91bGRfc2tpcF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwg c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaykKK3sKKwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBs b25nIHNpemUgPSAwOworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQo d2Fsay0+bHJ1dmVjKTsKKworCWlmICghd2Fsay0+ZnVsbF9zY2FuICYmIGNwdW1hc2tfZW1wdHko bW1fY3B1bWFzayhtbSkpICYmCisJICAgICFub2RlX2lzc2V0KHBnZGF0LT5ub2RlX2lkLCBtbS0+ bHJ1X2dlbi5ub2RlcykpCisJCXJldHVybiB0cnVlOworCisJbm9kZV9jbGVhcihwZ2RhdC0+bm9k ZV9pZCwgbW0tPmxydV9nZW4ubm9kZXMpOworCisJZm9yICh0eXBlID0gIXdhbGstPmNhbl9zd2Fw OyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsrKSB7CisJCXNpemUgKz0gdHlwZSA/IGdldF9t bV9jb3VudGVyKG1tLCBNTV9GSUxFUEFHRVMpIDoKKwkJCSAgICAgICBnZXRfbW1fY291bnRlciht bSwgTU1fQU5PTlBBR0VTKSArCisJCQkgICAgICAgZ2V0X21tX2NvdW50ZXIobW0sIE1NX1NITUVN UEFHRVMpOworCX0KKworCWlmIChzaXplIDwgTUlOX0xSVV9CQVRDSCkKKwkJcmV0dXJuIHRydWU7 CisKKwlpZiAobW1faXNfb29tX3ZpY3RpbShtbSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJu ICFtbWdldF9ub3RfemVybyhtbSk7Cit9CisKK3N0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssCisJCQkg ICAgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpCit7CisJYm9vbCBmaXJzdCA9IGZhbHNlOworCWJv b2wgbGFzdCA9IHRydWU7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOworCXN0cnVjdCBt ZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOworCXN0cnVjdCBscnVfZ2Vu X21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisJc3RydWN0IGxydV9nZW5f bW1fc3RhdGUgKm1tX3N0YXRlID0gJmxydXZlYy0+bW1fc3RhdGU7CisKKwkvKgorCSAqIFRoZXJl IGFyZSBmb3VyIGludGVyZXN0aW5nIGNhc2VzIGZvciB0aGlzIHBhZ2UgdGFibGUgd2Fsa2VyOgor CSAqIDEpIEl0IHRyaWVzIHRvIHN0YXJ0IGEgbmV3IGl0ZXJhdGlvbiBvZiBtbV9saXN0IHdpdGgg YSBzdGFsZSBtYXhfc2VxOworCSAqICAgIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZS4KKwkg KiAyKSBJdCdzIHRoZSBmaXJzdCBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBhbmQgaXQgbmVl ZHMgdG8gcmVzZXQKKwkgKiAgICB0aGUgQmxvb20gZmlsdGVyIGZvciB0aGUgbmV4dCBnZW5lcmF0 aW9uLgorCSAqIDMpIEl0IHJlYWNoZXMgdGhlIGVuZCBvZiBtbV9saXN0LCBhbmQgaXQgbmVlZHMg dG8gaW5jcmVtZW50CisJICogICAgbW1fc3RhdGUtPnNlcTsgdGhlIGl0ZXJhdGlvbiBpcyBkb25l LgorCSAqIDQpIEl0J3MgdGhlIGxhc3Qgb2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYW5kIGl0 IG5lZWRzIHRvIHJlc2V0IHRoZQorCSAqICAgIG1tIHN0YXRzIGNvdW50ZXJzIGZvciB0aGUgbmV4 dCBnZW5lcmF0aW9uLgorCSAqLworCWlmICgqaXRlcikKKwkJbW1wdXRfYXN5bmMoKml0ZXIpOwor CWVsc2UgaWYgKHdhbGstPm1heF9zZXEgPD0gUkVBRF9PTkNFKG1tX3N0YXRlLT5zZXEpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2soJm1tX2xpc3QtPmxvY2spOworCisJVk1fQlVHX09O KHdhbGstPm1heF9zZXEgPiBtbV9zdGF0ZS0+c2VxICsgMSk7CisJVk1fQlVHX09OKCppdGVyICYm IHdhbGstPm1heF9zZXEgPCBtbV9zdGF0ZS0+c2VxKTsKKwlWTV9CVUdfT04oKml0ZXIgJiYgIW1t X3N0YXRlLT5ucl93YWxrZXJzKTsKKworCWlmICh3YWxrLT5tYXhfc2VxIDw9IG1tX3N0YXRlLT5z ZXEpIHsKKwkJaWYgKCEqaXRlcikKKwkJCWxhc3QgPSBmYWxzZTsKKwkJZ290byBkb25lOworCX0K KworCWlmIChtbV9zdGF0ZS0+aGVhZCA9PSAmbW1fbGlzdC0+ZmlmbykgeworCQlWTV9CVUdfT04o bW1fc3RhdGUtPm5yX3dhbGtlcnMpOworCQltbV9zdGF0ZS0+aGVhZCA9IG1tX3N0YXRlLT5oZWFk LT5uZXh0OworCQlmaXJzdCA9IHRydWU7CisJfQorCisJd2hpbGUgKCFtbSAmJiBtbV9zdGF0ZS0+ aGVhZCAhPSAmbW1fbGlzdC0+ZmlmbykgeworCQltbSA9IGxpc3RfZW50cnkobW1fc3RhdGUtPmhl YWQsIHN0cnVjdCBtbV9zdHJ1Y3QsIGxydV9nZW4ubGlzdCk7CisKKwkJbW1fc3RhdGUtPmhlYWQg PSBtbV9zdGF0ZS0+aGVhZC0+bmV4dDsKKworCQkvKiBmdWxsIHNjYW4gZm9yIHRob3NlIGFkZGVk IGFmdGVyIHRoZSBsYXN0IGl0ZXJhdGlvbiAqLworCQlpZiAobW1fc3RhdGUtPnRhaWwgPT0gJm1t LT5scnVfZ2VuLmxpc3QpIHsKKwkJCW1tX3N0YXRlLT50YWlsID0gbW1fc3RhdGUtPnRhaWwtPm5l eHQ7CisJCQl3YWxrLT5mdWxsX3NjYW4gPSB0cnVlOworCQl9CisKKwkJaWYgKHNob3VsZF9za2lw X21tKG1tLCB3YWxrKSkKKwkJCW1tID0gTlVMTDsKKwl9CisKKwlpZiAobW1fc3RhdGUtPmhlYWQg PT0gJm1tX2xpc3QtPmZpZm8pCisJCVdSSVRFX09OQ0UobW1fc3RhdGUtPnNlcSwgbW1fc3RhdGUt PnNlcSArIDEpOworZG9uZToKKwlpZiAoKml0ZXIgJiYgIW1tKQorCQltbV9zdGF0ZS0+bnJfd2Fs a2Vycy0tOworCWlmICghKml0ZXIgJiYgbW0pCisJCW1tX3N0YXRlLT5ucl93YWxrZXJzKys7CisK KwlpZiAobW1fc3RhdGUtPm5yX3dhbGtlcnMpCisJCWxhc3QgPSBmYWxzZTsKKworCWlmIChtbSAm JiBmaXJzdCkKKwkJcmVzZXRfYmxvb21fZmlsdGVyKGxydXZlYywgd2Fsay0+bWF4X3NlcSArIDEp OworCisJaWYgKCppdGVyIHx8IGxhc3QpCisJCXJlc2V0X21tX3N0YXRzKGxydXZlYywgd2Fsaywg bGFzdCk7CisKKwlzcGluX3VubG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwkqaXRlciA9IG1tOwor CisJcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGso c3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEpCit7CisJYm9vbCBz dWNjZXNzID0gZmFsc2U7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNn KGxydXZlYyk7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0 KG1lbWNnKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSAmbHJ1dmVjLT5t bV9zdGF0ZTsKKworCWlmIChtYXhfc2VxIDw9IFJFQURfT05DRShtbV9zdGF0ZS0+c2VxKSkKKwkJ cmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworCVZNX0JVR19P TihtYXhfc2VxID4gbW1fc3RhdGUtPnNlcSArIDEpOworCisJaWYgKG1heF9zZXEgPiBtbV9zdGF0 ZS0+c2VxICYmICFtbV9zdGF0ZS0+bnJfd2Fsa2VycykgeworCQlWTV9CVUdfT04obW1fc3RhdGUt PmhlYWQgIT0gJm1tX2xpc3QtPmZpZm8pOworCisJCVdSSVRFX09OQ0UobW1fc3RhdGUtPnNlcSwg bW1fc3RhdGUtPnNlcSArIDEpOworCQlyZXNldF9tbV9zdGF0cyhscnV2ZWMsIE5VTEwsIHRydWUp OworCQlzdWNjZXNzID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmbW1fbGlzdC0+bG9jayk7 CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZmF1bHQgZmVlZGJhY2sgbG9vcAogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KQEAgLTMyODgsNiArMzY1NSw0NjUgQEAgc3RhdGljIGludCBmb2xpb19pbmNf Z2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNs YWkKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUo c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKKwkJCSAg ICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKK3sKKwlpbnQgdHlwZSA9IGZvbGlvX2lzX2Zp bGVfbHJ1KGZvbGlvKTsKKwlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOworCWludCBk ZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKKworCVZNX0JVR19PTihvbGRfZ2VuID49IE1B WF9OUl9HRU5TKTsKKwlWTV9CVUdfT04obmV3X2dlbiA+PSBNQVhfTlJfR0VOUyk7CisKKwl3YWxr LT5iYXRjaGVkKys7CisKKwl3YWxrLT5ucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtPSBk ZWx0YTsKKwl3YWxrLT5ucl9wYWdlc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSArPSBkZWx0YTsKK30K Kworc3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0 cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspCit7CisJaW50IGdlbiwgdHlwZSwgem9uZTsKKwlz dHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKworCXdhbGst PmJhdGNoZWQgPSAwOworCisJZm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUp IHsKKwkJZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7CisJCWlu dCBkZWx0YSA9IHdhbGstPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07CisKKwkJaWYgKCFkZWx0 YSkKKwkJCWNvbnRpbnVlOworCisJCXdhbGstPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0gPSAw OworCQlXUklURV9PTkNFKGxydWdlbi0+bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSwKKwkJCSAg IGxydWdlbi0+bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSArIGRlbHRhKTsKKworCQlpZiAobHJ1 X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKQorCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCWxy dV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBscnUsIHpvbmUsIGRlbHRhKTsKKwl9Cit9CisKK3N0 YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxv bmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq bWFwcGluZzsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKKwlzdHJ1 Y3QgbHJ1X2dlbl9tbV93YWxrICpwcml2ID0gd2Fsay0+cHJpdmF0ZTsKKworCWlmICghdm1hX2lz X2FjY2Vzc2libGUodm1hKSB8fCBpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAorCSAgICAodm1h LT52bV9mbGFncyAmIChWTV9MT0NLRUQgfCBWTV9TUEVDSUFMIHwgVk1fU0VRX1JFQUQgfCBWTV9S QU5EX1JFQUQpKSB8fAorCSAgICB2bWEgPT0gZ2V0X2dhdGVfdm1hKHZtYS0+dm1fbW0pKQorCQly ZXR1cm4gdHJ1ZTsKKworCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpCisJCXJldHVybiAhcHJp di0+Y2FuX3N3YXA7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCF2bWEtPnZtX2ZpbGUgfHwgIXZtYS0+ dm1fZmlsZS0+Zl9tYXBwaW5nKSkKKwkJcmV0dXJuIHRydWU7CisKKwltYXBwaW5nID0gdm1hLT52 bV9maWxlLT5mX21hcHBpbmc7CisJaWYgKG1hcHBpbmdfdW5ldmljdGFibGUobWFwcGluZykpCisJ CXJldHVybiB0cnVlOworCisJLyogY2hlY2sgcmVhZHBhZ2UgdG8gZXhjbHVkZSBzcGVjaWFsIG1h cHBpbmdzIGxpa2UgZGF4LCBldGMuICovCisJcmV0dXJuIHNobWVtX21hcHBpbmcobWFwcGluZykg PyAhcHJpdi0+Y2FuX3N3YXAgOiAhbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlOworfQorCisvKgor ICogU29tZSB1c2Vyc3BhY2UgbWVtb3J5IGFsbG9jYXRvcnMgbWFwIG1hbnkgc2luZ2xlLXBhZ2Ug Vk1Bcy4gSW5zdGVhZCBvZgorICogcmV0dXJuaW5nIGJhY2sgdG8gdGhlIFBHRCB0YWJsZSBmb3Ig ZWFjaCBvZiBzdWNoIFZNQXMsIGZpbmlzaCBhbiBlbnRpcmUgUE1ECisgKiB0YWJsZSB0byByZWR1 Y2UgemlnemFncyBhbmQgaW1wcm92ZSBjYWNoZSBwZXJmb3JtYW5jZS4KKyAqLworc3RhdGljIGJv b2wgZ2V0X25leHRfdm1hKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIG1hc2ss IHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQg bG9uZyAqZW5kKQoreworCXVuc2lnbmVkIGxvbmcgbmV4dCA9IHJvdW5kX3VwKCplbmQsIHNpemUp OworCisJVk1fQlVHX09OKG1hc2sgJiBzaXplKTsKKwlWTV9CVUdfT04oKnN0YXJ0ID49ICplbmQp OworCVZNX0JVR19PTigobmV4dCAmIG1hc2spICE9ICgqc3RhcnQgJiBtYXNrKSk7CisKKwl3aGls ZSAod2Fsay0+dm1hKSB7CisJCWlmIChuZXh0ID49IHdhbGstPnZtYS0+dm1fZW5kKSB7CisJCQl3 YWxrLT52bWEgPSB3YWxrLT52bWEtPnZtX25leHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlm ICgobmV4dCAmIG1hc2spICE9ICh3YWxrLT52bWEtPnZtX3N0YXJ0ICYgbWFzaykpCisJCQlyZXR1 cm4gZmFsc2U7CisKKwkJaWYgKHNob3VsZF9za2lwX3ZtYSh3YWxrLT52bWEtPnZtX3N0YXJ0LCB3 YWxrLT52bWEtPnZtX2VuZCwgd2FsaykpIHsKKwkJCXdhbGstPnZtYSA9IHdhbGstPnZtYS0+dm1f bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKnN0YXJ0ID0gbWF4KG5leHQsIHdhbGstPnZt YS0+dm1fc3RhcnQpOworCQluZXh0ID0gKG5leHQgfCB+bWFzaykgKyAxOworCQkvKiByb3VuZGVk LXVwIGJvdW5kYXJpZXMgY2FuIHdyYXAgdG8gMCAqLworCQkqZW5kID0gbmV4dCAmJiBuZXh0IDwg d2Fsay0+dm1hLT52bV9lbmQgPyBuZXh0IDogd2Fsay0+dm1hLT52bV9lbmQ7CisKKwkJcmV0dXJu IHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzdWl0YWJsZV90 b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQoreworCWludCBuID0gY2xhbXBfdChpbnQsIGNh Y2hlX2xpbmVfc2l6ZSgpIC8gc2l6ZW9mKHB0ZV90KSwgMiwgOCk7CisKKwkvKiBzdWl0YWJsZSBp ZiB0aGUgYXZlcmFnZSBudW1iZXIgb2YgeW91bmcgUFRFcyBwZXIgY2FjaGVsaW5lIGlzID49MSAq LworCXJldHVybiB5b3VuZyAqIG4gPj0gdG90YWw7Cit9CisKK3N0YXRpYyBib29sIHdhbGtfcHRl X3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5k LAorCQkJICAgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJaW50IGk7CisJcHRlX3QgKnB0ZTsK KwlzcGlubG9ja190ICpwdGw7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCB0b3RhbCA9IDA7 CisJaW50IHlvdW5nID0gMDsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpwcml2ID0gd2Fsay0+ cHJpdmF0ZTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cocHJpdi0+ bHJ1dmVjKTsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHByaXYt PmxydXZlYyk7CisJaW50IG9sZF9nZW4sIG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHByaXYt Pm1heF9zZXEpOworCisJVk1fQlVHX09OKHBtZF9sZWFmKCpwbWQpKTsKKworCXB0ZSA9IHB0ZV9v ZmZzZXRfbWFwX2xvY2sod2Fsay0+bW0sIHBtZCwgc3RhcnQgJiBQTURfTUFTSywgJnB0bCk7CisJ YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CityZXN0YXJ0OgorCWZvciAoaSA9IHB0ZV9pbmRl eChzdGFydCksIGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IGkrKywgYWRkciArPSBQQUdFX1NJ WkUpIHsKKwkJc3RydWN0IGZvbGlvICpmb2xpbzsKKwkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVf cGZuKHB0ZVtpXSk7CisKKwkJVk1fQlVHX09OKGFkZHIgPCB3YWxrLT52bWEtPnZtX3N0YXJ0IHx8 IGFkZHIgPj0gd2Fsay0+dm1hLT52bV9lbmQpOworCisJCXRvdGFsKys7CisJCXByaXYtPm1tX3N0 YXRzW01NX1BURV9UT1RBTF0rKzsKKworCQlpZiAoIXB0ZV9wcmVzZW50KHB0ZVtpXSkgfHwgaXNf emVyb19wZm4ocGZuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChXQVJOX09OX09OQ0UocHRlX2Rl dm1hcChwdGVbaV0pIHx8IHB0ZV9zcGVjaWFsKHB0ZVtpXSkpKQorCQkJY29udGludWU7CisKKwkJ aWYgKCFwdGVfeW91bmcocHRlW2ldKSkgeworCQkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX09MRF0r KzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJVk1fQlVHX09OKCFwZm5fdmFsaWQocGZuKSk7CisJ CWlmIChwZm4gPCBwZ2RhdC0+bm9kZV9zdGFydF9wZm4gfHwgcGZuID49IHBnZGF0X2VuZF9wZm4o cGdkYXQpKQorCQkJY29udGludWU7CisKKwkJZm9saW8gPSBwZm5fZm9saW8ocGZuKTsKKwkJaWYg KGZvbGlvX25pZChmb2xpbykgIT0gcGdkYXQtPm5vZGVfaWQpCisJCQljb250aW51ZTsKKworCQlp ZiAoZm9saW9fbWVtY2dfcmN1KGZvbGlvKSAhPSBtZW1jZykKKwkJCWNvbnRpbnVlOworCisJCWlm ICghcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh3YWxrLT52bWEsIGFkZHIsIHB0ZSArIGkpKQor CQkJY29udGludWU7CisKKwkJeW91bmcrKzsKKwkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX1lPVU5H XSsrOworCisJCWlmIChwdGVfZGlydHkocHRlW2ldKSAmJiAhZm9saW9fdGVzdF9kaXJ0eShmb2xp bykgJiYKKwkJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X3N3YXBi YWNrZWQoZm9saW8pICYmCisJCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQor CQkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CisKKwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9n ZW4oZm9saW8sIG5ld19nZW4pOworCQlpZiAob2xkX2dlbiA+PSAwICYmIG9sZF9nZW4gIT0gbmV3 X2dlbikKKwkJCXVwZGF0ZV9iYXRjaF9zaXplKHByaXYsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2Vu KTsKKwl9CisKKwlpZiAoaSA8IFBUUlNfUEVSX1BURSAmJiBnZXRfbmV4dF92bWEod2FsaywgUE1E X01BU0ssIFBBR0VfU0laRSwgJnN0YXJ0LCAmZW5kKSkKKwkJZ290byByZXN0YXJ0OworCisJYXJj aF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisK KwlyZXR1cm4gc3VpdGFibGVfdG9fc2Nhbih0b3RhbCwgeW91bmcpOworfQorCisjaWYgZGVmaW5l ZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfSEFT X05PTkxFQUZfUE1EX1lPVU5HKQorc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1 ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs CisJCQkJICBzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyAqc3RhcnQpCit7CisJ aW50IGk7CisJcG1kX3QgKnBtZDsKKwlzcGlubG9ja190ICpwdGw7CisJc3RydWN0IGxydV9nZW5f bW1fd2FsayAqcHJpdiA9IHdhbGstPnByaXZhdGU7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNn ID0gbHJ1dmVjX21lbWNnKHByaXYtPmxydXZlYyk7CisJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2Rh dCA9IGxydXZlY19wZ2RhdChwcml2LT5scnV2ZWMpOworCWludCBvbGRfZ2VuLCBuZXdfZ2VuID0g bHJ1X2dlbl9mcm9tX3NlcShwcml2LT5tYXhfc2VxKTsKKworCVZNX0JVR19PTihwdWRfbGVhZigq cHVkKSk7CisKKwkvKiB0cnkgdG8gYmF0Y2ggYXQgbW9zdCAxK01JTl9MUlVfQkFUQ0grMSBlbnRy aWVzICovCisJaWYgKCpzdGFydCA9PSAtMSkgeworCQkqc3RhcnQgPSBuZXh0OworCQlyZXR1cm47 CisJfQorCisJaSA9IG5leHQgPT0gLTEgPyAwIDogcG1kX2luZGV4KG5leHQpIC0gcG1kX2luZGV4 KCpzdGFydCk7CisJaWYgKGkgJiYgaSA8PSBNSU5fTFJVX0JBVENIKSB7CisJCV9fc2V0X2JpdChp IC0gMSwgcHJpdi0+Yml0bWFwKTsKKwkJcmV0dXJuOworCX0KKworCXBtZCA9IHBtZF9vZmZzZXQo cHVkLCAqc3RhcnQpOworCXB0bCA9IHBtZF9sb2NrKHdhbGstPm1tLCBwbWQpOworCWFyY2hfZW50 ZXJfbGF6eV9tbXVfbW9kZSgpOworCisJZG8geworCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOworCQl1 bnNpZ25lZCBsb25nIHBmbiA9IHBtZF9wZm4ocG1kW2ldKTsKKwkJdW5zaWduZWQgbG9uZyBhZGRy ID0gaSA/ICgqc3RhcnQgJiBQTURfTUFTSykgKyBpICogUE1EX1NJWkUgOiAqc3RhcnQ7CisKKwkJ Vk1fQlVHX09OKGFkZHIgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHIgPj0gdm1hLT52bV9lbmQpOwor CisJCWlmICghcG1kX3ByZXNlbnQocG1kW2ldKSB8fCBpc19odWdlX3plcm9fcG1kKHBtZFtpXSkp CisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKFdBUk5fT05fT05DRShwbWRfZGV2bWFwKHBtZFtpXSkp KQorCQkJZ290byBuZXh0OworCisJCWlmICghcG1kX3RyYW5zX2h1Z2UocG1kW2ldKSkgeworCQkJ aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HKSkKKwkJCQlw bWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcG1kICsgaSk7CisJCQlnb3RvIG5l eHQ7CisJCX0KKworCQlWTV9CVUdfT04oIXBmbl92YWxpZChwZm4pKTsKKwkJaWYgKHBmbiA8IHBn ZGF0LT5ub2RlX3N0YXJ0X3BmbiB8fCBwZm4gPj0gcGdkYXRfZW5kX3BmbihwZ2RhdCkpCisJCQln b3RvIG5leHQ7CisKKwkJZm9saW8gPSBwZm5fZm9saW8ocGZuKTsKKwkJaWYgKGZvbGlvX25pZChm b2xpbykgIT0gcGdkYXQtPm5vZGVfaWQpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKGZvbGlvX21l bWNnX3JjdShmb2xpbykgIT0gbWVtY2cpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCFwbWRwX3Rl c3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcG1kICsgaSkpCisJCQlnb3RvIG5leHQ7CisK KwkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX1lPVU5HXSsrOworCisJCWlmIChwbWRfZGlydHkocG1k W2ldKSAmJiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJiYKKwkJICAgICEoZm9saW9fdGVzdF9h bm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICYmCisJCSAgICAgICFm b2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQorCQkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7 CisKKwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pOworCQlpZiAo b2xkX2dlbiA+PSAwICYmIG9sZF9nZW4gIT0gbmV3X2dlbikKKwkJCXVwZGF0ZV9iYXRjaF9zaXpl KHByaXYsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKK25leHQ6CisJCWkgPSBpID4gTUlOX0xS VV9CQVRDSCA/IDAgOgorCQkgICAgZmluZF9uZXh0X2JpdChwcml2LT5iaXRtYXAsIE1JTl9MUlVf QkFUQ0gsIGkpICsgMTsKKwl9IHdoaWxlIChpIDw9IE1JTl9MUlVfQkFUQ0gpOworCisJYXJjaF9s ZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJc3Bpbl91bmxvY2socHRsKTsKKworCSpzdGFydCA9IC0x OworCWJpdG1hcF96ZXJvKHByaXYtPmJpdG1hcCwgTUlOX0xSVV9CQVRDSCk7Cit9CisjZWxzZQor c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxv bmcgbmV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICBzdHJ1Y3QgbW1fd2Fs ayAqd2FsaywgdW5zaWduZWQgbG9uZyAqc3RhcnQpCit7Cit9CisjZW5kaWYKKworc3RhdGljIHZv aWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWdu ZWQgbG9uZyBlbmQsCisJCQkgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlpbnQgaTsKKwlw bWRfdCAqcG1kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJ c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBwb3MgPSAtMTsKKwlz dHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpwcml2ID0gd2Fsay0+cHJpdmF0ZTsKKworCVZNX0JVR19P TihwdWRfbGVhZigqcHVkKSk7CisKKwkvKgorCSAqIEZpbmlzaCBhbiBlbnRpcmUgUE1EIGluIHR3 byBwYXNzZXM6IHRoZSBmaXJzdCBvbmx5IHJlYWNoZXMgdG8gUFRFCisJICogdGFibGVzIHRvIGF2 b2lkIHRha2luZyB0aGUgUE1EIGxvY2s7IHRoZSBzZWNvbmQsIGlmIG5lY2Vzc2FyeSwgdGFrZXMK KwkgKiB0aGUgUE1EIGxvY2sgdG8gY2xlYXIgdGhlIGFjY2Vzc2VkIGJpdCBpbiBQTUQgZW50cmll cy4KKwkgKi8KKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgc3RhcnQgJiBQVURfTUFTSyk7CityZXN0 YXJ0OgorCS8qIHdhbGtfcHRlX3JhbmdlKCkgbWF5IGNhbGwgZ2V0X25leHRfdm1hKCkgKi8KKwl2 bWEgPSB3YWxrLT52bWE7CisJZm9yIChpID0gcG1kX2luZGV4KHN0YXJ0KSwgYWRkciA9IHN0YXJ0 OyBhZGRyICE9IGVuZDsgaSsrLCBhZGRyID0gbmV4dCkgeworCQlwbWRfdCB2YWwgPSBwbWRfcmVh ZF9hdG9taWMocG1kICsgaSk7CisKKwkJLyogZm9yIHBtZF9yZWFkX2F0b21pYygpICovCisJCWJh cnJpZXIoKTsKKworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisKKwkJaWYgKCFw bWRfcHJlc2VudCh2YWwpKSB7CisJCQlwcml2LT5tbV9zdGF0c1tNTV9QVEVfVE9UQUxdKys7CisJ CQljb250aW51ZTsKKwkJfQorCisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCisJ CWlmIChwbWRfdHJhbnNfaHVnZSh2YWwpKSB7CisJCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBtZF9w Zm4odmFsKTsKKwkJCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQocHJp di0+bHJ1dmVjKTsKKworCQkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX1RPVEFMXSsrOworCisJCQlp ZiAoaXNfaHVnZV96ZXJvX3BtZCh2YWwpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIXBtZF95 b3VuZyh2YWwpKSB7CisJCQkJcHJpdi0+bW1fc3RhdHNbTU1fUFRFX09MRF0rKzsKKwkJCQljb250 aW51ZTsKKwkJCX0KKworCQkJaWYgKHBmbiA8IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiB8fCBwZm4g Pj0gcGdkYXRfZW5kX3BmbihwZ2RhdCkpCisJCQkJY29udGludWU7CisKKwkJCXdhbGtfcG1kX3Jh bmdlX2xvY2tlZChwdWQsIGFkZHIsIHZtYSwgd2FsaywgJnBvcyk7CisJCQljb250aW51ZTsKKwkJ fQorI2VuZGlmCisJCXByaXYtPm1tX3N0YXRzW01NX1BNRF9UT1RBTF0rKzsKKworI2lmZGVmIENP TkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORworCQlpZiAoIXBtZF95b3VuZyh2YWwpKQor CQkJY29udGludWU7CisKKwkJd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZCwgYWRkciwgdm1hLCB3 YWxrLCAmcG9zKTsKKyNlbmRpZgorCQlpZiAoIXByaXYtPmZ1bGxfc2NhbiAmJiAhdGVzdF9ibG9v bV9maWx0ZXIocHJpdi0+bHJ1dmVjLCBwcml2LT5tYXhfc2VxLCBwbWQgKyBpKSkKKwkJCWNvbnRp bnVlOworCisJCXByaXYtPm1tX3N0YXRzW01NX1BNRF9GT1VORF0rKzsKKworCQlpZiAoIXdhbGtf cHRlX3JhbmdlKCZ2YWwsIGFkZHIsIG5leHQsIHdhbGspKQorCQkJY29udGludWU7CisKKwkJcHJp di0+bW1fc3RhdHNbTU1fUE1EX0FEREVEXSsrOworCisJCS8qIGNhcnJ5IG92ZXIgdG8gdGhlIG5l eHQgZ2VuZXJhdGlvbiAqLworCQl1cGRhdGVfYmxvb21fZmlsdGVyKHByaXYtPmxydXZlYywgcHJp di0+bWF4X3NlcSArIDEsIHBtZCArIGkpOworCX0KKworCXdhbGtfcG1kX3JhbmdlX2xvY2tlZChw dWQsIC0xLCB2bWEsIHdhbGssICZwb3MpOworCisJaWYgKGkgPCBQVFJTX1BFUl9QTUQgJiYgZ2V0 X25leHRfdm1hKHdhbGssIFBVRF9NQVNLLCBQTURfU0laRSwgJnN0YXJ0LCAmZW5kKSkKKwkJZ290 byByZXN0YXJ0OworfQorCitzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICBzdHJ1Y3QgbW1fd2Fs ayAqd2FsaykKK3sKKwlpbnQgaTsKKwlwdWRfdCAqcHVkOworCXVuc2lnbmVkIGxvbmcgYWRkcjsK Kwl1bnNpZ25lZCBsb25nIG5leHQ7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqcHJpdiA9IHdh bGstPnByaXZhdGU7CisKKwlWTV9CVUdfT04ocDRkX2xlYWYoKnA0ZCkpOworCisJcHVkID0gcHVk X29mZnNldChwNGQsIHN0YXJ0ICYgUDREX01BU0spOworcmVzdGFydDoKKwlmb3IgKGkgPSBwdWRf aW5kZXgoc3RhcnQpLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kOyBpKyssIGFkZHIgPSBuZXh0 KSB7CisJCXB1ZF90IHZhbCA9IFJFQURfT05DRShwdWRbaV0pOworCisJCW5leHQgPSBwdWRfYWRk cl9lbmQoYWRkciwgZW5kKTsKKworCQlpZiAoIXB1ZF9wcmVzZW50KHZhbCkgfHwgV0FSTl9PTl9P TkNFKHB1ZF9sZWFmKHZhbCkpKQorCQkJY29udGludWU7CisKKwkJd2Fsa19wbWRfcmFuZ2UoJnZh bCwgYWRkciwgbmV4dCwgd2Fsayk7CisKKwkJaWYgKHByaXYtPmJhdGNoZWQgPj0gTUFYX0xSVV9C QVRDSCkgeworCQkJZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICsgMTsKKwkJCWdvdG8gZG9uZTsK KwkJfQorCX0KKworCWlmIChpIDwgUFRSU19QRVJfUFVEICYmIGdldF9uZXh0X3ZtYSh3YWxrLCBQ NERfTUFTSywgUFVEX1NJWkUsICZzdGFydCwgJmVuZCkpCisJCWdvdG8gcmVzdGFydDsKKworCWVu ZCA9IHJvdW5kX3VwKGVuZCwgUDREX1NJWkUpOworZG9uZToKKwkvKiByb3VuZGVkLXVwIGJvdW5k YXJpZXMgY2FuIHdyYXAgdG8gMCAqLworCXByaXYtPm5leHRfYWRkciA9IGVuZCAmJiB3YWxrLT52 bWEgPyBtYXgoZW5kLCB3YWxrLT52bWEtPnZtX3N0YXJ0KSA6IDA7CisKKwlyZXR1cm4gLUVBR0FJ TjsKK30KKworc3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCXN0YXRp YyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbW1fd2Fsa19vcHMgPSB7CisJCS50ZXN0X3dhbGsg PSBzaG91bGRfc2tpcF92bWEsCisJCS5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSwKKwl9Owor CisJaW50IGVycjsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1 dmVjKTsKKworCXdhbGstPm5leHRfYWRkciA9IEZJUlNUX1VTRVJfQUREUkVTUzsKKworCWRvIHsK KwkJZXJyID0gLUVCVVNZOworCisJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSByZXF1aXJlcyBzdGFi bGUgZm9saW9fbWVtY2coKSAqLworCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5bG9ja19wYWdlcyhtZW1j ZykpCisJCQlicmVhazsKKworCQkvKiB0aGUgY2FsbGVyIG1pZ2h0IGJlIGhvbGRpbmcgdGhlIGxv Y2sgZm9yIHdyaXRlICovCisJCWlmIChtbWFwX3JlYWRfdHJ5bG9jayhtbSkpIHsKKwkJCXVuc2ln bmVkIGxvbmcgc3RhcnQgPSB3YWxrLT5uZXh0X2FkZHI7CisJCQl1bnNpZ25lZCBsb25nIGVuZCA9 IG1tLT5oaWdoZXN0X3ZtX2VuZDsKKworCQkJZXJyID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBzdGFy dCwgZW5kLCAmbW1fd2Fsa19vcHMsIHdhbGspOworCisJCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsK KworCQkJaWYgKHdhbGstPmJhdGNoZWQpIHsKKwkJCQlzcGluX2xvY2tfaXJxKCZscnV2ZWMtPmxy dV9sb2NrKTsKKwkJCQlyZXNldF9iYXRjaF9zaXplKGxydXZlYywgd2Fsayk7CisJCQkJc3Bpbl91 bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKwkJCX0KKwkJfQorCisJCW1lbV9jZ3JvdXBf dW5sb2NrX3BhZ2VzKCk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAoZXJyID09IC1F QUdBSU4gJiYgd2Fsay0+bmV4dF9hZGRyICYmICFtbV9pc19vb21fdmljdGltKG1tKSk7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICphbGxvY19tbV93YWxrKHZvaWQpCit7CisJ aWYgKGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgJiYgY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1f d2FsaykKKwkJcmV0dXJuIGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGs7CisKKwlyZXR1 cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxydV9nZW5fbW1fd2FsayksCisJCSAgICAgICBfX0dG UF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTik7Cit9CisKK3N0YXRpYyB2 b2lkIGZyZWVfbW1fd2FsayhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQoreworCWlmICgh Y3VycmVudC0+cmVjbGFpbV9zdGF0ZSB8fCAhY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2Fs aykKKwkJa2ZyZWUod2Fsayk7Cit9CisKIHN0YXRpYyB2b2lkIGluY19taW5fc2VxKHN0cnVjdCBs cnV2ZWMgKmxydXZlYykKIHsKIAlpbnQgdHlwZTsKQEAgLTMzNDYsNyArNDE3Miw3IEBAIHN0YXRp YyBib29sIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgY2Fu X3N3YXApCiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyB2b2lkIGluY19tYXhfc2VxKHN0 cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxKQorc3RhdGljIHZvaWQg aW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogewogCWludCBwcmV2LCBuZXh0Owog CWludCB0eXBlLCB6b25lOwpAQCAtMzM1Niw5ICs0MTgyLDYgQEAgc3RhdGljIHZvaWQgaW5jX21h eF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEpCiAKIAlW TV9CVUdfT04oIXNlcV9pc192YWxpZChscnV2ZWMpKTsKIAotCWlmIChtYXhfc2VxICE9IGxydWdl bi0+bWF4X3NlcSkKLQkJZ290byB1bmxvY2s7Ci0KIAlpbmNfbWluX3NlcShscnV2ZWMpOwogCiAJ LyogdXBkYXRlIHRoZSBhY3RpdmUvaW5hY3RpdmUgTFJVIHNpemVzIGZvciBjb21wYXRpYmlsaXR5 ICovCkBAIC0zMzg1LDEwICs0MjA4LDcyIEBAIHN0YXRpYyB2b2lkIGluY19tYXhfc2VxKHN0cnVj dCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxKQogCVdSSVRFX09OQ0UobHJ1 Z2VuLT50aW1lc3RhbXBzW25leHRdLCBqaWZmaWVzKTsKIAkvKiBtYWtlIHN1cmUgcHJlY2VkaW5n IG1vZGlmaWNhdGlvbnMgYXBwZWFyICovCiAJc21wX3N0b3JlX3JlbGVhc2UoJmxydWdlbi0+bWF4 X3NlcSwgbHJ1Z2VuLT5tYXhfc2VxICsgMSk7Ci11bmxvY2s6CisKIAlzcGluX3VubG9ja19pcnEo JmxydXZlYy0+bHJ1X2xvY2spOwogfQogCitzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEo c3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsCisJCQkgICAgICAg c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgY2FuX3N3YXAsIGJvb2wgZnVsbF9zY2FuKQor eworCWJvb2wgc3VjY2VzczsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOworCXN0cnVj dCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9 ICZscnV2ZWMtPmxydWdlbjsKKworCVZNX0JVR19PTihtYXhfc2VxID4gUkVBRF9PTkNFKGxydWdl bi0+bWF4X3NlcSkpOworCisJLyoKKwkgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0 aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFjaworCSAqIHRvIGxydV9nZW5fbG9v a19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhCisJICog aGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2Yg dGltZSB1c3VhbGx5CisJICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBhdm9pZHMgYnVyc3R5 IHBhZ2UgZmF1bHRzLgorCSAqLworCWlmICghZnVsbF9zY2FuICYmICFhcmNoX2hhc19od19wdGVf eW91bmcoKSkgeworCQlzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0X25vd2FsayhscnV2ZWMsIG1h eF9zZXEpOworCQlnb3RvIGRvbmU7CisJfQorCisJd2FsayA9IGFsbG9jX21tX3dhbGsoKTsKKwlp ZiAoIXdhbGspIHsKKwkJc3VjY2VzcyA9IGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsobHJ1dmVjLCBt YXhfc2VxKTsKKwkJZ290byBkb25lOworCX0KKworCXdhbGstPmxydXZlYyA9IGxydXZlYzsKKwl3 YWxrLT5tYXhfc2VxID0gbWF4X3NlcTsKKwl3YWxrLT5jYW5fc3dhcCA9IGNhbl9zd2FwOworCXdh bGstPmZ1bGxfc2NhbiA9IGZ1bGxfc2NhbjsKKworCWRvIHsKKwkJc3VjY2VzcyA9IGl0ZXJhdGVf bW1fbGlzdChscnV2ZWMsIHdhbGssICZtbSk7CisJCWlmIChtbSkKKwkJCXdhbGtfbW0obHJ1dmVj LCBtbSwgd2Fsayk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAobW0pOworCisJZnJl ZV9tbV93YWxrKHdhbGspOworZG9uZToKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJaWYgKCFjdXJyZW50 X2lzX2tzd2FwZCgpICYmICFzYy0+cHJpb3JpdHkpCisJCQl3YWl0X2V2ZW50X2tpbGxhYmxlKGxy dXZlYy0+bW1fc3RhdGUud2FpdCwKKwkJCQkJICAgIG1heF9zZXEgPCBSRUFEX09OQ0UobHJ1Z2Vu LT5tYXhfc2VxKSk7CisKKwkJcmV0dXJuIG1heF9zZXEgPCBSRUFEX09OQ0UobHJ1Z2VuLT5tYXhf c2VxKTsKKwl9CisKKwlWTV9CVUdfT04obWF4X3NlcSAhPSBSRUFEX09OQ0UobHJ1Z2VuLT5tYXhf c2VxKSk7CisKKwlpbmNfbWF4X3NlcShscnV2ZWMpOworCS8qIGVpdGhlciB0aGlzIHNlZXMgYW55 IHdhaXRlcnMgb3IgdGhleSB3aWxsIHNlZSB1cGRhdGVkIG1heF9zZXEgKi8KKwlpZiAod3FfaGFz X3NsZWVwZXIoJmxydXZlYy0+bW1fc3RhdGUud2FpdCkpCisJCXdha2VfdXBfYWxsKCZscnV2ZWMt Pm1tX3N0YXRlLndhaXQpOworCisJd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhXQl9SRUFTT05fVk1T Q0FOKTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgbG9uZyBnZXRfbnJfZXZpY3RhYmxl KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLAogCQkJICAgICB1 bnNpZ25lZCBsb25nICptaW5fc2VxLCBib29sIGNhbl9zd2FwLCBib29sICpuZWVkX2FnaW5nKQog ewpAQCAtMzQ0OSw3ICs0MzM0LDcgQEAgc3RhdGljIHZvaWQgYWdlX2xydXZlYyhzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCQlucl90b19zY2FuKys7CiAK IAlpZiAobnJfdG9fc2NhbiAmJiBuZWVkX2FnaW5nICYmICghbWVtX2Nncm91cF9iZWxvd19sb3co bWVtY2cpIHx8IHNjLT5tZW1jZ19sb3dfcmVjbGFpbSkpCi0JCWluY19tYXhfc2VxKGxydXZlYywg bWF4X3NlcSk7CisJCXRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHNjLCBzd2Fw cGluZXNzLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0 IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCkBAIC0zNDU4LDYg KzQzNDMsOCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0 YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCiAJVk1fQlVHX09OKCFjdXJyZW50 X2lzX2tzd2FwZCgpKTsKIAorCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGsgPSAmcGdk YXQtPm1tX3dhbGs7CisKIAltZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxM KTsKIAlkbyB7CiAJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1l bWNnLCBwZ2RhdCk7CkBAIC0zNDY2LDExICs0MzUzLDE2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5f YWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAq c2MpCiAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9p dGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpOworCisJY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1f d2FsayA9IE5VTEw7CiB9CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGV4cGxvaXRzIHNwYXRpYWwg bG9jYWxpdHkgd2hlbiBzaHJpbmtfcGFnZV9saXN0KCkgd2Fsa3MgdGhlCiAgKiBybWFwLiBJdCBz Y2FucyB0aGUgYWRqYWNlbnQgUFRFcyBvZiBhIHlvdW5nIFBURSBhbmQgcHJvbW90ZXMgaG90IHBh Z2VzLgorICogSWYgdGhlIHNjYW4gd2FzIGRvbmUgY2FjaGVsaW5lIGVmZmljaWVudGx5LCBpdCBh ZGRzIHRoZSBQTUQgZW50cnkgcG9pbnRpbmcKKyAqIHRvIHRoZSBQVEUgdGFibGUgdG8gdGhlIEJs b29tIGZpbHRlci4gVGhpcyBwcm9jZXNzIGlzIGEgZmVlZGJhY2sgbG9vcCBmcm9tCisgKiB0aGUg ZXZpY3Rpb24gdG8gdGhlIGFnaW5nLgogICovCiB2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3Ry dWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogewpAQCAtMzQ4MCw2ICs0MzcyLDggQEAg dm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZt dykKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJc3RydWN0IGZv bGlvICpmb2xpbzsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOworCWludCB5b3VuZyA9 IDA7CiAJdW5zaWduZWQgbG9uZyBiaXRtYXBbQklUU19UT19MT05HUyhNSU5fTFJVX0JBVENIKV0g PSB7fTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBwYWdlX21lbWNnKHB2bXctPnBhZ2Up OwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBwYWdlX3BnZGF0KHB2bXctPnBhZ2UpOwpA QCAtMzUzNyw2ICs0NDMxLDggQEAgdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdl X3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJaWYgKCFwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5n KHB2bXctPnZtYSwgYWRkciwgcHRlICsgaSkpCiAJCQljb250aW51ZTsKIAorCQl5b3VuZysrOwor CiAJCWlmIChwdGVfZGlydHkocHRlW2ldKSAmJiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJiYK IAkJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X3N3YXBiYWNrZWQo Zm9saW8pICYmCiAJCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQpAQCAtMzU1 Miw3ICs0NDQ4LDEzIEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFf bWFwcGVkX3dhbGsgKnB2bXcpCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJcmN1X3Jl YWRfdW5sb2NrKCk7CiAKLQlpZiAoYml0bWFwX3dlaWdodChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gp IDwgUEFHRVZFQ19TSVpFKSB7CisJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFn ZSB0YWJsZSB3YWxrZXJzICovCisJaWYgKHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQorCQl1 cGRhdGVfYmxvb21fZmlsdGVyKGxydXZlYywgbWF4X3NlcSwgcHZtdy0+cG1kKTsKKworCXdhbGsg PSBjdXJyZW50LT5yZWNsYWltX3N0YXRlID8gY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2Fs ayA6IE5VTEw7CisKKwlpZiAoIXdhbGsgJiYgYml0bWFwX3dlaWdodChiaXRtYXAsIE1JTl9MUlVf QkFUQ0gpIDwgUEFHRVZFQ19TSVpFKSB7CiAJCWZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBN SU5fTFJVX0JBVENIKSB7CiAJCQlmb2xpbyA9IHBhZ2VfZm9saW8ocHRlX3BhZ2UocHRlW2ldKSk7 CiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0zNTY0LDggKzQ0NjYsMTAgQEAgdm9pZCBs cnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAlp ZiAoIW1lbV9jZ3JvdXBfdHJ5bG9ja19wYWdlcyhtZW1jZykpCiAJCXJldHVybjsKIAotCXNwaW5f bG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwotCW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2Vx KGxydXZlYy0+bHJ1Z2VuLm1heF9zZXEpOworCWlmICghd2FsaykgeworCQlzcGluX2xvY2tfaXJx KCZscnV2ZWMtPmxydV9sb2NrKTsKKwkJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1dmVj LT5scnVnZW4ubWF4X3NlcSk7CisJfQogCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBiaXRtYXAsIE1J Tl9MUlVfQkFUQ0gpIHsKIAkJZm9saW8gPSBwYWdlX2ZvbGlvKHB0ZV9wYWdlKHB0ZVtpXSkpOwpA QCAtMzU3NiwxMCArNDQ4MCwxNCBAQCB2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBh Z2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCQlpZiAob2xkX2dlbiA8IDAgfHwgb2xkX2dlbiA9 PSBuZXdfZ2VuKQogCQkJY29udGludWU7CiAKLQkJbHJ1X2dlbl9iYWxhbmNlX3NpemUobHJ1dmVj LCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CisJCWlmICh3YWxrKQorCQkJdXBkYXRlX2JhdGNo X3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOworCQllbHNlCisJCQlscnVfZ2Vu X2JhbGFuY2Vfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAl9CiAKLQlz cGluX3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOworCWlmICghd2FsaykKKwkJc3Bpbl91 bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKIAogCW1lbV9jZ3JvdXBfdW5sb2NrX3BhZ2Vz KCk7CiB9CkBAIC0zODQ2LDYgKzQ3NTQsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcAogCXN0 cnVjdCBmb2xpbyAqZm9saW87CiAJZW51bSB2bV9ldmVudF9pdGVtIGl0ZW07CiAJc3RydWN0IHJl Y2xhaW1fc3RhdCBzdGF0OworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0 IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlz dF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCkBAIC0zODg0LDYgKzQ3OTMs MTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXAKIAogCW1vdmVfcGFnZXNfdG9fbHJ1KGxydXZl YywgJmxpc3QpOwogCisJd2FsayA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPyBjdXJyZW50LT5y ZWNsYWltX3N0YXRlLT5tbV93YWxrIDogTlVMTDsKKwlpZiAod2FsayAmJiB3YWxrLT5iYXRjaGVk KQorCQlyZXNldF9iYXRjaF9zaXplKGxydXZlYywgd2Fsayk7CisKIAlpdGVtID0gY3VycmVudF9p c19rc3dhcGQoKSA/IFBHU1RFQUxfS1NXQVBEIDogUEdTVEVBTF9ESVJFQ1Q7CiAJaWYgKCFjZ3Jv dXBfcmVjbGFpbShzYykpCiAJCV9fY291bnRfdm1fZXZlbnRzKGl0ZW0sIHJlY2xhaW1lZCk7CkBA IC0zOTM4LDkgKzQ4NTEsMTAgQEAgc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxy dXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbAogCQlyZXR1cm4gMDsK IAl9CiAKLQlpbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEpOworCWlmICh0cnlfdG9faW5jX21h eF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzYywgY2FuX3N3YXAsIGZhbHNlKSkKKwkJcmV0dXJuIG5y X3RvX3NjYW47CiAKLQlyZXR1cm4gbnJfdG9fc2NhbjsKKwlyZXR1cm4gbWF4X3NlcSA+PSBtaW5f c2VxW1RZUEVfRklMRV0gKyBNSU5fTlJfR0VOUyA/IG5yX3RvX3NjYW4gOiAwOwogfQogCiBzdGF0 aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYykKQEAgLTM5NDgsOSArNDg2MiwxMyBAQCBzdGF0aWMgdm9pZCBs cnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9j b250cm9sICpzYwogCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCWxvbmcgc2Nhbm5lZCA9IDA7CiAJ c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CisJc3RydWN0 IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCiAJbHJ1X2FkZF9k cmFpbigpOwogCisJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCWN1cnJlbnQtPnJlY2xhaW1f c3RhdGUtPm1tX3dhbGsgPSAmcGdkYXQtPm1tX3dhbGs7CisKIAlibGtfc3RhcnRfcGx1ZygmcGx1 Zyk7CiAKIAl3aGlsZSAodHJ1ZSkgewpAQCAtMzk4MSw2ICs0ODk5LDkgQEAgc3RhdGljIHZvaWQg bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5f Y29udHJvbCAqc2MKIAl9CiAKIAlibGtfZmluaXNoX3BsdWcoJnBsdWcpOworCisJaWYgKGN1cnJl bnRfaXNfa3N3YXBkKCkpCisJCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGsgPSBOVUxM OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zOTkyLDYgKzQ5MTMsNyBAQCB2b2lk IGxydV9nZW5faW5pdF9zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBscnV2 ZWMgKmxydXZlYykKIAlpbnQgaTsKIAlpbnQgZ2VuLCB0eXBlLCB6b25lOwogCXN0cnVjdCBscnVf Z2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOworCXN0cnVjdCBscnVfZ2VuX21t X2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CiAKIAlscnVnZW4tPm1heF9zZXEg PSBNSU5fTlJfR0VOUyArIDE7CiAJbHJ1Z2VuLT5lbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7 CkBAIC00MDAxLDYgKzQ5MjMsMTEgQEAgdm9pZCBscnVfZ2VuX2luaXRfc3RhdGUoc3RydWN0IG1l bV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAlmb3JfZWFjaF9nZW5f dHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSkKIAkJSU5JVF9MSVNUX0hFQUQoJmxydWdlbi0+bGlz dHNbZ2VuXVt0eXBlXVt6b25lXSk7CisKKwlscnV2ZWMtPm1tX3N0YXRlLnNlcSA9IE1JTl9OUl9H RU5TOworCWxydXZlYy0+bW1fc3RhdGUuaGVhZCA9ICZtbV9saXN0LT5maWZvOworCWxydXZlYy0+ bW1fc3RhdGUudGFpbCA9ICZtbV9saXN0LT5maWZvOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxy dXZlYy0+bW1fc3RhdGUud2FpdCk7CiB9CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKQEAgLTQwMDgs NiArNDkzNSw5IEBAIHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZykKIHsKIAlpbnQgbmlkOwogCisJSU5JVF9MSVNUX0hFQUQoJm1lbWNnLT5tbV9saXN0LmZp Zm8pOworCXNwaW5fbG9ja19pbml0KCZtZW1jZy0+bW1fbGlzdC5sb2NrKTsKKwogCWZvcl9lYWNo X25vZGUobmlkKSB7CiAJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2cs IG5pZCk7CiAKQEAgLTQwMjAsMTAgKzQ5NTAsMTYgQEAgdm9pZCBscnVfZ2VuX2ZyZWVfbWVtY2co c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCWludCBuaWQ7CiAKIAlmb3JfZWFjaF9ub2RlKG5p ZCkgeworCQlpbnQgaTsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1j ZywgbmlkKTsKIAogCQlWTV9CVUdfT04obWVtY2hyX2ludihscnV2ZWMtPmxydWdlbi5ucl9wYWdl cywgMCwKIAkJCQkgICAgIHNpemVvZihscnV2ZWMtPmxydWdlbi5ucl9wYWdlcykpKTsKKworCQlm b3IgKGkgPSAwOyBpIDwgTlJfQkxPT01fRklMVEVSUzsgaSsrKSB7CisJCQliaXRtYXBfZnJlZShs cnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbaV0pOworCQkJbHJ1dmVjLT5tbV9zdGF0ZS5maWx0ZXJz W2ldID0gTlVMTDsKKwkJfQogCX0KIH0KICNlbmRpZgpAQCAtNDAzMiw2ICs0OTY4LDcgQEAgc3Rh dGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKE1JTl9O Ul9HRU5TICsgMSA+PSBNQVhfTlJfR0VOUyk7CiAJQlVJTERfQlVHX09OKEJJVChMUlVfR0VOX1dJ RFRIKSA8PSBNQVhfTlJfR0VOUyk7CisJQlVJTERfQlVHX09OKHNpemVvZihNTV9TVEFUX0NPREVT KSAhPSBOUl9NTV9TVEFUUyArIDEpOwogCiAJcmV0dXJuIDA7CiB9OwotLSAKMi4zNS4wLjI2My5n YjgyNDIyNjQyZi1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=