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 56560C4345F for ; Mon, 15 Apr 2024 01:18:51 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xJ7ap0JnAR3MTj/kew7prJuKhOMz3S+hnxZYPNHplXc=; b=NQABBn+RXn/O+0 jnIh0s0cX+Ge0M3OgPBXYtqxhXwcHWsB7A/3nBYbBXlibwFVygXhbLU1FU6tt2FwC6ggD18/Xd9Kt JexRG5BxUxlkQ41xUrYBtq8aPBVC5Tl0i5yS5z+VXce/9AD7hEXtJnNkJhxP76Wo0/zTpz0gXNb7U xO3qQBaXAO22+oj9uVBetlRFQG990SzX3RYBvaCQT58+wiveAP1QlpL4nqWpr8koZdXrHMidim+Pr P8iPHgTuWdZrRX1FfE9mwUjmL4zfTjjmdtZpCZuhPieCscxrnoY+Qmxcpytii0QtcVqv0HMWebCb/ vPkFjq6avhEMVX/l2G8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwAzW-00000006ewX-1Xju; Mon, 15 Apr 2024 01:18:38 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwAzS-00000006euF-0bMe for linux-arm-kernel@lists.infradead.org; Mon, 15 Apr 2024 01:18:36 +0000 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-1e455b630acso9337355ad.1 for ; Sun, 14 Apr 2024 18:18:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713143912; x=1713748712; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=S7o3RklPf85GYs71JaJ/hXBgAEZHXwSqGZcBWuqtbpU=; b=FYoQS918kIIAyijvCSoX2xuRaQzoTsf2M10gMXdICzkjQg4feTY1EUcqw33ycBMki2 SYD5HQ2kCJwjX5g5baM4IgnLlnt9k2Q9UEYlViip9FvjkM3MyaqQly/BQI2K7+UuDBB0 TpybeEZWV+4bHodhaJ3d2lzj1szHQm9Zs5ntxqpjuUk8GALlFv7z5FZDS7gd3o0Zny36 2HEq9+SZmAPBh3lLQwQ9eqNHu1iHKaw7TgLx8tn0BGY9M0xQMw05ag77fFB0KzWgf3Bs FYXIHpYJ3f89GjG353bNupEGcpHxckpUJcLxMH9SHl2NFPBX6WbRHPAftwTIjCLMjI82 4Iyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713143912; x=1713748712; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=S7o3RklPf85GYs71JaJ/hXBgAEZHXwSqGZcBWuqtbpU=; b=kPjAK59nqj96KL+ozSlODXHztSDTTZkXWP8YdW1CWMxdJccwJ96/05U7TmKyWShMJK gX0Q3n6Zt9PFTIwA9GuikZHG4ekYrbR5BqvuFbjVqrodu+ni/a9hxOC46UgneYpUoI27 ovg14rb6E/sG3aC/PXkLESMdFfkfisIl3xmc+3GweosRiENewDoZnKW5g4bf0xfJu/wK 13ffahP0zC4y++YqW9pMlmms4uwJlodd1GfruOEVAkLCoAhOEhDOvp9sz3B3ULbvqzt5 3Z0PAcGctipqUpinA23EheBrSDy54h+tSm/9Z3JJ7Sm+SP0FWs4SOSG0+LT9rPGw289k /92w== X-Forwarded-Encrypted: i=1; AJvYcCX1v8NW4wpdGWxlpkmUFWBr5leV0Ta27apn+Y/YqRhdxFkW32ed9OM2IrHuD+rvcDeee1gYIPaa7OwvIUtp5JGnQ6S2lO52VXm9DWtCq6//1FRwzko= X-Gm-Message-State: AOJu0Yxdgac/7GlTEF2gRT/SteyoNY9fRXxgL61Df0Ar90LxDc+3UdSj FYkaav8rz6u2b3qykp50osqPjhQbCxcnwhL5KYsJTGptgYVlxB5X X-Google-Smtp-Source: AGHT+IFe4AO4eIxgm2wzoT6wx/Mpy1oQzh+KLII7q03tu3+na+Y6ofI8SAPsMZLQb4BvhZOxsLq/aQ== X-Received: by 2002:a17:903:244f:b0:1e6:55b2:e3ba with SMTP id l15-20020a170903244f00b001e655b2e3bamr1622874pls.16.1713143912100; Sun, 14 Apr 2024 18:18:32 -0700 (PDT) Received: from [172.19.1.47] (60-250-192-107.hinet-ip.hinet.net. [60.250.192.107]) by smtp.gmail.com with ESMTPSA id w14-20020a170902e88e00b001e2a408df30sm6614119plg.273.2024.04.14.18.18.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Apr 2024 18:18:31 -0700 (PDT) Message-ID: Date: Mon, 15 Apr 2024 09:18:27 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v7 3/3] pinctrl: nuvoton: Add ma35d1 pinctrl and GPIO driver To: Andy Shevchenko Cc: linus.walleij@linaro.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, p.zabel@pengutronix.de, j.neuschaefer@gmx.net, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ychuang3@nuvoton.com, schung@nuvoton.com References: <20240409095637.2135-1-ychuang570808@gmail.com> <20240409095637.2135-4-ychuang570808@gmail.com> Content-Language: en-US From: Jacky Huang In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240414_181834_306350_57345701 X-CRM114-Status: GOOD ( 38.32 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RGVhciBBbmR5LAoKU29ycnkgZm9yIHRoZSBsYXRlIHJlc3BvbnNlIHRvIHlvdXIgbWFpbC4KRHVl IHRvIGVtYWlsIGluYm94IHBvbGljeSBpc3N1ZXMsIEkganVzdCBmb3VuZCB0aGlzIGVtYWlsLgpS ZWdhcmRpbmcgeW91ciBjb21tZW50cywgSSB3aWxsIG1ha2UgYWxsIHRoZSBtb2RpZmljYXRpb25z IGluIHRoZSBuZXh0IAp2ZXJzaW9uLgpUaGFuayB5b3UgZm9yIHlvdXIgaGVscC4KCgpCZXN0IFJl Z2FyZHMsCkphY2t5IEh1YW5nCgoKT24gMjAyNC80LzEwIOS4i+WNiCAwNDo1NCwgQW5keSBTaGV2 Y2hlbmtvIHdyb3RlOgo+IENBVVRJT04gLSBFeHRlcm5hbCBFbWFpbDogRG8gbm90IGNsaWNrIGxp bmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW5sZXNzIHlvdSBhY2tub3dsZWRnZSB0aGUgc2VuZGVy IGFuZCBjb250ZW50Lgo+Cj4KPiBUdWUsIEFwciAwOSwgMjAyNCBhdCAwOTo1NjozN0FNICswMDAw LCBKYWNreSBIdWFuZyBraXJqb2l0dGk6Cj4+IEZyb206IEphY2t5IEh1YW5nIDx5Y2h1YW5nM0Bu dXZvdG9uLmNvbT4KPj4KPj4gQWRkIGNvbW1vbiBwaW5jdHJsIGFuZCBHUElPIGRyaXZlciBmb3Ig TnV2b3RvbiBNQTM1IHNlcmllcyBTb0MsIGFuZAo+PiBhZGQgc3VwcG9ydCBmb3IgbWEzNWQxIHBp bmN0cmwuCj4gLi4uCj4KPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMyBOdXZvdG9uIFRlY2hub2xv Z3kgQ29ycC4KPiBBbG1vcyBtaWQgb2YgMjAyNC4uLgo+Cj4gLi4uCj4KPj4gKyNpbmNsdWRlIDxs aW51eC9ncGlvL2RyaXZlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJl c3MuaD4KPiBEbyB5b3UgcmVhbGx5IG5lZWQgYWxsIG9mIHRoZXNlIHBmKi5oPwo+IERvbid0IHlv dSBtaXNzIG90aGVyIGhlYWRlcnMgdG8gYmUgaW5jbHVkZWQgKHNwb2lsZXI6IGEgbG90ISkKPgo+ PiArI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY29uZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L3BpbmN0cmwvcGluY3RybC5oPgo+IE1vdmUgdGhpcyBncm91cC4uLgo+Cj4+ICsjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+ ICsKPiAuLi50byBiZSBoZXJlIHRvIHNob3cgdGhlIHJlbGF0aW9uIHRvIHRoZSBwaW4gY29udHJv bCBzdWJzeXN0ZW0uCj4KPj4gKyNpbmNsdWRlICIuLi9jb3JlLmgiCj4+ICsjaW5jbHVkZSAiLi4v cGluY29uZi5oIgo+PiArI2luY2x1ZGUgInBpbmN0cmwtbWEzNS5oIgo+IC4uLgo+Cj4+ICsjZGVm aW5lIE1BMzVfR1BfTU9ERV9NQVNLX1dJRFRIICAgICAgICAgICAgICAyCj4+ICsKPj4gKyNkZWZp bmUgTUEzNV9HUF9TTEVXQ1RMX01BU0tfV0lEVEggICAyCj4gSSBsb29rZWQgYXQgdGhlIGNvZGUg aG93IHlvdSB1c2UgdGhlc2UuLi4gT2gsIHBsZWFzZSBzd2l0Y2ggdG8gRklFTERfR0VUKCkgLwo+ IEZJRUxEX1BSRVAoKSAoZG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgYml0ZmllbGQuaCkKPgo+IC4u Lgo+Cj4+ICtzdHJ1Y3QgbWEzNV9waW5fZnVuYyB7Cj4+ICsgICAgIGNvbnN0IGNoYXIgICAgICAg ICAgICAgICpuYW1lOwo+PiArICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqKmdyb3VwczsK Pj4gKyAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbmdyb3VwczsKPj4gK307Cj4gTklIIHN0 cnVjdCBwaW5mdW5jdGlvbi4KPgo+IFlvdSBtYXkgc3RpbGwgaGF2ZSBhIHdyYXBwZXIgKGFzIHN0 cnVjdCBwaW5ncm91cCBiZWxvdyBtb3N0IGxpa2VseSB3aWxsIGJlCj4gZW1iZWRkZWQgaW4geW91 ciBjdXN0b20gZGF0YSB0eXBlKSwgc2VlIHRoZSBwaW5jdHJsLWludGVsLmggZXhhbXBsZXMuCj4K PiAuLi4KPgo+PiArc3RydWN0IG1hMzVfcGluX2dyb3VwIHsKPj4gKyAgICAgY29uc3QgY2hhciAg ICAgICAgICAgICAgKm5hbWU7Cj4+ICsgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG5waW5z Owo+PiArICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAqcGluczsKPiBOSUggc3RydWN0IHBp bmdyb3VwLgo+Cj4+ICsgICAgIHN0cnVjdCBtYTM1X3Bpbl9zZXR0aW5nICpzZXR0aW5nczsKPj4g K307Cj4gLi4uCj4KPj4gK3N0cnVjdCBtYTM1X3Bpbl9iYW5rIHsKPj4gKyAgICAgdm9pZCBfX2lv bWVtICAgICAgICAgICAgKnJlZ19iYXNlOwo+PiArICAgICBzdHJ1Y3QgY2xrICAgICAgICAgICAg ICAqY2xrOwo+PiArICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBpcnE7Cj4+ICsgICAgIHU4 ICAgICAgICAgICAgICAgICAgICAgIG5yX3BpbnM7Cj4+ICsgICAgIGNvbnN0IGNoYXIgICAgICAg ICAgICAgICpuYW1lOwo+PiArICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBiYW5rX251bTsK PiBJbnRlcmxlYXZlZCBmaWVsZHMgd2l0aCBzdWNoIGEgZGlmZmVyZW50IHR5cGUgbWF5IGxlYWQg dG8gd2FzdGUgb2YgbWVtb3J5LiBSdW4KPiBgcGFob2xlYCBhbmQgdXBkYXRlIHRoZSBvcmRlcmlu ZyBpbiB0aGlzIHN0cnVjdCBhY2NvcmRpbmdseS4KPgo+PiArICAgICBib29sICAgICAgICAgICAg ICAgICAgICB2YWxpZDsKPj4gKyAgICAgc3RydWN0IGRldmljZV9ub2RlICAgICAgKm5wOwo+IENh biB5b3Uga2VlcCBpdCBmd25vZGUtYmFzZWQ/Cj4KPj4gKyAgICAgc3RydWN0IGdwaW9fY2hpcCAg ICAgICAgY2hpcDsKPj4gKyAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgaXJxdHlwZTsKPj4g KyAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgaXJxaW50ZW47Cj4+ICsgICAgIHN0cnVjdCBy ZWdtYXAgICAgICAgICAgICpyZWdtYXA7Cj4+ICsgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAg ICpkZXY7Cj4+ICsgICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cj4gTm8gdXNlIGlu IFJUX1BSRUVNUFQ/Cj4KPj4gK307Cj4gLi4uCj4KPj4gKyAgICAgbmV3X21hcCA9IGRldm1fa2Nh bGxvYyhwY3RsZGV2LT5kZXYsIG1hcF9udW0sIHNpemVvZigqbmV3X21hcCksIEdGUF9LRVJORUwp Owo+PiArICAgICBpZiAoIW5ld19tYXApCj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07 Cj4+ICsKPj4gKyAgICAgKm1hcCA9IG5ld19tYXA7Cj4+ICsgICAgICpudW1fbWFwcyA9IG1hcF9u dW07Cj4+ICsgICAgIC8qIGNyZWF0ZSBtdXggbWFwICovCj4+ICsgICAgIHBhcmVudCA9IG9mX2dl dF9wYXJlbnQobnApOwo+PiArICAgICBpZiAoIXBhcmVudCkgewo+PiArICAgICAgICAgICAgIGRl dm1fa2ZyZWUocGN0bGRldi0+ZGV2LCBuZXdfbWFwKTsKPiBIdWg/ISBBcmUgeW91IHN1cmUgeW91 IGtub3cgdGhlIHNjb3BlIG9mIHVzYWdlIG9mIGRldm1fKigpPwo+Cj4+ICsgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4+ICsgICAgIH0KPj4gKwo+IC4uLgo+Cj4+ICsgICAgICAgICAgICAg cmVndmFsICY9IH5HRU5NQVNLKHNldHRpbmctPnNoaWZ0ICsgTUEzNV9NRlBfQklUU19QRVJfUE9S VCAtIDEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmctPnNoaWZ0 KTsKPiBUaGlzIHdpbGwgZ2VuZXJhdGUgYW4gYXdmdWwgY29kZS4gVXNlIHJlc3BlY3RpdmUgRklF TERfKigpIG1hY3Jvcy4KPgo+IC4uLgo+Cj4+ICsgICAgIHJlZ3ZhbCAmPSB+R0VOTUFTSyhncGlv ICogTUEzNV9HUF9NT0RFX01BU0tfV0lEVEggLSAxLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgZ3BpbyAqIE1BMzVfR1BfTU9ERV9NQVNLX1dJRFRIKTsKPj4gKyAgICAgcmVndmFsIHw9IG1v ZGUgPDwgZ3BpbyAqIE1BMzVfR1BfTU9ERV9NQVNLX1dJRFRIOwo+IERpdHRvLgo+Cj4gLi4uCj4K Pj4gKyAgICAgcmVndmFsICY9IEdFTk1BU0soZ3BpbyAqIE1BMzVfR1BfTU9ERV9NQVNLX1dJRFRI IC0gMSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ3BpbyAqIE1BMzVfR1BfTU9ERV9NQVNL X1dJRFRIKTsKPj4gKwo+PiArICAgICByZXR1cm4gcmVndmFsID4+IGdwaW8gKiBNQTM1X0dQX01P REVfTUFTS19XSURUSDsKPiBEaXR0by4KPgo+IC4uLgo+Cj4+ICtzdGF0aWMgaW50IG1hMzVfZ3Bp b19jb3JlX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdw aW8pCj4+ICt7Cj4+ICsgICAgIHN0cnVjdCBtYTM1X3Bpbl9iYW5rICpiYW5rID0gZ3Bpb2NoaXBf Z2V0X2RhdGEoZ2MpOwo+PiArICAgICB2b2lkIF9faW9tZW0gKnJlZ19tb2RlID0gYmFuay0+cmVn X2Jhc2UgKyBNQTM1X0dQX1JFR19NT0RFOwo+PiArICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ PiArCj4+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7Cj4gVXNl IGNsZWFudXAuaCwgaS5lLiBndWFyZCgpIGluIHRoaXMgY2FzZSwgZnJvbSBkYXkgMS4KPiBTaW1p bGFyIGFwcHJvYWNoIGZvciBhbGwgb3RoZXIgcGxhY2VzLgo+Cj4+ICsgICAgIHNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArICAgICByZXR1cm4gMDsK Pj4gK30KPiAuLi4KPgo+PiArICAgICByZWd2YWwgPSByZWFkbChyZWdfZG91dCk7Cj4+ICsgICAg IGlmICh2YWwpCj4+ICsgICAgICAgICAgICAgd3JpdGVsKHJlZ3ZhbCB8IEJJVChncGlvKSwgcmVn X2RvdXQpOwo+PiArICAgICBlbHNlCj4+ICsgICAgICAgICAgICAgd3JpdGVsKHJlZ3ZhbCAmIH5C SVQoZ3BpbyksIHJlZ19kb3V0KTsKPiBDYW4geW91IHNwbGl0IHJlZ3ZhbCB1cGRhdGUgYW5kIG1h a2Ugb25seSBhIHNpbmdsZSB3cml0ZWwoKSBjYWxsPyBJdCdzIHNsaWdodGx5Cj4gYmV0dGVyIHBh dHRlcm4KPgo+ICAgICAgICAgIHJlYWQoKQo+ICAgICAgICAgIGlmIChmb28pCj4gICAgICAgICAg ICAgICAgICB2ID0KPiAgICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgICB2ID0KPiAgICAg ICAgICB3cml0ZSgpCj4KPj4gKyAgICAgbWEzNV9ncGlvX3NldF9tb2RlKHJlZ19tb2RlLCBncGlv LCBNQTM1X0dQX01PREVfT1VUUFVUKTsKPiAuLi4KPgo+PiArICAgICByZWd2YWwgJj0gfkdFTk1B U0soYml0X29mZnMgKyBNQTM1X01GUF9CSVRTX1BFUl9QT1JUIC0gMSwgYml0X29mZnMpOwo+IEZJ RUxEX0dFVCgpCj4KPiAuLi4KPgo+PiArICAgICB3cml0ZWwoMTw8bnVtLCByZWdfaW50c3JjKTsK PiBPaCwgc29tZXRoaW5nIGhhcHBlbmVkIGhlcmUsIGJlc2lkZXMgaW5kZW50YXRpb24uCj4gSGF2 ZSB5b3UgbWVhbnQgQklUKCkgPwo+Cj4gLi4uCj4KPj4gKyAgICAgdW5zaWduZWQgaW50IG51bSA9 IChkLT5od2lycSk7Cj4gUmVhZCBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byBhY2Nlc3MgaHdpcnEg ZmllbGQgYW5kIHdoYXQgdHlwZSBvZiB0aGUgdmFsdWUKPiBzaG91bGQgYmUuIFRoZXJlIGFyZSBw bGVudGx5IG9mIHRoZSBleGFtcGxlcyBhbHJlYWR5IGluIHRoZSBrZXJuZWwuIEp1c3QKPiBjaGVj ayB0aGUgcmVjZW50IChtb3JlIG9yIGxlc3MpIG9uZXMuCj4KPiAuLi4KPgo+PiArICAgICAvKgo+ PiArICAgICAgKiBUaGUgTUEzNV9HUF9SRUdfSU5URU4gYml0cyAwIH4gMTUgY29udHJvbCBsb3ct bGV2ZWwgb3IgZmFsbGluZyBlZGdlIHRyaWdnZXIsCj4+ICsgICAgICAqIHdoaWxlIGJpdHMgMTYg fiAzMSBjb250cm9sIGhpZ2gtbGV2ZWwgb3IgcmlzaW5nIGVkZ2UgdHJpZ2dlci4KPj4gKyAgICAg ICogV2UgZGlzYWJsZSBib3RoIHR5cGUgb2YgaW50ZXJydXB0Lgo+PiArICAgICAgKi8KPj4gKyAg ICAgcmVndmFsICY9IH4oQklUKG51bSArIDE2KSB8IEJJVChudW0pKTsKPiBZb3UgaGF2ZSB0aGlz IGlkaW9tIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBjb2RlLCBtYWtlIHRoZSBkZWZpbml0aW9uIGFu ZCB1c2UgaXQuCj4gTW92ZSBjb21tZW50IGNsb3NlciB0byB0aGF0IGRlZmluaXRpb24uCj4KPiAu Li4KPgo+PiArICAgICAgICAgICAgIGlycV9zZXRfaGFuZGxlcl9sb2NrZWQoZCwgaGFuZGxlX2Vk Z2VfaXJxKTsKPj4gKyAgICAgICAgICAgICBiYW5rLT5pcnF0eXBlICY9IH4oMHgxIDw8IG51bSk7 Cj4+ICsgICAgICAgICAgICAgYmFuay0+aXJxaW50ZW4gfD0gKDB4MSA8PCBudW0pOwo+PiArICAg ICAgICAgICAgIGJhbmstPmlycWludGVuICY9IH4oMHgxIDw8IChudW0gKyAxNikpOwo+PiArICAg ICAgICAgICAgIGJyZWFrOwo+PiArICAgICBjYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6Cj4+ICsg ICAgICAgICAgICAgaXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLCBoYW5kbGVfbGV2ZWxfaXJxKTsK Pj4gKyAgICAgICAgICAgICBiYW5rLT5pcnF0eXBlIHw9ICgweDEgPDwgbnVtKTsKPj4gKyAgICAg ICAgICAgICBiYW5rLT5pcnFpbnRlbiAmPSB+KDB4MSA8PCBudW0pOwo+PiArICAgICAgICAgICAg IGJhbmstPmlycWludGVuIHw9ICgweDEgPDwgKG51bSArIDE2KSk7Cj4+ICsgICAgICAgICAgICAg YnJlYWs7Cj4+ICsgICAgIGNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgo+PiArICAgICAgICAgICAg IGlycV9zZXRfaGFuZGxlcl9sb2NrZWQoZCwgaGFuZGxlX2xldmVsX2lycSk7Cj4+ICsgICAgICAg ICAgICAgYmFuay0+aXJxdHlwZSB8PSAoMHgxIDw8IG51bSk7Cj4+ICsgICAgICAgICAgICAgYmFu ay0+aXJxaW50ZW4gJj0gfigweDEgPDwgKG51bSArIDE2KSk7Cj4+ICsgICAgICAgICAgICAgYmFu ay0+aXJxaW50ZW4gfD0gKDB4MSA8PCBudW0pOwo+PiArICAgICAgICAgICAgIGJyZWFrOwo+IEJJ VCgpIGluIGFsbCBjYXNlcy4KPgo+IC4uLgo+Cj4KPj4gKyAgICAgICAgICAgICBpcnFfc2V0X2hh bmRsZXJfbG9ja2VkKGQsIGhhbmRsZV9iYWRfaXJxKTsKPiBKdXN0IGFzc2lnbiBpdCBpbiB0aGUg cHJvYmUuCj4KPiAuLi4KPgo+PiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtYTM1X2dwaW9faXJx Y2hpcCA9IHsKPj4gKyAgICAgLm5hbWUgPSAiTUEzNS1HUElPLUlSUSIsCj4+ICsgICAgIC5pcnFf ZGlzYWJsZSA9IG1hMzVfaXJxX2dwaW9fbWFzaywKPj4gKyAgICAgLmlycV9lbmFibGUgPSBtYTM1 X2lycV9ncGlvX3VubWFzaywKPj4gKyAgICAgLmlycV9hY2sgPSBtYTM1X2lycV9ncGlvX2FjaywK Pj4gKyAgICAgLmlycV9tYXNrID0gbWEzNV9pcnFfZ3Bpb19tYXNrLAo+PiArICAgICAuaXJxX3Vu bWFzayA9IG1hMzVfaXJxX2dwaW9fdW5tYXNrLAo+PiArICAgICAuaXJxX3NldF90eXBlID0gbWEz NV9pcnFfaXJxdHlwZSwKPj4gKyAgICAgLmZsYWdzID0gSVJRQ0hJUF9NQVNLX09OX1NVU1BFTkQg fCBJUlFDSElQX1NLSVBfU0VUX1dBS0UgfCBJUlFDSElQX0lNTVVUQUJMRSwKPiBJdCBkb2Vzbid0 IGxvb2sgbGlrZSBJTU1VVEFCTEUuIEFnYWluLCBjaGVjayBvdGhlciBleGFtcGxlcywgdGhlcmUg YXJlIGEgbG90Lgo+Cj4gLi4uCj4KPj4gK3N0YXRpYyB2b2lkIG1hMzVfaXJxX2RlbXV4X2ludGdy b3VwKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPj4gK3sKPj4gKyAgICAgc3RydWN0IG1hMzVfcGlu X2JhbmsgKmJhbmsgPSBncGlvY2hpcF9nZXRfZGF0YShpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRh KGRlc2MpKTsKPj4gKyAgICAgc3RydWN0IGlycV9kb21haW4gKmlycWRvbWFpbiA9IGJhbmstPmNo aXAuaXJxLmRvbWFpbjsKPj4gKyAgICAgc3RydWN0IGlycV9jaGlwICppcnFjaGlwID0gaXJxX2Rl c2NfZ2V0X2NoaXAoZGVzYyk7Cj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgaXNyOwo+PiArICAgICBp bnQgb2Zmc2V0Owo+PiArCj4+ICsgICAgIGNoYWluZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2Mp Owo+PiArICAgICBpc3IgPSByZWFkbChiYW5rLT5yZWdfYmFzZSArIE1BMzVfR1BfUkVHX0lOVFNS Qyk7Cj4+ICsgICAgIGlmIChpc3IpCj4gVW5uZWVkZWQgZHVwbGljYXRlIGNoZWNrLgo+Cj4+ICsg ICAgICAgICAgICAgZm9yX2VhY2hfc2V0X2JpdChvZmZzZXQsICZpc3IsIGJhbmstPm5yX3BpbnMp Cj4+ICsgICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFw cGluZyhpcnFkb21haW4sIG9mZnNldCkpOwo+PiArCj4+ICsgICAgIGNoYWluZWRfaXJxX2V4aXQo aXJxY2hpcCwgZGVzYyk7Cj4+ICt9Cj4gLi4uCj4KPj4gKyAgICAgZm9yIChpID0gMDsgaSA8IGN0 cmwtPm5yX2JhbmtzOyArK2ksICsrYmFuaykgewo+IFdoeSBwcmUtaW5jcmVtZW50cz8KPgo+PiAr ICAgICAgICAgICAgIGlmICghYmFuay0+dmFsaWQpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAg IGRldl93YXJuKCZwZGV2LT5kZXYsICJiYW5rICVzIGlzIG5vdCB2YWxpZFxuIiwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmstPm5wLT5uYW1lKTsKPiBEbyBub3QgdXNlIGZ3 bm9kZSAvIG9mX25vZGUgbmFtZSBsaWtlIHRoaXMsIHVzZSBwcm9wZXIgc3BlY2lmaWVyczogJXBm dyAvICVwT0YuCj4KPj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAgICAg ICAgICAgIH0KPj4gKyAgICAgICAgICAgICBiYW5rLT5pcnF0eXBlID0gMDsKPj4gKyAgICAgICAg ICAgICBiYW5rLT5pcnFpbnRlbiA9IDA7Cj4+ICsgICAgICAgICAgICAgYmFuay0+Y2hpcC5sYWJl bCA9IGJhbmstPm5hbWU7Cj4+ICsgICAgICAgICAgICAgYmFuay0+Y2hpcC5vZl9ncGlvX25fY2Vs bHMgPSAyOwo+PiArICAgICAgICAgICAgIGJhbmstPmNoaXAucGFyZW50ID0gJnBkZXYtPmRldjsK Pj4gKyAgICAgICAgICAgICBiYW5rLT5jaGlwLnJlcXVlc3QgPSBtYTM1X2dwaW9fY29yZV90b19y ZXF1ZXN0Owo+PiArICAgICAgICAgICAgIGJhbmstPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbWEz NV9ncGlvX2NvcmVfZGlyZWN0aW9uX2luOwo+PiArICAgICAgICAgICAgIGJhbmstPmNoaXAuZGly ZWN0aW9uX291dHB1dCA9IG1hMzVfZ3Bpb19jb3JlX2RpcmVjdGlvbl9vdXQ7Cj4+ICsgICAgICAg ICAgICAgYmFuay0+Y2hpcC5nZXQgPSBtYTM1X2dwaW9fY29yZV9nZXQ7Cj4+ICsgICAgICAgICAg ICAgYmFuay0+Y2hpcC5zZXQgPSBtYTM1X2dwaW9fY29yZV9zZXQ7Cj4+ICsgICAgICAgICAgICAg YmFuay0+Y2hpcC5iYXNlID0gLTE7Cj4+ICsgICAgICAgICAgICAgYmFuay0+Y2hpcC5uZ3BpbyA9 IGJhbmstPm5yX3BpbnM7Cj4+ICsgICAgICAgICAgICAgYmFuay0+Y2hpcC5jYW5fc2xlZXAgPSBm YWxzZTsKPj4gKyAgICAgICAgICAgICBzcGluX2xvY2tfaW5pdCgmYmFuay0+bG9jayk7Cj4+ICsK Pj4gKyAgICAgICAgICAgICBpZiAoYmFuay0+aXJxID4gMCkgewo+PiArICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGdwaW9faXJxX2NoaXAgKmdpcnE7Cj4+ICsKPj4gKyAgICAgICAgICAgICAg ICAgICAgIGdpcnEgPSAmYmFuay0+Y2hpcC5pcnE7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBn cGlvX2lycV9jaGlwX3NldF9jaGlwKGdpcnEsICZtYTM1X2dwaW9faXJxY2hpcCk7Cj4+ICsgICAg ICAgICAgICAgICAgICAgICBnaXJxLT5wYXJlbnRfaGFuZGxlciA9IG1hMzVfaXJxX2RlbXV4X2lu dGdyb3VwOwo+PiArICAgICAgICAgICAgICAgICAgICAgZ2lycS0+bnVtX3BhcmVudHMgPSAxOwo+ PiArCj4+ICsgICAgICAgICAgICAgICAgICAgICBnaXJxLT5wYXJlbnRzID0gZGV2bV9rY2FsbG9j KCZwZGV2LT5kZXYsIDEsIHNpemVvZigqZ2lycS0+cGFyZW50cyksCj4gVXNlIG51bV9wYXJlbnRz IGluc3RlYWQgb2YgMS4KPgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGlmICgh Z2lycS0+cGFyZW50cykgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAt RU5PTUVNOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4+ICsg ICAgICAgICAgICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGdpcnEt PnBhcmVudHNbMF0gPSBiYW5rLT5pcnE7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBnaXJxLT5k ZWZhdWx0X3R5cGUgPSBJUlFfVFlQRV9OT05FOwo+PiArICAgICAgICAgICAgICAgICAgICAgZ2ly cS0+aGFuZGxlciA9IGhhbmRsZV9iYWRfaXJxOwo+PiArICAgICAgICAgICAgIH0KPj4gKwo+PiAr ICAgICAgICAgICAgIHJldCA9IGdwaW9jaGlwX2FkZF9kYXRhKCZiYW5rLT5jaGlwLCBiYW5rKTsK Pj4gKyAgICAgICAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZf ZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZ3Bpb19jaGlwICVzLCBlcnJvciBj b2RlOiAlZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFuay0+Y2hpcC5s YWJlbCwgcmV0KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKPj4gKyAgICAg ICAgICAgICB9Cj4+ICsgICAgIH0KPiAuLi4KPgo+PiArZmFpbDoKPj4gKyAgICAgZm9yICgtLWks IC0tYmFuazsgaSA+PSAwOyAtLWksIC0tYmFuaykgewo+ICAgICAgICAgIHdoaWxlIChpLS0pIHsK PiAgICAgICAgICAgICAgICAgIGJhbmstLTsKPiAgICAgICAgICAgICAgICAgIC4uLgo+ICAgICAg ICAgIH0KPgo+IG11Y2ggYmV0dGVyIHRvIHJlYWQuCj4KPj4gKyAgICAgICAgICAgICBpZiAoIWJh bmstPnZhbGlkKQo+PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAg ICAgICAgZ3Bpb2NoaXBfcmVtb3ZlKCZiYW5rLT5jaGlwKTsKPj4gKyAgICAgfQo+PiArICAgICBy ZXR1cm4gcmV0Owo+PiArfQo+IC4uLgo+Cj4+ICtzdGF0aWMgaW50IG1hMzVfZ2V0X2JhbmtfZGF0 YShzdHJ1Y3QgbWEzNV9waW5fYmFuayAqYmFuaywgc3RydWN0IG1hMzVfcGluY3RybCAqbnBjdGwp Cj4+ICt7Cj4+ICsgICAgIHN0cnVjdCByZXNvdXJjZSByZXM7Cj4+ICsKPj4gKyAgICAgaWYgKG9m X2FkZHJlc3NfdG9fcmVzb3VyY2UoYmFuay0+bnAsIDAsICZyZXMpKSB7Cj4+ICsgICAgICAgICAg ICAgZGV2X2VycihucGN0bC0+ZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2UgZm9yIGJhbmtc biIpOwo+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+PiArICAgICB9Cj4+ICsKPj4g KyAgICAgYmFuay0+cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UobnBjdGwtPmRldiwg JnJlcyk7Cj4+ICsgICAgIGlmIChJU19FUlIoYmFuay0+cmVnX2Jhc2UpKSB7Cj4+ICsgICAgICAg ICAgICAgZGV2X2VycihucGN0bC0+ZGV2LCAiY2Fubm90IGlvcmVtYXAgcmVzb3VyY2UgZm9yIGJh bmtcbiIpOwo+PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGJhbmstPnJlZ19iYXNlKTsK Pj4gKyAgICAgfQo+IFVzZSBmd25vZGVfaW9tYXAoKQo+Cj4+ICsgICAgIGJhbmstPmlycSA9IGly cV9vZl9wYXJzZV9hbmRfbWFwKGJhbmstPm5wLCAwKTsKPiBVc2UgZndub2RlX2dldF9pcnEoKQo+ Cj4+ICsgICAgIGJhbmstPm5yX3BpbnMgPSBNQTM1X0dQSU9fUE9SVF9NQVg7Cj4+ICsKPj4gKyAg ICAgYmFuay0+Y2xrID0gb2ZfY2xrX2dldChiYW5rLT5ucCwgMCk7Cj4gQ2FuJ3QgeW91IHVzZSBz aW1wbGUgY2xrX2dldCgpPyBXaHk/Cj4KPj4gKyAgICAgaWYgKElTX0VSUihiYW5rLT5jbGspKQo+ PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGJhbmstPmNsayk7Cj4+ICsKPj4gKyAgICAg cmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShiYW5rLT5jbGspOwo+PiArfQo+IC4uLgo+Cj4+ICsg ICAgIGZvcl9lYWNoX2dwaW9jaGlwX25vZGUoJnBkZXYtPmRldiwgY2hpbGQpIHsKPj4gKyAgICAg ICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gdG9fb2Zfbm9kZShjaGlsZCk7Cj4gTm8g bmVlZCwganVzdCBrZWVwIGV2ZXJ5dGhpbiBmd25vZGUgYmFzZWQuCj4KPj4gKyAgICAgICAgICAg ICBiYW5rID0gJmN0cmwtPnBpbl9iYW5rc1tpZF07Cj4+ICsgICAgICAgICAgICAgYmFuay0+bnAg PSBucDsKPj4gKyAgICAgICAgICAgICBiYW5rLT5yZWdtYXAgPSBwY3RsLT5yZWdtYXA7Cj4+ICsg ICAgICAgICAgICAgYmFuay0+ZGV2ID0gJnBkZXYtPmRldjsKPj4gKyAgICAgICAgICAgICBpZiAo IW1hMzVfZ2V0X2JhbmtfZGF0YShiYW5rLCBwY3RsKSkKPj4gKyAgICAgICAgICAgICAgICAgICAg IGJhbmstPnZhbGlkID0gdHJ1ZTsKPj4gKyAgICAgICAgICAgICBpZCsrOwo+PiArICAgICB9Cj4g Li4uCj4KPj4gKyAgICAgcmVndmFsICY9IH5HRU5NQVNLKHBvcnQgKiBNQTM1X0dQX1BVU0VMX01B U0tfV0lEVEggLSAxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCAqIE1BMzVfR1Bf UFVTRUxfTUFTS19XSURUSCk7Cj4gRklFTERfKigpCj4KPiAuLi4KPgo+PiArICAgICByZWd2YWwg Jj0gR0VOTUFTSyhwb3J0ICogTUEzNV9HUF9QVVNFTF9NQVNLX1dJRFRIIC0gMSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgcG9ydCAqIE1BMzVfR1BfUFVTRUxfTUFTS19XSURUSCk7Cj4+ICsg ICAgIHJlZ3ZhbCA+Pj0gcG9ydCAqIE1BMzVfR1BfUFVTRUxfTUFTS19XSURUSDsKPiBEaXR0by4K Pgo+IC4uLgo+Cj4+ICsgICAgIGlmIChyZWd2YWwgJiBCSVQocG9ydCkpCj4+ICsgICAgICAgICAg ICAgcmV0dXJuIE1WT0xUXzMzMDA7Cj4+ICsgICAgIGVsc2UKPj4gKyAgICAgICAgICAgICByZXR1 cm4gTVZPTFRfMTgwMDsKPiBDYW4gYmUgd3JpdHRlbiBhcwo+Cj4gICAgICAgICAgcmV0dXJuIChy ZWd2YWwgJiBCSVQoKSkgPyBfMzMwMCA6IF8xODAwOwo+Cj4gLi4uCj4KPj4gKyAgICAgaWYgKHBv cnQgPCBNQTM1X0dQX0RTSF9CQVNFX1BPUlQpIHsKPj4gKyAgICAgICAgICAgICByZWd2YWwgPSBy ZWFkbChiYXNlICsgTUEzNV9HUF9SRUdfRFNMKTsKPj4gKyAgICAgICAgICAgICBkc192YWwgPSAo cmVndmFsICYgR0VOTUFTSyhwb3J0ICogNCArIDIsIHBvcnQgKiA0KSkgPj4gcG9ydCAqIDQ7Cj4g VGhpcyBpcyB0b28gY29tcGxpY2F0ZWQgd2F5IG9mIHNheWluZwo+Cj4gICAgICAgICAgICAgICAg ICBkc192YWwgPSAocmVndmFsID4+IHBvcnQgKiA0KSAmIEdFTk1BU0soMiwgMCk7Cj4KPj4gKyAg ICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICBwb3J0IC09IE1BMzVfR1BfRFNIX0JBU0VfUE9S VDsKPj4gKyAgICAgICAgICAgICByZWd2YWwgPSByZWFkbChiYXNlICsgTUEzNV9HUF9SRUdfRFNI KTsKPj4gKyAgICAgICAgICAgICBkc192YWwgPSAocmVndmFsICYgR0VOTUFTSyhwb3J0ICogNCAr IDIsIHBvcnQgKiA0KSkgPj4gcG9ydCAqIDQ7Cj4gRGl0dG8uCj4KPj4gKyAgICAgfQo+IC4uLgo+ Cj4+ICsgICAgIGlmIChtYTM1X3BpbmNvbmZfZ2V0X3Bvd2VyX3NvdXJjZShucGN0bCwgcGluKSA9 PSBNVk9MVF8xODAwKSB7Cj4+ICsgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZHNfMTgwMG12X3RibCk7IGkrKykgewo+PiArICAgICAgICAgICAgICAgICAgICAgaWYgKGRz XzE4MDBtdl90YmxbaV0gPT0gc3RyZW5ndGgpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRzX3ZhbCA9IGk7Cj4gQW5kIHN0aWxsIGNvbnRpbnVlPyEKPgo+PiArICAgICAgICAgICAg IH0KPj4gKyAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShkc18zMzAwbXZfdGJsKTsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBp ZiAoZHNfMzMwMG12X3RibFtpXSA9PSBzdHJlbmd0aCkKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHNfdmFsID0gaTsKPiBEaXR0by4KPgo+PiArICAgICAgICAgICAgIH0KPj4gKyAg ICAgfQo+IFdvbmRlcmluZyBpZiB0aGUgbGluZWFyX3JhbmdlcyBvciBvdGhlciBleGlzdGluZyB0 YWJsZXMgYXBwcm9hY2hlcyBjYW4gYmUgdXNlZCBoZXJlLgo+Cj4gLi4uCj4KPj4gKyAgICAgaWYg KHBvcnQgPCBNQTM1X0dQX0RTSF9CQVNFX1BPUlQpIHsKPj4gKyAgICAgICAgICAgICByZWd2YWwg PSByZWFkbChiYXNlICsgTUEzNV9HUF9SRUdfRFNMKTsKPj4gKyAgICAgICAgICAgICByZWd2YWwg Jj0gfkdFTk1BU0socG9ydCAqIDQgKyAyLCBwb3J0ICogNCk7Cj4+ICsgICAgICAgICAgICAgcmVn dmFsIHw9IGRzX3ZhbCA8PCBwb3J0ICogNDsKPiBBcyBwZXIgYWJvdmUKPgo+ICAgICAgICAgICAg ICAgICAgfihHRU5NQVNLKDIsIDApIDw8IChwb3J0ICogNCkpCj4KPj4gKyAgICAgICAgICAgICB3 cml0ZWwocmVndmFsLCBiYXNlICsgTUEzNV9HUF9SRUdfRFNMKTsKPj4gKyAgICAgfSBlbHNlIHsK Pj4gKyAgICAgICAgICAgICBwb3J0IC09IE1BMzVfR1BfRFNIX0JBU0VfUE9SVDsKPj4gKyAgICAg ICAgICAgICByZWd2YWwgPSByZWFkbChiYXNlICsgTUEzNV9HUF9SRUdfRFNIKTsKPj4gKyAgICAg ICAgICAgICByZWd2YWwgJj0gfkdFTk1BU0socG9ydCAqIDQgKyAyLCBwb3J0ICogNCk7Cj4gRGl0 dG8uCj4KPj4gKyAgICAgICAgICAgICByZWd2YWwgfD0gZHNfdmFsIDw8IHBvcnQgKiA0Owo+PiAr ICAgICAgICAgICAgIHdyaXRlbChyZWd2YWwsIGJhc2UgKyBNQTM1X0dQX1JFR19EU0gpOwo+PiAr ICAgICB9Cj4gLi4uCj4KPj4gKyAgICAgcmVndmFsICY9IH5HRU5NQVNLKHBvcnQgKiBNQTM1X0dQ X1NMRVdDVExfTUFTS19XSURUSCAtIDEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBwb3J0 ICogTUEzNV9HUF9TTEVXQ1RMX01BU0tfV0lEVEgpOwo+PiArICAgICByZWd2YWwgfD0gcmF0ZSA8 PCBwb3J0ICogTUEzNV9HUF9TTEVXQ1RMX01BU0tfV0lEVEg7Cj4gRklFTERfKigpCj4KPiAuLi4K Pgo+PiArc3RhdGljIGludCBtYTM1X3BpbmNvbmZfZ2V0KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0 bGRldiwgdW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgbG9uZyAqY29uZmlnKQo+PiArewo+PiAr ICAgICBzdHJ1Y3QgbWEzNV9waW5jdHJsICpucGN0bCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRh KHBjdGxkZXYpOwo+PiArICAgICBlbnVtIHBpbl9jb25maWdfcGFyYW0gcGFyYW0gPSBwaW5jb25m X3RvX2NvbmZpZ19wYXJhbSgqY29uZmlnKTsKPj4gKyAgICAgdTMyIGFyZzsKPj4gKyAgICAgaW50 IHJldDsKPj4gKwo+PiArICAgICBzd2l0Y2ggKHBhcmFtKSB7Cj4+ICsgICAgIGNhc2UgUElOX0NP TkZJR19CSUFTX0RJU0FCTEU6Cj4+ICsgICAgIGNhc2UgUElOX0NPTkZJR19CSUFTX1BVTExfRE9X TjoKPj4gKyAgICAgY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDoKPj4gKyAgICAgICAgICAg ICBpZiAobWEzNV9waW5jb25mX2dldF9wdWxsKG5wY3RsLCBwaW4pID09IHBhcmFtKQo+PiArICAg ICAgICAgICAgICAgICAgICAgYXJnID0gMTsKPj4gKyAgICAgICAgICAgICBlbHNlCj4+ICsgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgICAgICBicmVhazsK PiBDaGVjayBmb3IgdGhlIGVycm9yIGNhc2UgZmlyc3QgYW5kIGdldCByaWQgb2YgcmVkdW5kYW50 ICdlbHNlJy4KPgo+PiArICAgICBjYXNlIFBJTl9DT05GSUdfRFJJVkVfU1RSRU5HVEg6Cj4+ICsg ICAgICAgICAgICAgcmV0ID0gbWEzNV9waW5jb25mX2dldF9kcml2ZV9zdHJlbmd0aChucGN0bCwg cGluLCAmYXJnKTsKPj4gKyAgICAgICAgICAgICBpZiAocmV0KQo+PiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICBj YXNlIFBJTl9DT05GSUdfSU5QVVRfU0NITUlUVF9FTkFCTEU6Cj4+ICsgICAgICAgICAgICAgYXJn ID0gbWEzNV9waW5jb25mX2dldF9zY2htaXR0X2VuYWJsZShucGN0bCwgcGluKTsKPj4gKyAgICAg ICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICBjYXNlIFBJTl9DT05GSUdfU0xFV19SQVRFOgo+ PiArICAgICAgICAgICAgIGFyZyA9IG1hMzVfcGluY29uZl9nZXRfc2xld19yYXRlKG5wY3RsLCBw aW4pOwo+PiArICAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgIGNhc2UgUElOX0NPTkZJ R19PVVRQVVRfRU5BQkxFOgo+PiArICAgICAgICAgICAgIGFyZyA9IG1hMzVfcGluY29uZl9nZXRf b3V0cHV0KG5wY3RsLCBwaW4pOwo+PiArICAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAg IGNhc2UgUElOX0NPTkZJR19QT1dFUl9TT1VSQ0U6Cj4+ICsgICAgICAgICAgICAgYXJnID0gbWEz NV9waW5jb25mX2dldF9wb3dlcl9zb3VyY2UobnBjdGwsIHBpbik7Cj4+ICsgICAgICAgICAgICAg YnJlYWs7Cj4+ICsKPj4gKyAgICAgZGVmYXVsdDoKPj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPj4gKyAgICAgfQo+PiArICAgICAqY29uZmlnID0gcGluY29uZl90b19jb25maWdfcGFj a2VkKHBhcmFtLCBhcmcpOwo+PiArCj4+ICsgICAgIHJldHVybiAwOwo+PiArfQo+IC4uLgo+Cj4+ ICtzdGF0aWMgaW50IG1hMzVfcGluY29uZl9zZXQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2 LCB1bnNpZ25lZCBpbnQgcGluLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgKmNvbmZpZ3MsIHVuc2lnbmVkIGludCBudW1fY29uZmlncykKPj4gK3sKPj4gKyAgICAg c3RydWN0IG1hMzVfcGluY3RybCAqbnBjdGwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3Rs ZGV2KTsKPj4gKyAgICAgZW51bSBwaW5fY29uZmlnX3BhcmFtIHBhcmFtOwo+PiArICAgICB1bnNp Z25lZCBpbnQgYXJnID0gMDsKPj4gKyAgICAgaW50IGksIHJldCA9IDA7Cj4+ICsKPj4gKyAgICAg Zm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyBpKyspIHsKPj4gKyAgICAgICAgICAgICBwYXJh bSA9IHBpbmNvbmZfdG9fY29uZmlnX3BhcmFtKGNvbmZpZ3NbaV0pOwo+PiArICAgICAgICAgICAg IGFyZyA9IHBpbmNvbmZfdG9fY29uZmlnX2FyZ3VtZW50KGNvbmZpZ3NbaV0pOwo+PiArCj4+ICsg ICAgICAgICAgICAgc3dpdGNoIChwYXJhbSkgewo+PiArICAgICAgICAgICAgIGNhc2UgUElOX0NP TkZJR19CSUFTX0RJU0FCTEU6Cj4+ICsgICAgICAgICAgICAgY2FzZSBQSU5fQ09ORklHX0JJQVNf UFVMTF9VUDoKPj4gKyAgICAgICAgICAgICBjYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV046 Cj4+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBtYTM1X3BpbmNvbmZfc2V0X3B1bGwobnBj dGwsIHBpbiwgcGFyYW0pOwo+PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4g KyAgICAgICAgICAgICBjYXNlIFBJTl9DT05GSUdfRFJJVkVfU1RSRU5HVEg6Cj4+ICsgICAgICAg ICAgICAgICAgICAgICByZXQgPSBtYTM1X3BpbmNvbmZfc2V0X2RyaXZlX3N0cmVuZ3RoKG5wY3Rs LCBwaW4sIGFyZyk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAg ICAgICAgICAgIGNhc2UgUElOX0NPTkZJR19JTlBVVF9TQ0hNSVRUX0VOQUJMRToKPj4gKyAgICAg ICAgICAgICAgICAgICAgIHJldCA9IG1hMzVfcGluY29uZl9zZXRfc2NobWl0dChucGN0bCwgcGlu LCAxKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICAg ICAgY2FzZSBQSU5fQ09ORklHX0lOUFVUX1NDSE1JVFQ6Cj4+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSBtYTM1X3BpbmNvbmZfc2V0X3NjaG1pdHQobnBjdGwsIHBpbiwgYXJnKTsKPj4gKyAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICAgICAgY2FzZSBQSU5f Q09ORklHX1NMRVdfUkFURToKPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1hMzVfcGlu Y29uZl9zZXRfc2xld19yYXRlKG5wY3RsLCBwaW4sIGFyZyk7Cj4+ICsgICAgICAgICAgICAgICAg ICAgICBicmVhazsKPj4gKwo+PiArICAgICAgICAgICAgIGNhc2UgUElOX0NPTkZJR19PVVRQVVRf RU5BQkxFOgo+PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWEzNV9waW5jb25mX3NldF9v dXRwdXQobnBjdGwsIHBpbiwgYXJnKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ PiArCj4+ICsgICAgICAgICAgICAgY2FzZSBQSU5fQ09ORklHX1BPV0VSX1NPVVJDRToKPj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldCA9IG1hMzVfcGluY29uZl9zZXRfcG93ZXJfc291cmNlKG5w Y3RsLCBwaW4sIGFyZyk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKwo+PiAr ICAgICAgICAgICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPj4gKyAgICAgICAgICAgICB9Cj4gTm8gcmV0dXJuaW5nIGFuIGVycm9yIGlmIHdlIGdv dCByZXQgIT0gMD8hCj4KPj4gKyAgICAgfQo+PiArICAgICByZXR1cm4gcmV0Owo+PiArfQo+IC4u Lgo+Cj4+ICtzdGF0aWMgaW50IG1hMzVfcGluY3RybF9wYXJzZV9ncm91cHMoc3RydWN0IGRldmlj ZV9ub2RlICpucCwgc3RydWN0IG1hMzVfcGluX2dyb3VwICpncnAsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1hMzVfcGluY3RybCAqbnBjdGwsIHUzMiBpbmRl eCkKPj4gK3sKPj4gKyAgICAgdW5zaWduZWQgbG9uZyAqY29uZmlnczsKPj4gKyAgICAgdW5zaWdu ZWQgaW50IG5jb25maWdzOwo+PiArICAgICBzdHJ1Y3QgbWEzNV9waW5fc2V0dGluZyAqcGluOwo+ PiArICAgICBjb25zdCBfX2JlMzIgKmxpc3Q7Cj4gSHVoPyEKPgo+PiArICAgICBpbnQgaSwgaiwg c2l6ZSwgcmV0Owo+PiArCj4+ICsgICAgIGRldl9kYmcobnBjdGwtPmRldiwgImdyb3VwKCVkKTog JXNcbiIsIGluZGV4LCBucC0+bmFtZSk7Cj4+ICsKPj4gKyAgICAgZ3JwLT5uYW1lID0gbnAtPm5h bWU7Cj4+ICsKPj4gKyAgICAgcmV0ID0gcGluY29uZl9nZW5lcmljX3BhcnNlX2R0X2NvbmZpZyhu cCwgTlVMTCwgJmNvbmZpZ3MsICZuY29uZmlncyk7Cj4+ICsgICAgIGlmIChyZXQpCj4+ICsgICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4gKwo+PiArICAgICAvKgo+PiArICAgICAgKiB0aGUgYmlu ZGluZyBmb3JtYXQgaXMgbnV2b3RvbixwaW5zID0gPGJhbmsgcGluLW1mcCBwaW4tZnVuY3Rpb24+ LAo+PiArICAgICAgKiBkbyBzYW5pdHkgY2hlY2sgYW5kIGNhbGN1bGF0ZSBwaW5zIG51bWJlcgo+ PiArICAgICAgKi8KPiAvKgo+ICAgKiBSZXNwZWN0IEVuZ2xpc2ggZ3JhbW1hciBhbmQgcHVudHVh dGlvbgo+ICAgKiBpbiBhbGwgbXVsdGktbGluZSBjb21tZW50cy4gU2VlIHRoZSBkaWZmZXJlbmNl Cj4gICAqIGhvdyBpdCdzIGRvbmUgYWJvdmUgYW5kIGluIHRoaXMgZXhhbXBsZS4KPiAgICovCj4K Pj4gKyAgICAgbGlzdCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm51dm90b24scGlucyIsICZzaXpl KTsKPiBPaCwgbm8uCj4gVXNlIHJlc3BlY3RpdmUgb2ZfcHJvcGVydHlfIGNhbGxzLgo+Cj4+ICsg ICAgIHNpemUgLz0gc2l6ZW9mKCpsaXN0KTsKPj4gKyAgICAgaWYgKCFzaXplIHx8IHNpemUgJSAz KSB7Cj4+ICsgICAgICAgICAgICAgZGV2X2VycihucGN0bC0+ZGV2LCAid3Jvbmcgc2V0dGluZyFc biIpOwo+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICB9Cj4+ICsgICAg IGdycC0+bnBpbnMgPSBzaXplIC8gMzsKPj4gKwo+PiArICAgICBncnAtPnBpbnMgPSBkZXZtX2tj YWxsb2MobnBjdGwtPmRldiwgZ3JwLT5ucGlucywgc2l6ZW9mKCpncnAtPnBpbnMpLCBHRlBfS0VS TkVMKTsKPj4gKyAgICAgaWYgKCFncnAtPnBpbnMpCj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1F Tk9NRU07Cj4+ICsKPj4gKyAgICAgZ3JwLT5zZXR0aW5ncyA9IGRldm1fa2NhbGxvYyhucGN0bC0+ ZGV2LCBncnAtPm5waW5zLCBzaXplb2YoKmdycC0+c2V0dGluZ3MpLCBHRlBfS0VSTkVMKTsKPj4g KyAgICAgaWYgKCFncnAtPnNldHRpbmdzKQo+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVN Owo+PiArCj4+ICsgICAgIHBpbiA9IGdycC0+c2V0dGluZ3M7Cj4+ICsKPj4gKyAgICAgZm9yIChp ID0gMCwgaiA9IDA7IGkgPCBzaXplOyBpICs9IDMsIGorKykgewo+PiArICAgICAgICAgICAgIHBp bi0+b2Zmc2V0ID0gYmUzMl90b19jcHUoKmxpc3QrKykgKiBNQTM1X01GUF9SRUdfU1pfUEVSX0JB TksgKyBNQTM1X01GUF9SRUdfQkFTRTsKPj4gKyAgICAgICAgICAgICBwaW4tPnNoaWZ0ID0gKGJl MzJfdG9fY3B1KCpsaXN0KyspICogTUEzNV9NRlBfQklUU19QRVJfUE9SVCkgJSAzMjsKPj4gKyAg ICAgICAgICAgICBwaW4tPm11eHZhbCA9IGJlMzJfdG9fY3B1KCpsaXN0KyspOwo+PiArICAgICAg ICAgICAgIHBpbi0+Y29uZmlncyA9IGNvbmZpZ3M7Cj4+ICsgICAgICAgICAgICAgcGluLT5uY29u ZmlncyA9IG5jb25maWdzOwo+PiArICAgICAgICAgICAgIGdycC0+cGluc1tqXSA9IG5wY3RsLT5p bmZvLT5nZXRfcGluX251bShwaW4tPm9mZnNldCwgcGluLT5zaGlmdCk7Cj4+ICsgICAgICAgICAg ICAgcGluKys7Cj4+ICsgICAgIH0KPj4gKyAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4gLi4uCj4KPj4g KyAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKPj4gKyAgICAgICAgICAg ICBpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLCAiZ3Bpby1jb250cm9sbGVyIikpCj4+ ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiBUaGVyZSBpcyBhIG1hY3JvIGFscmVh ZHkgcHJlc2VudCwgZm9yX2VhY2hfZ3Bpb2NoaXBfbm9kZSgpLgo+Cj4+ICsgICAgICAgICAgICAg bnBjdGwtPm5mdW5jdGlvbnMrKzsKPj4gKyAgICAgICAgICAgICBucGN0bC0+bmdyb3VwcyArPSBv Zl9nZXRfY2hpbGRfY291bnQoY2hpbGQpOwo+PiArICAgICB9Cj4gLi4uCj4KPj4gKyAgICAgZm9y X2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKPj4gKyAgICAgICAgICAgICBpZiAob2Zf cHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLCAiZ3Bpby1jb250cm9sbGVyIikpCj4+ICsgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiBEaXR0by4KPgo+PiArICAgICAgICAgICAgIHJldCA9 IG1hMzVfcGluY3RybF9wYXJzZV9mdW5jdGlvbnMoY2hpbGQsIG5wY3RsLCBpZHgrKyk7Cj4+ICsg ICAgICAgICAgICAgaWYgKHJldCkgewo+PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycigm cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIGZ1bmN0aW9uXG4iKTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgIG9mX25vZGVfcHV0KGNoaWxkKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4+ICsgICAgICAgICAgICAgfQo+PiArICAgICB9Cj4gLi4uCj4KPj4gKyAgICAg aWYgKCFpbmZvIHx8ICFpbmZvLT5waW5zIHx8ICFpbmZvLT5ucGlucykgewo+PiArICAgICAgICAg ICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIndyb25nIHBpbmN0cmwgaW5mb1xuIik7Cj4+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gICAgICAgICAgICAgICAgICByZXR1cm4gZGV2X2Vy cl9wcm9iZSguLi4pOwo+Cj4+ICsgICAgIH0KPiAuLi4KPgo+PiArICAgICByZXQgPSBkZXZtX3Bp bmN0cmxfcmVnaXN0ZXJfYW5kX2luaXQoJnBkZXYtPmRldiwgbWEzNV9waW5jdHJsX2Rlc2MsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucGN0bCwgJm5wY3Rs LT5wY3RsKTsKPiBIYXZlaW5nCj4KPiAgICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Owo+Cj4gbWFrZXMgaW4gcGFydGljdWxhciB0aGlzIG9uZSBiZXR0ZXIKPgo+ICAgICAg ICAgIHJldCA9IGRldm1fcGluY3RybF9yZWdpc3Rlcl9hbmRfaW5pdChkZXYsIG1hMzVfcGluY3Ry bF9kZXNjLCBucGN0bCwgJm5wY3RsLT5wY3RsKTsKPgo+PiArICAgICBpZiAocmV0KQo+PiArICAg ICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIHJldCwgImZhaWwgdG8g cmVnaXN0ZXIgTUEzNSBwaW5jdHJsXG4iKTsKPiAuLi4KPgo+PiAraW50IF9fbWF5YmVfdW51c2Vk IG1hMzVfcGluY3RybF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiBObyBfX21heWJlX3Vu dXNlZC4KPiBKdXN0IHVzZSByZXNwZWN0aXZlIFBNIG1hY3JvcyAocG1fcHRyKCksIERFRklORV8s KlBNX09QUywgZXRjKS4KPgo+PiArewo+PiArICAgICBzdHJ1Y3QgbWEzNV9waW5jdHJsICpucGN0 bCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCj4+ICsgICAgIHJldHVybiBwaW5jdHJsX2Zv cmNlX3NsZWVwKG5wY3RsLT5wY3RsKTsKPj4gK30KPj4gKwo+PiAraW50IF9fbWF5YmVfdW51c2Vk IG1hMzVfcGluY3RybF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+IERpdHRvLgo+Cj4+ICt7 Cj4+ICsgICAgIHN0cnVjdCBtYTM1X3BpbmN0cmwgKm5wY3RsID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4+ICsKPj4gKyAgICAgcmV0dXJuIHBpbmN0cmxfZm9yY2VfZGVmYXVsdChucGN0bC0+cGN0 bCk7Cj4+ICt9Cj4gLi4uCj4KPj4gK3N0cnVjdCBtYTM1X211eF9kZXNjIHsKPj4gKyAgICAgY29u c3QgY2hhciAqbmFtZTsKPj4gKyAgICAgdTMyIG11eHZhbDsKPj4gK307Cj4+ICsKPj4gK3N0cnVj dCBtYTM1X3Bpbl9kYXRhIHsKPj4gKyAgICAgdTMyIG9mZnNldDsKPj4gKyAgICAgdTMyIHNoaWZ0 Owo+PiArICAgICBzdHJ1Y3QgbWEzNV9tdXhfZGVzYyAqbXV4ZXM7Cj4+ICt9Owo+IERvbid0IHBp biBjb250cm9sIHN1YnN5c3RlbSBoYXMgYWxyZWFkeSBzb21lIGRhdGEgdHlwZXMgc3VpdGFibGUg aW4gdGhpcyBjYXNlcz8KPgo+IC4uLgo+Cj4+ICsjZGVmaW5lIE1BMzVfUElOKG51bSwgbiwgbywg cywgLi4uKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICAubnVtYmVyID0gbnVt LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgICAgIC5uYW1lID0gI24s ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiBEb24ndCB3ZSBoYXZlIG1h Y3JvcyBmb3IgdGhpcz8KPgo+PiArICAgICAuZHJ2X2RhdGEgPSAmKHN0cnVjdCBtYTM1X3Bpbl9k YXRhKSB7ICAgICAgICAgICBcCj4+ICsgICAgICAgICAgICAgLm9mZnNldCA9IG8sICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4gKyAgICAgICAgICAgICAuc2hpZnQgPSBzLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICAgICAgICAgIC5tdXhlcyA9IChzdHJ1Y3Qg bWEzNV9tdXhfZGVzY1tdKSB7ICAgICBcCj4+ICsgICAgICAgICAgICAgICAgICAgICAgX19WQV9B UkdTX18sIHsgfSB9LCAgICAgICAgICAgIFwKPj4gKyAgICAgfSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArfQo+IC4uLgo+Cj4+ICsjaW5jbHVkZSA8 bGludXgvaW5pdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gTWlzc2luZyBoZWFkZXJzIGFuZCBzdHJheSBvbmVzLiBQbGVhc2UsIGdl dCB0aGlzIGludG8gb3JkZXIgYnkgZm9sbG93aW5nIElXWVUKPiBwcmluY2lwbGUuCj4KPj4gKyNp bmNsdWRlIDxsaW51eC9vZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+IEhv dyBhcmUgdGhlc2UgYmVpbmcgdXNlZD8KPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGlu Y3RybC5oPgo+IC4uLgo+Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbWEzNWQx X3BpbmN0cmxfcG1fb3BzID0gewo+PiArICAgICBTRVRfTEFURV9TWVNURU1fU0xFRVBfUE1fT1BT KG1hMzVfcGluY3RybF9zdXNwZW5kLCBtYTM1X3BpbmN0cmxfcmVzdW1lKQo+PiArfTsKPiBOZXcg UE0gbWFjcm9zLCBwbGVhc2UuCj4KPiAuLi4KPgo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbWEzNWQxX3BpbmN0cmxfb2ZfbWF0Y2hbXSA9IHsKPj4gKyAgICAgeyAuY29tcGF0 aWJsZSA9ICJudXZvdG9uLG1hMzVkMS1waW5jdHJsIiwgfSwKPj4gKyAgICAgeyB9LAo+IE5vIGNv bW1hIGluIHRoZSB0ZXJtaW5hdG9yIGVudHJ5Lgo+Cj4+ICt9Owo+IC4uLgo+Cj4+ICtzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYTM1ZDFfcGluY3RybF9kcml2ZXIgPSB7Cj4+ICsgICAg IC5wcm9iZSA9IG1hMzVkMV9waW5jdHJsX3Byb2JlLAo+PiArICAgICAuZHJpdmVyID0gewo+PiAr ICAgICAgICAgICAgIC5uYW1lID0gIm1hMzVkMS1waW5jdHJsIiwKPj4gKyAgICAgICAgICAgICAu cG0gPSAmbWEzNWQxX3BpbmN0cmxfcG1fb3BzLAo+IE5ldyBQTSBtYWNybyBoZXJlLgo+Cj4+ICsg ICAgICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0gbWEzNWQxX3BpbmN0cmxfb2ZfbWF0Y2gsCj4+ ICsgICAgIH0sCj4+ICt9Owo+IC0tCj4gV2l0aCBCZXN0IFJlZ2FyZHMsCj4gQW5keSBTaGV2Y2hl bmtvCj4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK