Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp912842lqp; Thu, 21 Mar 2024 22:23:18 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWfbY65eHpBk+ipGYmcECJalkx0HpwcUdUecwoSrdnA9SmYwEvlygjkw+XCh1D3hBRPLSWtn00A3wVHeL3nle/2QvSU1uOIANqB3YXCjQ== X-Google-Smtp-Source: AGHT+IEv5ggsOvA0JSm6BL5Xv2JndLAxxocdx37endUGiBnAsCPvrsarLRTy+FIZZzMf8Ev9N/eq X-Received: by 2002:a05:6a20:3107:b0:1a3:682a:da31 with SMTP id 7-20020a056a20310700b001a3682ada31mr1490231pzf.26.1711084997766; Thu, 21 Mar 2024 22:23:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711084997; cv=pass; d=google.com; s=arc-20160816; b=PywxGtAIoLMdU825BZKN33Ld+d/kiUcfZrn2O/POSTZiVMyUvXIDaKjv9PpYwwK5iG QL3UUTyLe5cYGdegoHdffzFVHnWD1GGnYM3yjuf8JF+xCO1MY56fFe9b2cG+7w5Vpqq4 A5x09QDV4V28pkAKnuV/ywwTRpuC0By898PaIyIdl8HCsoD2C7mQ4sZpwBTgNtpvwMV7 T/0m/94mDpU5Op0ph+RRkYqR5R7kEcORYzHXvsurv6w+XSuVhIrOMvgZTiAkguIiusUY ZjPvvbvH92PNuZrhzQHRysZ7zzB/y2wl4wwqDvlUvbZ53QuNbz+51xN/Mp/hmYQH3ABt BBzQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:content-id:user-agent:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from; bh=EfdvSxgR/JXPpMlJuUCKRhnzVupUC18ILptH7Z4qIAI=; fh=h6GWTeCiRfn07iCP1/x4d3jenmB/0yOIo6BM2boD+Uo=; b=W3TBbst292AYhoxEShAbVAt3Ndftqm6hx/kNp/I1DrJn6zQ+jLgpKVuPCnAFeIZ51K FB4HisiWFtIho/EZFmeUHsqrEwVAiU71TTmQrErT9Zw6rnTo22lSzVIwD4uevQr1ylXV nOcIY1XEeUTSnWWlkkEvqIxPIpErl+DdhSamq3Ul1p5YOiRzSRkxj67VCL87MA3odtvV oJTRq+2yqs74cq5JhWIVQ1qnweqhX+plf4Qw+u7Yny4NA2Jkiuf8ijQjgfSkhD5EDyiK 70UcNm7V4Wx2nfTZrCGlTLVmOgQkEleXZNqcK4PA8bM4IW7La+yQG9xDxqxqmYtiBpyH WhPw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=realtek.com); spf=pass (google.com: domain of linux-wireless+bounces-5134-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-wireless+bounces-5134-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id nu7-20020a17090b1b0700b0029bc68d222dsi5308727pjb.124.2024.03.21.22.23.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Mar 2024 22:23:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless+bounces-5134-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=realtek.com); spf=pass (google.com: domain of linux-wireless+bounces-5134-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-wireless+bounces-5134-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 40223B23131 for ; Fri, 22 Mar 2024 05:23:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B023A8BF9; Fri, 22 Mar 2024 05:23:09 +0000 (UTC) X-Original-To: linux-wireless@vger.kernel.org Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B27A28BE8 for ; Fri, 22 Mar 2024 05:23:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=211.75.126.72 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711084989; cv=none; b=fRpsGuyz8DWe4R1RYlGcxvbTjT1+aajZWkdZbbcgFs2L0Wtj+xdkMBuupWotbunIh7m52FeG8uyywgChv4jnXtwe0cBiLTNH42bKCqB7kbUsNXePyVXJmhfyvePrx/DGZGMbonfxwnX2X6zmZGPU+hBjA8eYVho4/W+5NcxmXnI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711084989; c=relaxed/simple; bh=EfdvSxgR/JXPpMlJuUCKRhnzVupUC18ILptH7Z4qIAI=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=Vq/lGuxGCaITuVGKZ8RkBi1J2Yk0e3bsT9gHZx59DKlc1oDAhxbZEZUr9gEVhE5NIdkR/rKIriA5lZWVJlVVDy56hS1IAQx3rvUaDfMv30+QYNR2lHpBwgp9MhjRV+Afg9lP0kOwPUalFtrF/vDcl4mv5mpvf2fc14kviViY9jE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=realtek.com; spf=pass smtp.mailfrom=realtek.com; arc=none smtp.client-ip=211.75.126.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=realtek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=realtek.com X-SpamFilter-By: ArmorX SpamTrap 5.78 with qID 42M5MZrkC1482486, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.95/5.92) with ESMTPS id 42M5MZrkC1482486 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 22 Mar 2024 13:22:35 +0800 Received: from RTEXDAG01.realtek.com.tw (172.21.6.100) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 22 Mar 2024 13:22:35 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXDAG01.realtek.com.tw (172.21.6.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 22 Mar 2024 13:22:35 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::4c42:f80:bcc2:d00f]) by RTEXMBS04.realtek.com.tw ([fe80::4c42:f80:bcc2:d00f%5]) with mapi id 15.01.2507.035; Fri, 22 Mar 2024 13:22:35 +0800 From: Ping-Ke Shih To: "linux-wireless@vger.kernel.org" , "rtl8821cerfe2@gmail.com" CC: "Larry.Finger@lwfinger.net" , "s.l-h@gmx.de" , "chewitt@libreelec.tv" Subject: Re: [PATCH v3 06/12] wifi: rtlwifi: Add rtl8192du/phy.{c,h} Thread-Topic: [PATCH v3 06/12] wifi: rtlwifi: Add rtl8192du/phy.{c,h} Thread-Index: AQHaev4zJcEdGzXhVESOip6vGkfV17FCtX+A Date: Fri, 22 Mar 2024 05:22:34 +0000 Message-ID: <59596a57735c713a135ec64b05b8031ad9149421.camel@realtek.com> References: <7f4b3309-1580-48f3-9426-29f1eb4052fd@gmail.com> <367ae147-3f2d-4ecc-989f-62fd7d82ebfc@gmail.com> In-Reply-To: <367ae147-3f2d-4ecc-989f-62fd7d82ebfc@gmail.com> Accept-Language: en-US, zh-TW Content-Language: zh-TW user-agent: Evolution 3.36.1-2 Content-Type: text/plain; charset="utf-8" Content-ID: <27EC47C1CC8C9B459F1B697E42546CBE@realtek.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gV2VkLCAyMDI0LTAzLTIwIGF0IDIxOjM4ICswMjAwLCBCaXR0ZXJibHVlIFNtaXRoIHdyb3Rl Og0KPiANCj4gVGhlc2UgY29udGFpbiBtb3N0bHkgdGhlIGNhbGlicmF0aW9uIGFuZCBjaGFubmVs IHN3aXRjaGluZyByb3V0aW5lcw0KPiBmb3IgUlRMODE5MkRVLg0KPiANCj4gU2lnbmVkLW9mZi1i eTogQml0dGVyYmx1ZSBTbWl0aCA8cnRsODgyMWNlcmZlMkBnbWFpbC5jb20+DQo+IA0KDQpQbGVh c2UgZml4IHRoZXNlIG9uZXM6IA0KDQpDSEVDSzogQmxhbmsgbGluZXMgYXJlbid0IG5lY2Vzc2Fy eSBiZWZvcmUgYSBjbG9zZSBicmFjZSAnfScNCiMxMTU3OiBGSUxFOiBkcml2ZXJzL25ldC93aXJl bGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODE5MmR1L3BoeS5jOjExMzk6DQorDQorCX0NCg0KQ0hF Q0s6IEJsYW5rIGxpbmVzIGFyZW4ndCBuZWNlc3NhcnkgYmVmb3JlIGEgY2xvc2UgYnJhY2UgJ30n DQojMTMwMzogRklMRTogZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDgx OTJkdS9waHkuYzoxMjg1Og0KKw0KKwl9DQoNCkNIRUNLOiBCbGFuayBsaW5lcyBhcmVuJ3QgbmVj ZXNzYXJ5IGJlZm9yZSBhIGNsb3NlIGJyYWNlICd9Jw0KIzI3MDI6IEZJTEU6IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9ydGw4MTkyZHUvcGh5LmM6MjY4NDoNCisNCisJCX0N Cg0KPiAtLS0NCj4gIC4uLi93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODE5MmR1L3BoeS5j ICB8IDMwNTEgKysrKysrKysrKysrKysrKysNCj4gIC4uLi93aXJlbGVzcy9yZWFsdGVrL3J0bHdp ZmkvcnRsODE5MmR1L3BoeS5oICB8ICAgMzIgKw0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAzMDgzIGlu c2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9y ZWFsdGVrL3J0bHdpZmkvcnRsODE5MmR1L3BoeS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDgxOTJkdS9waHkuaA0KPiANCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9ydGw4MTky ZHUvcGh5LmMNCj4gYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODE5 MmR1L3BoeS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4u NzYyMGZjNmFiMjgxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvcmVhbHRlay9ydGx3aWZpL3J0bDgxOTJkdS9waHkuYw0KPiBAQCAtMCwwICsxLDMwNTEgQEAN Cg0KWy4uLl0NCg0KPiArDQo+ICtzdGF0aWMgdTMyIHJmX3JlZ19mb3JfNWdfc3djaG5sX25vcm1h bFtNQVhfUkZfSU1SX0lOREVYX05PUk1BTF0gPSB7DQoNCnN0YXRpYyBjb25zdCBmb3IgdGhpcyBh bmQgZXZlcnkgdGFibGUgYmVsb3cuIA0KDQo+ICsgICAgICAgMCwgMHgyZiwgMHgzMCwgMHgzMSwg MHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgwDQo+ICt9 Ow0KPiArDQo+ICtzdGF0aWMgdTggcmZfcmVnX2Zvcl9jX2N1dF81Z1tSRl9SRUdfTlVNX0ZPUl9D X0NVVF81R10gPSB7DQo+ICsgICAgICAgUkZfU1lOX0cxLCBSRl9TWU5fRzIsIFJGX1NZTl9HMywg UkZfU1lOX0c0LCBSRl9TWU5fRzUsIFJGX1NZTl9HNg0KPiArfTsNCj4gKw0KPiArc3RhdGljIHU4 IHJmX3JlZ19mb3JfY19jdXRfMmdbUkZfUkVHX05VTV9GT1JfQ19DVVRfMkddID0gew0KPiArICAg ICAgIFJGX1NZTl9HMSwgUkZfU1lOX0cyLCBSRl9TWU5fRzMsIFJGX1NZTl9HNywgUkZfU1lOX0c4 DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgdTggcmZfZm9yX2NfY3V0XzVnX2ludGVybmFsX3BhW1JG X1JFR19OVU1fRk9SX0NfQ1VUXzVHX0lOVEVSTkFMUEFdID0gew0KPiArICAgICAgIDB4MEIsIDB4 NDgsIDB4NDksIDB4NEIsIDB4MDMsIDB4MDQsIDB4MEUNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB1 MzIgcmZfcmVnX21hc2tfZm9yX2NfY3V0XzJnW1JGX1JFR19OVU1fRk9SX0NfQ1VUXzJHXSA9IHsN Cj4gKyAgICAgICBCSVQoMTkpIHwgQklUKDE4KSB8IEJJVCgxNykgfCBCSVQoMTQpIHwgQklUKDEp LA0KPiArICAgICAgIEJJVCgxMCkgfCBCSVQoOSksDQo+ICsgICAgICAgQklUKDE4KSB8IEJJVCgx NykgfCBCSVQoMTYpIHwgQklUKDEpLA0KPiArICAgICAgIEJJVCgyKSB8IEJJVCgxKSwNCj4gKyAg ICAgICBCSVQoMTUpIHwgQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKQ0KPiAr fTsNCj4gKw0KPiArc3RhdGljIHU4IHJmX2NobmxfNWdbUkZfQ0hOTF9OVU1fNUddID0gew0KPiAr ICAgICAgIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwNCj4g KyAgICAgICAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIHU4IHJmX2NobmxfNWdfNDBtW1JGX0NITkxfTlVNXzVHXzQwTV0gPSB7DQo+ ICsgICAgICAgMzgsIDQyLCA0NiwgNTAsIDU0LCA1OCwgNjIsIDEwMiwgMTA2LCAxMTAsIDExNCwN Cj4gKyAgICAgICAxMTgsIDEyMiwgMTI2LCAxMzAsIDEzNCwgMTM4DQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgdTMyIHJmX3JlZ19wcmFtX2NfNWdbNV1bUkZfUkVHX05VTV9GT1JfQ19DVVRfNUddID0g ew0KPiArICAgICAgIHsweEU0M0JFLCAweEZDNjM4LCAweDc3QzBBLCAweERFNDcxLCAweGQ3MTEw LCAweDhFQjA0fSwNCj4gKyAgICAgICB7MHhFNDNCRSwgMHhGQzA3OCwgMHhGN0MxQSwgMHhFMEM3 MSwgMHhENzU1MCwgMHhBRUIwNH0sDQo+ICsgICAgICAgezB4RTQzQkYsIDB4RkYwMzgsIDB4RjdD MEEsIDB4REU0NzEsIDB4RTU1NTAsIDB4QUVCMDR9LA0KPiArICAgICAgIHsweEU0M0JGLCAweEZG MDc5LCAweEY3QzFBLCAweERFNDcxLCAweEU1NTUwLCAweEFFQjA0fSwNCj4gKyAgICAgICB7MHhF NDNCRiwgMHhGRjAzOCwgMHhGN0MxQSwgMHhERTQ3MSwgMHhkNzU1MCwgMHhBRUIwNH0NCj4gK307 DQo+ICsNCj4gK3N0YXRpYyB1MzIgcmZfcmVnX3BhcmFtX2Zvcl9jX2N1dF8yZ1szXVtSRl9SRUdf TlVNX0ZPUl9DX0NVVF8yR10gPSB7DQo+ICsgICAgICAgezB4NjQzQkMsIDB4RkMwMzgsIDB4NzdD MUEsIDB4NDEyODksIDB4MDE4NDB9LA0KPiArICAgICAgIHsweDY0M0JDLCAweEZDMDM4LCAweDA3 QzFBLCAweDQxMjg5LCAweDAxODQwfSwNCj4gKyAgICAgICB7MHgyNDNCQywgMHhGQzQzOCwgMHgw N0MxQSwgMHg0MTI4QiwgMHgwRkM0MX0NCj4gK307DQo+ICsNCj4gK3N0YXRpYyB1MzIgcmZfc3lu X2c0X2Zvcl9jX2N1dF8yZyA9IDB4RDFDMzEgJiAweDdGRjsNCj4gKw0KPiArc3RhdGljIHUzMiBy Zl9wcmFtX2NfNWdfaW50X3BhWzNdW1JGX1JFR19OVU1fRk9SX0NfQ1VUXzVHX0lOVEVSTkFMUEFd ID0gew0KPiArICAgICAgIHsweDAxYTAwLCAweDQwNDQzLCAweDAwZWI1LCAweDg5YmVjLCAweDk0 YTEyLCAweDk0YTEyLCAweDk0YTEyfSwNCj4gKyAgICAgICB7MHgwMTgwMCwgMHhjMDQ0MywgMHgw MDczMCwgMHg4OTZlZSwgMHg5NGE1MiwgMHg5NGE1MiwgMHg5NGE1Mn0sDQo+ICsgICAgICAgezB4 MDE4MDAsIDB4YzA0NDMsIDB4MDA3MzAsIDB4ODk2ZWUsIDB4OTRhMTIsIDB4OTRhMTIsIDB4OTRh MTJ9DQo+ICt9Ow0KPiArDQoNClsuLi5dDQoNCg0KPiArLyogVG8gYXZvaWQgbWlzd3JpdGUgUmVn MHg4MDAgZm9yIDkyRCAqLw0KPiArc3RhdGljIHZvaWQgcnRsOTJkX3BoeV9zZXRfYmJfcmVnXzFi eXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSkNCj4gK3sN Cj4gKyAgICAgICBzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7DQo+ICsg ICAgICAgdTMyIG9yaWdpbmFsdmFsdWUsIGJpdHNoaWZ0LCBvZmZzZXQgPSAwOw0KPiArICAgICAg IHU4IHZhbHVlID0gMDsNCg0KTm8gbmVlZCBpbml0aWFsaXpvciBvZiBvZmZzZXQgYW5kIHZhbHVl Lg0KDQo+ICsNCj4gKyAgICAgICAvKiBCaXRNYXNrIG9ubHkgc3VwcG9ydCBiaXQwfmJpdDcgb3Ig Yml0OH5iaXQxNSwgYml0MTZ+Yml0MjMsDQo+ICsgICAgICAgICogYml0MjR+Yml0MzEsIHNob3Vs ZCBiZSBpbiAxIGJ5dGUgc2NhbGU7DQo+ICsgICAgICAgICovDQo+ICsgICAgICAgYml0c2hpZnQg PSBjYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOw0KPiArICAgICAgIG9mZnNldCA9IGJpdHNo aWZ0IC8gODsNCj4gKw0KPiArICAgICAgIG9yaWdpbmFsdmFsdWUgPSBydGxfcmVhZF9kd29yZChy dGxwcml2LCByZWdhZGRyKTsNCj4gKyAgICAgICBkYXRhID0gKG9yaWdpbmFsdmFsdWUgJiAofmJp dG1hc2spKSB8ICgoZGF0YSA8PCBiaXRzaGlmdCkgJiBiaXRtYXNrKTsNCj4gKw0KPiArICAgICAg IHZhbHVlID0gKHU4KShkYXRhID4+ICg4ICogb2Zmc2V0KSk7DQoNCk5vIG5lZWQgY2FzdGluZyBv ZiB1OA0KDQo+ICsNCj4gKyAgICAgICBydGxfd3JpdGVfYnl0ZShydGxwcml2LCByZWdhZGRyICsg b2Zmc2V0LCB2YWx1ZSk7DQo+ICt9DQo+ICsNCg0KWy4uLl0NCg0KDQo+ICtzdGF0aWMgdm9pZCBy dGw5MmRfcGh5X3N3aXRjaF93aXJlbGVzc2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4 IGJhbmQpDQo+ICt7DQo+IA0KWy4uLl0NCg0KPiArICAgICAgIGlmIChydGxoYWwtPmN1cnJlbnRf YmFuZHR5cGUgPT0gQkFORF9PTl8yXzRHKSB7DQo+ICsgICAgICAgICAgICAgICB2YWx1ZTggPSBy dGxfcmVhZF9ieXRlKHJ0bHByaXYsIChydGxoYWwtPmludGVyZmFjZWluZGV4ID09DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIDAgPyBSRUdfTUFDMCA6IFJFR19NQUMxKSk7DQo+ICsgICAgICAg ICAgICAgICB2YWx1ZTggfD0gQklUKDEpOw0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5 dGUocnRscHJpdiwgKHJ0bGhhbC0+aW50ZXJmYWNlaW5kZXggPT0NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgMCA/IFJFR19NQUMwIDogUkVHX01BQzEpLCB2YWx1ZTgpOw0KDQpUaGlzIHdpbGwg YmUgY2xlYXJlcjogDQoNCgl1MzIgcmVnID0gcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9PSAwID8g UkVHX01BQzAgOiBSRUdfTUFDMTsNCg0KCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0g QkFORF9PTl8yXzRHKSB7DQoJCXZhbHVlOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwJcmVnKTsN CgkJdmFsdWU4IHw9IEJJVCgxKTsNCgkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcmVnLCB2YWx1 ZTgpOw0KCX0gZWxzZSB7DQoJCXZhbHVlOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgcmVnKTsN CgkJdmFsdWU4ICY9ICh+QklUKDEpKTsNCgkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcmVnLCB2 YWx1ZTgpOw0KCX0NCg0KDQoNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAg dmFsdWU4ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAocnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9 PQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAwID8gUkVHX01BQzAgOiBSRUdfTUFDMSkpOw0K PiArICAgICAgICAgICAgICAgdmFsdWU4ICY9ICh+QklUKDEpKTsNCg0Kbm8gbmVlZCBwYXJlbnRo ZXNpcyANCg0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgKHJ0bGhh bC0+aW50ZXJmYWNlaW5kZXggPT0NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgMCA/IFJFR19N QUMwIDogUkVHX01BQzEpLCB2YWx1ZTgpOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBtZGVsYXko MSk7DQo+ICsgICAgICAgcnRsX2RiZyhydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAiPD09 U3dpdGNoIEJhbmQgT0tcbiIpOw0KPiArfQ0KPiArDQo+IA0KDQpbLi4uXQ0KDQoNCj4gK3N0YXRp YyB2b2lkIF9ydGw5MmRfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg bG9uZyByZXN1bHRbXVs4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHU4IHQsIGJvb2wgaXMydCkNCj4gK3sNCj4gKyAgICAgICBzdGF0aWMgdTMyIGFkZGFfcmVnW0lR S19BRERBX1JFR19OVU1dID0gew0KPiArICAgICAgICAgICAgICAgUkZQR0EwX1hDRF9TV0lUQ0hD T05UUk9MLCBSQkxVRV9UT09USCwgUlJYX1dBSVRfQ0NBLA0KPiArICAgICAgICAgICAgICAgUlRY X0NDS19SRk9OLCBSVFhfQ0NLX0JCT04sIFJUWF9PRkRNX1JGT04sIFJUWF9PRkRNX0JCT04sDQo+ ICsgICAgICAgICAgICAgICBSVFhfVE9fUlgsIFJUWF9UT19UWCwgUlJYX0NDSywgUlJYX09GRE0s IFJSWF9XQUlUX1JJRlMsDQo+ICsgICAgICAgICAgICAgICBSUlhfVE9fUlgsIFJTVEFOREJZLCBS U0xFRVAsIFJQTVBEX0FOQUVODQo+ICsgICAgICAgfTsNCj4gKyAgICAgICBzdGF0aWMgdTMyIGlx a19tYWNfcmVnW0lRS19NQUNfUkVHX05VTV0gPSB7DQo+ICsgICAgICAgICAgICAgICBSRUdfVFhQ QVVTRSwgUkVHX0JDTl9DVFJMLCBSRUdfQkNOX0NUUkxfMSwgUkVHX0dQSU9fTVVYQ0ZHDQo+ICsg ICAgICAgfTsNCj4gKyAgICAgICBzdGF0aWMgdTMyIGlxa19iYl9yZWdbSVFLX0JCX1JFR19OVU1d ID0gew0KPiArICAgICAgICAgICAgICAgUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXLCBSRlBHQTBf WEFfUkZJTlRFUkZBQ0VPRSwNCj4gKyAgICAgICAgICAgICAgIFJGUEdBMF9YQl9SRklOVEVSRkFD RU9FLCBST0ZETTBfVFJNVVhQQVIsDQo+ICsgICAgICAgICAgICAgICBSRlBHQTBfWENEX1JGSU5U RVJGQUNFU1csIFJPRkRNMF9UUlhQQVRIRU5BQkxFLA0KPiArICAgICAgICAgICAgICAgUkZQR0Ew X1JGTU9ELCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSNCwNCj4gKyAgICAgICAgICAgICAgIFJPRkRN MF9YQUFHQ0NPUkUxLCBST0ZETTBfWEJBR0NDT1JFMQ0KPiArICAgICAgIH07DQoNCg0Kc3RhdGlj IGNvbnN0DQoNClsuLi5dDQoNCg0KPiArc3RhdGljIHZvaWQgX3J0bDkyZF9waHlfaXFfY2FsaWJy YXRlXzVnX25vcm1hbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJlc3VsdFtdWzhdLCB1OCB0KQ0K PiArew0KPiArICAgICAgIHN0YXRpYyB1MzIgYWRkYV9yZWdbSVFLX0FEREFfUkVHX05VTV0gPSB7 DQo+ICsgICAgICAgICAgICAgICBSRlBHQTBfWENEX1NXSVRDSENPTlRST0wsIFJCTFVFX1RPT1RI LCBSUlhfV0FJVF9DQ0EsDQo+ICsgICAgICAgICAgICAgICBSVFhfQ0NLX1JGT04sIFJUWF9DQ0tf QkJPTiwgUlRYX09GRE1fUkZPTiwgUlRYX09GRE1fQkJPTiwNCj4gKyAgICAgICAgICAgICAgIFJU WF9UT19SWCwgUlRYX1RPX1RYLCBSUlhfQ0NLLCBSUlhfT0ZETSwgUlJYX1dBSVRfUklGUywNCj4g KyAgICAgICAgICAgICAgIFJSWF9UT19SWCwgUlNUQU5EQlksIFJTTEVFUCwgUlBNUERfQU5BRU4N Cj4gKyAgICAgICB9Ow0KPiArICAgICAgIHN0YXRpYyB1MzIgaXFrX21hY19yZWdbSVFLX01BQ19S RUdfTlVNXSA9IHsNCj4gKyAgICAgICAgICAgICAgIFJFR19UWFBBVVNFLCBSRUdfQkNOX0NUUkws IFJFR19CQ05fQ1RSTF8xLCBSRUdfR1BJT19NVVhDRkcNCj4gKyAgICAgICB9Ow0KPiArICAgICAg IHN0YXRpYyB1MzIgaXFrX2JiX3JlZ1tJUUtfQkJfUkVHX05VTV0gPSB7DQo+ICsgICAgICAgICAg ICAgICBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1csIFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FLA0K PiArICAgICAgICAgICAgICAgUkZQR0EwX1hCX1JGSU5URVJGQUNFT0UsIFJPRkRNMF9UUk1VWFBB UiwNCj4gKyAgICAgICAgICAgICAgIFJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VTVywgUk9GRE0wX1RS WFBBVEhFTkFCTEUsDQo+ICsgICAgICAgICAgICAgICBSRlBHQTBfUkZNT0QsIFJGUEdBMF9BTkFM T0dQQVJBTUVURVI0LA0KPiArICAgICAgICAgICAgICAgUk9GRE0wX1hBQUdDQ09SRTEsIFJPRkRN MF9YQkFHQ0NPUkUxDQo+ICsgICAgICAgfTsNCg0Kc3RhdGljIGNvbnN0DQoNCg0KWy4uLl0NCg0K DQoNCg0KPiArc3RhdGljIHZvaWQgX3J0bDkyZF9waHlfcmVsb2FkX2xja19zZXR0aW5nKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBy dGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsNCj4gKyAgICAgICB1OCBlcmZwYXRoID0g cnRscHJpdi0+cnRsaGFsLmN1cnJlbnRfYmFuZHR5cGUgPT0NCj4gKyAgICAgICAgICAgICAgIEJB TkRfT05fNUcgPyBSRjkwX1BBVEhfQSA6DQo+ICsgICAgICAgICAgICAgICBJU185MkRfU0lOR0xF UEhZKHJ0bHByaXYtPnJ0bGhhbC52ZXJzaW9uKSA/DQo+ICsgICAgICAgICAgICAgICBSRjkwX1BB VEhfQiA6IFJGOTBfUEFUSF9BOw0KDQoNCgl1OCBlcmZwYXRoID0gcnRscHJpdi0+cnRsaGFsLmN1 cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RyA/IFJGOTBfUEFUSF9BIDoNCgkJSVNfOTJEX1NJ TkdMRVBIWShydGxwcml2LT5ydGxoYWwudmVyc2lvbikgPyBSRjkwX1BBVEhfQiA6IFJGOTBfUEFU SF9BOw0KDQpvcg0KDQoJdTggZXJmcGF0aCA9DQoJCXJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2Jh bmR0eXBlID09IEJBTkRfT05fNUcgPyBSRjkwX1BBVEhfQSA6DQoJCUlTXzkyRF9TSU5HTEVQSFko cnRscHJpdi0+cnRsaGFsLnZlcnNpb24pID8gUkY5MF9QQVRIX0IgOiBSRjkwX1BBVEhfQTsNCg0K DQo+ICsgICAgICAgYm9vbCBibmVlZF9wb3dlcmRvd25fcmFkaW8gPSBmYWxzZTsNCj4gKyAgICAg ICB1MzIgdTR0bXAgPSAwLCB1NHJlZ3ZhbHVlID0gMDsNCg0Kbm8gbmVlZCBpbml0aWFsaXpvcnMg DQoNCg0KWy4uLl0NCg0KPiArc3RhdGljIHZvaWQgX3J0bDkyZF9waHlfbGNfY2FsaWJyYXRlX3N3 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGlzMnQpDQo+ICt7DQo+ICsgICAgICAgc3Ry dWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOw0KPiArICAgICAgIHN0cnVjdCBy dGxfaGFsICpydGxoYWwgPSAmcnRscHJpdi0+cnRsaGFsOw0KPiArICAgICAgIHUzMiBjdXJ2ZWNv dW50X3ZhbFtDVl9DVVJWRV9DTlQgKiAyXSA9IHswfTsNCg0KZG8gbWVtc2V0KCkgb24gdGhpcyBi ZWxvdywgbm8gbmVlZCB0byBpbml0aWFsaXplIGl0IGhlcmUuDQpBbHNvLCBpZiB5b3UgbmVlZCwg anVzdCAnPSB7fScuIA0KDQo+ICsgICAgICAgdTE2IHRpbWVvdXQgPSA4MDAsIHRpbWVjb3VudCA9 IDA7DQo+ICsgICAgICAgdTMyIHU0dG1wLCBvZmZzZXQsIHJmX3N5bl9nNFsyXTsNCj4gKyAgICAg ICB1OCB0bXByZWcsIGluZGV4LCByZl9tb2RlWzJdOw0KPiArICAgICAgIHU4IHBhdGggPSBpczJ0 ID8gMiA6IDE7DQo+ICsgICAgICAgdTggaTsNCj4gKw0KPiArICAgICAgIC8qIENoZWNrIGNvbnRp bnVvdXMgVFggYW5kIFBhY2tldCBUWCAqLw0KPiArICAgICAgIHRtcHJlZyA9IHJ0bF9yZWFkX2J5 dGUocnRscHJpdiwgMHhkMDMpOw0KPiArICAgICAgIC8qIGlmIERlYWwgd2l0aCBjb250aXN1b3Vz IFRYIGNhc2UsIGRpc2FibGUgYWxsIGNvbnRpbnVvdXMgVFggKi8NCj4gKyAgICAgICAvKiBpZiBE ZWFsIHdpdGggUGFja2V0IFRYIGNhc2UsIGJsb2NrIGFsbCBxdWV1ZXMgKi8NCj4gKyAgICAgICBp ZiAoKHRtcHJlZyAmIDB4NzApICE9IDApDQo+ICsgICAgICAgICAgICAgICBydGxfd3JpdGVfYnl0 ZShydGxwcml2LCAweGQwMywgdG1wcmVnICYgMHg4Rik7DQo+ICsgICAgICAgZWxzZQ0KPiArICAg ICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4RkYpOw0K DQphZGRpbmcgcHJvcGVyIGJsYW5rIGxpbmUgd2lsbCBtYWtlIGNvZGUgbW9yZSByZWFkYWJsZS4N Cg0KPiArICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9BTkFMT0dQQVJBTUVURVI0LCAw eEYwMDAwMCwgMHgwRik7DQo+ICsgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGF0aDsg aW5kZXgrKykgew0KPiArICAgICAgICAgICAgICAgLyogMS4gUmVhZCBvcmlnaW5hbCBSRiBtb2Rl ICovDQo+ICsgICAgICAgICAgICAgICBvZmZzZXQgPSBpbmRleCA9PSAwID8gUk9GRE0wX1hBQUdD Q09SRTEgOiBST0ZETTBfWEJBR0NDT1JFMTsNCj4gKyAgICAgICAgICAgICAgIHJmX21vZGVbaW5k ZXhdID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBvZmZzZXQpOw0KPiArICAgICAgICAgICAgICAg LyogMi4gU2V0IFJGIG1vZGUgPSBzdGFuZGJ5IG1vZGUgKi8NCj4gKyAgICAgICAgICAgICAgIHJ0 bF9zZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpaW5kZXgsIFJGX0FDLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSRlJFR19PRkZTRVRfTUFTSywgMHgwMTAwMDApOw0KPiAr DQo+ICsgICAgICAgICAgICAgICByZl9zeW5fZzRbaW5kZXhdID0gcnRsX2dldF9yZnJlZyhodywg aW5kZXgsIFJGX1NZTl9HNCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJGUkVHX09GRlNFVF9NQVNLKTsNCj4gKyAgICAgICAgICAgICAgIHJ0bF9z ZXRfcmZyZWcoaHcsIGluZGV4LCBSRl9TWU5fRzQsIDB4NzAwLCAweDcpOw0KPiArDQo+ICsgICAg ICAgICAgICAgICAvKiBzd2l0Y2ggQ1YtY3VydmUgY29udHJvbCBieSBMQy1jYWxpYnJhdGlvbiAq Lw0KPiArICAgICAgICAgICAgICAgcnRsX3NldF9yZnJlZyhodywgKGVudW0gcmFkaW9fcGF0aClp bmRleCwgUkZfU1lOX0c3LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTcp LCAweDApOw0KPiArICAgICAgICAgICAgICAgLyogNC4gU2V0IExDIGNhbGlicmF0aW9uIGJlZ2lu ICovDQo+ICsgICAgICAgICAgICAgICBydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRo KWluZGV4LCBSRl9DSE5MQlcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgw MDAsIDB4MDEpOw0KPiArICAgICAgIH0NCj4gKw0KDQpbLi4uXQ0KDQo+ICt2b2lkIHJ0bDkyZF9w aHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGlzMnQpDQo+ICt7 DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOw0KPiAr ICAgICAgIHN0cnVjdCBydGxfaGFsICpydGxoYWwgPSAmcnRscHJpdi0+cnRsaGFsOw0KPiArICAg ICAgIHN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmcnRscHJpdi0+cGh5Ow0KPiArICAgICAgIHUz MiB0aW1lb3V0ID0gMjAwMCwgdGltZWNvdW50ID0gMDsNCj4gKw0KPiArICAgICAgIHdoaWxlIChy dGxwcml2LT5tYWM4MDIxMS5hY3Rfc2Nhbm5pbmcgJiYgdGltZWNvdW50IDwgdGltZW91dCkgew0K PiArICAgICAgICAgICAgICAgdWRlbGF5KDUwKTsNCj4gKyAgICAgICAgICAgICAgIHRpbWVjb3Vu dCArPSA1MDsNCg0KV2hhdCBpcyB0aGUgcHVycG9zZT8gDQoNCkV2ZW4gaWYgeW91IHJlYWxseSBu ZWVkIGl0LCBqdXN0IG1kZWxheSgyKSBvciBzb21ldGhpbmcgbGlrZSB0aGF0PyANCg0KPiArICAg ICAgIH0NCj4gKw0KPiArICAgICAgIHJ0bHBoeS0+bGNrX2lucHJvZ3Jlc3MgPSB0cnVlOw0KPiAr ICAgICAgIFJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfSVFLLA0KPiArICAgICAgICAgICAg ICAgIkxDSzpTdGFydCEhISBjdXJyZW50YmFuZCAleCBkZWxheSAlZCBtc1xuIiwNCj4gKyAgICAg ICAgICAgICAgIHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSwgdGltZWNvdW50KTsNCj4gKw0KPiAr ICAgICAgIF9ydGw5MmRfcGh5X2xjX2NhbGlicmF0ZV9zdyhodywgaXMydCk7DQo+ICsNCj4gKyAg ICAgICBydGxwaHktPmxja19pbnByb2dyZXNzID0gZmFsc2U7DQo+ICsgICAgICAgUlRQUklOVChy dGxwcml2LCBGSU5JVCwgSU5JVF9JUUssICAiTENLOkZpbmlzaCEhIVxuIik7DQo+ICt9DQo+ICsN Cg0KWy4uLl0NCg0KPiArdTggcnRsOTJkX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3KQ0KPiArew0KPiArIA0KDQpbLi4uXQ0KDQo+ICsgICAgICAgd2hpbGUgKHJ0bHBoeS0+bGNr X2lucHJvZ3Jlc3MgJiYgdGltZWNvdW50IDwgdGltZW91dCkgew0KPiArICAgICAgICAgICAgICAg bWRlbGF5KDUwKTsNCj4gKyAgICAgICAgICAgICAgIHRpbWVjb3VudCArPSA1MDsNCj4gKyAgICAg ICB9DQoNCkNvdWxkIExDSyBhbmQgc3dpdGNoIGNoYW5uZWwgaGFwcGVuIHNpbXVsdGFuZW91c2x5 Pw0KQ2FuIHlvdSBwb2ludCBvdXQgdGhlIGNhc2U/DQoNCg0KPiArICAgICAgIGlmIChydGxoYWwt Pm1hY3BoeW1vZGUgPT0gU0lOR0xFTUFDX1NJTkdMRVBIWSAmJg0KPiArICAgICAgICAgICBydGxo YWwtPmJhbmRzZXQgPT0gQkFORF9PTl9CT1RIKSB7DQo+ICsgICAgICAgICAgICAgICByZXRfdmFs dWUgPSBydGxfZ2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVNLRFdPUkQpOw0KPiArICAgICAg ICAgICAgICAgaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsID4gMTQgJiYgIShyZXRfdmFsdWUg JiBCSVQoMCkpKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGw5MmRfcGh5X3N3aXRjaF93 aXJlbGVzc2JhbmQoaHcsIEJBTkRfT05fNUcpOw0KPiArICAgICAgICAgICAgICAgZWxzZSBpZiAo cnRscGh5LT5jdXJyZW50X2NoYW5uZWwgPD0gMTQgJiYgKHJldF92YWx1ZSAmIEJJVCgwKSkpDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bDkyZF9waHlfc3dpdGNoX3dpcmVsZXNzYmFuZCho dywgQkFORF9PTl8yXzRHKTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgc3dpdGNoIChydGxoYWwt PmN1cnJlbnRfYmFuZHR5cGUpIHsNCj4gKyAgICAgICBjYXNlIEJBTkRfT05fNUc6DQo+ICsgICAg ICAgICAgICAgICAvKiBHZXQgZmlyc3QgY2hhbm5lbCBlcnJvciB3aGVuIGNoYW5nZSBiZXR3ZWVu DQo+ICsgICAgICAgICAgICAgICAgKiA1RyBhbmQgMi40RyBiYW5kLg0KPiArICAgICAgICAgICAg ICAgICovDQo+ICsgICAgICAgICAgICAgICBpZiAoV0FSTl9PTkNFKGNoYW5uZWwgPD0gMTQsICJy dGw4MTkyZGU6IDVHIGJ1dCBjaGFubmVsPD0xNFxuIikpDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAwOw0KPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgY2FzZSBC QU5EX09OXzJfNEc6DQo+ICsgICAgICAgICAgICAgICAvKiBHZXQgZmlyc3QgY2hhbm5lbCBlcnJv ciB3aGVuIGNoYW5nZSBiZXR3ZWVuDQo+ICsgICAgICAgICAgICAgICAgKiA1RyBhbmQgMi40RyBi YW5kLg0KPiArICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICBpZiAoV0FSTl9P TkNFKGNoYW5uZWwgPiAxNCwgInJ0bDgxOTJkZTogMkcgYnV0IGNoYW5uZWw+MTRcbiIpKQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICAgICBXQVJOX09OQ0UodHJ1ZSwg InJ0bDgxOTJkZTogSW52YWxpZCBXaXJlbGVzc01vZGUoJSN4KSEhXG4iLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgIHJ0bHByaXYtPm1hYzgwMjExLm1vZGUpOw0KPiArICAgICAgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgfQ0KPiArICAgICAgIHJ0bHBoeS0+c3dfY2hubF9pbnByb2dy ZXNzID0gdHJ1ZTsNCj4gKyAgICAgICBpZiAoY2hhbm5lbCA9PSAwKQ0KPiArICAgICAgICAgICAg ICAgY2hhbm5lbCA9IDE7DQoNCkNhbiB0aGlzIHJlYWxseSBoYXBwZW4/IA0KDQoNClsuLi5dDQoN Cg0KPiArc3RhdGljIHZvaWQgX3J0bDkyZF9waHlfc2V0X3Jmb24oc3RydWN0IGllZWU4MDIxMV9o dyAqaHcpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3By aXYoaHcpOw0KPiArDQo+ICsgICAgICAgLyogYS4gIFNZU19DTEtSIDB4MDhbMTFdID0gMSAgcmVz dG9yZSBNQUMgY2xvY2sgKi8NCj4gKyAgICAgICAvKiBiLiAgU1BTX0NUUkwgMHgxMVs3OjBdID0g MHgyYiAqLw0KPiArICAgICAgIGlmIChydGxwcml2LT5ydGxoYWwubWFjcGh5bW9kZSA9PSBTSU5H TEVNQUNfU0lOR0xFUEhZKQ0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJp diwgUkVHX1NQUzBfQ1RSTCwgMHgyYik7DQoNClBsZWFzZSBhZGQgcHJvcGVyIGJsYW5rIGxpbmVz Lg0KDQo+ICsgICAgICAgLyogYy4gIEZvciBQQ0lFOiBTWVNfRlVOQ19FTiAweDAyWzc6MF0gPSAw eEUzIGVuYWJsZSBCQiBUUlggZnVuY3Rpb24gKi8NCj4gKyAgICAgICBydGxfd3JpdGVfYnl0ZShy dGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTMpOw0KDQo+ICsgICAgICAgLyogUkZfT05fRVhD RVAoZH5nKTogKi8NCj4gKyAgICAgICAvKiBkLiAgQVBTRF9DVFJMIDB4NjAwWzc6MF0gPSAweDAw ICovDQo+ICsgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FQU0RfQ1RSTCwgMHgw MCk7DQoNCj4gKyAgICAgICAvKiBlLiAgU1lTX0ZVTkNfRU4gMHgwMls3OjBdID0gMHhFMiAgcmVz ZXQgQkIgVFJYIGZ1bmN0aW9uIGFnYWluICovDQo+ICsgICAgICAgLyogZi4gIFNZU19GVU5DX0VO IDB4MDJbNzowXSA9IDB4RTMgIGVuYWJsZSBCQiBUUlggZnVuY3Rpb24qLw0KPiArICAgICAgIHJ0 bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7DQo+ICsgICAgICAg cnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUzKTsNCg0KPiArICAg ICAgIC8qIGcuICAgdHhwYXVzZSAweDUyMls3OjBdID0gMHgwMCAgZW5hYmxlIG1hYyB0eCBxdWV1 ZSAqLw0KPiArICAgICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweDAw KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgX3J0bDkyZF9waHlfc2V0X3Jmc2xlZXAoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wcml2ICpy dGxwcml2ID0gcnRsX3ByaXYoaHcpOw0KPiArICAgICAgIHUzMiB1NGJ0bXA7DQo+ICsgICAgICAg dTggZGVsYXkgPSA1Ow0KDQoncmV0cnknID8NCg0KPiArDQo+ICsgICAgICAgLyogYS4gICBUWFBB VVNFIDB4NTIyWzc6MF0gPSAweEZGICBQYXVzZSBNQUMgVFggcXVldWUgICovDQo+ICsgICAgICAg cnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4RkYpOw0KDQo+ICsgICAgICAg LyogYi4gICBSRiBwYXRoIDAgb2Zmc2V0IDB4MDAgPSAweDAwICBkaXNhYmxlIFJGICAqLw0KPiAr ICAgICAgIHJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBSRlJFR19PRkZTRVRf TUFTSywgMHgwMCk7DQoNCj4gKyAgICAgICAvKiBjLiAgIEFQU0RfQ1RSTCAweDYwMFs3OjBdID0g MHg0MCAqLw0KPiArICAgICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkws IDB4NDApOw0KDQo+ICsgICAgICAgLyogZC4gQVBTRF9DVFJMIDB4NjAwWzc6MF0gPSAweDAwDQo+ ICsgICAgICAgICogQVBTRF9DVFJMIDB4NjAwWzc6MF0gPSAweDAwDQo+ICsgICAgICAgICogUkYg cGF0aCAwIG9mZnNldCAweDAwID0gMHgwMA0KPiArICAgICAgICAqIEFQU0RfQ1RSTCAweDYwMFs3 OjBdID0gMHg0MA0KPiArICAgICAgICAqLw0KPiArICAgICAgIHU0YnRtcCA9IHJ0bF9nZXRfcmZy ZWcoaHcsIFJGOTBfUEFUSF9BLCAwLCBSRlJFR19PRkZTRVRfTUFTSyk7DQoNClByb3BlciBibGFu ayBsaW5lczoNCg0KPiArICAgICAgIHdoaWxlICh1NGJ0bXAgIT0gMCAmJiBkZWxheSA+IDApIHsN Cj4gKyAgICAgICAgICAgICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkws IDB4MCk7DQo+ICsgICAgICAgICAgICAgICBydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwg MHgwMCwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MDApOw0KPiArICAgICAgICAgICAgICAgcnRsX3dy aXRlX2J5dGUocnRscHJpdiwgUkVHX0FQU0RfQ1RSTCwgMHg0MCk7DQo+ICsgICAgICAgICAgICAg ICB1NGJ0bXAgPSBydGxfZ2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMCwgUkZSRUdfT0ZGU0VU X01BU0spOw0KPiArICAgICAgICAgICAgICAgZGVsYXktLTsNCj4gKyAgICAgICB9DQo+ICsgICAg ICAgaWYgKGRlbGF5ID09IDApIHsNCj4gKyAgICAgICAgICAgICAgIC8qIEp1bXAgb3V0IHRoZSBM UFMgdHVybiBvZmYgc2VxdWVuY2UgdG8gUkZfT05fRVhDRVAgKi8NCj4gKyAgICAgICAgICAgICAg IHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4MDApOw0KPiArDQo+ICsg ICAgICAgICAgICAgICBydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4 RTIpOw0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19G VU5DX0VOLCAweEUzKTsNCj4gKyAgICAgICAgICAgICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYs IFJFR19UWFBBVVNFLCAweDAwKTsNCj4gKyAgICAgICAgICAgICAgIHJ0bF9kYmcocnRscHJpdiwg Q09NUF9QT1dFUiwgREJHX0xPVUQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICJGYWlsICEh ISBTd2l0Y2ggUkYgdGltZW91dFxuIik7DQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ICsg ICAgICAgfQ0KPiArICAgICAgIC8qIGUuICAgRm9yIFBDSUU6IFNZU19GVU5DX0VOIDB4MDJbNzow XSA9IDB4RTIgcmVzZXQgQkIgVFJYIGZ1bmN0aW9uICovDQo+ICsgICAgICAgcnRsX3dyaXRlX2J5 dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUyKTsNCj4gKyAgICAgICAvKiBmLiAgIFNQ U19DVFJMIDB4MTFbNzowXSA9IDB4MjIgKi8NCj4gKyAgICAgICBpZiAocnRscHJpdi0+cnRsaGFs Lm1hY3BoeW1vZGUgPT0gU0lOR0xFTUFDX1NJTkdMRVBIWSkNCj4gKyAgICAgICAgICAgICAgIHJ0 bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MjIpOw0KPiArICAgICAgIC8q IGcuICAgIFNZU19DTEtSIDB4MDhbMTFdID0gMCAgZ2F0ZWQgTUFDIGNsb2NrICovDQo+ICt9DQo+ ICsNCj4gK2Jvb2wgcnRsOTJkX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSByZl9w d3JzdGF0ZSByZnB3cl9zdGF0ZSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgcnRsX3ByaXYgKnJ0 bHByaXYgPSBydGxfcHJpdihodyk7DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wc19jdGwgKnBwc2Mg PSBydGxfcHNjKHJ0bHByaXYpOw0KPiArICAgICAgIHN0cnVjdCBydGxfbWFjICptYWMgPSBydGxf bWFjKHJ0bHByaXYpOw0KPiArICAgICAgIGJvb2wgYnJlc3VsdCA9IHRydWU7DQo+ICsNCj4gKyAg ICAgICBpZiAocmZwd3Jfc3RhdGUgPT0gcHBzYy0+cmZwd3Jfc3RhdGUpDQo+ICsgICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7DQo+ICsgICAgICAgc3dpdGNoIChyZnB3cl9zdGF0ZSkgew0KPiAr ICAgICAgIGNhc2UgRVJGT046DQo+ICsgICAgICAgICAgICAgICBpZiAocHBzYy0+cmZwd3Jfc3Rh dGUgPT0gRVJGT0ZGICYmDQo+ICsgICAgICAgICAgICAgICAgICAgUlRfSU5fUFNfTEVWRUwocHBz YywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHUzMiBpbml0aWFsaXplY291bnQgPSAwOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBib29s IHJ0c3RhdHVzOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRvIHsNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplY291bnQrKzsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBydGxfZGJnKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVT RywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUFMgU2V0IGVS ZiBuaWMgZW5hYmxlXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHN0 YXR1cyA9IHJ0bF9wc19lbmFibGVfbmljKGh3KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg fSB3aGlsZSAoIXJ0c3RhdHVzICYmIChpbml0aWFsaXplY291bnQgPCAxMCkpOw0KPiArDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIFJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX1JGX09GRl9MRVZMX0hBTFRfTklD KTsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHJ0bF9kYmcocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0RNRVNHLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJhd2FrZSwgc2xlcHQ6JWQgbXMgc3RhdGVfaW5hcDoleFxuIiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZp ZXMgLQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHBzYy0+bGFzdF9zbGVlcF9qaWZmaWVzKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcnRscHJpdi0+cHNjLnN0YXRlX2luYXApOw0KPiArICAgICAgICAgICAgICAgICAgICAg ICBwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMgPSBqaWZmaWVzOw0KPiArICAgICAgICAgICAgICAg ICAgICAgICBfcnRsOTJkX3BoeV9zZXRfcmZvbihodyk7DQo+ICsgICAgICAgICAgICAgICB9DQo+ ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElO S0VEKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxwcml2LT5jZmctPm9wcy0+bGVkX2Nv bnRyb2woaHcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVE X0NUTF9MSU5LKTsNCj4gKyAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFRF9DVExfTk9fTElOSyk7DQoNCgkJaWYgKG1h Yy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpDQoJCQlydGxwcml2LT5jZmctPm9wcy0+ bGVkX2NvbnRyb2woaHcsIExFRF9DVExfTElOSyk7DQoJCWVsc2UNCgkJCXJ0bHByaXYtPmNmZy0+ b3BzLT5sZWRfY29udHJvbChodywgTEVEX0NUTF9OT19MSU5LKTsNCg0KDQo+ICsgICAgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICBjYXNlIEVSRk9GRjoNCj4gKyAgICAgICAgICAgICAgIGlm IChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJ0bF9kYmcocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNH LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUFMgU2V0IGVSZiBuaWMgZGlz YWJsZVxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bF9wc19kaXNhYmxlX25pYyho dyk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIFJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9S Rl9PRkZfTEVWTF9IQUxUX05JQyk7DQo+ICsgICAgICAgICAgICAgICB9IGVsc2Ugew0KPiArICAg ICAgICAgICAgICAgICAgICAgICBpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9C WV9JUFMpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRscHJpdi0+Y2ZnLT5v cHMtPmxlZF9jb250cm9sKGh3LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTEVEX0NUTF9OT19MSU5LKTsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bHByaXYtPmNmZy0+ b3BzLT5sZWRfY29udHJvbChodywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExFRF9DVExfUE9XRVJfT0ZGKTsNCg0KCQkJaWYgKHBwc2MtPnJmb2Zm X3JlYXNvbiA9PSBSRl9DSEFOR0VfQllfSVBTKQ0KCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRf Y29udHJvbChodywgTEVEX0NUTF9OT19MSU5LKTsNCgkJCWVsc2UNCgkJCQlydGxwcml2LT5jZmct Pm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsNCg0KPiArICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgY2FzZSBFUkZTTEVF UDoNCj4gKyAgICAgICAgICAgICAgIGlmIChwcHNjLT5yZnB3cl9zdGF0ZSA9PSBFUkZPRkYpDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICAgICAgICAg ICAgICAgcnRsX2RiZyhydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfRE1FU0csDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICJzbGVlcCBhd2FrZW5lZDolZCBtcyBzdGF0ZV9pbmFwOiV4XG4iLA0K PiArICAgICAgICAgICAgICAgICAgICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwc2MtPmxhc3RfYXdha2Vf amlmZmllcyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bHByaXYtPnBzYy5zdGF0ZV9p bmFwKTsNCj4gKyAgICAgICAgICAgICAgIHBwc2MtPmxhc3Rfc2xlZXBfamlmZmllcyA9IGppZmZp ZXM7DQo+ICsgICAgICAgICAgICAgICBfcnRsOTJkX3BoeV9zZXRfcmZzbGVlcChodyk7DQo+ICsg ICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAg ICAgcHJfZXJyKCJzd2l0Y2ggY2FzZSAlI3ggbm90IHByb2Nlc3NlZFxuIiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICByZnB3cl9zdGF0ZSk7DQo+ICsgICAgICAgICAgICAgICBicmVzdWx0ID0g ZmFsc2U7DQoNCnJldHVybiBmYWxzZSBkaXJlY3RseT8NCg0KPiArICAgICAgICAgICAgICAgYnJl YWs7DQo+ICsgICAgICAgfQ0KPiArICAgICAgIGlmIChicmVzdWx0KQ0KPiArICAgICAgICAgICAg ICAgcHBzYy0+cmZwd3Jfc3RhdGUgPSByZnB3cl9zdGF0ZTsNCj4gKyAgICAgICByZXR1cm4gYnJl c3VsdDsNCj4gK30NCj4gKw0KPiArdm9pZCBydGw5MmRfcGh5X3NldF9wb3dlcm9uKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3KQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBydGxfcHJpdiAqcnRscHJp diA9IHJ0bF9wcml2KGh3KTsNCj4gKyAgICAgICBzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRs X2hhbChydGxfcHJpdihodykpOw0KPiArICAgICAgIHU4IHZhbHVlODsNCj4gKyAgICAgICB1MTYg aTsNCj4gKyAgICAgICB1MzIgbWFjX3JlZyA9IChydGxoYWwtPmludGVyZmFjZWluZGV4ID09IDAg PyBSRUdfTUFDMCA6IFJFR19NQUMxKTsNCg0KcmV2ZXJzZSBYJ21hcyB0cmVlLiANCg0KDQo+ICsN Cj4gKyAgICAgICAvKiBub3RpY2UgZncga25vdyBiYW5kIHN0YXR1cyAgMHg4MVsxXS8weDUzWzFd ID0gMDogNUcsIDE6IDJHICovDQo+ICsgICAgICAgaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlw ZSA9PSBCQU5EX09OXzJfNEcpIHsNCj4gKyAgICAgICAgICAgICAgIHZhbHVlOCA9IHJ0bF9yZWFk X2J5dGUocnRscHJpdiwgbWFjX3JlZyk7DQo+ICsgICAgICAgICAgICAgICB2YWx1ZTggfD0gQklU KDEpOw0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgbWFjX3JlZywg dmFsdWU4KTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgdmFsdWU4ID0g cnRsX3JlYWRfYnl0ZShydGxwcml2LCBtYWNfcmVnKTsNCj4gKyAgICAgICAgICAgICAgIHZhbHVl OCAmPSAofkJJVCgxKSk7DQo+ICsgICAgICAgICAgICAgICBydGxfd3JpdGVfYnl0ZShydGxwcml2 LCBtYWNfcmVnLCB2YWx1ZTgpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChydGxo YWwtPm1hY3BoeW1vZGUgPT0gU0lOR0xFTUFDX1NJTkdMRVBIWSkgew0KPiArICAgICAgICAgICAg ICAgdmFsdWU4ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUFDMCk7DQo+ICsgICAgICAg ICAgICAgICBydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUFDMCwgdmFsdWU4IHwgTUFDMF9P Tik7DQo+ICsgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmds b2JhbG11dGV4X3Bvd2VyKTsNCg0KV2hhdCBkbyB5b3UgbmVlZCAnZ2xvYmFsJyBtdXRleD8gVXN1 YWxseSwgd2Ugd2FudCB0byBzdXBwb3J0IG11bHRpcGxlIGluc3RhbmNlcw0KcnVuIHNpbXVsdGFu ZW91c2x5LiBEb2VzIHRoaXMgbXV0ZXh0IGFjcm9zcyBpbnN0YW5jZXM/IA0KSSBmZWVsIG5vdC4g UGxlYXNlIG1vdmUgdGhlbSBpbnRvIHN0cnVjdCBydGxfcHJpdi4NCg0KPiArICAgICAgICAgICAg ICAgaWYgKHJ0bGhhbC0+aW50ZXJmYWNlaW5kZXggPT0gMCkgew0KPiArICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZTggPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQUMwKTsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01BQzAsIHZh bHVlOCB8IE1BQzBfT04pOw0KPiArICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgdmFsdWU4ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUFDMSk7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19N QUMxLCB2YWx1ZTggfCBNQUMxX09OKTsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAg ICAgICAgIHZhbHVlOCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1BPV0VSX09GRl9JTl9Q Uk9DRVNTKTsNCj4gKyAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZ2xvYmFsbXV0ZXhfcG93 ZXIpOw0KDQpibGFuayBsaW5lLiBJdCB3b3VsZCBiZSBjbGVhciB0byBzZWUgbG9jay91bmxvY2su IA0KDQo+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZTggJiBCSVQoNykpID09IDApDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgdWRlbGF5KDUwMCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X2xv Y2soJmdsb2JhbG11dGV4X3Bvd2VyKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU4 ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJFR19QT1dFUl9PRkZfSU5fUFJPQ0VTUyk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZ2xvYmFsbXV0ZXhfcG93ZXIpOw0KPiArDQo+ ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgICBpZiAoaSA9PSAyMDApDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIFdBUk5fT05DRSh0cnVlLCAicnRsODE5MmRlOiBBbm90aGVy IG1hYyBwb3dlciBvZmYgb3ZlciB0aW1lXG4iKTsNCj4gKyAgICAgICB9DQo+ICt9DQo+ICsNCj4g K3ZvaWQgcnRsOTJkX3VwZGF0ZV9iYnJmX2NvbmZpZ3VyYXRpb24oc3RydWN0IGllZWU4MDIxMV9o dyAqaHcpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3By aXYoaHcpOw0KPiArICAgICAgIHN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNl KHJ0bHByaXYpOw0KPiArICAgICAgIHN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0 bHByaXYpOw0KPiArICAgICAgIHN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmcnRscHJpdi0+cGh5 Ow0KPiArICAgICAgIHU4IHJmcGF0aCwgaTsNCj4gKw0KPiArICAgICAgIHJ0bF9kYmcocnRscHJp diwgQ09NUF9JTklULCBEQkdfTE9VRCwgIj09PlxuIik7DQo+ICsgICAgICAgLyogcl9zZWxlY3Rf NUcgZm9yIHBhdGhfQS9CIDAgZm9yIDIuNEcsIDEgZm9yIDVHICovDQo+ICsgICAgICAgaWYgKHJ0 bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsNCj4gKyAgICAgICAgICAg ICAgIC8qIHJfc2VsZWN0XzVHIGZvciBwYXRoX0EvQiwweDg3OCAqLw0KPiArICAgICAgICAgICAg ICAgcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBQl9SRlBBUkFNRVRFUiwgQklUKDApLCAweDAp Ow0KPiArICAgICAgICAgICAgICAgcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBQl9SRlBBUkFN RVRFUiwgQklUKDE1KSwgMHgwKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChydGxoYWwtPm1hY3Bo eW1vZGUgIT0gRFVBTE1BQ19EVUFMUEhZKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0 bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQUJfUkZQQVJBTUVURVIsIEJJVCgxNiksIDB4MCk7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQUJfUkZQ QVJBTUVURVIsIEJJVCgzMSksIDB4MCk7DQo+ICsgICAgICAgICAgICAgICB9DQoNCnByb3BlciBi bGFuayBsaW5lcy4uLg0KUGxlYXNlIHRha2UgYSBnbGFuY2Ugb2Ygd2hvbGUgcGF0Y2hlcywgYW5k IGFkZCBibGFuayBsaW5lcyB0byBtYWtlIHRoZW0gcmVhZGFibGUuDQoNCj4gKyAgICAgICAgICAg ICAgIC8qIHJzc2lfdGFibGVfc2VsZWN0OmluZGV4IDAgZm9yIDIuNEcuMX4zIGZvciA1RywweGM3 OCAqLw0KPiArICAgICAgICAgICAgICAgcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0FHQ1JTU0lU QUJMRSwgQklUKDYpIHwgQklUKDcpLCAweDApOw0KPiArICAgICAgICAgICAgICAgLyogZmNfYXJl YSAgMHhkMmMgKi8NCj4gKyAgICAgICAgICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9D Rk9UUkFDS0lORywgQklUKDE0KSB8IEJJVCgxMyksIDB4MCk7DQo+ICsgICAgICAgICAgICAgICAv KiA1RyBMQU4gT04gKi8NCj4gKyAgICAgICAgICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIDB4QjMw LCAweDAwRjAwMDAwLCAweGEpOw0KPiArICAgICAgICAgICAgICAgLyogVFggQkIgZ2FpbiBzaGlm dCoxLEp1c3QgZm9yIHRlc3RjaGlwLDB4YzgwLDB4Yzg4ICovDQo+ICsgICAgICAgICAgICAgICBy dGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEFUWElRSU1CQUxBTkNFLCBNQVNLRFdPUkQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAxMDApOw0KPiArICAgICAgICAgICAg ICAgcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCVFhJUUlNQkFMQU5DRSwgTUFTS0RXT1JELA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMTAwKTsNCg0Kc3RyYWlnaHRl biB0aGVzZSB0d28gbGluZXMuIA0KDQo+ICsgICAgICAgICAgICAgICBpZiAocnRsaGFsLT5tYWNw aHltb2RlID09IERVQUxNQUNfRFVBTFBIWSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBy dGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1csDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEwKSB8IEJJVCg2KSB8IEJJVCg1KSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJ0bGVmdXNlLT5lZXByb21f YzkgJiBCSVQoMykpID4+IDMpIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocnRsZWZ1c2UtPmVlcHJvbV9jOSAmIEJJVCgxKSkgfA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jYyAmIEJJVCgxKSkgPDwg NCkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBf WEFfUkZJTlRFUkZBQ0VPRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMTApIHwgQklUKDYpIHwgQklUKDUpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jOSAmIEJJVCgyKSkgPj4gMikgfA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9j OSAmIEJJVCgwKSkgPDwgMSkgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jYyAmIEJJVCgwKSkgPDwgNSkpOw0KPiArICAgICAgICAg ICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSLCBC SVQoMTUpLCAwKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X2JicmVn KGh3LCBSUERQX0FOVEEsIE1BU0tEV09SRCwgMHgwMTAxNzAzOCk7DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJDT05GSUdfQU5UQSwgTUFTS0RXT1JELCAweDBm NjAwMDAwKTsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VTVywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMjYpIHwgQklUKDIyKSB8IEJJ VCgyMSkgfCBCSVQoMTApIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoNikgfCBCSVQoNSksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChydGxlZnVzZS0+ZWVwcm9tX2M5ICYgQklUKDMpKSA+PiAzKSB8DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0bGVmdXNlLT5lZXByb21fYzkgJiBCSVQoMSkp IHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJ0bGVmdXNlLT5l ZXByb21fY2MgJiBCSVQoMSkpIDw8IDQpIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKHJ0bGVmdXNlLT5lZXByb21fYzkgJiBCSVQoNykpIDw8IDkpIHwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJ0bGVmdXNlLT5lZXByb21fYzkg JiBCSVQoNSkpIDw8IDEyKSB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChydGxlZnVzZS0+ZWVwcm9tX2NjICYgQklUKDMpKSA8PCAxOCkpOw0KPiArICAgICAgICAg ICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTApIHwgQklUKDYp IHwgQklUKDUpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocnRs ZWZ1c2UtPmVlcHJvbV9jOSAmIEJJVCgyKSkgPj4gMikgfA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jOSAmIEJJVCgwKSkgPDwgMSkg fA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVl cHJvbV9jYyAmIEJJVCgwKSkgPDwgNSkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxf c2V0X2JicmVnKGh3LCBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTApIHwgQklUKDYpIHwgQklUKDUpLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jOSAm IEJJVCg2KSkgPj4gNikgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgocnRsZWZ1c2UtPmVlcHJvbV9jOSAmIEJJVCg0KSkgPj4gMykgfA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgocnRsZWZ1c2UtPmVlcHJvbV9jYyAmIEJJVCgyKSkg PDwgMykpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSRlBH QTBfWEFCX1JGUEFSQU1FVEVSLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJJVCgzMSkgfCBCSVQoMTUpLCAwKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAg ICBydGxfc2V0X2JicmVnKGh3LCBSUERQX0FOVEEsIE1BU0tEV09SRCwgMHgwMTAxNzAzOCk7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJQRFBfQU5UQiwgTUFT S0RXT1JELCAweDAxMDE3MDM4KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnRsX3NldF9i YnJlZyhodywgUkNPTkZJR19BTlRBLCBNQVNLRFdPUkQsIDB4MGY2MDAwMDApOw0KPiArICAgICAg ICAgICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSQ09ORklHX0FOVEIsIE1BU0tEV09S RCwgMHgwZjYwMDAwMCk7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgICAv KiAxLjVWX0xETyAqLw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAvKiBy X3NlbGVjdF81RyBmb3IgcGF0aF9BL0IgKi8NCj4gKyAgICAgICAgICAgICAgIHJ0bF9zZXRfYmJy ZWcoaHcsIFJGUEdBMF9YQUJfUkZQQVJBTUVURVIsIEJJVCgwKSwgMHgxKTsNCj4gKyAgICAgICAg ICAgICAgIHJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQUJfUkZQQVJBTUVURVIsIEJJVCgxNSks IDB4MSk7DQo+ICsgICAgICAgICAgICAgICBpZiAocnRsaGFsLT5tYWNwaHltb2RlICE9IERVQUxN QUNfRFVBTFBIWSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3 LCBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSLCBCSVQoMTYpLCAweDEpOw0KPiArICAgICAgICAgICAg ICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSLCBCSVQo MzEpLCAweDEpOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAgLyogcnNz aV90YWJsZV9zZWxlY3Q6aW5kZXggMCBmb3IgMi40Ry4xfjMgZm9yIDVHICovDQo+ICsgICAgICAg ICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfQUdDUlNTSVRBQkxFLCBCSVQoNikgfCBC SVQoNyksIDB4MSk7DQo+ICsgICAgICAgICAgICAgICAvKiBmY19hcmVhICovDQo+ICsgICAgICAg ICAgICAgICBydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfQ0ZPVFJBQ0tJTkcsIEJJVCgxNCkgfCBC SVQoMTMpLCAweDEpOw0KPiArICAgICAgICAgICAgICAgLyogNUcgTEFOIE9OICovDQo+ICsgICAg ICAgICAgICAgICBydGxfc2V0X2JicmVnKGh3LCAweEIzMCwgMHgwMEYwMDAwMCwgMHgwKTsNCj4g Kw0KPiArICAgICAgICAgICAgICAgLyogVFggQkIgZ2FpbiBzaGlmdCxKdXN0IGZvciB0ZXN0Y2hp cCwweGM4MCwweGM4OCAqLw0KPiArICAgICAgICAgICAgICAgaWYgKHJ0bGVmdXNlLT5pbnRlcm5h bF9wYV81Z1tydGxoYWwtPmludGVyZmFjZWluZGV4XSkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwgTUFTS0RXT1JELA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmQ0MDAwYjUpOw0KPiAr ICAgICAgICAgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X2Ji cmVnKGh3LCBST0ZETTBfWEFUWElRSU1CQUxBTkNFLCBNQVNLRFdPUkQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDA4MCk7DQo+ICsNCg0KDQpbLi4uXQ0K DQo+ICtib29sIHJ0bDkyZF9waHlfY2hlY2tfcG93ZXJvZmYoc3RydWN0IGllZWU4MDIxMV9odyAq aHcpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYo aHcpOw0KPiArICAgICAgIHN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2 KGh3KSk7DQo+ICsgICAgICAgdTggdTFidG1wOw0KPiArDQo+ICsgICAgICAgaWYgKHJ0bGhhbC0+ bWFjcGh5bW9kZSA9PSBTSU5HTEVNQUNfU0lOR0xFUEhZKSB7DQo+ICsgICAgICAgICAgICAgICB1 MWJ0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQUMwKTsNCj4gKyAgICAgICAgICAg ICAgIHJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQUMwLCB1MWJ0bXAgJiAofk1BQzBfT04p KTsNCg0KTm8gbmVlZCBwYXJlbnRoZXNpcyBvZiAofk1BQzBfT04pDQoNCj4gKyAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBtdXRleF9sb2NrKCZnbG9i YWxtdXRleF9wb3dlcik7DQoNCkFkZCBibGFuayBsaW5lcyB0byBsZXQgbG9jay91bmxvY2sgbW9y ZSB2aXNpYmxlLiANCg0KPiArICAgICAgIGlmIChydGxoYWwtPmludGVyZmFjZWluZGV4ID09IDAp IHsNCj4gKyAgICAgICAgICAgICAgIHUxYnRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVH X01BQzApOw0KPiArICAgICAgICAgICAgICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01B QzAsIHUxYnRtcCAmICh+TUFDMF9PTikpOw0KPiArICAgICAgICAgICAgICAgdTFidG1wID0gcnRs X3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUFDMSk7DQo+ICsgICAgICAgICAgICAgICB1MWJ0bXAg Jj0gTUFDMV9PTjsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgdTFidG1w ID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUFDMSk7DQo+ICsgICAgICAgICAgICAgICBy dGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUFDMSwgdTFidG1wICYgKH5NQUMxX09OKSk7DQo+ ICsgICAgICAgICAgICAgICB1MWJ0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQUMw KTsNCj4gKyAgICAgICAgICAgICAgIHUxYnRtcCAmPSBNQUMwX09OOw0KPiArICAgICAgIH0NCj4g KyAgICAgICBpZiAodTFidG1wKSB7DQo+ICsgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmds b2JhbG11dGV4X3Bvd2VyKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKyAg ICAgICB9DQo+ICsgICAgICAgdTFidG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUE9X RVJfT0ZGX0lOX1BST0NFU1MpOw0KPiArICAgICAgIHUxYnRtcCB8PSBCSVQoNyk7DQo+ICsgICAg ICAgcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1BPV0VSX09GRl9JTl9QUk9DRVNTLCB1MWJ0 bXApOw0KPiArICAgICAgIG11dGV4X3VubG9jaygmZ2xvYmFsbXV0ZXhfcG93ZXIpOw0KPiArICAg ICAgIHJldHVybiB0cnVlOw0KPiArfQ0KPiArDQoNClsuLi5dDQoNCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9ydGw4MTkyZHUvcGh5LmgNCj4gYi9k cml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODE5MmR1L3BoeS5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGYyYjBiMTU5ZmMyDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3 aWZpL3J0bDgxOTJkdS9waHkuaA0KPiBAQCAtMCwwICsxLDMyIEBADQo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiArLyogQ29weXJpZ2h0KGMpIDIwMDktMjAxMiAg UmVhbHRlayBDb3Jwb3JhdGlvbi4qLw0KPiArDQo+ICsjaWZuZGVmIF9fUlRMOTJEX1BIWV9IX18N Cj4gKyNkZWZpbmUgX19SVEw5MkRfUEhZX0hfXw0KDQpfX1JUTDkyRFVfUEhZX0hfXyA/DQoNCg0K DQo=