From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 86831 invoked by alias); 1 Jun 2015 23:14:32 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 86817 invoked by uid 89); 1 Jun 2015 23:14:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f177.google.com Received: from mail-pd0-f177.google.com (HELO mail-pd0-f177.google.com) (209.85.192.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 01 Jun 2015 23:14:28 +0000 Received: by pdbqa5 with SMTP id qa5so118498952pdb.0 for ; Mon, 01 Jun 2015 16:14:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type; bh=gGlyLnf0KbM656wCHvoGA+K9wjcNb2L/pUXpg/v4aNk=; b=bAHn9T6BOVuD40LgCzrMvA6cYNEOsXkgphyU6j3jq28RGlfCf5LjhTZRqYDr2QQZ1q PWH0lyhFGIWRFOm9pPatviTw1iisGwiPWF+XIet8Zei6HIocxvmZfp2Qeqv2fsJkfBpE 91I+2FK7FxyPc4151NmhjC7gzHtp2GRP48ZKglawJrD39v5Ic2WRdGfCFsJVTlbwZ/Wj IyVbpEMJ/TqCc1c4hCSkLFDf3wtEtwFlFxy9iQ0Cl2t2MsfrARuIuXYBnZnmmRKE2N41 U33U1QF4uRkIiN1pyuG/jQdg2njcl+r+aANV/zhplL4mziJmOb3KiGxHJz953Cf+DMz8 RNEw== X-Gm-Message-State: ALoCoQnYglSk2U7BZtfvrgGV2PcLDkmfYIcI19EGXWlv9lARuLGCcJXWox1rgypEs5w3EzEzufSh X-Received: by 10.70.33.67 with SMTP id p3mr44474092pdi.126.1433200466128; Mon, 01 Jun 2015 16:14:26 -0700 (PDT) Received: from [10.1.1.3] (58-6-183-210.dyn.iinet.net.au. [58.6.183.210]) by mx.google.com with ESMTPSA id e5sm15621454pdc.94.2015.06.01.16.14.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 01 Jun 2015 16:14:25 -0700 (PDT) Message-ID: <556CE742.4090507@linaro.org> Date: Mon, 01 Jun 2015 23:20:00 -0000 From: Kugan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Richard Biener CC: Jeff Law , "gcc-patches@gcc.gnu.org" , Jakub Jelinek Subject: Re: [RFC] Elimination of zext/sext - type promotion pass References: <53FEDF34.4090605@linaro.org> <5407DF57.2040902@linaro.org> <540912E1.30505@linaro.org> <545FF8EE.1090900@linaro.org> <554303F0.1000103@linaro.org> In-Reply-To: Content-Type: multipart/mixed; boundary="------------070604060601000701040301" X-IsSubscribed: yes X-SW-Source: 2015-06/txt/msg00140.txt.bz2 This is a multi-part message in MIME format. --------------070604060601000701040301 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 2712 On 08/05/15 22:48, Richard Biener wrote: > You compute which promotions are unsafe, like sources/sinks of memory > (I think you miss call arguments/return values and also asm operands here). > But instead of simply marking those SSA names as not to be promoted > I'd instead split their life-ranges, thus replace > > _1 = mem; > > with > > _2 = mem; > _1 = [zs]ext (_2, ...); > > and promote _1 anyway. So in the first phase I'd do that (and obviously > note that _2 isn't to be promoted in the specific example). > > For promotions that apply I wouldn't bother allocating new SSA names > but just "fix" their types (assign to their TREE_TYPE). This also means > they have to become anonymous and if they didn't have a !DECL_IGNORED_P > decl before then a debug stmt should be inserted at the point of the > promotions. So > > bar_3 = _1 + _2; > > when promoted would become > > _4 = _1 + _2; > _3 = sext <_4, ...>; > # DEBUG bar = (orig-type) _4; // or _3? > > so you'd basically always promote defs (you have a lot of stmt/operand > walking code I didn't look too closely at - but it looks like too much) and > the uses get promoted automagically (because you promote the original > SSA name). Promotion of constants has to remain, of course. Thanks Richard. I experimented on this idea to understand it better. Please see the attached prototype (I am still working on your other comments which is not addressed here). Please have a look and let me know if this is along what you would expect. I have few questions though. 1. In the following example above : char _1; _1 = mem; when changing with char _2; int _1; _2 = mem; _1 = [zs]ext (_2, ...); for the [zs]ext operation we now use BIT_AND_EXPR and ZEXT_EXPR which (as of now) requires that the LHS and RHS are of the same type. Are you suggesting that we should have a true ZEXT_EXPR and SEXT_EXPR which can do the above in the gimple? I am now using CONVER_EXPR and which is the source of many optimization issue. 2. for inline asm (a reduced test case that might not make much as a stand alone test-case, but I ran into similar cases with valid programmes) ;; Function fn1 (fn1, funcdef_no=0, decl_uid=4220, cgraph_uid=0, symbol_order=0) fn1 (short int p1) { : __asm__("" : "=r" p1_2 : "0" p1_1(D)); return; } I am generating something like the following which ICEs. What is the expected out? ;; Function fn1 (fn1, funcdef_no=0, decl_uid=4220, cgraph_uid=0, symbol_order=0) fn1 (short int p1) { int _1; int _2; short int _5; : _1 = (int) p1_4(D); _5 = (short int) _1; __asm__("" : "=r" p1_6 : "0" _5); _2 = (int) p1_6; return; } Thanks a lot for your time, Kugan --------------070604060601000701040301 Content-Type: text/plain; charset=UTF-8; name="p.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="p.txt" Content-length: 39561 ZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5p bgppbmRleCBiNTliNWQ5Li4xNmIyZGYxIDEwMDY0NAotLS0gYS9nY2MvTWFr ZWZpbGUuaW4KKysrIGIvZ2NjL01ha2VmaWxlLmluCkBAIC0xNDkxLDYgKzE0 OTEsNyBAQCBPQkpTID0gXAogCXRyZWUtdmVjdC1zbHAubyBcCiAJdHJlZS12 ZWN0b3JpemVyLm8gXAogCXRyZWUtdnJwLm8gXAorCWdpbXBsZS1zc2EtdHlw ZS1wcm9tb3RlLm8gXAogCXRyZWUubyBcCiAJdmFsdHJhY2subyBcCiAJdmFs dWUtcHJvZi5vIFwKZGlmZiAtLWdpdCBhL2djYy9jZmdleHBhbmQuYyBiL2dj Yy9jZmdleHBhbmQuYwppbmRleCBiMTkwZjkxLi5iYmY3MGNlIDEwMDY0NAot LS0gYS9nY2MvY2ZnZXhwYW5kLmMKKysrIGIvZ2NjL2NmZ2V4cGFuZC5jCkBA IC00ODA5LDYgKzQ4MDksMTAgQEAgZXhwYW5kX2RlYnVnX2V4cHIgKHRyZWUg ZXhwKQogICAgIGNhc2UgRk1BX0VYUFI6CiAgICAgICByZXR1cm4gc2ltcGxp ZnlfZ2VuX3Rlcm5hcnkgKEZNQSwgbW9kZSwgaW5uZXJfbW9kZSwgb3AwLCBv cDEsIG9wMik7CiAKKyAgICBjYXNlIFNFWFRfRVhQUjoKKyAgICAgIHJldHVy biBvcDA7CisKKwogICAgIGRlZmF1bHQ6CiAgICAgZmxhZ191bnN1cHBvcnRl ZDoKICNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKZGlmZiAtLWdpdCBhL2djYy9j b21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKaW5kZXggNmUxNWFmMi4uNTYy MzFiNSAxMDA2NDQKLS0tIGEvZ2NjL2NvbW1vbi5vcHQKKysrIGIvZ2NjL2Nv bW1vbi5vcHQKQEAgLTIzNjgsNiArMjM2OCwxMCBAQCBmdHJlZS12cnAKIENv bW1vbiBSZXBvcnQgVmFyKGZsYWdfdHJlZV92cnApIEluaXQoMCkgT3B0aW1p emF0aW9uCiBQZXJmb3JtIFZhbHVlIFJhbmdlIFByb3BhZ2F0aW9uIG9uIHRy ZWVzCiAKK2Z0cmVlLXR5cGUtcHJvbW90ZQorQ29tbW9uIFJlcG9ydCBWYXIo ZmxhZ190cmVlX3R5cGVfcHJvbW90ZSkgSW5pdCgxKSBPcHRpbWl6YXRpb24K K1BlcmZvcm0gVHlwZSBQcm9tb3Rpb24gb24gdHJlZXMKKwogZnVuaXQtYXQt YS10aW1lCiBDb21tb24gUmVwb3J0IFZhcihmbGFnX3VuaXRfYXRfYV90aW1l KSBJbml0KDEpCiBDb21waWxlIHdob2xlIGNvbXBpbGF0aW9uIHVuaXQgYXQg YSB0aW1lCmRpZmYgLS1naXQgYS9nY2MvZXhwci5jIGIvZ2NjL2V4cHIuYwpp bmRleCA1YTkzMWRjLi4wYmFkZmE1IDEwMDY0NAotLS0gYS9nY2MvZXhwci5j CisrKyBiL2djYy9leHByLmMKQEAgLTkyNDksNiArOTI0OSwyMSBAQCBleHBh bmRfZXhwcl9yZWFsXzIgKHNlcG9wcyBvcHMsIHJ0eCB0YXJnZXQsIG1hY2hp bmVfbW9kZSB0bW9kZSwKICAgICAgIHRhcmdldCA9IGV4cGFuZF92ZWNfY29u ZF9leHByICh0eXBlLCB0cmVlb3AwLCB0cmVlb3AxLCB0cmVlb3AyLCB0YXJn ZXQpOwogICAgICAgcmV0dXJuIHRhcmdldDsKIAorICAgIGNhc2UgU0VYVF9F WFBSOgorCXsKKwkgIHJ0eCBvcDAgPSBleHBhbmRfbm9ybWFsICh0cmVlb3Aw KTsKKwkgIHJ0eCB0ZW1wOworCSAgaWYgKCF0YXJnZXQpCisJICAgIHRhcmdl dCA9IGdlbl9yZWdfcnR4IChUWVBFX01PREUgKFRSRUVfVFlQRSAodHJlZW9w MCkpKTsKKworCSAgbWFjaGluZV9tb2RlIGlubmVyX21vZGUgPSBzbWFsbGVz dF9tb2RlX2Zvcl9zaXplICh0cmVlX3RvX3Nod2kgKHRyZWVvcDEpLAorCQkJ CQkJCSAgICBNT0RFX0lOVCk7CisJICB0ZW1wID0gY29udmVydF9tb2RlcyAo aW5uZXJfbW9kZSwKKwkJCQlUWVBFX01PREUgKFRSRUVfVFlQRSAodHJlZW9w MCkpLCBvcDAsIDApOworCSAgY29udmVydF9tb3ZlICh0YXJnZXQsIHRlbXAs IDApOworCSAgcmV0dXJuIHRhcmdldDsKKwl9CisKICAgICBkZWZhdWx0Ogog ICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwogICAgIH0KZGlmZiAtLWdpdCBh L2djYy9mb2xkLWNvbnN0LmMgYi9nY2MvZm9sZC1jb25zdC5jCmluZGV4IDU1 MTk2YjUuLjNjNDI0NDkgMTAwNjQ0Ci0tLSBhL2djYy9mb2xkLWNvbnN0LmMK KysrIGIvZ2NjL2ZvbGQtY29uc3QuYwpAQCAtMTAwNyw2ICsxMDA3LDEwIEBA IGludF9jb25zdF9iaW5vcF8xIChlbnVtIHRyZWVfY29kZSBjb2RlLCBjb25z dF90cmVlIGFyZzEsIGNvbnN0X3RyZWUgcGFyZzIsCiAgICAgICByZXMgPSB3 aTo6Yml0X2FuZCAoYXJnMSwgYXJnMik7CiAgICAgICBicmVhazsKIAorICAg IGNhc2UgU0VYVF9FWFBSOgorICAgICAgcmVzID0gd2k6OnNleHQgKGFyZzEs IGFyZzIudG9fdWh3aSAoKSk7CisgICAgICBicmVhazsKKwogICAgIGNhc2Ug UlNISUZUX0VYUFI6CiAgICAgY2FzZSBMU0hJRlRfRVhQUjoKICAgICAgIGlm ICh3aTo6bmVnX3AgKGFyZzIpKQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1z c2EtdHlwZS1wcm9tb3RlLmMgYi9nY2MvZ2ltcGxlLXNzYS10eXBlLXByb21v dGUuYwppbmRleCBlNjlkZTI5Li42Y2NkYTBjIDEwMDY0NAotLS0gYS9nY2Mv Z2ltcGxlLXNzYS10eXBlLXByb21vdGUuYworKysgYi9nY2MvZ2ltcGxlLXNz YS10eXBlLXByb21vdGUuYwpAQCAtMCwwICsxLDcxOSBAQAorLyogVHlwZSBw cm9tb3Rpb24gb2YgU1NBIG5hbWVzIHRvIG1pbmltaXNlIHJlZHVuZGFudCB6 ZXJvL3NpZ24gZXh0ZW5zaW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDE1IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMg cGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVy IHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lu Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1 ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAi ZmxhZ3MuaCIKKyNpbmNsdWRlICJoYXNoLXNldC5oIgorI2luY2x1ZGUgIm1h Y2htb2RlLmgiCisjaW5jbHVkZSAidmVjLmgiCisjaW5jbHVkZSAiZG91Ymxl LWludC5oIgorI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAiYWxpYXMu aCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ3aWRlLWludC5o IgorI2luY2x1ZGUgImluY2hhc2guaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisj aW5jbHVkZSAiZm9sZC1jb25zdC5oIgorI2luY2x1ZGUgInN0b3ItbGF5b3V0 LmgiCisjaW5jbHVkZSAiY2FsbHMuaCIKKyNpbmNsdWRlICJwcmVkaWN0Lmgi CisjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCisjaW5jbHVkZSAiZnVuY3Rp b24uaCIKKyNpbmNsdWRlICJkb21pbmFuY2UuaCIKKyNpbmNsdWRlICJjZmcu aCIKKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgorI2luY2x1ZGUgInRyZWUt c3NhLWFsaWFzLmgiCisjaW5jbHVkZSAiZ2ltcGxlLWZvbGQuaCIKKyNpbmNs dWRlICJ0cmVlLWVoLmgiCisjaW5jbHVkZSAiZ2ltcGxlLWV4cHIuaCIKKyNp bmNsdWRlICJpcy1hLmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5jbHVk ZSAiZ2ltcGxlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZ2ltcGxlLXNzYS5o IgorI2luY2x1ZGUgInRyZWUtcGhpbm9kZXMuaCIKKyNpbmNsdWRlICJzc2Et aXRlcmF0b3JzLmgiCisjaW5jbHVkZSAic3RyaW5ncG9vbC5oIgorI2luY2x1 ZGUgInRyZWUtc3NhbmFtZXMuaCIKKyNpbmNsdWRlICJ0cmVlLXBhc3MuaCIK KyNpbmNsdWRlICJnaW1wbGUtcHJldHR5LXByaW50LmgiCisjaW5jbHVkZSAi bGFuZ2hvb2tzLmgiCisjaW5jbHVkZSAic2JpdG1hcC5oIgorI2luY2x1ZGUg ImRvbXdhbGsuaCIKKworI2luY2x1ZGUgInRyZWUtZGZhLmgiCisKKy8qIFRo aXMgcGFzcyBhcHBsaWVzIHR5cGUgcHJvbW90aW9uIHRvIFNTQSBuYW1lcyBp biB0aGUgZnVuY3Rpb24gYW5kCisgICBpbnNlcnRzIGFwcHJvcHJpYXRlIHRy dW5jYXRpb25zLiAgSWRlYSBvZiB0aGlzIHBhc3MgaXMgdG8gcHJvbW90ZSBv cGVyYXRpb25zCisgICBzdWNoIGEgd2F5IHRoYXQgd2UgY2FuIG1pbmltaXNl IGdlbmVyYXRpb24gb2Ygc3VicmVnIGluIFJUTCwKKyAgIHRoYXQgaW50ZXJu IHJlc3VsdHMgaW4gcmVtb3ZhbCBvZiByZWR1bmRhbnQgemVyby9zaWduIGV4 dGVuc2lvbnMuICBUaGlzIHBhc3MKKyAgIHdpbGwgcnVuIHByaW9yIHRvIFRo ZSBWUlAgYW5kIERPTSBzdWNoIHRoYXQgdGhleSB3aWxsIGJlIGFibGUgdG8g b3B0aW1pc2UKKyAgIHJlZHVuZGFudCB0cnVuY2F0aW9ucyBhbmQgZXh0ZW5z aW9ucy4gIFRoaXMgaXMgYmFzZWQgb24gdGhlIGRpc2N1c3Npb24gZnJvbQor ICAgaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA5 L21zZzAwNDcyLmh0bWwuCisKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBuX3Nz YV92YWw7CitzdGF0aWMgc2JpdG1hcCBzc2FfdG9fYmVfcHJvbW90ZWRfYml0 bWFwOworc3RhdGljIHNiaXRtYXAgc3NhX3NldHNfaGlnaGVyX2JpdHNfYml0 bWFwOworCisvKiBSZXR1cm4gdGhlIHByb21vdGVkIHR5cGUgZm9yIFRZUEUu ICAqLworc3RhdGljIHRyZWUKK2dldF9wcm9tb3RlZF90eXBlICh0cmVlIHR5 cGUpCit7CisgIHRyZWUgcHJvbW90ZWRfdHlwZTsKKyAgZW51bSBtYWNoaW5l X21vZGUgbW9kZTsKKyAgaW50IHVuczsKKyAgaWYgKFBPSU5URVJfVFlQRV9Q ICh0eXBlKQorICAgICAgfHwgIUlOVEVHUkFMX1RZUEVfUCAodHlwZSkKKyAg ICAgIHx8IFRZUEVfUFJFQ0lTSU9OICh0eXBlKSA9PSAxKQorICAgIHJldHVy biB0eXBlOworICBtb2RlID0gVFlQRV9NT0RFICh0eXBlKTsKKyNpZmRlZiBQ Uk9NT1RFX01PREUKKyAgdW5zID0gVFlQRV9TSUdOICh0eXBlKTsKKyAgUFJP TU9URV9NT0RFIChtb2RlLCB1bnMsIHR5cGUpOworI2VuZGlmCisgIHVucyA9 IFRZUEVfU0lHTiAodHlwZSk7CisgIHByb21vdGVkX3R5cGUgPSBsYW5nX2hv b2tzLnR5cGVzLnR5cGVfZm9yX21vZGUgKG1vZGUsIHVucyk7CisgIGlmIChw cm9tb3RlZF90eXBlCisgICAgICAmJiAoVFlQRV9QUkVDSVNJT04gKHByb21v dGVkX3R5cGUpID4gVFlQRV9QUkVDSVNJT04gKHR5cGUpKSkKKyAgICB0eXBl ID0gcHJvbW90ZWRfdHlwZTsKKyAgcmV0dXJuIHR5cGU7Cit9CisKKy8qIFJl dHVybiB0cnVlIGlmIHNzYSBOQU1FIGlzIGFscmVhZHkgY29uc2lkZXJlZCBm b3IgcHJvbW90aW9uLiAgKi8KK3N0YXRpYyBib29sCitzc2FfcHJvbW90ZWRf cCAodHJlZSBuYW1lKQoreworICBpZiAoVFJFRV9DT0RFIChuYW1lKSA9PSBT U0FfTkFNRSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSBT U0FfTkFNRV9WRVJTSU9OIChuYW1lKTsKKyAgICAgIGlmIChpbmRleCA8IG5f c3NhX3ZhbCkKKwlyZXR1cm4gYml0bWFwX2JpdF9wIChzc2FfdG9fYmVfcHJv bW90ZWRfYml0bWFwLCBpbmRleCk7CisgICAgfQorICByZXR1cm4gdHJ1ZTsK K30KKworCisvKiBTZXQgc3NhIE5BTUUgdG8gYmUgYWxyZWFkeSBjb25zaWRl cmVkIGZvciBwcm9tb3Rpb24uICAqLworc3RhdGljIHZvaWQKK3NldF9zc2Ff cHJvbW90ZWQgKHRyZWUgbmFtZSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAobmFt ZSkgPT0gU1NBX05BTUUpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGlu ZGV4ID0gU1NBX05BTUVfVkVSU0lPTiAobmFtZSk7CisgICAgICBpZiAoaW5k ZXggPCBuX3NzYV92YWwpCisJYml0bWFwX3NldF9iaXQgKHNzYV90b19iZV9w cm9tb3RlZF9iaXRtYXAsIGluZGV4KTsKKyAgICB9Cit9CisKKy8qIFJldHVy biBzaW5nbGUgc3VjY2Vzc29yIChleGNsdWRpbmcgRUggZWRnZSkgZm9yIGJh c2ljIGJsb2NrIEJCLiAgSWYgdGhlcmUKKyAgIGFyZSBtb3JlIHRoYW4gb25l IHN1Y2Nlc3NvcnMsIHJldHVybiBOVUxMLiAgKi8KK3N0YXRpYyBiYXNpY19i bG9jaworZ2V0X3NpbmdsZV9zdWNjZXNzb3JfYmIgKGJhc2ljX2Jsb2NrIGJi KQoreworICBlZGdlIGUsIHJlcyA9IE5VTEw7CisgIGVkZ2VfaXRlcmF0b3Ig ZWk7CisKKyAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5zdWNjcykKKyAg ICBpZiAoIShlLT5mbGFncyAmIEVER0VfRUgpKQorICAgICAgeworCWlmIChy ZXMpCisJICByZXR1cm4gTlVMTDsKKwlyZXMgPSBlOworICAgICAgfQorICBy ZXR1cm4gcmVzLT5kZXN0OworfQorCisvKiBJbnNlcnQgQ09QWV9TVE1UIGFs b25nIHRoZSBlZGdlIGZyb20gU1RNVCB0byBpdHMgc3VjY2Vzc29yLiAgKi8K K3N0YXRpYyB2b2lkCitpbnNlcnRfc3RtdF9vbl9lZGdlIChnaW1wbGUgc3Rt dCwgZ2ltcGxlIGNvcHlfc3RtdCkKK3sKKyAgZWRnZV9pdGVyYXRvciBlaTsK KyAgZWRnZSBlLCBlZGdlID0gTlVMTDsKKyAgYmFzaWNfYmxvY2sgYmIgPSBn aW1wbGVfYmIgKHN0bXQpOworCisgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBi Yi0+c3VjY3MpCisgICAgaWYgKCEoZS0+ZmxhZ3MgJiBFREdFX0VIKSkKKyAg ICAgIHsKKwlnY2NfYXNzZXJ0IChlZGdlID09IE5VTEwpOworCWVkZ2UgPSBl OworICAgICAgfQorCisgIGdjY19hc3NlcnQgKGVkZ2UpOworICBnc2lfaW5z ZXJ0X29uX2VkZ2VfaW1tZWRpYXRlIChlZGdlLCBjb3B5X3N0bXQpOworfQor CisvKiBDb252ZXJ0IGNvbnN0YW50IENTVCB0byBUWVBFLiAgKi8KK3N0YXRp YyB0cmVlCitjb252ZXJ0X2ludF9jc3QgKHRyZWUgdHlwZSwgdHJlZSBjc3Qs IHNpZ25vcCBzaWduID0gU0lHTkVEKQoreworICB3aWRlX2ludCB3aV9jb25z ID0gZm9sZF9jb252ZXJ0ICh0eXBlLCBjc3QpOworICB3aV9jb25zID0gd2k6 OmV4dCAod2lfY29ucywgVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoY3N0 KSksIHNpZ24pOworICByZXR1cm4gd2lkZV9pbnRfdG9fdHJlZSAodHlwZSwg d2lfY29ucyk7Cit9CisKKworLyogUHJvbW90ZSBjb25zdGFudHMgaW4gU1RN VCB0byBUWVBFLiAgSWYgUFJPTU9URV9DT05EX0VYUFIgaXMgdHJ1ZSwKKyBw cm9tb3RlIG9ubHkgdGhlIGNvbnN0YW50cyBpbiBjb25kaXRpb25zIHBhcnQg b2YgdGhlIENPTkRfRVhQUi4gICovCitzdGF0aWMgdm9pZAorcHJvbW90ZV9j c3RfaW5fc3RtdCAoZ2ltcGxlIHN0bXQsIHRyZWUgdHlwZSwKKwkJICAgICBi b29sIHByb21vdGVfY29uZF9leHByID0gZmFsc2UsIHNpZ25vcCBzaWduID0g U0lHTkVEKQoreworICB0cmVlIG9wOworICBzc2Ffb3BfaXRlciBpdGVyOwor ICB1c2Vfb3BlcmFuZF9wIG9wcm5kOworICBpbnQgaW5kZXg7CisgIHRyZWUg b3AwLCBvcDE7CisKKyAgaWYgKHByb21vdGVfY29uZF9leHByKQorICAgIHsK KyAgICAgIC8qIFByb21vdGUgY29uc3RhbnQgaW4gQ09ORF9FWFBSLiAgKi8K KyAgICAgIGdjY19hc3NlcnQgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0 bXQpID09IENPTkRfRVhQUik7CisgICAgICBvcCA9IGdpbXBsZV9hc3NpZ25f cmhzMSAoc3RtdCk7CisgICAgICBvcDAgPSBUUkVFX09QRVJBTkQgKG9wLCAw KTsKKyAgICAgIG9wMSA9IFRSRUVfT1BFUkFORCAob3AsIDEpOworCisgICAg ICBpZiAoVFJFRV9DT0RFIChvcDApID09IElOVEVHRVJfQ1NUKQorCW9wMCA9 IGNvbnZlcnRfaW50X2NzdCAodHlwZSwgb3AwLCBzaWduKTsKKyAgICAgIGlm IChUUkVFX0NPREUgKG9wMSkgPT0gSU5URUdFUl9DU1QpCisJb3AxID0gY29u dmVydF9pbnRfY3N0ICh0eXBlLCBvcDEsIHNpZ24pOworCisgICAgICB0cmVl IG5ld19vcCA9IGJ1aWxkMiAoVFJFRV9DT0RFIChvcCksIHR5cGUsIG9wMCwg b3AxKTsKKyAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczEgKHN0bXQsIG5l d19vcCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHN3aXRjaCAoZ2lt cGxlX2NvZGUgKHN0bXQpKQorICAgIHsKKyAgICBjYXNlIEdJTVBMRV9BU1NJ R046CisgICAgICBvcCA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisK KyAgICAgIGlmIChvcCAmJiBUUkVFX0NPREUgKG9wKSA9PSBJTlRFR0VSX0NT VCkKKwlnaW1wbGVfYXNzaWduX3NldF9yaHMxIChzdG10LCBjb252ZXJ0X2lu dF9jc3QgKHR5cGUsIG9wLCBzaWduKSk7CisgICAgICBvcCA9IGdpbXBsZV9h c3NpZ25fcmhzMiAoc3RtdCk7CisKKyAgICAgIGlmIChvcCAmJiBUUkVFX0NP REUgKG9wKSA9PSBJTlRFR0VSX0NTVCkKKwlnaW1wbGVfYXNzaWduX3NldF9y aHMyIChzdG10LCBjb252ZXJ0X2ludF9jc3QgKHR5cGUsIG9wLCBzaWduKSk7 CisgICAgICBvcCA9IGdpbXBsZV9hc3NpZ25fcmhzMyAoc3RtdCk7CisKKyAg ICAgIGlmIChvcCAmJiBUUkVFX0NPREUgKG9wKSA9PSBJTlRFR0VSX0NTVCkK KwlnaW1wbGVfYXNzaWduX3NldF9yaHMzIChzdG10LCBjb252ZXJ0X2ludF9j c3QgKHR5cGUsIG9wLCBzaWduKSk7CisgICAgICBicmVhazsKKworICAgIGNh c2UgR0lNUExFX1BISToKKwl7CisJICBncGhpICpwaGkgPSBhc19hIDxncGhp ICo+IChzdG10KTsKKwkgIEZPUl9FQUNIX1BISV9BUkcgKG9wcm5kLCBwaGks IGl0ZXIsIFNTQV9PUF9VU0UpCisJICAgIHsKKwkgICAgICBvcCA9IFVTRV9G Uk9NX1BUUiAob3BybmQpOworCSAgICAgIGluZGV4ID0gUEhJX0FSR19JTkRF WF9GUk9NX1VTRSAob3BybmQpOworCSAgICAgIGlmIChUUkVFX0NPREUgKG9w KSA9PSBJTlRFR0VSX0NTVCkKKwkJU0VUX1BISV9BUkdfREVGIChwaGksIGlu ZGV4LCBjb252ZXJ0X2ludF9jc3QgKHR5cGUsIG9wLCBzaWduKSk7CisJICAg IH0KKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgR0lNUExFX0NPTkQ6 CisJeworCSAgZ2NvbmQgKmNvbmQgPSBhc19hIDxnY29uZCAqPiAoc3RtdCk7 CisJICBvcCA9IGdpbXBsZV9jb25kX2xocyAoY29uZCk7CisKKwkgIGlmIChv cCAmJiBUUkVFX0NPREUgKG9wKSA9PSBJTlRFR0VSX0NTVCkKKwkgICAgZ2lt cGxlX2NvbmRfc2V0X2xocyAoY29uZCwgY29udmVydF9pbnRfY3N0ICh0eXBl LCBvcCwgc2lnbikpOworCSAgb3AgPSBnaW1wbGVfY29uZF9yaHMgKGNvbmQp OworCisJICBpZiAob3AgJiYgVFJFRV9DT0RFIChvcCkgPT0gSU5URUdFUl9D U1QpCisJICAgIGdpbXBsZV9jb25kX3NldF9yaHMgKGNvbmQsIGNvbnZlcnRf aW50X2NzdCAodHlwZSwgb3AsIHNpZ24pKTsKKwl9CisKKyAgICBkZWZhdWx0 OgorICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKiBDcmVhdGUgYW4gc3Nh IHdpdGggVFlQRSB0byBjb3B5IHNzYSBWQVIuICAqLworc3RhdGljIHRyZWUK K21ha2VfcHJvbW90ZWRfY29weSAodHJlZSB2YXIsIGdpbXBsZSBkZWZfc3Rt dCwgdHJlZSB0eXBlKQoreworICB0cmVlIG5ld19saHMgPSBtYWtlX3NzYV9u YW1lICh0eXBlLCBkZWZfc3RtdCk7CisgIGlmIChTU0FfTkFNRV9PQ0NVUlNf SU5fQUJOT1JNQUxfUEhJICh2YXIpKQorICAgIFNTQV9OQU1FX09DQ1VSU19J Tl9BQk5PUk1BTF9QSEkgKG5ld19saHMpID0gMTsKKyAgcmV0dXJuIG5ld19s aHM7Cit9CisKKy8qIFplcm8vc2lnbiBleHRlbmQgKGRlcGVuZGluZyBvbiB0 eXBlKSBWQVIgYW5kIHRydW5jYXRlIHRvIFdJRFRIIGJpdHMuCisgICBBc3Np Z24gdGhlIHplcm8vc2lnbiBleHRlbmRlZCB2YWx1ZSBpbiBORVdfVkFSLiAg Z2ltcGxlIHN0YXRlbWVudAorICAgdGhhdCBwZXJmb3JtcyB0aGUgemVyby9z aWduIGV4dGVuc2lvbiBpcyByZXR1cm5lZC4gICovCitzdGF0aWMgZ2ltcGxl Cit6ZXJvX3NpZ25fZXh0ZW5kX3N0bXQgKHRyZWUgbmV3X3ZhciwgdHJlZSB2 YXIsIGludCB3aWR0aCkKK3sKKyAgZ2NjX2Fzc2VydCAoVFlQRV9QUkVDSVNJ T04gKFRSRUVfVFlQRSAodmFyKSkKKwkgICAgICA9PSBUWVBFX1BSRUNJU0lP TiAoVFJFRV9UWVBFIChuZXdfdmFyKSkpOworICBnY2NfYXNzZXJ0IChUWVBF X1BSRUNJU0lPTiAoVFJFRV9UWVBFICh2YXIpKSA+IHdpZHRoKTsKKyAgZ2lt cGxlIHN0bXQ7CisKKyAgaWYgKFRZUEVfVU5TSUdORUQgKFRSRUVfVFlQRSAo bmV3X3ZhcikpKQorICAgIC8qIFplcm8gZXh0ZW5kLiAgKi8KKyAgICBzdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3ZhciwKKwkJCQlCSVRfQU5E X0VYUFIsCisJCQkJdmFyLCBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHZh ciksCisJCQkJCQkgICAgKCgxVUxMIDw8IHdpZHRoKSAtIDEpKSk7CisgIGVs c2UKKyAgICAvKiBTaWduIGV4dGVuZC4gICovCisgICAgc3RtdCA9IGdpbXBs ZV9idWlsZF9hc3NpZ24gKG5ld192YXIsCisJCQkJU0VYVF9FWFBSLAorCQkJ CXZhciwgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFICh2YXIpLCB3aWR0aCkp OworICByZXR1cm4gc3RtdDsKK30KKworCit2b2lkIGR1cGxpY2F0ZV9kZWZh dWx0X3NzYSAodHJlZSB0bywgdHJlZSBmcm9tKQoreworICBTRVRfU1NBX05B TUVfVkFSX09SX0lERU5USUZJRVIgKHRvLCBTU0FfTkFNRV9WQVIgKGZyb20p KTsKKyAgU1NBX05BTUVfSVNfREVGQVVMVF9ERUYgKHRvKSA9IFNTQV9OQU1F X0lTX0RFRkFVTFRfREVGIChmcm9tKTsKKyAgU1NBX05BTUVfREVGX1NUTVQg KHRvKSA9IFNTQV9OQU1FX0RFRl9TVE1UIChmcm9tKTsKKyAgU0VUX1NTQV9O QU1FX1ZBUl9PUl9JREVOVElGSUVSIChmcm9tLCBOVUxMX1RSRUUpOworICBT U0FfTkFNRV9JU19ERUZBVUxUX0RFRiAoZnJvbSk9IDA7CisgIFNTQV9OQU1F X0lTX0RFRkFVTFRfREVGICh0bykgPSAxOworICBTU0FfTkFNRV9JU19ERUZB VUxUX0RFRiAoZnJvbSkgPSAwOworCit9CisKKworLyogUHJvbW90ZSBkZWZp bml0aW9uIERFRiB0byBORVdfVFlQRS4gIElmIHRoZSBERUYgaXMgcmVwbGFj ZWQgYW5kIGhhcyB0bworICAgYmUgcmVsZWFzZWQsIHNldCBSRUxFQVNFX0RF Ri4gIEFsc28gcmV0dXJuIENPUFlfT0ZfREVGIHdpdGggdGhlIG9yaWdpbmFs CisgICB0eXBlIGZvciBhbnkgdXNlIHN0YXRlbWVudCB0aGF0IG5lZWRzIHRy dW5jYXRpb24uICAqLworc3RhdGljIHZvaWQKK3Byb21vdGVfZGVmaW5pdGlv biAodHJlZSBkZWYsCisJCSAgICB0cmVlIHByb21vdGVkX3R5cGUpCit7Cisg IGdpbXBsZSBkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChkZWYpOwor ICBnaW1wbGUgY29weV9zdG10ID0gTlVMTDsKKyAgYmFzaWNfYmxvY2sgYmI7 CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaTsKKyAgdHJlZSBvcmlnaW5h bF90eXBlID0gVFJFRV9UWVBFIChkZWYpOworICBncGhpICpwaGk7CisgIHRy ZWUgbmV3X2RlZjsKKyAgYm9vbCBkb19ub3RfcHJvbW90ZSA9IGZhbHNlOwor CisgIGlmIChnaW1wbGVfdnVzZSAoZGVmX3N0bXQpICE9IE5VTExfVFJFRQor ICAgICAgfHwgZ2ltcGxlX3ZkZWYgKGRlZl9zdG10KSAhPSBOVUxMX1RSRUUp CisgICAgeworICAgICAgZG9fbm90X3Byb21vdGUgPSB0cnVlOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKGRl Zl9zdG10KSkKKwl7CisJY2FzZSBHSU1QTEVfUEhJOgorCSAgICB7CisJICAg ICAgcGhpID0gYXNfYSA8Z3BoaSAqPiAoZGVmX3N0bXQpOworCSAgICAgIFRS RUVfVFlQRSAoZGVmKSA9IHByb21vdGVkX3R5cGU7CisJICAgICAgZ2ltcGxl X3BoaV9zZXRfcmVzdWx0IChwaGksIGRlZik7CisJICAgICAgU0VUX1BISV9S RVNVTFQgKHBoaSwgZGVmKTsKKwkgICAgICBTRVRfU1NBX05BTUVfVkFSX09S X0lERU5USUZJRVIgKGRlZiwgTlVMTF9UUkVFKTsKKwkgICAgICBwcm9tb3Rl X2NzdF9pbl9zdG10IChkZWZfc3RtdCwgcHJvbW90ZWRfdHlwZSk7CisJICAg ICAgYnJlYWs7CisJICAgIH0KKworCWNhc2UgR0lNUExFX0FTTToKKwkgICAg eworCSAgICAgIGdhc20gKmFzbV9zdG10ID0gYXNfYSA8Z2FzbSAqPiAoZGVm X3N0bXQpOworCSAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg Z2ltcGxlX2FzbV9ub3V0cHV0cyAoYXNtX3N0bXQpOyArK2kpCisJCXsKKwkJ ICB0cmVlIGxpbmsgPSBnaW1wbGVfYXNtX291dHB1dF9vcCAoYXNtX3N0bXQs IGkpOworCQkgIHRyZWUgb3AgPSBUUkVFX1ZBTFVFIChsaW5rKTsKKwkJICBp ZiAob3AgPT0gZGVmKQorCQkgICAgeworCQkgICAgICBuZXdfZGVmID0gY29w eV9zc2FfbmFtZSAoZGVmKTsKKwkJICAgICAgZHVwbGljYXRlX2RlZmF1bHRf c3NhIChuZXdfZGVmLCBkZWYpOworCQkgICAgICBUUkVFX1ZBTFVFIChsaW5r KSA9IG5ld19kZWY7CisJCSAgICAgIGdpbXBsZV9hc21fc2V0X291dHB1dF9v cCAoYXNtX3N0bXQsIGksIGxpbmspOworCisJCSAgICAgIFRSRUVfVFlQRSAo ZGVmKSA9IHByb21vdGVkX3R5cGU7CisJCSAgICAgIGNvcHlfc3RtdCA9IGdp bXBsZV9idWlsZF9hc3NpZ24gKGRlZiwgQ09OVkVSVF9FWFBSLAorCQkJCQkJ ICAgICAgIG5ld19kZWYsIE5VTExfVFJFRSk7CisJCSAgICAgIFNTQV9OQU1F X0RFRl9TVE1UIChkZWYpID0gY29weV9zdG10OworCQkgICAgICBnc2kgPSBn c2lfZm9yX3N0bXQgKGRlZl9zdG10KTsKKwkJICAgICAgZ3NpX2luc2VydF9h ZnRlciAoJmdzaSwgY29weV9zdG10LCBHU0lfTkVXX1NUTVQpOworCQkgICAg ICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9 CisKKwljYXNlIEdJTVBMRV9OT1A6CisJICAgIHsKKwkgICAgICBpZiAoU1NB X05BTUVfVkFSIChkZWYpID09IE5VTEwpCisJCXsKKwkJICBUUkVFX1RZUEUg KGRlZikgPSBwcm9tb3RlZF90eXBlOworCQl9CisJICAgICAgZWxzZQorCQl7 CisJCSAgLyogQ3JlYXRlIGEgcHJvbW90ZWQgdHlwZSBjb3B5IG9mIHBhcmFt ZXRlcnMuICAqLworCQkgIGJiID0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAo Y2Z1bik7CisJCSAgYmIgPSBnZXRfc2luZ2xlX3N1Y2Nlc3Nvcl9iYiAoYmIp OworCQkgIGdjY19hc3NlcnQgKGJiKTsKKwkJICBnc2kgPSBnc2lfYWZ0ZXJf bGFiZWxzIChiYik7CisJCSAgbmV3X2RlZiA9IGNvcHlfc3NhX25hbWUgKGRl Zik7CisJCSAgc2V0X3NzYV9kZWZhdWx0X2RlZiAoY2Z1biwgU1NBX05BTUVf VkFSIChkZWYpLCBuZXdfZGVmKTsKKwkJICBkdXBsaWNhdGVfZGVmYXVsdF9z c2EgKG5ld19kZWYsIGRlZik7CisJCSAgVFJFRV9UWVBFIChkZWYpID0gcHJv bW90ZWRfdHlwZTsKKwkJICBjb3B5X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNz aWduIChkZWYsIENPTlZFUlRfRVhQUiwKKwkJCQkJCSAgIG5ld19kZWYsIE5V TExfVFJFRSk7CisJCSAgU1NBX05BTUVfREVGX1NUTVQgKGRlZikgPSBjb3B5 X3N0bXQ7CisJCSAgZ3NpX2luc2VydF9iZWZvcmUgKCZnc2ksIGNvcHlfc3Rt dCwgR1NJX05FV19TVE1UKTsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9 CisKKwljYXNlIEdJTVBMRV9BU1NJR046CisJICAgIHsKKwkgICAgICBlbnVt IHRyZWVfY29kZSBjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoZGVm X3N0bXQpOworCSAgICAgIGlmIChjb2RlID09IEFSUkFZX1JFRgorCQkgIHx8 IGNvZGUgPT0gTFJPVEFURV9FWFBSCisJCSAgfHwgY29kZSA9PSBSUk9UQVRF X0VYUFIKKwkJICB8fCBjb2RlID09IFZJRVdfQ09OVkVSVF9FWFBSCisJCSAg fHwgY29kZSA9PSBCSVRfRklFTERfUkVGCisJCSAgfHwgY29kZSA9PSBSRUFM UEFSVF9FWFBSCisJCSAgfHwgY29kZSA9PSBJTUFHUEFSVF9FWFBSCisJCSAg fHwgY29kZSA9PSBSRURVQ19NQVhfRVhQUgorCQkgIHx8IGNvZGUgPT0gUkVE VUNfUExVU19FWFBSCisJCSAgfHwgY29kZSA9PSBSRURVQ19NSU5fRVhQUikK KwkJeworCQkgIGRvX25vdF9wcm9tb3RlID0gdHJ1ZTsKKwkJICBicmVhazsK KwkJfQorCisJICAgICAgaWYgKENPTlZFUlRfRVhQUl9DT0RFX1AgKGNvZGUp KQorCQl7CisJCSAgdHJlZSByaHMgPSBnaW1wbGVfYXNzaWduX3JoczEgKGRl Zl9zdG10KTsKKwkJICBpZiAoKFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUg KHJocykpID09IFRZUEVfUFJFQ0lTSU9OIChwcm9tb3RlZF90eXBlKSkKKwkJ ICAgICAgJiYgKFRZUEVfVU5TSUdORUQgKFRSRUVfVFlQRSAocmhzKSkgPT0g VFlQRV9VTlNJR05FRCAocHJvbW90ZWRfdHlwZSkpKQorCQkgICAgeworCQkg ICAgICBUUkVFX1RZUEUgKGRlZikgPSBwcm9tb3RlZF90eXBlOworCQkgICAg ICBnaW1wbGUgY29weV9zdG10ID0KKwkJCXplcm9fc2lnbl9leHRlbmRfc3Rt dCAoZGVmLCByaHMsCisJCQkJCSAgICAgICBUWVBFX1BSRUNJU0lPTiAob3Jp Z2luYWxfdHlwZSkpOworCQkgICAgICBTRVRfU1NBX05BTUVfVkFSX09SX0lE RU5USUZJRVIgKGRlZiwgTlVMTF9UUkVFKTsKKwkJICAgICAgZ3NpID0gZ3Np X2Zvcl9zdG10IChkZWZfc3RtdCk7CisJCSAgICAgIGdzaV9yZXBsYWNlICgm Z3NpLCBjb3B5X3N0bXQsIGZhbHNlKTsKKwkJICAgIH0KKwkJICBlbHNlCisJ CSAgICB7CisJCSAgICAgIGRvX25vdF9wcm9tb3RlID0gdHJ1ZTsKKwkJICAg IH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIFNFVF9TU0FfTkFNRV9W QVJfT1JfSURFTlRJRklFUiAoZGVmLCBOVUxMX1RSRUUpOworCQkgIHByb21v dGVfY3N0X2luX3N0bXQgKGRlZl9zdG10LCBwcm9tb3RlZF90eXBlKTsKKwkJ ICBUUkVFX1RZUEUgKGRlZikgPSBwcm9tb3RlZF90eXBlOworCQkgIG5ld19k ZWYgPSBjb3B5X3NzYV9uYW1lIChkZWYpOworCQkgIGdpbXBsZV9zZXRfbGhz IChkZWZfc3RtdCwgbmV3X2RlZik7CisJCSAgZ2ltcGxlIGNvcHlfc3RtdCA9 CisJCSAgICB6ZXJvX3NpZ25fZXh0ZW5kX3N0bXQgKGRlZiwgbmV3X2RlZiwK KwkJCQkJICAgVFlQRV9QUkVDSVNJT04gKG9yaWdpbmFsX3R5cGUpKTsKKwkJ ICBnc2kgPSBnc2lfZm9yX3N0bXQgKGRlZl9zdG10KTsKKwkJICBnc2lfaW5z ZXJ0X2FmdGVyICgmZ3NpLCBjb3B5X3N0bXQsIEdTSV9ORVdfU1RNVCk7CisJ CX0KKwkgICAgICBicmVhazsKKwkgICAgfQorCisJZGVmYXVsdDoKKwkgIGRv X25vdF9wcm9tb3RlID0gdHJ1ZTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisK KyAgaWYgKGRvX25vdF9wcm9tb3RlKQorICAgIHsKKyAgICAgIG5ld19kZWYg PSBjb3B5X3NzYV9uYW1lIChkZWYpOworICAgICAgU0VUX1NTQV9OQU1FX1ZB Ul9PUl9JREVOVElGSUVSIChkZWYsIE5VTExfVFJFRSk7CisgICAgICBUUkVF X1RZUEUgKGRlZikgPSBwcm9tb3RlZF90eXBlOworICAgICAgZ2ltcGxlX3Nl dF9saHMgKGRlZl9zdG10LCBuZXdfZGVmKTsKKyAgICAgIGNvcHlfc3RtdCA9 IGdpbXBsZV9idWlsZF9hc3NpZ24gKGRlZiwgQ09OVkVSVF9FWFBSLAorCQkJ CSAgICAgICBuZXdfZGVmLCBOVUxMX1RSRUUpOworICAgICAgZ3NpID0gZ3Np X2Zvcl9zdG10IChkZWZfc3RtdCk7CisgICAgICBpZiAobG9va3VwX3N0bXRf ZWhfbHAgKGRlZl9zdG10KSA+IDApCisJaW5zZXJ0X3N0bXRfb25fZWRnZSAo ZGVmX3N0bXQsIGNvcHlfc3RtdCk7CisgICAgICBlbHNlCisJZ3NpX2luc2Vy dF9hZnRlciAoJmdzaSwgY29weV9zdG10LCBHU0lfTkVXX1NUTVQpOworICAg IH0KK30KKworCisvKiBQcm9tb3RlIGFsbCB0aGUgVVNFIHdpdGggTkVXX1VT RS4gICovCitzdGF0aWMgdW5zaWduZWQgaW50Citwcm9tb3RlX2FsbF91c2Vz ICh0cmVlIHVzZSwgdHJlZSBwcm9tb3RlZF90eXBlLCB0cmVlIG9sZF90eXBl KQoreworICBnaW1wbGUgc3RtdDsKKyAgaW1tX3VzZV9pdGVyYXRvciB1aTsK KyAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpOworICB1c2Vfb3BlcmFuZF9w IG9wOworCisgIC8qIFJlcGxhY2UgYWxsIHRoZSB1c2Ugd2l0aCB0aGUgcHJv bW90ZWQgdmFyaWFibGUuICAqLworICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQg KHN0bXQsIHVpLCB1c2UpCisgICAgeworICAgICAgYm9vbCBkb19ub3RfcHJv bW90ZSA9IGZhbHNlOworICAgICAgaWYgKGdpbXBsZV92dXNlIChzdG10KSAh PSBOVUxMX1RSRUUKKwkgIHx8IGdpbXBsZV92ZGVmIChzdG10KSAhPSBOVUxM X1RSRUUpCisJZG9fbm90X3Byb21vdGUgPSB0cnVlOworICAgICAgZWxzZQor CXsKKwkgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKHN0bXQpKQorCSAgICB7CisK KwkgICAgY2FzZSBHSU1QTEVfREVCVUc6CisJCXsKKwkJICBnc2kgPSBnc2lf Zm9yX3N0bXQgKHN0bXQpOworCQkgIGdzaV9yZW1vdmUgKCZnc2ksIHRydWUp OworCQl9CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgR0lNUExFX0FTTToK KwkJeworCQkgIGdhc20gKmFzbV9zdG10ID0gYXNfYSA8Z2FzbSAqPiAoc3Rt dCk7CisJCSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnaW1wbGVf YXNtX25pbnB1dHMgKGFzbV9zdG10KTsgKytpKQorCQkgICAgeworCQkgICAg ICB0cmVlIGxpbmsgPSBnaW1wbGVfYXNtX2lucHV0X29wIChhc21fc3RtdCwg aSk7CisJCSAgICAgIHRyZWUgb3AgPSBUUkVFX1ZBTFVFIChsaW5rKTsKKwkJ ICAgICAgaWYgKG9wID09IHVzZSkKKwkJCXsKKwkJCSAgdHJlZSB0ZW1wID0g bWFrZV9wcm9tb3RlZF9jb3B5ICh1c2UsIE5VTEwsIG9sZF90eXBlKTsKKwkJ CSAgZ3NpID0gZ3NpX2Zvcl9zdG10IChzdG10KTsKKwkJCSAgZ2ltcGxlIGNv cHlfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHRlbXAsIENPTlZFUlRf RVhQUiwKKwkJCQkJCQkJICB1c2UsIE5VTExfVFJFRSk7CisJCQkgIGdzaV9p bnNlcnRfYmVmb3JlICgmZ3NpLCBjb3B5X3N0bXQsIEdTSV9ORVdfU1RNVCk7 CisJCQkgIFRSRUVfVkFMVUUgKGxpbmspID0gdGVtcDsKKwkJCSAgZ2ltcGxl X2FzbV9zZXRfaW5wdXRfb3AgKGFzbV9zdG10LCBpLCBsaW5rKTsKKwkJCSAg YnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgICBicmVhazsKKwor CSAgICBjYXNlIEdJTVBMRV9BU1NJR046CisJCXsKKwkJICBlbnVtIHRyZWVf Y29kZSBjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdCk7CisJ CSAgdHJlZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7CisJCSAg aWYgKGNvZGUgPT0gVklFV19DT05WRVJUX0VYUFIKKwkJICAgICAgfHwgY29k ZSA9PSBMUk9UQVRFX0VYUFIKKwkJICAgICAgfHwgY29kZSA9PSBSUk9UQVRF X0VYUFIKKwkJICAgICAgfHwgY29kZSA9PSBDT05TVFJVQ1RPUgorCQkgICAg ICB8fCBjb2RlID09IEJJVF9GSUVMRF9SRUYKKwkJICAgICAgfHwgY29kZSA9 PSBDT01QTEVYX0VYUFIKKwkJICAgICAgfHwgY29kZSA9PSBBU01fRVhQUgor CQkgICAgICB8fCBWRUNUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGxocykpKQor CQkgICAgeworCQkgICAgICBkb19ub3RfcHJvbW90ZSA9IHRydWU7CisJCSAg ICB9CisKKwkJICBpZiAoVFJFRV9DT0RFX0NMQVNTIChjb2RlKQorCQkgICAg ICA9PSB0Y2NfY29tcGFyaXNvbikKKwkJICAgIHsKKwkJICAgICAgaWYgKFRS RUVfVFlQRSAodXNlKSA9PSBwcm9tb3RlZF90eXBlKQorCQkJcHJvbW90ZV9j c3RfaW5fc3RtdCAoc3RtdCwgcHJvbW90ZWRfdHlwZSk7CisJCSAgICB9CisK KwkJICBpZiAoQ09OVkVSVF9FWFBSX0NPREVfUCAoY29kZSkpCisJCSAgICB7 CisJCSAgICAgIHRyZWUgbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQp OworCQkgICAgICBpZiAoKFRZUEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKGxo cykpID09IFRZUEVfUFJFQ0lTSU9OIChwcm9tb3RlZF90eXBlKSkKKwkJCSAg JiYgKFRZUEVfVU5TSUdORUQgKFRSRUVfVFlQRSAobGhzKSkgPT0gVFlQRV9V TlNJR05FRCAocHJvbW90ZWRfdHlwZSkpKQorCQkJeworCQkJICBnaW1wbGUg Y29weV9zdG10ID0KKwkJCSAgICB6ZXJvX3NpZ25fZXh0ZW5kX3N0bXQgKGxo cywgdXNlLAorCQkJCQkJICAgVFlQRV9QUkVDSVNJT04gKG9sZF90eXBlKSk7 CisJCQkgIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7CisJCQkgIGdzaV9y ZXBsYWNlICgmZ3NpLCBjb3B5X3N0bXQsIGZhbHNlKTsKKwkJCX0KKwkJICAg ICAgZWxzZSBpZiAoVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAobGhzKSkg PCBUWVBFX1BSRUNJU0lPTiAob2xkX3R5cGUpKQorCQkJeworCQkJICAvKiBk byBub3RoaW5nICovCisJCQl9CisJCSAgICAgIGVsc2UKKwkJCWRvX25vdF9w cm9tb3RlID0gdHJ1ZTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGJyZWFrOwor CisJICAgIGNhc2UgR0lNUExFX0NPTkQ6CisJCXsKKwkJICB0cmVlIHRlbXAg PSBtYWtlX3Byb21vdGVkX2NvcHkgKHVzZSwgTlVMTCwgVFJFRV9UWVBFICh1 c2UpKTsKKwkJICBnaW1wbGUgY29weV9zdG10ID0KKwkJICAgIHplcm9fc2ln bl9leHRlbmRfc3RtdCAodGVtcCwgdXNlLAorCQkJCQkgICBUWVBFX1BSRUNJ U0lPTiAob2xkX3R5cGUpKTsKKwkJICBnc2kgPSBnc2lfZm9yX3N0bXQgKHN0 bXQpOworCQkgIGdzaV9pbnNlcnRfYmVmb3JlICgmZ3NpLCBjb3B5X3N0bXQs IEdTSV9ORVdfU1RNVCk7CisKKwkJICBGT1JfRUFDSF9JTU1fVVNFX09OX1NU TVQgKG9wLCB1aSkKKwkJICAgIFNFVF9VU0UgKG9wLCB0ZW1wKTsKKwkJICBw cm9tb3RlX2NzdF9pbl9zdG10IChzdG10LCBwcm9tb3RlZF90eXBlLCBmYWxz ZSwKKwkJCQkgICAgICAgVFlQRV9TSUdOIChUUkVFX1RZUEUgKHVzZSkpKTsK KwkJICB1cGRhdGVfc3RtdCAoc3RtdCk7CisJCX0KKwkgICAgICBicmVhazsK KwkgICAgZGVmYXVsdDoKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKwor ICAgICAgaWYgKGRvX25vdF9wcm9tb3RlKQorCXsKKwkgIHRyZWUgdGVtcDsK KwkgIHRlbXAgPSBjb3B5X3NzYV9uYW1lICh1c2UpOworCSAgVFJFRV9UWVBF ICh0ZW1wKSA9IG9sZF90eXBlOworCSAgZ2ltcGxlIGNvcHlfc3RtdCA9IGdp bXBsZV9idWlsZF9hc3NpZ24gKHRlbXAsIENPTlZFUlRfRVhQUiwKKwkJCQkJ CSAgdXNlLCBOVUxMX1RSRUUpOworCSAgZ3NpID0gZ3NpX2Zvcl9zdG10IChz dG10KTsKKwkgIGdzaV9pbnNlcnRfYmVmb3JlICgmZ3NpLCBjb3B5X3N0bXQs IEdTSV9ORVdfU1RNVCk7CisJICBGT1JfRUFDSF9JTU1fVVNFX09OX1NUTVQg KG9wLCB1aSkKKwkgICAgU0VUX1VTRSAob3AsIHRlbXApOworCSAgdXBkYXRl X3N0bXQgKHN0bXQpOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisK Ky8qIFByb21vdGUgZGVmaW5pdGlvbiBvZiBOQU1FIGFuZCBhbGwgaXRzIHVz ZXMuICAqLworc3RhdGljIHVuc2lnbmVkIGludAorcHJvbW90ZV9kZWZfYW5k X3VzZXMgKHRyZWUgbmFtZSkKK3sKKyAgdHJlZSB0eXBlOworICBpZiAoVFJF RV9DT0RFIChuYW1lKSAhPSBTU0FfTkFNRQorICAgICAgfHwgUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAobmFtZSkpCisgICAgICB8fCAhSU5URUdSQUxf VFlQRV9QIChUUkVFX1RZUEUgKG5hbWUpKQorICAgICAgfHwgVkVDVE9SX1RZ UEVfUCAoVFJFRV9UWVBFIChuYW1lKSkKKyAgICAgIHx8IHNzYV9wcm9tb3Rl ZF9wIChuYW1lKQorICAgICAgfHwgKHR5cGUgPSBnZXRfcHJvbW90ZWRfdHlw ZSAoVFJFRV9UWVBFIChuYW1lKSkpID09IFRSRUVfVFlQRSAobmFtZSkpCisg ICAgcmV0dXJuIDA7CisgIHRyZWUgb2xkX3R5cGUgPSBUUkVFX1RZUEUgKG5h bWUpOworICBwcm9tb3RlX2RlZmluaXRpb24gKG5hbWUsIHR5cGUpOworICBw cm9tb3RlX2FsbF91c2VzIChuYW1lLCB0eXBlLCBvbGRfdHlwZSk7CisgIHNl dF9zc2FfcHJvbW90ZWQgKG5hbWUpOworICByZXR1cm4gMDsKK30KKworLyog UHJvbW90ZSBhbGwgdGhlIHN0bXRzIGluIHRoZSBiYXNpYyBibG9jay4gICov CitzdGF0aWMgdm9pZAorcHJvbW90ZV9hbGxfc3RtdHMgKGJhc2ljX2Jsb2Nr IGJiKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisgIHNzYV9v cF9pdGVyIGl0ZXI7CisgIHRyZWUgZGVmOworCisgIGZvciAoZ3BoaV9pdGVy YXRvciBncGkgPSBnc2lfc3RhcnRfcGhpcyAoYmIpOworICAgICAgICFnc2lf ZW5kX3AgKGdwaSk7IGdzaV9uZXh0ICgmZ3BpKSkKKyAgICB7CisgICAgICBn cGhpICpwaGkgPSBncGkucGhpICgpOworICAgICAgdXNlX29wZXJhbmRfcCBv cDsKKworICAgICAgRk9SX0VBQ0hfUEhJX0FSRyAob3AsIHBoaSwgaXRlciwg U1NBX09QX1VTRSkKKwl7CisJICBkZWYgPSBVU0VfRlJPTV9QVFIgKG9wKTsK KwkgIHByb21vdGVfZGVmX2FuZF91c2VzIChkZWYpOworCX0KKyAgICAgIGRl ZiA9IFBISV9SRVNVTFQgKHBoaSk7CisgICAgICBwcm9tb3RlX2RlZl9hbmRf dXNlcyAoZGVmKTsKKyAgICB9CisgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X2Ji IChiYik7ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkKKyAg ICB7CisgICAgICBnaW1wbGUgc3RtdCA9IGdzaV9zdG10IChnc2kpOworCisg ICAgICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5EIChkZWYsIHN0bXQsIGl0 ZXIsIFNTQV9PUF9VU0UgfCBTU0FfT1BfREVGKQorCXByb21vdGVfZGVmX2Fu ZF91c2VzIChkZWYpOworICAgIH0KK30KKworCitjbGFzcyB0eXBlX3Byb21v dGlvbl9kb21fd2Fsa2VyIDogcHVibGljIGRvbV93YWxrZXIKK3sKK3B1Ymxp YzoKKyAgdHlwZV9wcm9tb3Rpb25fZG9tX3dhbGtlciAoY2RpX2RpcmVjdGlv biBkaXJlY3Rpb24pCisgICAgOiBkb21fd2Fsa2VyIChkaXJlY3Rpb24pIHt9 CisgIHZpcnR1YWwgdm9pZCBiZWZvcmVfZG9tX2NoaWxkcmVuIChiYXNpY19i bG9jayBiYikKKyAgICB7CisgICAgICBwcm9tb3RlX2FsbF9zdG10cyAoYmIp OworICAgIH0KK307CisKKy8qIE1haW4gZW50cnkgcG9pbnQgdG8gdGhlIHBh c3MuICAqLworc3RhdGljIHVuc2lnbmVkIGludAorZXhlY3V0ZV90eXBlX3By b21vdGlvbiAodm9pZCkKK3sKKyAgbl9zc2FfdmFsID0gbnVtX3NzYV9uYW1l czsKKyAgc3NhX3RvX2JlX3Byb21vdGVkX2JpdG1hcCA9IHNiaXRtYXBfYWxs b2MgKG5fc3NhX3ZhbCk7CisgIGJpdG1hcF9jbGVhciAoc3NhX3RvX2JlX3By b21vdGVkX2JpdG1hcCk7CisgIHNzYV9zZXRzX2hpZ2hlcl9iaXRzX2JpdG1h cCA9IHNiaXRtYXBfYWxsb2MgKG5fc3NhX3ZhbCk7CisgIGJpdG1hcF9jbGVh ciAoc3NhX3NldHNfaGlnaGVyX2JpdHNfYml0bWFwKTsKKworICBjYWxjdWxh dGVfZG9taW5hbmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKKyAgLyogV2Fs ayB0aGUgQ0ZHIGluIGRvbWluYXRvciBvcmRlci4gICovCisgIHR5cGVfcHJv bW90aW9uX2RvbV93YWxrZXIgKENESV9ET01JTkFUT1JTKQorICAgIC53YWxr IChFTlRSWV9CTE9DS19QVFJfRk9SX0ZOIChjZnVuKSk7CisKKyAgc2JpdG1h cF9mcmVlIChzc2FfdG9fYmVfcHJvbW90ZWRfYml0bWFwKTsKKyAgc2JpdG1h cF9mcmVlIChzc2Ffc2V0c19oaWdoZXJfYml0c19iaXRtYXApOworICAgIGZy ZWVfZG9taW5hbmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKKyAgcmV0dXJu IDA7Cit9CisKK25hbWVzcGFjZSB7Citjb25zdCBwYXNzX2RhdGEgcGFzc19k YXRhX3R5cGVfcHJvbW90aW9uID0KK3sKKyAgR0lNUExFX1BBU1MsIC8qIHR5 cGUgKi8KKyAgInByb21vdGlvbiIsIC8qIG5hbWUgKi8KKyAgT1BUR1JPVVBf Tk9ORSwgLyogb3B0aW5mb19mbGFncyAqLworICBUVl9UUkVFX1RZUEVfUFJP TU9URSwgLyogdHZfaWQgKi8KKyAgUFJPUF9zc2EsIC8qIHByb3BlcnRpZXNf cmVxdWlyZWQgKi8KKyAgMCwgLyogcHJvcGVydGllc19wcm92aWRlZCAqLwor ICAwLCAvKiBwcm9wZXJ0aWVzX2Rlc3Ryb3llZCAqLworICAwLCAvKiB0b2Rv X2ZsYWdzX3N0YXJ0ICovCisgIChUT0RPX2NsZWFudXBfY2ZnIHwgVE9ET191 cGRhdGVfc3NhIHwgVE9ET192ZXJpZnlfYWxsKSwKK307CisKK2NsYXNzIHBh c3NfdHlwZV9wcm9tb3Rpb24gOiBwdWJsaWMgZ2ltcGxlX29wdF9wYXNzCit7 CitwdWJsaWM6CisgIHBhc3NfdHlwZV9wcm9tb3Rpb24gKGdjYzo6Y29udGV4 dCAqY3R4dCkKKyAgICA6IGdpbXBsZV9vcHRfcGFzcyAocGFzc19kYXRhX3R5 cGVfcHJvbW90aW9uLCBjdHh0KQorICB7fQorCisgIC8qIG9wdF9wYXNzIG1l dGhvZHM6ICovCisgIG9wdF9wYXNzICogY2xvbmUgKCkgeyByZXR1cm4gbmV3 IHBhc3NfdHlwZV9wcm9tb3Rpb24gKG1fY3R4dCk7IH0KKyAgdmlydHVhbCBi b29sIGdhdGUgKGZ1bmN0aW9uICopIHsgcmV0dXJuIGZsYWdfdHJlZV90eXBl X3Byb21vdGUgIT0gMDsgfQorICB2aXJ0dWFsIHVuc2lnbmVkIGludCBleGVj dXRlIChmdW5jdGlvbiAqKQorICAgIHsKKyAgICAgIHJldHVybiBleGVjdXRl X3R5cGVfcHJvbW90aW9uICgpOworICAgIH0KKworfTsgLy8gY2xhc3MgcGFz c190eXBlX3Byb21vdGlvbgorCit9IC8vIGFub24gbmFtZXNwYWNlCisKK2dp bXBsZV9vcHRfcGFzcyAqCittYWtlX3Bhc3NfdHlwZV9wcm9tb3RlIChnY2M6 OmNvbnRleHQgKmN0eHQpCit7CisgIHJldHVybiBuZXcgcGFzc190eXBlX3By b21vdGlvbiAoY3R4dCk7Cit9CisKZGlmZiAtLWdpdCBhL2djYy9wYXNzZXMu ZGVmIGIvZ2NjL3Bhc3Nlcy5kZWYKaW5kZXggNDY5MGUyMy4uZGZhOGE1YiAx MDA2NDQKLS0tIGEvZ2NjL3Bhc3Nlcy5kZWYKKysrIGIvZ2NjL3Bhc3Nlcy5k ZWYKQEAgLTI3MSw2ICsyNzEsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogCSAgTkVYVF9QQVNTIChw YXNzX3NscF92ZWN0b3JpemUpOwogICAgICAgUE9QX0lOU0VSVF9QQVNTRVMg KCkKICAgICAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl92ZWN0b3Jfc3NhKTsK KyAgICAgIE5FWFRfUEFTUyAocGFzc190eXBlX3Byb21vdGUpOwogICAgICAg TkVYVF9QQVNTIChwYXNzX2NzZV9yZWNpcHJvY2Fscyk7CiAgICAgICBORVhU X1BBU1MgKHBhc3NfcmVhc3NvYyk7CiAgICAgICBORVhUX1BBU1MgKHBhc3Nf c3RyZW5ndGhfcmVkdWN0aW9uKTsKZGlmZiAtLWdpdCBhL2djYy90aW1ldmFy LmRlZiBiL2djYy90aW1ldmFyLmRlZgppbmRleCBjZjhmMzdkLi41N2FmYThk IDEwMDY0NAotLS0gYS9nY2MvdGltZXZhci5kZWYKKysrIGIvZ2NjL3RpbWV2 YXIuZGVmCkBAIC0yNjksNiArMjY5LDcgQEAgREVGVElNRVZBUiAoVFZfR0lN UExFX1NMU1IgICAgICAgICAgICwgInN0cmFpZ2h0LWxpbmUgc3RyZW5ndGgg cmVkdWN0aW9uIikKIERFRlRJTUVWQVIgKFRWX1ZUQUJMRV9WRVJJRklDQVRJ T04gICAsICJ2dGFibGUgdmVyaWZpY2F0aW9uIikKIERFRlRJTUVWQVIgKFRW X1RSRUVfVUJTQU4gICAgICAgICAgICAsICJ0cmVlIHVic2FuIikKIERFRlRJ TUVWQVIgKFRWX0lOSVRJQUxJWkVfUlRMICAgICAgICAsICJpbml0aWFsaXpl IHJ0bCIpCitERUZUSU1FVkFSIChUVl9UUkVFX1RZUEVfUFJPTU9URSAgICAg LCAidHJlZSB0eXBlIHByb21vdGUiKQogCiAvKiBFdmVyeXRoaW5nIGVsc2Ug aW4gcmVzdF9vZl9jb21waWxhdGlvbiBub3QgaW5jbHVkZWQgYWJvdmUuICAq LwogREVGVElNRVZBUiAoVFZfRUFSTFlfTE9DQUwJICAgICAsICJlYXJseSBs b2NhbCBwYXNzZXMiKQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY2ZnLmMgYi9n Y2MvdHJlZS1jZmcuYwppbmRleCA5OWIyN2M3Li4zMzMyNjI2IDEwMDY0NAot LS0gYS9nY2MvdHJlZS1jZmcuYworKysgYi9nY2MvdHJlZS1jZmcuYwpAQCAt MzgwNSw2ICszODA1LDE4IEBAIHZlcmlmeV9naW1wbGVfYXNzaWduX2JpbmFy eSAoZ2Fzc2lnbiAqc3RtdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgfQogCisgICAgY2FzZSBTRVhUX0VYUFI6CisgICAgICB7CisJaWYgKCFJ TlRFR1JBTF9UWVBFX1AgKGxoc190eXBlKQorCSAgICB8fCAhSU5URUdSQUxf VFlQRV9QIChyaHMxX3R5cGUpCisJICAgIHx8IFRSRUVfQ09ERSAocmhzMikg IT0gSU5URUdFUl9DU1QpCisJICB7CisJICAgIGVycm9yICgiaW52YWxpZCBv cGVyYW5kcyBpbiBzZXh0IGV4cHIiKTsKKwkgICAgcmV0dXJuIHRydWU7CisJ ICB9CisJcmV0dXJuIGZhbHNlOworICAgICAgfQorCiAgICAgY2FzZSBWRUNf V0lERU5fTFNISUZUX0hJX0VYUFI6CiAgICAgY2FzZSBWRUNfV0lERU5fTFNI SUZUX0xPX0VYUFI6CiAgICAgICB7CkBAIC01MjM1LDYgKzUyNDcsNyBAQCBn aW1wbGVfdmVyaWZ5X2Zsb3dfaW5mbyAodm9pZCkKIAogCSAgaWYgKGZvdW5k X2N0cmxfc3RtdCkKIAkgICAgeworCSAgICAgIGR1bXBfYmIgKHN0ZGVyciwg Z2ltcGxlX2JiIChzdG10KSwgMCwgMCk7CiAJICAgICAgZXJyb3IgKCJjb250 cm9sIGZsb3cgaW4gdGhlIG1pZGRsZSBvZiBiYXNpYyBibG9jayAlZCIsCiAJ CSAgICAgYmItPmluZGV4KTsKIAkgICAgICBlcnIgPSAxOwpkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtaW5saW5lLmMgYi9nY2MvdHJlZS1pbmxpbmUuYwppbmRl eCA3MWQ3NWQ5Li5lMTlhYzNkIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1pbmxp bmUuYworKysgYi9nY2MvdHJlZS1pbmxpbmUuYwpAQCAtMzkxMiw2ICszOTEy LDcgQEAgZXN0aW1hdGVfb3BlcmF0b3JfY29zdCAoZW51bSB0cmVlX2NvZGUg Y29kZSwgZW5pX3dlaWdodHMgKndlaWdodHMsCiAgICAgY2FzZSBCSVRfWE9S X0VYUFI6CiAgICAgY2FzZSBCSVRfQU5EX0VYUFI6CiAgICAgY2FzZSBCSVRf Tk9UX0VYUFI6CisgICAgY2FzZSBTRVhUX0VYUFI6CiAKICAgICBjYXNlIFRS VVRIX0FORElGX0VYUFI6CiAgICAgY2FzZSBUUlVUSF9PUklGX0VYUFI6CmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1wYXNzLmggYi9nY2MvdHJlZS1wYXNzLmgK aW5kZXggMTcyYmQ4Mi4uNTMzZTRhNiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt cGFzcy5oCisrKyBiL2djYy90cmVlLXBhc3MuaApAQCAtNDI4LDYgKzQyOCw3 IEBAIGV4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2VfcGFzc19mcmUgKGdj Yzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9wYXNzICpt YWtlX3Bhc3NfY2hlY2tfZGF0YV9kZXBzIChnY2M6OmNvbnRleHQgKmN0eHQp OwogZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNzX2NvcHlfcHJv cCAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBnaW1wbGVfb3B0X3Bh c3MgKm1ha2VfcGFzc19pc29sYXRlX2Vycm9uZW91c19wYXRocyAoZ2NjOjpj b250ZXh0ICpjdHh0KTsKK2V4dGVybiBnaW1wbGVfb3B0X3Bhc3MgKm1ha2Vf cGFzc190eXBlX3Byb21vdGUgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRl cm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3NfdnJwIChnY2M6OmNvbnRl eHQgKmN0eHQpOwogZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNz X3VuY3Byb3AgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxl X29wdF9wYXNzICptYWtlX3Bhc3NfcmV0dXJuX3Nsb3QgKGdjYzo6Y29udGV4 dCAqY3R4dCk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1wcmV0dHktcHJpbnQu YyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jCmluZGV4IGNmODc1YzguLjAy YmMxMDEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXByZXR0eS1wcmludC5jCisr KyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jCkBAIC0xODEyLDYgKzE4MTIs MTQgQEAgZHVtcF9nZW5lcmljX25vZGUgKHByZXR0eV9wcmludGVyICpwcCwg dHJlZSBub2RlLCBpbnQgc3BjLCBpbnQgZmxhZ3MsCiAgICAgICB9CiAgICAg ICBicmVhazsKIAorICAgIGNhc2UgU0VYVF9FWFBSOgorICAgICAgcHBfc3Ry aW5nIChwcCwgIlNFWFRfRVhQUiA8Iik7CisgICAgICBkdW1wX2dlbmVyaWNf bm9kZSAocHAsIFRSRUVfT1BFUkFORCAobm9kZSwgMCksIHNwYywgZmxhZ3Ms IGZhbHNlKTsKKyAgICAgIHBwX3N0cmluZyAocHAsICIsICIpOworICAgICAg ZHVtcF9nZW5lcmljX25vZGUgKHBwLCBUUkVFX09QRVJBTkQgKG5vZGUsIDEp LCBzcGMsIGZsYWdzLCBmYWxzZSk7CisgICAgICBwcF9ncmVhdGVyIChwcCk7 CisgICAgICBicmVhazsKKwogICAgIGNhc2UgTU9ESUZZX0VYUFI6CiAgICAg Y2FzZSBJTklUX0VYUFI6CiAgICAgICBkdW1wX2dlbmVyaWNfbm9kZSAocHAs IFRSRUVfT1BFUkFORCAobm9kZSwgMCksIHNwYywgZmxhZ3MsCkBAIC0zNDMy LDYgKzM0NDAsOSBAQCBvcF9zeW1ib2xfY29kZSAoZW51bSB0cmVlX2NvZGUg Y29kZSkKICAgICBjYXNlIE1JTl9FWFBSOgogICAgICAgcmV0dXJuICJtaW4i OwogCisgICAgY2FzZSBTRVhUX0VYUFI6CisgICAgICByZXR1cm4gInNleHQg ZnJvbSBiaXQiOworCiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiAiPDw8 ID8/PyA+Pj4iOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYW5h bWVzLmMgYi9nY2MvdHJlZS1zc2FuYW1lcy5jCmluZGV4IDljMzlmNjUuLjA1 ZWVmMTcgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYW5hbWVzLmMKKysrIGIv Z2NjL3RyZWUtc3NhbmFtZXMuYwpAQCAtMjA5LDcgKzIwOSw4IEBAIHNldF9y YW5nZV9pbmZvICh0cmVlIG5hbWUsIGVudW0gdmFsdWVfcmFuZ2VfdHlwZSBy YW5nZV90eXBlLAogICB1bnNpZ25lZCBpbnQgcHJlY2lzaW9uID0gVFlQRV9Q UkVDSVNJT04gKFRSRUVfVFlQRSAobmFtZSkpOwogCiAgIC8qIEFsbG9jYXRl IGlmIG5vdCBhdmFpbGFibGUuICAqLwotICBpZiAocmkgPT0gTlVMTCkKKyAg aWYgKHJpID09IE5VTEwKKyAgICAgIHx8IChwcmVjaXNpb24gIT0gcmktPmdl dF9taW4oKS5nZXRfcHJlY2lzaW9uKCkpKQogICAgIHsKICAgICAgIHNpemVf dCBzaXplID0gKHNpemVvZiAocmFuZ2VfaW5mb19kZWYpCiAJCSAgICAgKyB0 cmFpbGluZ193aWRlX2ludHMgPDM+OjpleHRyYV9zaXplIChwcmVjaXNpb24p KTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZycC5jIGIvZ2NjL3RyZWUtdnJw LmMKaW5kZXggMjI1ODdkMC4uOWNlYWU4ZCAxMDA2NDQKLS0tIGEvZ2NjL3Ry ZWUtdnJwLmMKKysrIGIvZ2NjL3RyZWUtdnJwLmMKQEAgLTI0MTMsNiArMjQx Myw3IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9iaW5hcnlfZXhwcl8xICh2YWx1 ZV9yYW5nZV90ICp2ciwKICAgICAgICYmIGNvZGUgIT0gTFNISUZUX0VYUFIK ICAgICAgICYmIGNvZGUgIT0gTUlOX0VYUFIKICAgICAgICYmIGNvZGUgIT0g TUFYX0VYUFIKKyAgICAgICYmIGNvZGUgIT0gU0VYVF9FWFBSCiAgICAgICAm JiBjb2RlICE9IEJJVF9BTkRfRVhQUgogICAgICAgJiYgY29kZSAhPSBCSVRf SU9SX0VYUFIKICAgICAgICYmIGNvZGUgIT0gQklUX1hPUl9FWFBSKQpAQCAt Mjk4OSw2ICsyOTkwLDQ5IEBAIGV4dHJhY3RfcmFuZ2VfZnJvbV9iaW5hcnlf ZXhwcl8xICh2YWx1ZV9yYW5nZV90ICp2ciwKICAgICAgIGV4dHJhY3RfcmFu Z2VfZnJvbV9tdWx0aXBsaWNhdGl2ZV9vcF8xICh2ciwgY29kZSwgJnZyMCwg JnZyMSk7CiAgICAgICByZXR1cm47CiAgICAgfQorICBlbHNlIGlmIChjb2Rl ID09IFNFWFRfRVhQUikKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChyYW5n ZV9pbnRfY3N0X3AgKCZ2cjEpKTsKKyAgICAgIHVuc2lnbmVkIGludCBwcmVj ID0gdHJlZV90b191aHdpICh2cjEubWluKTsKKyAgICAgIHR5cGUgPSB2cjAu dHlwZTsKKyAgICAgIHdpZGVfaW50IHRtaW4sIHRtYXg7CisgICAgICB3aWRl X2ludCB0eXBlX21pbiwgdHlwZV9tYXg7CisgICAgICB3aWRlX2ludCBtYXlf YmVfbm9uemVybywgbXVzdF9iZV9ub256ZXJvOworCisgICAgICBnY2NfYXNz ZXJ0ICghVFlQRV9VTlNJR05FRCAoZXhwcl90eXBlKSk7CisgICAgICB0eXBl X21pbiA9IHdpOjpzaHdpICgxIDw8IChwcmVjIC0gMSksCisJCQkgICBUWVBF X1BSRUNJU0lPTiAoVFJFRV9UWVBFICh2cjAubWluKSkpOworICAgICAgdHlw ZV9tYXggPSB3aTo6c2h3aSAoKCgxIDw8IChwcmVjIC0gMSkpIC0gMSksCisJ CQkgICBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFICh2cjAubWF4KSkpOwor ICAgICAgaWYgKHplcm9fbm9uemVyb19iaXRzX2Zyb21fdnIgKGV4cHJfdHlw ZSwgJnZyMCwKKwkJCQkgICAgICZtYXlfYmVfbm9uemVybywKKwkJCQkgICAg ICZtdXN0X2JlX25vbnplcm8pKQorCXsKKwkgIEhPU1RfV0lERV9JTlQgX21h eV9iZV9ub256ZXJvID0gbWF5X2JlX25vbnplcm8udG9fdWh3aSAoKTsKKwor CSAgaWYgKF9tYXlfYmVfbm9uemVybyAmICgxIDw8IChwcmVjIC0gMSkpKQor CSAgICB7CisJICAgICAgLyogSWYgdG8tYmUtZXh0ZW5kZWQgc2lnbiBiaXQg Y2FuIGJlIG9uZS4gICovCisJICAgICAgdG1pbiA9IHR5cGVfbWluOworCSAg ICAgIHRtYXggPSBtYXlfYmVfbm9uemVybyAmIHR5cGVfbWF4OworCSAgICB9 CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBJZiB0by1iZS1leHRlbmRl ZCBzaWduIGJpdCBpcyB6ZXJvLiAgKi8KKwkgICAgICB0bWluID0gbXVzdF9i ZV9ub256ZXJvOworCSAgICAgIHRtYXggPSBtYXlfYmVfbm9uemVybzsKKwkg ICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICB0bWluID0gdHlwZV9taW47 CisJICB0bWF4ID0gdHlwZV9tYXg7CisJfQorICAgICAgdG1pbiA9IHdpOjpz ZXh0ICh0bWluLCBwcmVjKTsKKyAgICAgIHRtYXggPSB3aTo6c2V4dCAodG1h eCwgcHJlYyk7CisgICAgICBtaW4gPSB3aWRlX2ludF90b190cmVlIChleHBy X3R5cGUsIHRtaW4pOworICAgICAgbWF4ID0gd2lkZV9pbnRfdG9fdHJlZSAo ZXhwcl90eXBlLCB0bWF4KTsKKyAgICB9CiAgIGVsc2UgaWYgKGNvZGUgPT0g UlNISUZUX0VYUFIKIAkgICB8fCBjb2RlID09IExTSElGVF9FWFBSKQogICAg IHsKZGlmZiAtLWdpdCBhL2djYy90cmVlLmRlZiBiL2djYy90cmVlLmRlZgpp bmRleCA1NjU4MGFmLi41N2ExOTgxIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5k ZWYKKysrIGIvZ2NjL3RyZWUuZGVmCkBAIC03NTIsNiArNzUyLDkgQEAgREVG VFJFRUNPREUgKEJJVF9YT1JfRVhQUiwgImJpdF94b3JfZXhwciIsIHRjY19i aW5hcnksIDIpCiBERUZUUkVFQ09ERSAoQklUX0FORF9FWFBSLCAiYml0X2Fu ZF9leHByIiwgdGNjX2JpbmFyeSwgMikKIERFRlRSRUVDT0RFIChCSVRfTk9U X0VYUFIsICJiaXRfbm90X2V4cHIiLCB0Y2NfdW5hcnksIDEpCiAKKy8qICBT aWduLWV4dGVuZCBvcGVyYXRpb24uICAqLworREVGVFJFRUNPREUgKFNFWFRf RVhQUiwgInNleHRfZXhwciIsIHRjY19iaW5hcnksIDIpCisKIC8qIEFORElG IGFuZCBPUklGIGFsbG93IHRoZSBzZWNvbmQgb3BlcmFuZCBub3QgdG8gYmUg Y29tcHV0ZWQgaWYgdGhlCiAgICB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBp cyBkZXRlcm1pbmVkIGZyb20gdGhlIGZpcnN0IG9wZXJhbmQuICBBTkQsCiAg ICBPUiwgYW5kIFhPUiBhbHdheXMgY29tcHV0ZSB0aGUgc2Vjb25kIG9wZXJh bmQgd2hldGhlciBpdHMgdmFsdWUgaXMK --------------070604060601000701040301--