From mboxrd@z Thu Jan 1 00:00:00 1970 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 8D3803C1977; Wed, 23 Sep 2026 05:42:58 +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=1790142181; cv=none; b=Un7GpRW+I/UrEYU2k0LMB9qjQFcVpeb40WtsoKVLk3Inp0eU94nQaJpdKPvIMiGhnvPVhCibpd2YxlLFntPDJ/cWSZzNJFdTXWyZ9n70VHaxbmpPsiiuAIEi49FRmlzWwyo8kZukJkXIV95vdUMzZmrc60WD1dozD1PYSHuRZd8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790142181; c=relaxed/simple; bh=bJT2L5kEVJyP7hDwyZ/EwcZrz4RB2UvXC0s9QcHDz/g=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=U5ACEiLN2FldfZA+3th+wBDT2l6DqNJXArCNLm3kTUvioLcmSvp4HHC0ZgJ3HzlnwK3slxTmhMQ1vFZMVGiGmgrP0qVCSTeVJpGx+Npts5em6ggte3MZGp8TJSL0aPjDMhikKkOqvoar1im9gdq3b+EA3GVHb0GId5vznzcleSw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=realtek.com; spf=pass smtp.mailfrom=realtek.com; dkim=pass (2048-bit key) header.d=realtek.com header.i=@realtek.com header.b=HZd3n0hH; arc=none smtp.client-ip=211.75.126.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=realtek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=realtek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=realtek.com header.i=@realtek.com header.b="HZd3n0hH" X-SpamFilter-By: ArmorX SpamTrap 5.80 with qID 68N5gF2j9095651, This message is accepted by code: ctloc85258 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=realtek.com; s=dkim; t=1790142136; bh=bJT2L5kEVJyP7hDwyZ/EwcZrz4RB2UvXC0s9QcHDz/g=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:Content-Transfer-Encoding:MIME-Version; b=HZd3n0hHQrn85oCFEsTByFVHmcQcj5BiuP5YD0hlsNZze8QbzsF4c2v0whxAtk9zh ffhvfUuoK/u8MKj1DYTUcI2V2zcYAGBLF0pBgekgA+/6tSia+KcfYr2qaVvScdHnMn Lz43jAQZxlgDCjpVt81a/C+1z8zLC7Dzskvijzw8jbdmwFtRLgSuOe1xii152pBB0H kQnuk17PYWQGaEiX6Ug6e1dgB0f+umsHtq3s2f6v21TTYHcAnjC/kpOqtRwgefWEge Wj/EX8Xbvr6rH3hzs7F/sExNLfYxnaZ/KZZM7SogPWUVuSSiYIeQ/rmjpagOmSjfw/ 1vu9oN1q1LSyA== Received: from mail.realtek.com (rtkexhmbs02.realtek.com.tw[172.21.6.41]) by rtits2.realtek.com.tw (8.15.2/3.29/5.94) with ESMTPS id 68N5gF2j9095651 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 23 Sep 2026 13:42:16 +0800 Received: from RTKEXHMBS06.realtek.com.tw (10.21.1.56) by RTKEXHMBS02.realtek.com.tw (172.21.6.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Wed, 23 Sep 2026 13:42:14 +0800 Received: from RTKEXHMBS06.realtek.com.tw ([::1]) by RTKEXHMBS06.realtek.com.tw ([fe80::b3cc:c263:b82d:e87c%10]) with mapi id 15.02.2562.049; Wed, 23 Sep 2026 13:42:14 +0800 From: Chih Kai Hsu To: "netdev-bot+sashiko@kernel.org" CC: "davem@davemloft.net" , "kuba@kernel.org" , "netdev@vger.kernel.org" , nic_swsd , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" , "edumazet@google.com" , "bjorn@mork.no" , "pabeni@redhat.com" , "andrew+netdev@lunn.ch" Subject: RE: [PATCH net-next v4 6/8] r8152: add TGPHY register access for RTL8157 and RTL8159 Thread-Topic: [PATCH net-next v4 6/8] r8152: add TGPHY register access for RTL8157 and RTL8159 Thread-Index: AQHdRnNDhaegg4l4SUeTtpsO4SP9YLbYM/GAgAIbBfA= Date: Wed, 23 Sep 2026 05:42:14 +0000 Message-ID: References: <20260917070637.62827-7-nic_swsd@realtek.com> <178997943745.2160803.11487917322772287006@kernel.org> In-Reply-To: <178997943745.2160803.11487917322772287006@kernel.org> Accept-Language: zh-TW, en-US Content-Language: zh-TW Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 PiBUaGFuayB5b3UgZm9yIHlvdXIgY29udHJpYnV0aW9uISBTYXNoaWtvIEFJIHJldmlldyBmb3Vu ZCAxMiBwb3RlbnRpYWwNCj4gaXNzdWUocykgdG8gY29uc2lkZXIuDQo+IA0KPiBDcml0aWNhbDog MCDCtyBIaWdoOiAxIMK3IE1lZGl1bTogOCDCtyBMb3c6IDMNCj4gDQo+IElmIHlvdSBiZWxpZXZl IG5vbmUgb2YgdGhlIGlzc3VlcyBhcmUgbGVnaXRpbWF0ZSwgcGxlYXNlIHJlcGx5IHRvIGVhY2gg aXNzdWUgb2YNCj4gTWVkaXVtIHNldmVyaXR5IG9yIGhpZ2hlciBhbmQgZXhwbGFpbiB3aHkgdGhl IEFJIGlzIHdyb25nLg0KPiBJZiBhbnkgb2YgdGhlbSBhcmUgbGVnaXRpbWF0ZSBhbmQgeW91IHBs YW4gdG8gcmVzcGluLCBwbGVhc2UgbGV0IHBhdGNod29yayBrbm93DQo+IGJ5IGluY2x1ZGluZyAi cHctYm90OiBjciIgYXMgYSBzZXBhcmF0ZSBsaW5lIGF0IHRoZSBlbmQgb2YgeW91ciByZXBseSAo b25lIHN1Y2gNCj4gcmVwbHkgcGVyIHNlcmllcyBpcyBlbm91Z2gpLg0KPiANCj4gLSBbSGlnaF0g cjgxNTJfbWRpb19yZWFkKCkgbm93IHJldHVybnMgbmVnYXRpdmUgZXJybm8gdmFsdWVzIChgcmV0 dXJuIHJldA0KPiAgIDwgMCA/DQo+IC0gW01lZGl1bV0gVGhlIGNvbW1pdCBtZXNzYWdlIHByZXNl bnRzIHRoZSBUR1BIWSBwYXRoIGFzIGluZnJhc3RydWN0dXJlDQo+ICAgbmVlZGVkIGZvciBjaGlw IHN1cHBvcnQgKCJTdXBwb3J0IGZvciB0aGVzZSBjaGlwcyBuZWVkcyBhIHNlY29uZCBQSFnigKYN Cj4gLSBbTWVkaXVtXSBUaGUgY2hhbmdlbG9nIGNsYWltcyB0aGF0ICJldmVyeSBoZWxwZXIgYnVp bHQgb24gdG9wIG9mDQo+ICAgW29jcF9yZWdfcmVhZC93cml0ZV0gLi4uIFtpc10gcHJvcGFnYXRp bmcgdGhlIGZhaWx1cmUgdG8gY2FsbGVyc+KApg0KPiAtIFtNZWRpdW1dIFRoZSBSVEw4MTU3L1JU TDgxNTkgUEhZIGNvbmZpZ3VyYXRpb24gcm91dGluZXMgYW5kIHRoZSBQSFkNCj4gICBmaXJtd2Fy ZSBhcHBsaWVycyBpc3N1ZSBsb25nIGRlcGVuZGVudCBpbmRpcmVjdC1hY2Nlc3Mgc2VxdWVuY2Vz 4oCmDQo+IC0gW01lZGl1bV0gcnRsODE1Ml9zZXRfc3BlZWQoKSBhbmQgcnRsODE1Ml9zZXRfcGF1 c2VwYXJhbSgpIGFkZCByZWFkLQ0KPiAgIGVycm9yIGV4aXRzIGJ1dCBsZWF2ZSB0aGUgUEhZIHdy aXRlcyB1bmNoZWNrZWQsIHNvIGNvbmZpZ3VyYXRpb24gaXPigKYNCj4gLSBbTWVkaXVtXSByODE1 M19waHlfc3RhdHVzKCkgbm93IGJyZWFrcyBvdXQgb2YgaXRzIHBvbGwgbG9vcCB3aGVuDQo+ICAg b2NwX3JlZ19yZWFkKE9DUF9QSFlfU1RBVFVTLCAmZGF0YSkgZmFpbHMgYW5kIHJldHVybnMgdGhl IHVudG91Y2hlZOKApg0KPiAtIFtNZWRpdW1dIHJ0bF9waHlfcGF0Y2hfcmVxdWVzdCgpIGltcGxl bWVudHMgdGhlIGRyaXZlcjwtPlBIWS1NQ1UNCj4gICBtdXR1YWwtZXhjbHVzaW9uIGhhbmRzaGFr ZSAoUEFUQ0hfUkVRVUVTVCAvIFBBVENIX1JFQURZKSwgYnV0IHRoZQ0KPiB0d2/igKYNCj4gLSBb TWVkaXVtXSBydGxfdGdwaHlfYWNjZXNzKCkgYnVpbGRzIHRoZSBuZXcgUEhZIHRyYW5zYWN0aW9u IG91dCBvZg0KPiAgIHN0YXR1cy1sZXNzIGFjY2Vzc29ycywgc28gYnVzLWxldmVsIGZhaWx1cmVz IGJlY29tZSAnc3VjY2Vzc2Z1bCcgUEhZ4oCmDQo+IC0gW01lZGl1bV0gcjgxNTZfZWVlX2VuKCkg Z2FpbmVkIGBpZiAob2NwX3JlZ19yZWFkKHRwLCBPQ1BfRUVFX0FEVjIsDQo+ICAgJmNvbmZpZykg PCAwKSByZXR1cm47YCBhZnRlciByODE1M19lZWVfZW4odHAsIGVuYWJsZSkgaGFzIGFscmVhZHni gKYNCj4gLSBbTG93XSBzcmFtX3dyaXRlKCkgaXMgY29udmVydGVkIHRvIHJldHVybiBpbnQgYnV0 IG9ubHkgY2FwdHVyZXMgdGhlDQo+ICAgc3RhdHVzIG9mIHRoZSBhZGRyZXNzLXBoYXNlIHdyaXRl OyB0aGUgZGF0YS1waGFzZSBvY3BfcmVnX3dyaXRlKHRwLOKApg0KPiAtIFtMb3ddIHJ0bF9waHlf cGF0Y2hfcmVxdWVzdCgpIG5vdyBwZXJmb3JtcyBhbiB1bmNvbmRpdGlvbmFsDQo+ICAgb2NwX3Jl Z19yZWFkKE9DUF9QSFlfUEFUQ0hfU1RBVCkgYWZ0ZXIgdGhlIHdhaXQgbG9vcC4NCj4gLSBbTG93 XSBydGxfcmFtX2NvZGVfc3BlZWRfdXAoKSBhbmQgcnRsODE1Ml9md19waHlfdmVyKCkgaWdub3Jl DQo+ICAgc3JhbV9yZWFkKCkncyBuZXcgZXJyb3IgcmV0dXJuIHdoaWxlIHByZS1pbml0aWFsaXNp bmcgdGhlIHZlcnNpb27igKYNCj4gDQo+IC0tDQo+IA0KPiByODE1MjogYWRkIFRHUEhZIHJlZ2lz dGVyIGFjY2VzcyBmb3IgUlRMODE1NyBhbmQgUlRMODE1OQ0KPiANCj4gVGhpcyB0dXJucyBvY3Bf cmVnX3JlYWQoKS9vY3BfcmVnX3dyaXRlKCkgaW50byBkaXNwYXRjaCB3cmFwcGVycyBvdmVyIG5l dw0KPiB0cC0+cnRsX29wcy5waHlfcmVhZC9waHlfd3JpdGUgcG9pbnRlcnMgYW5kIGFkZHMgYSBU R1BIWSBtYWlsYm94DQo+IGltcGxlbWVudGF0aW9uIChVU0JfVEdQSFlfQUREUi9EQVRBL0NNRCkg Zm9yIFJUTDgxNTcgYW5kIFJUTDgxNTkuDQo+IEJlY2F1c2UgdGhlIG5ldyBwYXRoIGNhbiB0aW1l IG91dCwgdGhlIFBIWSBoZWxwZXIgbGF5ZXIgaXMgY29udmVydGVkIGZyb20NCj4gdm9pZC9yYXct dmFsdWUgcmV0dXJucyB0byBpbnQuDQo+IA0KPiBBIGZldyBxdWVzdGlvbnMgYmVsb3cgYWJvdXQg dGhlIG5ldyBlcnJvciBwYXRocyBhbmQgYWJvdXQgdGhlIGNoYW5nZWxvZy4NCj4gDQo+IFtTZXZl cml0eTogTWVkaXVtXQkNCj4gDQo+ID4gU2luY2Ugb2NwX3JlZ19yZWFkKCkvb2NwX3JlZ193cml0 ZSgpIGNhbiBub3cgZmFpbCBvbiBhIFRHUEhZIHRpbWVvdXQsDQo+ID4gZXZlcnkgaGVscGVyIGJ1 aWx0IG9uIHRvcCBvZiB0aGVtIChzcmFtX3JlYWQvd3JpdGUsIHNyYW0yX3JlYWQvd3JpdGUsDQo+ ID4gdGhlIG9jcF9yZWdfKl9iaXRzIGFuZCBNRElPIGJpdCBoZWxwZXJzKSBpcyBjb252ZXJ0ZWQg ZnJvbSB2b2lkL3Jhdy0NCj4gPiB2YWx1ZSByZXR1cm5zIHRvIGludCwgcHJvcGFnYXRpbmcgdGhl IGZhaWx1cmUgdG8gY2FsbGVycyBpbnN0ZWFkIG9mDQo+ID4gc2lsZW50bHkgb3BlcmF0aW5nIG9u IHN0YWxlIGRhdGEuDQo+IA0KPiBJcyAicHJvcGFnYXRpbmcgdGhlIGZhaWx1cmUgdG8gY2FsbGVy cyIgYWNjdXJhdGUgZm9yIGFsbCBvZiB0aGVzZT8gIEEgZmV3IHBsYWNlcw0KPiBzdGlsbCBzd2Fs bG93IG9yIGZhYnJpY2F0ZToNCj4gDQo+ICAgLSBzcmFtX3dyaXRlKCkgcmV0dXJucyB0aGUgc3Rh dHVzIG9mIHRoZSBPQ1BfU1JBTV9BRERSIHdyaXRlIG9ubHksIHRoZQ0KPiAgICAgT0NQX1NSQU1f REFUQSB3cml0ZSBzdGF0dXMgaXMgZHJvcHBlZC4NCj4gDQo+ICAgLSByODE1M19waHlfc3RhdHVz KCkgYW5kIHI4MTUyX21tZF9yZWFkKCkgcmV0dXJuIGEgemVyby1pbml0aWFsaXNlZCB1MTYNCj4g ICAgIG9uIGZhaWx1cmUsIHdoaWNoIGNhbGxlcnMgY2Fubm90IGRpc3Rpbmd1aXNoIGZyb20gYSBy ZWFsIHZhbHVlLg0KPiANCj4gICAtIHJ0bF9yYW1fY29kZV9zcGVlZF91cCgpIGFuZCBydGw4MTUy X2Z3X3BoeV92ZXIoKSBpZ25vcmUgc3JhbV9yZWFkKCkNCj4gICAgIGVudGlyZWx5Lg0KPiANCj4g ICAtIHRoZSBjaGlwcyB0aGF0IGNhbiBhY3R1YWxseSBmYWlsIGhlcmUsIFJUTF9WRVJfMTYgYW5k IFJUTF9WRVJfMTcsIHJ1bg0KPiAgICAgcjgxNTdfaHdfcGh5X2NmZygpL3I4MTU5X2h3X3BoeV9j ZmcoKSwgd2hpY2ggaWdub3JlIGV2ZXJ5IHJldHVybg0KPiAgICAgdmFsdWUuDQo+IA0KPiAgIC0g cnRsODE1Ml9zZXRfc3BlZWQoKSwgcnRsODE1Ml9zZXRfcGF1c2VwYXJhbSgpIGFuZCBydGw4MTUy X2lvY3RsKCkNCj4gICAgIGlnbm9yZSB0aGUgd3JpdGUgZXJyb3JzIGFuZCwgZm9yIFNJT0NHTUlJ UkVHLCB0aGUgcmVhZCBlcnJvci4NCj4gDQo+IFdvdWxkIGl0IGJlIGNsZWFyZXIgdG8gc2NvcGUg dGhlIHNlbnRlbmNlIHRvIHRoZSBoZWxwZXJzIHRoYXQgd2VyZSBhY3R1YWxseQ0KPiBjb252ZXJ0 ZWQ/DQoNClN1cmUuIFdpbGwgZG8uDQoNCj4gDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3VzYi9yODE1Mi5jIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgaW5kZXgNCj4gPiBmNDRkY2I4 OGI1YzZhLi4zNDczMDYxYWYxMjlhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3VzYi9y ODE1Mi5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMNCj4gDQo+IFsgLi4uIF0N Cj4gDQo+ID4gQEAgLTE2NjQsMTYgKzE2NzUsMzMgQEAgc3RhdGljIHZvaWQgb2NwX3JlZ193cml0 ZShzdHJ1Y3QgcjgxNTIgKnRwLA0KPiA+IHUxNiBhZGRyLCB1MTYgZGF0YSkNCj4gPg0KPiA+ICAg ICAgIG9jcF9pbmRleCA9IChhZGRyICYgMHgwZmZmKSB8IDB4YjAwMDsNCj4gPiAgICAgICBvY3Bf d3JpdGVfd29yZCh0cCwgTUNVX1RZUEVfUExBLCBvY3BfaW5kZXgsIGRhdGEpOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvY3BfcmVn X3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGFkZHIsIHUxNiAqZGF0YSkgew0KPiA+ICsgICAg IHJldHVybiB0cC0+cnRsX29wcy5waHlfcmVhZCh0cCwgYWRkciwgZGF0YSk7IH0NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgb2NwX3JlZ193cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgYWRkciwg dTE2IGRhdGEpIHsNCj4gPiArICAgICByZXR1cm4gdHAtPnJ0bF9vcHMucGh5X3dyaXRlKHRwLCBh ZGRyLCBkYXRhKTsNCj4gPiAgfQ0KPiA+DQo+ID4gLXN0YXRpYyBpbmxpbmUgdm9pZCByODE1Ml9t ZGlvX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUzMiByZWdfYWRkciwNCj4gPiB1MzIgdmFsdWUp DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHI4MTUyX21kaW9fd3JpdGUoc3RydWN0IHI4MTUyICp0 cCwgdTMyIHJlZ19hZGRyLA0KPiA+ICt1MzIgdmFsdWUpDQo+ID4gIHsNCj4gPiAtICAgICBvY3Bf cmVnX3dyaXRlKHRwLCBPQ1BfQkFTRV9NSUkgKyByZWdfYWRkciAqIDIsIHZhbHVlKTsNCj4gPiAr ICAgICByZXR1cm4gb2NwX3JlZ193cml0ZSh0cCwgT0NQX0JBU0VfTUlJICsgcmVnX2FkZHIgKiAy LCB2YWx1ZSk7DQo+ID4gIH0NCj4gPg0KPiA+ICBzdGF0aWMgaW5saW5lIGludCByODE1Ml9tZGlv X3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTMyIHJlZ19hZGRyKSAgew0KPiA+IC0gICAgIHJldHVy biBvY3BfcmVnX3JlYWQodHAsIE9DUF9CQVNFX01JSSArIHJlZ19hZGRyICogMik7DQo+ID4gKyAg ICAgdTE2IGRhdGE7DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0g b2NwX3JlZ19yZWFkKHRwLCBPQ1BfQkFTRV9NSUkgKyByZWdfYWRkciAqIDIsICZkYXRhKTsNCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIHJldCA8IDAgPyByZXQgOiBkYXRhOw0KPiA+ICB9DQo+IA0K PiBbU2V2ZXJpdHk6IEhpZ2hdDQo+IA0KPiByODE1Ml9tZGlvX3JlYWQoKSBub3cgbWl4ZXMgZXJy bm8gdmFsdWVzIGFuZCByZWdpc3RlciBjb250ZW50cyBpbiB0aGUgc2FtZQ0KPiBpbnQsIGJ1dCB0 aGUgY29uc3VtZXJzIHN0aWxsIGRlY29kZSB0aGUgcmVzdWx0IGFzIFBIWSByZWdpc3RlciBiaXRz Lg0KPiByZWFkX21paV93b3JkKCkgaXMgd2lyZWQgdXAgYXMgdHAtPm1paS5tZGlvX3JlYWQsIGFu ZCB0aGUgbWlpIGxpYnJhcnkgaGFzIG5vDQo+IGVycm9yIGNoYW5uZWw6DQo+IA0KPiBkcml2ZXJz L25ldC9taWkuYzptaWlfbndheV9yZXN0YXJ0KCkgew0KPiAgICAgICAgIGJtY3IgPSBtaWktPm1k aW9fcmVhZChtaWktPmRldiwgbWlpLT5waHlfaWQsIE1JSV9CTUNSKTsNCj4gDQo+ICAgICAgICAg aWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7DQo+ICAgICAgICAgICAgICAgICBibWNyIHw9IEJN Q1JfQU5SRVNUQVJUOw0KPiAgICAgICAgICAgICAgICAgbWlpLT5tZGlvX3dyaXRlKG1paS0+ZGV2 LCBtaWktPnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOw0KPiAgICAgICAgIC4uLg0KPiB9DQo+IA0K PiBPbiBhIFRHUEhZIGJ1c3kgdGltZW91dCBibWNyIGJlY29tZXMgMHhmZjkyLCB3aGljaCBoYXMg Qk1DUl9BTkVOQUJMRQ0KPiBzZXQsIHNvIDB4ZmY5MiBnZXRzIHdyaXR0ZW4gYmFjayBpbnRvIE1J SV9CTUNSLiAgVGhhdCB2YWx1ZSBhbHNvIGNhcnJpZXMNCj4gQk1DUl9SRVNFVCwgQk1DUl9MT09Q QkFDSywgQk1DUl9QRE9XTiBhbmQgQk1DUl9JU09MQVRFLg0KPiANCj4gQ2FuIHRoaXMgcG93ZXIg ZG93biBvciBpc29sYXRlIHRoZSBQSFk/ICBUaGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbQ0KPiBy dGw4MTUyX253YXlfcmVzZXQoKSBhbmQgcnRsODE1Ml9zZXRfZWVlKCkuICBtaWlfZXRodG9vbF9n ZXRfbGlua19rc2V0dGluZ3MoKQ0KPiBzaW1pbGFybHkgc3RvcmVzIHRoZSBjYWxsYmFjayByZXN1 bHRzIGluIHUxNiBibWNyL2Jtc3IgYW5kIGRlY29kZXMgdGhlaXIgYml0cw0KPiB3aXRoIG5vIGVy cm9yIGNoZWNrLg0KPiANCj4gSW4gcnRsODE1Ml9pb2N0bCgpLCBTSU9DR01JSVJFRyByZXF1aXJl cyBubyBjYXBhYmlsaXR5IGFuZCBkb2VzOg0KPiANCj4gICAgICAgICBkYXRhLT52YWxfb3V0ID0g cjgxNTJfbWRpb19yZWFkKHRwLCBkYXRhLT5yZWdfbnVtKTsNCj4gDQo+IHdpdGggcmVzIGxlZnQg YXQgMCwgc28gdXNlcnNwYWNlIHJlY2VpdmVzIHRoZSB0cnVuY2F0ZWQgZXJybm8gKC0xMTAgLT4N Cj4gMHhmZjkyKSBhcyBhIFBIWSByZWdpc3RlciB2YWx1ZTsgU0lPQ1NNSUlSRUcgZHJvcHMgcjgx NTJfbWRpb193cml0ZSgpJ3MgbmV3DQo+IGVycm9yIHRoZSBzYW1lIHdheS4gIHJ0bDgxNTJfZ2V0 X3BhdXNlcGFyYW0oKSBwdXRzIHRoZSB0aHJlZSByZWFkcyBpbnRvIHUxNg0KPiBsb2NhbHMgYW5k IGJpdC10ZXN0cyB0aGVtLCBzbyAweGZmOTIgcmVwb3J0cyBhdXRvbmVnIGFzIGVuYWJsZWQuDQo+ IA0KPiBBbmQgaW4gcnRsODE1Ml9zZXRfc3BlZWQoKSB0aGUgcmVzZXQgcG9sbDoNCj4gDQo+ICAg ICAgICAgICAgICAgICBpZiAoKHI4MTUyX21kaW9fcmVhZCh0cCwgTUlJX0JNQ1IpICYgQk1DUl9S RVNFVCkgPT0gMCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+IA0KPiBjYW4g bmV2ZXIgYnJlYWsgZWFybHksIHNpbmNlIGV2ZXJ5IG5lZ2F0aXZlIHJldHVybiBoYXMgYml0IDE1 IHNldCwgc28gaXQgc3BpbnMgNTAgKg0KPiAyMCBtcyB3aXRoIHRwLT5jb250cm9sIGhlbGQuICBT aG91bGQgdGhlc2UgY2FsbGVycyBiZSB0YXVnaHQgYWJvdXQgdGhlDQo+IG5lZ2F0aXZlIHJldHVy biBpbiB0aGUgc2FtZSBwYXRjaD8NCg0KVGhlIGRyaXZlciBkaWRuJ3QgcHJvcGFnYXRlIGVycm9y cyBmb3IgY2FsbGVycyB0byBoYW5kbGUuDQpXaGVuIHI4MTUyX2NvbnRyb2xfbXNnKCkgZmFpbGVk LCBnZXRfcmVnaXN0ZXJzKCkgY2FsbHMgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpIHRvIGluaXRp YWxpemUNCnRoZSBkYXRhLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBtZW50aW9uZWQgYWJvdmUgZXhp c3RlZCBiZWZvcmUgdGhpcyBwYXRjaC4NCg0KSW4gdGhpcyBwYXRjaCwgSSBmb2xsb3dlZCB0aGUg b3JpZ2luYWwgYmVoYXZpb3IuIA0KVG8gc29sdmUgdGhpcyBpc3N1ZSwgdGhlIGRyaXZlciBzaG91 bGQgcHJvcGFnYXRlIGVycm9ycy4NClNvLCBJIHdvdWxkIHJlY29tbWVuZCBzb2x2aW5nIHRoZSBp c3N1ZSBpbiBhIGZ1dHVyZSBzZXJpZXMuDQoNCj4gDQo+ID4NCj4gPiAgc3RhdGljIGludCB3YWl0 X2NtZF9yZWFkeShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgY21kKSBAQCAtMTc5MiwxNg0KPiA+ICsx ODIwLDMyIEBAIHN0YXRpYyBpbnQgcnRsX2lwX3NldF9iaXRzKHN0cnVjdCByODE1MiAqdHAsIHUx NiBhZGRyLCB1MzIgc2V0KQ0KPiA+ICAgICAgIHJldHVybiBydGxfaXBfdzB3MSh0cCwgYWRkciwg MCwgc2V0KTsgIH0NCj4gPg0KPiA+IC1zdGF0aWMgdm9pZCBzcmFtX3dyaXRlKHN0cnVjdCByODE1 MiAqdHAsIHUxNiBhZGRyLCB1MTYgZGF0YSkNCj4gPiArc3RhdGljIGludCBzcmFtX3dyaXRlKHN0 cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyLCB1MTYgZGF0YSkNCj4gPiAgew0KPiA+IC0gICAgIG9j cF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0FERFIsIGFkZHIpOw0KPiA+ICsgICAgIGludCByZXQ7 DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IG9jcF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0FERFIs IGFkZHIpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBv dXQ7DQo+ID4gKw0KPiA+ICAgICAgIG9jcF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0RBVEEsIGRh dGEpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gIH0NCj4g DQo+IFtTZXZlcml0eTogTG93XQ0KPiANCj4gSXMgZHJvcHBpbmcgdGhlIE9DUF9TUkFNX0RBVEEg d3JpdGUgc3RhdHVzIGhlcmUgaW50ZW50aW9uYWw/ICBzcmFtX3dyaXRlKCkNCj4gcmV0dXJucyB0 aGUgKHN1Y2Nlc3NmdWwpIE9DUF9TUkFNX0FERFIgc3RhdHVzLCBzbyBhIFRHUEhZIHRpbWVvdXQg b24gdGhlDQo+IGRhdGEgcGhhc2UgaXMgcmVwb3J0ZWQgdG8gY2FsbGVycyBhcyBzdWNjZXNzLiAg c3JhbTJfd3JpdGUoKSwgY29udmVydGVkIGluIHRoaXMNCj4gc2FtZSBwYXRjaCwgZG9lcyBjYXB0 dXJlIGl0Og0KPiANCj4gICAgICAgICByZXQgPSBvY3BfcmVnX3dyaXRlKHRwLCBPQ1BfU1JBTTJf QUREUiwgYWRkcik7DQo+ICAgICAgICAgaWYgKHJldCA8IDApDQo+ICAgICAgICAgICAgICAgICBn b3RvIG91dDsNCj4gDQo+ICAgICAgICAgcmV0ID0gb2NwX3JlZ193cml0ZSh0cCwgT0NQX1NSQU0y X0RBVEEsIGRhdGEpOw0KPiANCj4gTm8gY3VycmVudCBjYWxsZXIgbG9va3MgYXQgc3JhbV93cml0 ZSgpJ3MgcmV0dXJuIHZhbHVlLCBzbyB0aGVyZSBpcyBubyB2aXNpYmxlDQo+IGVmZmVjdCB0b2Rh eS4NCg0Kc3JhbV93cml0ZSgpIHNob3VsZCByZXR1cm4gdGhlIE9DUF9TUkFNX0RBVEEgc3RhdHVz LiBJIHdpbGwgZml4IGl0Lg0KDQo+IA0KPiA+DQo+ID4gLXN0YXRpYyB1MTYgc3JhbV9yZWFkKHN0 cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyKQ0KPiA+ICtzdGF0aWMgaW50IHNyYW1fcmVhZChzdHJ1 Y3QgcjgxNTIgKnRwLCB1MTYgYWRkciwgdTE2ICpkYXRhKQ0KPiA+ICB7DQo+ID4gLSAgICAgb2Nw X3JlZ193cml0ZSh0cCwgT0NQX1NSQU1fQUREUiwgYWRkcik7DQo+ID4gLSAgICAgcmV0dXJuIG9j cF9yZWdfcmVhZCh0cCwgT0NQX1NSQU1fREFUQSk7DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiAr DQo+ID4gKyAgICAgcmV0ID0gb2NwX3JlZ193cml0ZSh0cCwgT0NQX1NSQU1fQUREUiwgYWRkcik7 DQo+ID4gKyAgICAgaWYgKHJldCA8IDApDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4g PiArDQo+ID4gKyAgICAgcmV0ID0gb2NwX3JlZ19yZWFkKHRwLCBPQ1BfU1JBTV9EQVRBLCBkYXRh KTsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICB9DQo+IA0K PiBbIC4uLiBdDQo+IA0KPiA+IEBAIC0xOTA2LDEwMCArMTk1MCwyMTcgQEAgc3RhdGljIHZvaWQg b2NwX2J5dGVfc2V0X2JpdHMoc3RydWN0IHI4MTUyDQo+ID4gKnRwLCB1MTYgdHlwZSwgdTE2IGlu ZGV4LCB1OCBzZXQpDQo+IA0KPiBbIC4uLiBdDQo+IA0KPiA+ICtzdGF0aWMgaW50IHdhaXRfdGdw aHlfY21kX3JlYWR5KHN0cnVjdCByODE1MiAqdHApIHsNCj4gPiArICAgICB1MTYgb2NwX2RhdGE7 DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gcmVhZF9wb2xsX3Rp bWVvdXQob2NwX3JlYWRfd29yZCwgb2NwX2RhdGEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsDQo+ICZ0cC0+ZmxhZ3MpIHx8 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShvY3BfZGF0YSAmIFRHUEhZX0NN RF9CVVNZKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAyMDAwMCwg ZmFsc2UsIHRwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVV9UWVBFX1VT QiwgVVNCX1RHUEhZX0NNRCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAg ICAgICAgICBkZXZfZXJyKCZ0cC0+aW50Zi0+ZGV2LCAiVEdQSFkgY21kIGJ1c3kgdGltZW91dFxu Iik7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiB0ZXN0X2JpdChSVEw4MTUyX0lOQUNDRVNTSUJM RSwgJnRwLT5mbGFncykgPyAtRU5PREVWIDoNCj4gPiArcmV0OyB9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IHJ0bF90Z3BoeV9hY2Nlc3Moc3RydWN0IHI4MTUyICp0cCwgdTE2IGFkZHIsIHUxNiAq ZGF0YSwNCj4gPiArYm9vbCB3cml0ZSkgew0KPiA+ICsgICAgIHUxNiBjbWQgPSAwOw0KPiA+ICsg ICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHdhaXRfdGdwaHlfY21kX3JlYWR5 KHRwKTsNCj4gPiArICAgICBpZiAocmV0IDwgMCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPiANCj4gW1NldmVyaXR5OiBNZWRpdW1dDQo+IA0KPiBXaGVuIHRoaXMgYnVzeS13YWl0IGFi b3J0cywgdGhlIHJlcXVlc3RlZCBhY2Nlc3MgaXMgc2tpcHBlZCBidXQgdGhlIGluZGlyZWN0DQo+ IFNSQU0gcHJvZ3JhbW1pbmcgc3RhdGUgaXMgbGVmdCBhcyBpdCB3YXMuICBUaGUgUlRMODE1Ny9S VEw4MTU5DQo+IGNvbmZpZ3VyYXRpb24gcm91dGluZXMgdGhlbiBrZWVwIGlzc3VpbmcgZGF0YSB3 cml0ZXMgYWdhaW5zdCB3aGF0ZXZlciBhZGRyZXNzDQo+IHdhcyBsYXRjaGVkIGxhc3QuICBGb3Ig ZXhhbXBsZSByODE1N19od19waHlfY2ZnKCkgZG9lczoNCj4gDQo+ICAgICAgICAgb2NwX3JlZ193 cml0ZSh0cCwgT0NQX1NSQU1fQUREUiwgMHg4ZjljKTsNCj4gICAgICAgICBvY3BfcmVnX3dyaXRl KHRwLCBPQ1BfU1JBTV9EQVRBLCAweDAwMDUpOw0KPiAgICAgICAgIG9jcF9yZWdfd3JpdGUodHAs IE9DUF9TUkFNX0RBVEEsIDB4MDAwMCk7DQo+ICAgICAgICAgLi4uDQo+IA0KPiBhbmQgcjgxNTlf aHdfcGh5X2NmZygpIHRoZSBzYW1lIGZvciAweDgxYzQsIHdoaWxlIHRoZSBmaXJtd2FyZSBhcHBs aWVycyBkbzoNCj4gDQo+ICAgICAgICAgb2NwX3JlZ193cml0ZSh0cCwgT0NQX1NSQU1fQUREUiwg X19sZTE2X3RvX2NwdShwaHktPmZ3X3JlZykpOw0KPiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBu dW07IGkrKykNCj4gICAgICAgICAgICAgICAgIG9jcF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0RB VEEsDQo+IF9fbGUxNl90b19jcHUoZGF0YVtpXSkpOw0KPiANCj4gSWYgdGhlIGFkZHJlc3Mgd3Jp dGUgYWJvcnRzIG9uIGEgYnVzeSB0aW1lb3V0IGJ1dCBhIGRhdGEgd3JpdGUgYSBmZXcNCj4gbWlj cm9zZWNvbmRzIGxhdGVyIGZpbmRzIHRoZSBtYWlsYm94IGZyZWUsIGNhbiB0aGVzZSB3b3JkcyBs YW5kIG9uIHRoZQ0KPiBwcmV2aW91c2x5IGxhdGNoZWQgU1JBTSBhZGRyZXNzPyAgQW5kIHNpbmNl IHN1Y2Nlc3NmdWwgZGF0YSB3cml0ZXMNCj4gYXV0by1hZHZhbmNlIHRoZSBkZXN0aW5hdGlvbiwg d291bGQgYSBza2lwcGVkIHdvcmQgc2hpZnQgZXZlcnkgZm9sbG93aW5nDQo+IHdvcmQgb2YgdGhl IGltYWdlPyAgQm90aCBmdW5jdGlvbnMgY29udGludWUgb24gdG8gdGhlIGJyZWFrcG9pbnQgd3Jp dGVzLA0KPiB1cGRhdGUgdGhlIGNhY2hlZCB1cHNfaW5mbyBzdGF0ZSBhbmQgZmluYWxseSBhc3Nl cnQgUEhZX1JFU0VUIGFzIGlmIHRoZSB3aG9sZQ0KPiBzZXF1ZW5jZSBoYWQgYmVlbiBwcm9ncmFt bWVkLg0KDQpUaGUgY3VycmVudCBwYXRjaCBpcyBiYXNlZCBvbiB0aGUgZHJpdmVyJ3MgYmVoYXZp b3IuDQpFcnJvciBoYW5kbGluZyBhbmQgcHJvcGFnYXRpb24gYXJlIGNvbXBsZXggaXNzdWVzOyB0 aGUgZHJpdmVyIHNob3VsZCByZXR1cm4gZXJyb3JzIGRpcmVjdGx5IA0KcmF0aGVyIHRoYW4gcmVs eSBvbiB0aGUgUlRMODE1Ml9JTkFDQ0VTU0lCTEUgZmxhZywgc28gSSBwcmVmZXIgdG8gc29sdmUg aXQgaW4gYSBuZXcgc2VyaWVzLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICBpZiAod3JpdGUpIHsN Cj4gPiArICAgICAgICAgICAgIGNtZCB8PSBUR1BIWV9DTURfV1I7DQo+ID4gKyAgICAgICAgICAg ICBvY3Bfd3JpdGVfd29yZCh0cCwgTUNVX1RZUEVfVVNCLCBVU0JfVEdQSFlfREFUQSwNCj4gKmRh dGEpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgb2NwX3dyaXRlX3dvcmQodHAsIE1D VV9UWVBFX1VTQiwgVVNCX1RHUEhZX0FERFIsIGFkZHIpOw0KPiA+ICsNCj4gPiArICAgICBjbWQg fD0gVEdQSFlfQ01EX0JVU1k7DQo+ID4gKyAgICAgb2NwX3dyaXRlX3dvcmQodHAsIE1DVV9UWVBF X1VTQiwgVVNCX1RHUEhZX0NNRCwgY21kKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCF3cml0ZSkg ew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gd2FpdF90Z3BoeV9jbWRfcmVhZHkodHApOw0KPiA+ ICsgICAgICAgICAgICAgaWYgKHJldCA8IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdv dG8gb3V0Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICpkYXRhID0gb2NwX3JlYWRfd29yZCh0 cCwgTUNVX1RZUEVfVVNCLA0KPiBVU0JfVEdQSFlfREFUQSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsN Cj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gDQo+IFtTZXZlcml0 eTogTWVkaXVtXQ0KPiANCj4gVGhlIGZvdXIgYWNjZXNzZXMgdGhhdCBtYWtlIHVwIHRoZSB0cmFu c2FjdGlvbiBhbGwgdXNlIHRoZSBzdGF0dXMtbGVzcyBhY2Nlc3NvcnMsDQo+IHNvIGJ1cy1sZXZl bCBmYWlsdXJlcyBjb21lIGJhY2sgYXMgc3VjY2Vzc2Z1bCBQSFkgYWNjZXNzZXMuDQo+IFR3byBj YXNlczoNCj4gDQo+IElmIHRoZSBVU0JfVEdQSFlfREFUQSBvciBVU0JfVEdQSFlfQUREUiBjb250 cm9sIHRyYW5zZmVyIGZhaWxzLA0KPiByODE1Ml9jb250cm9sX21zZygpIHNldHMgUlRMODE1Ml9J TkFDQ0VTU0lCTEUgYW5kIHRoZSByZW1haW5pbmcgd3JpdGVzDQo+IGJlY29tZSAtRU5PREVWIG5v LW9wcywgeWV0IHJ0bF90Z3BoeV9hY2Nlc3MoKSBzdGlsbCByZXR1cm5zIDAuICBTaG91bGQgdGhl DQo+IHN1Y2Nlc3MgcGF0aCByZS1jaGVjayBSVEw4MTUyX0lOQUNDRVNTSUJMRSBiZWZvcmUgcmV0 dXJuaW5nPw0KPiANCj4gc2V0X3JlZ2lzdGVycygpIGFuZCBnZXRfcmVnaXN0ZXJzKCkgY2FuIGFs c28gcmV0dXJuIGVhcmx5LCBiZWZvcmUNCj4gcjgxNTJfY29udHJvbF9tc2coKSBydW5zIGF0IGFs bDoNCj4gDQo+ICAgICAgICAgdG1wID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTsN Cj4gICAgICAgICBpZiAoIXRtcCkNCj4gICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0K PiANCj4gSW4gdGhhdCBjYXNlIFJUTDgxNTJfSU5BQ0NFU1NJQkxFIGlzIG5vdCBzZXQsIHNvIHRo ZSBVU0JfVEdQSFlfQ01EIHdyaXRlDQo+IGNhbiBsYXVuY2ggYSBjb21tYW5kIHdob3NlIG9wZXJh bmRzIHdlcmUgbmV2ZXIgZGVsaXZlcmVkLg0KPiANCj4gT24gdGhlIHJlYWQgc2lkZSwgZ2V0X3Jl Z2lzdGVycygpIGRvZXM6DQo+IA0KPiAgICAgICAgIGlmIChyZXQgPCAwKQ0KPiAgICAgICAgICAg ICAgICAgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpOw0KPiAgICAgICAgIGVsc2UNCj4gICAgICAg ICAgICAgICAgIG1lbWNweShkYXRhLCB0bXAsIHNpemUpOw0KPiANCj4gc28gKmRhdGEgYmVjb21l cyAweGZmZmYgYWZ0ZXIgYSBmYWlsZWQgdHJhbnNmZXIsIGFuZCBvbiBpdHMgLUVOT01FTSBwYXRo DQo+IG9jcF9yZWFkX3dvcmQoKSdzIGxvY2FsIHRtcCBpcyBuZXZlciB3cml0dGVuIGF0IGFsbC4g IERvZXMgdGhlIHJlYWQgdGhlbg0KPiBwdWJsaXNoIHRoYXQgdmFsdWUgd2l0aCB0aGUgc3VjY2Vz cyBzdGF0dXMgb2YgdGhlIHByZWNlZGluZyBidXN5IHBvbGw/DQoNCkkgZm9sbG93ZWQgdGhlIGlt cGxlbWVudGF0aW9uIG9mIG9jcF9hZHZfcmVhZC93cml0ZSBpbiB0aGUgZHJpdmVyLg0KSWYgcnRs X3RncGh5X2FjY2VzcyBzaG91bGQgZG8gdGhpcywgb2NwX2Fkdl9yZWFkL3dyaXRlIHNob3VsZCBk byBpdCwgdG9vLg0KSSBwcmVmZXIgdG8gZG8gdGhpcyBpbiBhIGZ1dHVyZSBzZXJpZXMuDQoNCj4g DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHI4MTU3X3BoeV9yZWFkKHN0cnVjdCByODE1MiAqdHAs IHUxNiBhZGRyLCB1MTYgKmRhdGEpIHsNCj4gPiArICAgICByZXR1cm4gcnRsX3RncGh5X2FjY2Vz cyh0cCwgYWRkciwgZGF0YSwgZmFsc2UpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHI4MTU3 X3BoeV93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgYWRkciwgdTE2IGRhdGEpIHsNCj4gPiAr ICAgICByZXR1cm4gcnRsX3RncGh5X2FjY2Vzcyh0cCwgYWRkciwgJmRhdGEsIHRydWUpOw0KPiA+ ICB9DQo+ID4NCj4gPiAgc3RhdGljIGludA0KPiA+IEBAIC00MTc3LDExICs0MzM4LDEzIEBAIHN0 YXRpYyB2b2lkIHI4MTUzYl9ncmVlbl9lbihzdHJ1Y3QgcjgxNTIgKnRwLA0KPiA+IGJvb2wgZW5h YmxlKQ0KPiA+DQo+ID4gIHN0YXRpYyB1MTYgcjgxNTNfcGh5X3N0YXR1cyhzdHJ1Y3QgcjgxNTIg KnRwLCB1MTYgZGVzaXJlZCkgIHsNCj4gPiAtICAgICB1MTYgZGF0YTsNCj4gPiArICAgICB1MTYg ZGF0YSA9IDA7DQo+ID4gICAgICAgaW50IGk7DQo+ID4NCj4gPiAgICAgICBmb3IgKGkgPSAwOyBp IDwgNTAwOyBpKyspIHsNCj4gPiAtICAgICAgICAgICAgIGRhdGEgPSBvY3BfcmVnX3JlYWQodHAs IE9DUF9QSFlfU1RBVFVTKTsNCj4gPiArICAgICAgICAgICAgIGlmIChvY3BfcmVnX3JlYWQodHAs IE9DUF9QSFlfU1RBVFVTLCAmZGF0YSkgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArDQo+ID4gICAgICAgICAgICAgICBkYXRhICY9IFBIWV9TVEFUX01BU0s7DQo+ ID4gICAgICAgICAgICAgICBpZiAoZGVzaXJlZCkgew0KPiA+ICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZGF0YSA9PSBkZXNpcmVkKQ0KPiANCj4gW1NldmVyaXR5OiBNZWRpdW1dDQo+IA0KPiBT aW5jZSBydGxfdGdwaHlfYWNjZXNzKCkgbGVhdmVzICpkYXRhIHVudG91Y2hlZCBvbiBhIGJ1c3kt d2FpdCBmYWlsdXJlLCB0aGlzDQo+IGJyZWFrIHJldHVybnMgdGhlIGluaXRpYWwgMCBhcyBhbiBv cmRpbmFyeSBQSFkgc3RhdHVzLCBhbmQgdGhlIHUxNiBzaWduYXR1cmUNCj4gZ2l2ZXMgY2FsbGVy cyBubyB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZS4gIDAgbWF0Y2hlcyBub25lIG9mDQo+IFBI WV9TVEFUX0xBTl9PTiwgUEhZX1NUQVRfUFdSRE4gb3IgUEhZX1NUQVRfRVhUX0lOSVQsIHNvIGlu DQo+IHI4MTU2X2h3X3BoeV9jZmcoKSwgcjgxNTdfaHdfcGh5X2NmZygpIGFuZCByODE1OV9od19w aHlfY2ZnKCk6DQo+IA0KPiAgICAgICAgIGRhdGEgPSByODE1M19waHlfc3RhdHVzKHRwLCAwKTsN Cj4gICAgICAgICBzd2l0Y2ggKGRhdGEpIHsNCj4gICAgICAgICAuLi4NCj4gICAgICAgICBkZWZh dWx0Og0KPiAgICAgICAgICAgICAgICAgcnRsODE1Ml9hcHBseV9maXJtd2FyZSh0cCwgZmFsc2Up Ow0KPiANCj4gdGhlIHdob2xlIFBIWSBwYXRjaCBzZXF1ZW5jZSBydW5zIGFnYWluc3QgYSBQSFkg dGhhdCBpcyBrbm93biB0byBiZQ0KPiB1bnJlYWNoYWJsZS4gIEEgbGl0dGxlIGxhdGVyIHRoZSBz YW1lIGZ1bmN0aW9ucyBkbzoNCj4gDQo+ICAgICAgICAgZGF0YSA9IHI4MTUzX3BoeV9zdGF0dXMo dHAsIFBIWV9TVEFUX0xBTl9PTik7DQo+ICAgICAgICAgV0FSTl9PTl9PTkNFKGRhdGEgIT0gUEhZ X1NUQVRfTEFOX09OKTsNCj4gDQo+IFdvdWxkIGEgcGxhaW4gVEdQSFkgdGltZW91dCBub3cgcHJv ZHVjZSBhIFdBUk5fT05fT05DRSBzcGxhdCBoZXJlPw0KPiBTaG91bGQNCj4gcjgxNTNfcGh5X3N0 YXR1cygpIGdhaW4gYW4gZXJyb3IgcmV0dXJuIGluc3RlYWQ/DQoNClRoZSBkcml2ZXIgZGlkbid0 IGhhbmRsZSBhbiBlcnJvciByZXR1cm4gb3IgcHJvcGFnYXRlIGFuIGVycm9yLg0KVGhlcmVmb3Jl LCBJIHdvdWxkIHJlY29tbWVuZCBzb2x2aW5nIHRoaXMgaXNzdWUgaW4gYSBmdXR1cmUgc2VyaWVz Lg0KDQo+IA0KPiBbIC4uLiBdDQo+IA0KPiA+IEBAIC00NTg3LDcgKzQ3NTAsOCBAQCBzdGF0aWMg aW5saW5lIHZvaWQgcnRsX3Jlc2V0X29jcF9iYXNlKHN0cnVjdA0KPiA+IHI4MTUyICp0cCkgIHN0 YXRpYyBpbnQgcnRsX3BoeV9wYXRjaF9yZXF1ZXN0KHN0cnVjdCByODE1MiAqdHAsIGJvb2wNCj4g PiByZXF1ZXN0LCBib29sIHdhaXQpICB7DQo+ID4gICAgICAgdTE2IGNoZWNrOw0KPiA+IC0gICAg IGludCBpOw0KPiA+ICsgICAgIHUxNiBvY3BfZGF0YSA9IDA7DQo+ID4gKyAgICAgaW50IGksIHJl dDsNCj4gPg0KPiA+ICAgICAgIGlmIChyZXF1ZXN0KSB7DQo+ID4gICAgICAgICAgICAgICBvY3Bf cmVnX3NldF9iaXRzKHRwLCBPQ1BfUEhZX1BBVENIX0NNRCwNCj4gUEFUQ0hfUkVRVUVTVCk7DQo+ IA0KPiBbU2V2ZXJpdHk6IE1lZGl1bV0NCj4gDQo+IFRoZXNlIHR3byBjYWxscyBhcmUgdGhlIG9u ZXMgdGhhdCBhY3R1YWxseSB0YWtlIGFuZCBkcm9wIHRoZSBkcml2ZXIvUEhZLU1DVQ0KPiBoYW5k c2hha2UgYml0LCBhbmQgdGhleSBzdGlsbCBkaXNjYXJkIHRoZSBuZXdseSBhZGRlZCBlcnJvciBy ZXR1cm46DQo+IA0KPiAgICAgICAgIGlmIChyZXF1ZXN0KSB7DQo+ICAgICAgICAgICAgICAgICBv Y3BfcmVnX3NldF9iaXRzKHRwLCBPQ1BfUEhZX1BBVENIX0NNRCwNCj4gUEFUQ0hfUkVRVUVTVCk7 DQo+ICAgICAgICAgICAgICAgICBjaGVjayA9IDA7DQo+ICAgICAgICAgfSBlbHNlIHsNCj4gICAg ICAgICAgICAgICAgIG9jcF9yZWdfY2xyX2JpdHModHAsIE9DUF9QSFlfUEFUQ0hfQ01ELA0KPiBQ QVRDSF9SRVFVRVNUKTsNCj4gICAgICAgICAgICAgICAgIGNoZWNrID0gUEFUQ0hfUkVBRFk7DQo+ ICAgICAgICAgfQ0KPiANCj4gV2l0aCB3YWl0ID09IGZhbHNlIHRoZSBwb2xsaW5nIGxvb3AgaXMg c2tpcHBlZCBhbmQgdGhlIGZ1bmN0aW9uIHJlYWNoZXMgInJldHVybg0KPiAwIiB1bmNvbmRpdGlv bmFsbHksIHNvIGEgZmFpbGVkIGFjcXVpcmUgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBzdWNj ZXNzLiAgVGhhdA0KPiBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgcnRsODE1Ml9hcHBseV9maXJtd2Fy ZSh0cCwgdHJ1ZSkgLT4gcnRsX3ByZV9yYW1fY29kZSguLi4sDQo+IHdhaXQgPSAhcG93ZXJfY3V0 ID0gZmFsc2UpLCBhbmQgdGhlIGNhbGxlcnMgdXNlIHRoZSB6ZXJvIGFzIHBlcm1pc3Npb24gdG8N Cj4gcHJvY2VlZDoNCj4gDQo+ICAgICAgICAgaWYgKHJ0bF9waHlfcGF0Y2hfcmVxdWVzdCh0cCwg dHJ1ZSwgd2FpdCkpDQo+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVUSU1FOw0KPiANCj4gICAg ICAgICBydGxfcGF0Y2hfa2V5X3NldCh0cCwga2V5X2FkZHIsIHBhdGNoX2tleSk7DQo+IA0KPiBD YW4gUEhZIFJBTSBjb2RlIHRoZW4gYmUgc3RyZWFtZWQgd2hpbGUgdGhlIFBIWSBNQ1Ugc3RpbGwg b3ducyB0aGUgUEhZPw0KPiBTeW1tZXRyaWNhbGx5LCBhIHRpbWVkLW91dCByZWxlYXNlIGxlYXZl cyBQQVRDSF9SRVFVRVNUIGFzc2VydGVkIHdoaWxlIDAgaXMNCj4gcmV0dXJuZWQuDQo+IA0KPiA+ DQo+ID4gQEAgLTQ1OTgsMjUgKzQ3NjIsMjMgQEAgc3RhdGljIGludCBydGxfcGh5X3BhdGNoX3Jl cXVlc3Qoc3RydWN0IHI4MTUyICp0cCwNCj4gYm9vbCByZXF1ZXN0LCBib29sIHdhaXQpDQo+ID4g ICAgICAgfQ0KPiA+DQo+ID4gICAgICAgZm9yIChpID0gMDsgd2FpdCAmJiBpIDwgNTAwMDsgaSsr KSB7DQo+ID4gLSAgICAgICAgICAgICB1MzIgb2NwX2RhdGE7DQo+ID4gLQ0KPiA+ICAgICAgICAg ICAgICAgaWYgKHRlc3RfYml0KFJUTDgxNTJfSU5BQ0NFU1NJQkxFLCAmdHAtPmZsYWdzKSkNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ID4NCj4gPiAgICAgICAg ICAgICAgIHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCj4gPiAtICAgICAgICAgICAgIG9jcF9k YXRhID0gb2NwX3JlZ19yZWFkKHRwLCBPQ1BfUEhZX1BBVENIX1NUQVQpOw0KPiA+IC0gICAgICAg ICAgICAgaWYgKChvY3BfZGF0YSAmIFBBVENIX1JFQURZKSBeIGNoZWNrKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0ID0gb2NwX3JlZ19yZWFkKHRwLCBPQ1BfUEhZX1BBVENIX1NUQVQsICZvY3BfZGF0 YSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAocmV0IDwgMCB8fCAob2NwX2RhdGEgJiBQQVRDSF9S RUFEWSkgXiBjaGVjaykNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gICAg ICAgfQ0KPiA+DQo+ID4gLSAgICAgaWYgKHJlcXVlc3QgJiYgd2FpdCAmJg0KPiA+IC0gICAgICAg ICAhKG9jcF9yZWdfcmVhZCh0cCwgT0NQX1BIWV9QQVRDSF9TVEFUKSAmIFBBVENIX1JFQURZKSkg ew0KPiA+ICsgICAgIHJldCA9IG9jcF9yZWdfcmVhZCh0cCwgT0NQX1BIWV9QQVRDSF9TVEFULCAm b2NwX2RhdGEpOw0KPiA+ICsgICAgIGlmIChyZXF1ZXN0ICYmIHdhaXQgJiYgKHJldCA8IDAgfHwg IShvY3BfZGF0YSAmIFBBVENIX1JFQURZKSkpIHsNCj4gPiAgICAgICAgICAgICAgIGRldl9lcnIo JnRwLT5pbnRmLT5kZXYsICJQSFkgcGF0Y2ggcmVxdWVzdCBmYWlsXG4iKTsNCj4gPiAgICAgICAg ICAgICAgIHJ0bF9waHlfcGF0Y2hfcmVxdWVzdCh0cCwgZmFsc2UsIGZhbHNlKTsNCj4gPiAgICAg ICAgICAgICAgIHJldHVybiAtRVRJTUU7DQo+ID4gLSAgICAgfSBlbHNlIHsNCj4gPiAtICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7 DQo+ID4gIH0NCj4gDQo+IFtTZXZlcml0eTogTG93XQ0KPiANCj4gSG9pc3RpbmcgdGhlIHJlYWQg b3V0IG9mIHRoZSBjb25kaXRpb24gbWFrZXMgaXQgdW5jb25kaXRpb25hbC4gIFByZXZpb3VzbHkg dGhlDQo+IHNob3J0LWNpcmN1aXQgbWVhbnQgbm8gcmVnaXN0ZXIgYWNjZXNzIGF0IGFsbCB3aGVu IHJlcXVlc3QgPT0gZmFsc2UNCj4gKHJ0bF9wb3N0X3JhbV9jb2RlKCksIHRoZSByZWxlYXNlIGlu IHJ0bF9yYW1fY29kZV9zcGVlZF91cCgpLCBhbmQgdGhlDQo+IGludGVybmFsIHJ0bF9waHlfcGF0 Y2hfcmVxdWVzdCh0cCwgZmFsc2UsIGZhbHNlKSByb2xsYmFjaykgb3Igd2hlbiB3YWl0ID09IGZh bHNlLg0KPiBOb3cgZXZlcnkgb25lIG9mIHRob3NlIGNhbGxzIGNvc3RzIGFuIGV4dHJhIFBIWSBy ZWFkLCB3aGljaCBvbiB0aGUgVEdQSFkNCj4gY2hpcHMgaXMgYSBidXN5IHBvbGwgcGx1cyBhIGNv bW1hbmQgcm91bmQgdHJpcC4gIFdhcyB0aGF0IGludGVuZGVkPw0KPiANCj4gQWxzbywgYSByZWFk IGZhaWx1cmUgaXMgbm93IGZvbGRlZCBpbnRvIC1FVElNRSB3aXRoIHRoZSAiUEhZIHBhdGNoIHJl cXVlc3QgZmFpbCINCj4gbWVzc2FnZSByYXRoZXIgdGhhbiByZXBvcnRpbmcgdGhlIHVuZGVybHlp bmcgLUVOT0RFViBvciAtRVRJTUVET1VULg0KPiBTaG91bGQgcmV0IGJlIHJldHVybmVkIGRpcmVj dGx5IGluIHRoYXQgY2FzZT8NCj4gDQo+ID4NCj4gPiAgc3RhdGljIHZvaWQgcnRsX3BhdGNoX2tl eV9zZXQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGtleV9hZGRyLCB1MTYNCj4gPiBwYXRjaF9rZXkp IEBAIC01MzMxLDEwICs1NDkzLDEyIEBAIHN0YXRpYyB2b2lkDQo+ID4gcnRsX3JhbV9jb2RlX3Nw ZWVkX3VwKHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19waHlfc3BlZWRfdXAgKnBoeSwgIHsN Cj4gPiAgICAgICB1MzIgbGVuOw0KPiA+ICAgICAgIHU4ICpkYXRhOw0KPiA+ICsgICAgIHUxNiB2 ZXIgPSAwOw0KPiA+DQo+ID4gICAgICAgcnRsX3Jlc2V0X29jcF9iYXNlKHRwKTsNCj4gPg0KPiA+ IC0gICAgIGlmIChzcmFtX3JlYWQodHAsIFNSQU1fR1BIWV9GV19WRVIpID49DQo+IF9fbGUxNl90 b19jcHUocGh5LT52ZXJzaW9uKSkgew0KPiA+ICsgICAgIHNyYW1fcmVhZCh0cCwgU1JBTV9HUEhZ X0ZXX1ZFUiwgJnZlcik7DQo+ID4gKyAgICAgaWYgKHZlciA+PSBfX2xlMTZfdG9fY3B1KHBoeS0+ dmVyc2lvbikpIHsNCj4gPiAgICAgICAgICAgICAgIGRldl9kYmcoJnRwLT5pbnRmLT5kZXYsICJQ SFkgZmlybXdhcmUgaGFzIGJlZW4gdGhlDQo+IG5ld2VzdFxuIik7DQo+ID4gICAgICAgICAgICAg ICByZXR1cm47DQo+ID4gICAgICAgfQ0KPiANCj4gW1NldmVyaXR5OiBMb3ddDQo+IA0KPiBXaXRo IHNyYW1fcmVhZCgpJ3MgcmV0dXJuIHZhbHVlIGlnbm9yZWQgYW5kIHZlciBwcmUtc2V0IHRvIDAs IGEgVEdQSFkgcmVhZA0KPiBmYWlsdXJlIGxvb2tzIGlkZW50aWNhbCB0byAidGhlIHJ1bm5pbmcg UEhZIGZpcm13YXJlIGlzIG9sZGVyIiwgc28gdGhlIHVwZGF0ZQ0KPiBicmFuY2ggaXMgdGFrZW4u ICBCZWZvcmUgdGhpcyBjaGFuZ2UgYSBmYWlsZWQgcmVhZCBwcm9kdWNlZCAweGZmZmYgZnJvbSB0 aGUgMHhmZg0KPiBmaWxsIGluIGdldF9yZWdpc3RlcnMoKSwgd2hpY2ggdG9vayB0aGUgc2tpcCBw YXRoLCBzbyB0aGUgemVybyBpbml0aWFsaXNhdGlvbiBpbnZlcnRzDQo+IHRoZSBvdXRjb21lLiAg cnRsODE1Ml9md19waHlfdmVyKCkgaGFzIHRoZSBzYW1lIHNoYXBlIHdpdGggY3VyX3ZlciA9IDAs DQo+IGFuZCB0aGVyZSBpdCBhbHNvIGRlY2lkZXMgcGF0Y2hfcGh5IGZvciB0aGUgcmVzdCBvZiB0 aGUgaW1hZ2UuICBXb3VsZA0KPiBjaGVja2luZyBzcmFtX3JlYWQoKSBhbmQgYmFpbGluZyBvdXQg YmUgcHJlZmVyYWJsZT8NCj4gDQo+IFsgLi4uIF0NCj4gDQo+ID4gQEAgLTUzODksMTQgKzU1NTUs MTUgQEAgc3RhdGljIHZvaWQgcnRsX3JhbV9jb2RlX3NwZWVkX3VwKHN0cnVjdCByODE1Mg0KPiA+ ICp0cCwgc3RydWN0IGZ3X3BoeV9zcGVlZF91cCAqcGh5LA0KPiA+DQo+ID4gIHN0YXRpYyBpbnQg cnRsODE1Ml9md19waHlfdmVyKHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19waHlfdmVyDQo+ ID4gKnBoeV92ZXIpICB7DQo+ID4gLSAgICAgdTE2IHZlcl9hZGRyLCB2ZXI7DQo+ID4gKyAgICAg dTE2IHZlcl9hZGRyLCB2ZXIsIGN1cl92ZXIgPSAwOw0KPiA+DQo+ID4gICAgICAgdmVyX2FkZHIg PSBfX2xlMTZfdG9fY3B1KHBoeV92ZXItPnZlci5hZGRyKTsNCj4gPiAgICAgICB2ZXIgPSBfX2xl MTZfdG9fY3B1KHBoeV92ZXItPnZlci5kYXRhKTsNCj4gPg0KPiA+ICAgICAgIHJ0bF9yZXNldF9v Y3BfYmFzZSh0cCk7DQo+ID4NCj4gPiAtICAgICBpZiAoc3JhbV9yZWFkKHRwLCB2ZXJfYWRkcikg Pj0gdmVyKSB7DQo+ID4gKyAgICAgc3JhbV9yZWFkKHRwLCB2ZXJfYWRkciwgJmN1cl92ZXIpOw0K PiA+ICsgICAgIGlmIChjdXJfdmVyID49IHZlcikgew0KPiA+ICAgICAgICAgICAgICAgZGV2X2Ri ZygmdHAtPmludGYtPmRldiwgIlBIWSBmaXJtd2FyZSBoYXMgYmVlbiB0aGUNCj4gbmV3ZXN0XG4i KTsNCj4gPiAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICAgICAgIH0NCj4gDQo+IFsgLi4u IF0NCj4gDQo+ID4gQEAgLTU3ODcsNyArNTk1NSw4IEBAIHN0YXRpYyB2b2lkIHI4MTU2X2VlZV9l bihzdHJ1Y3QgcjgxNTIgKnRwLCBib29sDQo+ID4gZW5hYmxlKQ0KPiA+DQo+ID4gICAgICAgcjgx NTNfZWVlX2VuKHRwLCBlbmFibGUpOw0KPiA+DQo+ID4gLSAgICAgY29uZmlnID0gb2NwX3JlZ19y ZWFkKHRwLCBPQ1BfRUVFX0FEVjIpOw0KPiA+ICsgICAgIGlmIChvY3BfcmVnX3JlYWQodHAsIE9D UF9FRUVfQURWMiwgJmNvbmZpZykgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ DQo+ID4gICAgICAgaWYgKGVuYWJsZSAmJiAodHAtPmVlZV9hZHYyICYgTURJT19FRUVfMl81R1Qp KQ0KPiA+ICAgICAgICAgICAgICAgY29uZmlnIHw9IE1ESU9fRUVFXzJfNUdUOw0KPiANCj4gW1Nl dmVyaXR5OiBNZWRpdW1dDQo+IA0KPiBUaGlzIGVhcmx5IHJldHVybiBsYW5kcyBhZnRlciByODE1 M19lZWVfZW4oKSBoYXMgYWxyZWFkeSB0b2dnbGVkIFBMQV9FRUVfQ1INCj4gRUVFX1JYX0VOL0VF RV9UWF9FTiBhbmQgT0NQX0VFRV9DRkcgRUVFMTBfRU4gYW5kIHNldA0KPiB0cC0+dXBzX2luZm8u ZWVlLCBzbyBPQ1BfRUVFX0FEVjIga2VlcHMgaXRzIHByZXZpb3VzIDIuNUcvNUcNCj4gdHAtPmFk dmVydGlzZW1lbnQNCj4gd2l0aCBubyByb2xsYmFjay4gIFNpbmNlIHI4MTU2X2VlZV9lbigpIGlz IHZvaWQsIHJ0bF9lZWVfZW5hYmxlKCkgY2Fubm90IHNlZQ0KPiB0aGUgZmFpbHVyZSBhbmQgc3Rp bGwgd3JpdGVzIE9DUF9FRUVfQURWOg0KPiANCj4gICAgICAgICBjYXNlIFJUTF9WRVJfMTY6DQo+ ICAgICAgICAgY2FzZSBSVExfVkVSXzE3X1FGTjY4Og0KPiAgICAgICAgIGNhc2UgUlRMX1ZFUl8x N19RRk4xMDA6DQo+ICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlKSB7DQo+ICAgICAgICAgICAg ICAgICAgICAgICAgIHI4MTU2X2VlZV9lbih0cCwgdHJ1ZSk7DQo+ICAgICAgICAgICAgICAgICAg ICAgICAgIG9jcF9yZWdfd3JpdGUodHAsIE9DUF9FRUVfQURWLCB0cC0+ZWVlX2Fkdik7DQo+IA0K PiBUaG9zZSBhcmUgZXhhY3RseSB0aGUgdmVyc2lvbnMgd2hvc2UgcGh5X3JlYWQgaXMgcjgxNTdf cGh5X3JlYWQoKSwgc28gY2FuIHRoZQ0KPiBNQUMvUEhZIGVuYWJsZXMsIHRwLT51cHNfaW5mby5l ZWUgKHdoaWNoIGZlZWRzIFVTQl9VUFNfRkxBR1MpIGFuZCB0aGUNCj4gbXVsdGktZ2lnIGFkdmVy dGlzZW1lbnQgZW5kIHVwIGRlc2NyaWJpbmcgZGlmZmVyZW50IEVFRSBjb25maWd1cmF0aW9ucz8N Cg0KSSBzaG91bGQgcmVtb3ZlIHRoZSBlYXJseSByZXR1cm4uDQoNCj4gDQo+IFsgLi4uIF0NCj4g DQo+ID4gQEAgLTY2MDEsNyArNjc3MCwxMSBAQCBzdGF0aWMgaW50IHJ0bDgxNTJfc2V0X3NwZWVk KHN0cnVjdCByODE1MiAqdHAsIHU4DQo+IGF1dG9uZWcsIHUzMiBzcGVlZCwgdTggZHVwbGV4LA0K PiA+ICAgICAgICAgICAgICAgaWYgKCFhZHZlcnRpc2luZykNCj4gPiAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4NCj4gPiAtICAgICAgICAgICAgIG9yaWcgPSByODE1 Ml9tZGlvX3JlYWQodHAsIE1JSV9BRFZFUlRJU0UpOw0KPiA+ICsgICAgICAgICAgICAgcmV0ID0g cjgxNTJfbWRpb19yZWFkKHRwLCBNSUlfQURWRVJUSVNFKTsNCj4gPiArICAgICAgICAgICAgIGlm IChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICBvcmlnID0gcmV0Ow0KPiA+ICAgICAgICAgICAgICAgbmV3MSA9IG9y aWcgJiB+KEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfMTBGVUxMDQo+IHwNCj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VfMTAwSEFMRiB8DQo+IEFEVkVSVElT RV8xMDBGVUxMKTsNCj4gPiAgICAgICAgICAgICAgIGlmIChhZHZlcnRpc2luZyAmIFJUTF9BRFZF UlRJU0VEXzEwX0hBTEYpIHsgQEAgLTY2MjgsNw0KPiA+ICs2ODAxLDExIEBAIHN0YXRpYyBpbnQg cnRsODE1Ml9zZXRfc3BlZWQoc3RydWN0IHI4MTUyICp0cCwgdTggYXV0b25lZywgdTMyDQo+IHNw ZWVkLCB1OCBkdXBsZXgsDQo+ID4gICAgICAgICAgICAgICB9DQo+ID4NCj4gPiAgICAgICAgICAg ICAgIGlmICh0cC0+bWlpLnN1cHBvcnRzX2dtaWkpIHsNCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgb3JpZyA9IHI4MTUyX21kaW9fcmVhZCh0cCwgTUlJX0NUUkwxMDAwKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gcjgxNTJfbWRpb19yZWFkKHRwLCBNSUlfQ1RSTDEwMDApOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIG9yaWcgPSByZXQ7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgIG5ldzEgPSBvcmlnICYg fihBRFZFUlRJU0VfMTAwMEZVTEwgfA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQURWRVJUSVNFXzEwMDBIQUxGKTsNCj4gPg0KPiANCj4gW1NldmVyaXR5OiBNZWRp dW1dDQo+IA0KPiBCeSB0aGUgdGltZSB0aGlzIE1JSV9DVFJMMTAwMCByZWFkIGNhbiBmYWlsLCBN SUlfQURWRVJUSVNFIGhhcyBhbHJlYWR5IGJlZW4NCj4gcmV3cml0dGVuIGp1c3QgYWJvdmU6DQo+ IA0KPiAgICAgICAgICAgICAgICAgaWYgKG9yaWcgIT0gbmV3MSkgew0KPiAgICAgICAgICAgICAg ICAgICAgICAgICByODE1Ml9tZGlvX3dyaXRlKHRwLCBNSUlfQURWRVJUSVNFLCBuZXcxKTsNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgdHAtPm1paS5hZHZlcnRpc2luZyA9IG5ldzE7DQo+ICAg ICAgICAgICAgICAgICB9DQo+IA0KPiBUaGUgZ290byBvdXQgc2tpcHMgdGhlIE1JSV9CTUNSIHdy aXRlLCBzbyBkb2VzIHRoZSBQSFkgZW5kIHVwIGFkdmVydGlzaW5nDQo+IG5ldyAxMC8xMDAgY2Fw YWJpbGl0aWVzIG1peGVkIHdpdGggdGhlIG9sZCAxMDAwLzIuNUcvNUcvMTBHIG9uZXMgYW5kIG5v DQo+IEFOUkVTVEFSVCwgd2hpbGUgdHAtPm1paS5hZHZlcnRpc2luZyBhbmQgdHAtPnVwc19pbmZv LnNwZWVkX2R1cGxleCBoYXZlDQo+IGFscmVhZHkgYmVlbiB1cGRhdGVkPyAgVGhlIHNhbWUgYXBw bGllcyB0byB0aGUgT0NQXzEwR0JUX0NUUkwgcmVhZA0KPiBiZWxvdy4NCj4gDQo+ID4gIEBAIC02 NjQyLDcgKzY4MTksMTAgQEAgc3RhdGljIGludCBydGw4MTUyX3NldF9zcGVlZChzdHJ1Y3Qgcjgx NTIgKnRwLA0KPiB1OCBhdXRvbmVnLCB1MzIgc3BlZWQsIHU4IGR1cGxleCwNCj4gPiAgICAgICAg ICAgICAgIH0NCj4gPg0KPiA+ICAgICAgICAgICAgICAgaWYgKHRwLT5zdXBwb3J0XzI1MDBmdWxs IHx8IHRwLT5zdXBwb3J0XzUwMDBmdWxsIHx8DQo+IHRwLT5zdXBwb3J0XzEwMDAwZnVsbCkgew0K PiA+IC0gICAgICAgICAgICAgICAgICAgICBvcmlnID0gb2NwX3JlZ19yZWFkKHRwLCBPQ1BfMTBH QlRfQ1RSTCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IG9jcF9yZWdfcmVhZCh0 cCwgT0NQXzEwR0JUX0NUUkwsICZvcmlnKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYg KHJldCA8IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ ID4gKw0KPiA+ICAgICAgICAgICAgICAgICAgICAgICBuZXcxID0gb3JpZyAmDQo+IH4oTURJT19B Tl8xMEdCVF9DVFJMX0FEVjJfNUcgfCBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUcNCj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gTURJT19BTl8xMEdCVF9DVFJM X0FEVjEwRyk7DQo+ID4NCj4gPiBAQCAtNjY4Niw3ICs2ODY2LDcgQEAgc3RhdGljIGludCBydGw4 MTUyX3NldF9zcGVlZChzdHJ1Y3QgcjgxNTIgKnRwLCB1OA0KPiBhdXRvbmVnLCB1MzIgc3BlZWQs IHU4IGR1cGxleCwNCj4gPiAgICAgICB9DQo+ID4NCj4gPiAgb3V0Og0KPiA+IC0gICAgIHJldHVy biByZXQ7DQo+ID4gKyAgICAgcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOw0KPiA+ICB9DQo+IA0K PiBbU2V2ZXJpdHk6IE1lZGl1bV0NCj4gDQo+IFRoZSBmaW5hbCByODE1Ml9tZGlvX3dyaXRlKHRw LCBNSUlfQk1DUiwgYm1jcikgcmVzdWx0IGlzIG5vdCBjYXB0dXJlZCwgYW5kDQo+IHRoaXMgbm9y bWFsaXNhdGlvbiB0dXJucyB0aGUgbGFzdCBzdWNjZXNzZnVsIHJlYWQgaW50byAwLiAgSWYgdGhl IEJNQ1Igd3JpdGUNCj4gdGltZXMgb3V0LCBkb2VzIHRoZSBmdW5jdGlvbiByZXBvcnQgc3VjY2Vz cyBldmVuIHRob3VnaCBhdXRvbmVnb3RpYXRpb24gd2FzDQo+IG5ldmVyIHJlc3RhcnRlZCBhbmQg YSByZXF1ZXN0ZWQgQk1DUl9SRVNFVCB3YXMgYWxyZWFkeSBjb25zdW1lZCBieQ0KPiB0ZXN0X2Fu ZF9jbGVhcl9iaXQoUEhZX1JFU0VUKT8gIHJ0bDgxNTJfc2V0X2xpbmtfa3NldHRpbmdzKCkgdGhl biBjYWNoZXMNCj4gdGhlIHJlcXVlc3QgYXMgYXBwbGllZDoNCj4gDQo+ICAgICAgICAgcmV0ID0g cnRsODE1Ml9zZXRfc3BlZWQodHAsIGNtZC0+YmFzZS5hdXRvbmVnLCBjbWQtPmJhc2Uuc3BlZWQs DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLT5iYXNlLmR1cGxleCwgYWR2 ZXJ0aXNpbmcpOw0KPiAgICAgICAgIGlmICghcmV0KSB7DQo+ICAgICAgICAgICAgICAgICB0cC0+ YXV0b25lZyA9IGNtZC0+YmFzZS5hdXRvbmVnOw0KPiANCj4gWyAuLi4gXQ0KPiANCj4gPiBAQCAt MTAwMDIsNyArMTAyMTYsMTEgQEAgc3RhdGljIGludCBydGw4MTUyX3NldF9wYXVzZXBhcmFtKHN0 cnVjdA0KPiA+IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcGF1cw0KPiA+DQo+ ID4gICAgICAgbXV0ZXhfbG9jaygmdHAtPmNvbnRyb2wpOw0KPiA+DQo+ID4gLSAgICAgaWYgKHBh dXNlLT5hdXRvbmVnICYmICEocjgxNTJfbWRpb19yZWFkKHRwLCBNSUlfQk1DUikgJg0KPiBCTUNS X0FORU5BQkxFKSkgew0KPiA+ICsgICAgIHJldCA9IHI4MTUyX21kaW9fcmVhZCh0cCwgTUlJX0JN Q1IpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7 DQo+ID4gKw0KPiA+ICsgICAgIGlmIChwYXVzZS0+YXV0b25lZyAmJiAhKHJldCAmIEJNQ1JfQU5F TkFCTEUpKSB7DQo+ID4gICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+ID4gICAgICAgfQ0KPiA+IEBAIC0xMDAxMyw3ICsxMDIzMSwxMSBA QCBzdGF0aWMgaW50IHJ0bDgxNTJfc2V0X3BhdXNlcGFyYW0oc3RydWN0DQo+IG5ldF9kZXZpY2Ug Km5ldGRldiwgc3RydWN0IGV0aHRvb2xfcGF1cw0KPiA+ICAgICAgIGlmIChwYXVzZS0+dHhfcGF1 c2UpDQo+ID4gICAgICAgICAgICAgICBjYXAgfD0gRkxPV19DVFJMX1RYOw0KPiA+DQo+ID4gLSAg ICAgb2xkID0gcjgxNTJfbWRpb19yZWFkKHRwLCBNSUlfQURWRVJUSVNFKTsNCj4gPiArICAgICBy ZXQgPSByODE1Ml9tZGlvX3JlYWQodHAsIE1JSV9BRFZFUlRJU0UpOw0KPiA+ICsgICAgIGlmIChy ZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgIG9s ZCA9IHJldDsNCj4gPiAgICAgICBuZXcxID0gKG9sZCAmIH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8 DQo+IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfCBtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7 DQo+ID4gICAgICAgaWYgKG9sZCAhPSBuZXcxKQ0KPiA+ICAgICAgICAgICAgICAgcjgxNTJfbWRp b193cml0ZSh0cCwgTUlJX0FEVkVSVElTRSwgbmV3MSk7IEBADQo+IC0xMDAyMiw3DQo+ID4gKzEw MjQ0LDcgQEAgc3RhdGljIGludCBydGw4MTUyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2 aWNlICpuZXRkZXYsDQo+IHN0cnVjdCBldGh0b29sX3BhdXMNCj4gPiAgICAgICBtdXRleF91bmxv Y2soJnRwLT5jb250cm9sKTsNCj4gPiAgICAgICB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodHAt PmludGYpOw0KPiA+DQo+ID4gLSAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICByZXR1cm4gcmV0 IDwgMCA/IHJldCA6IDA7DQo+ID4gIH0NCj4gDQo+IFtTZXZlcml0eTogTWVkaXVtXQ0KPiANCj4g SGVyZSB0aGUgcmVhZHMgYXJlIGNoZWNrZWQgYnV0IHRoZSBNSUlfQURWRVJUSVNFIHdyaXRlIHN0 YXR1cyBpcyBkcm9wcGVkDQo+IGFuZCB0aGVuIG5vcm1hbGlzZWQgdG8gMCwgc28gZXRodG9vbCAt QSByZXBvcnRzIHN1Y2Nlc3MgZm9yIGEgcGF1c2UNCj4gYWR2ZXJ0aXNlbWVudCB0aGF0IHdhcyBu ZXZlciBwcm9ncmFtbWVkLiAgV291bGQgYXNzaWduaW5nIHRoZSB3cml0ZSByZXN1bHQNCj4gdG8g cmV0IGJlZm9yZSB0aGUgb3V0IGxhYmVsIG1hdGNoIHRoZSBzZXRfcGF1c2VwYXJhbSBjb250cmFj dCBiZXR0ZXI/DQo+IA0KPiBbIC4uLiBdDQo+IA0KPiA+IEBAIC0xMDM3OCw2ICsxMDYxMiw4IEBA IHN0YXRpYyBpbnQgcnRsX29wc19pbml0KHN0cnVjdCByODE1MiAqdHApDQo+ID4gICAgICAgICAg ICAgICBvcHMtPmh3X3BoeV9jZmcgICAgICAgICA9IHI4MTU3X2h3X3BoeV9jZmc7DQo+ID4gICAg ICAgICAgICAgICBvcHMtPmF1dG9zdXNwZW5kX2VuICAgICA9IHJ0bDgxNTdfcnVudGltZV9lbmFi bGU7DQo+ID4gICAgICAgICAgICAgICBvcHMtPmNoYW5nZV9tdHUgICAgICAgICA9IHJ0bDgxNTdf Y2hhbmdlX210dTsNCj4gPiArICAgICAgICAgICAgIG9wcy0+cGh5X3JlYWQgICAgICAgICAgID0g cjgxNTdfcGh5X3JlYWQ7DQo+ID4gKyAgICAgICAgICAgICBvcHMtPnBoeV93cml0ZSAgICAgICAg ICA9IHI4MTU3X3BoeV93cml0ZTsNCj4gPiAgICAgICAgICAgICAgIHRwLT5yeF9idWZfc3ogICAg ICAgICAgID0gMzIgKiAxMDI0Ow0KPiA+ICAgICAgICAgICAgICAgdHAtPnN1cHBvcnRfMjUwMGZ1 bGwgICAgPSAxOw0KPiA+ICAgICAgICAgICAgICAgdHAtPnN1cHBvcnRfNTAwMGZ1bGwgICAgPSAx Ow0KPiANCj4gW1NldmVyaXR5OiBNZWRpdW1dDQo+IA0KPiBUaGUgY2hhbmdlbG9nIHNheXMgIlN1 cHBvcnQgZm9yIHRoZXNlIGNoaXBzIG5lZWRzIGEgc2Vjb25kIFBIWSBhY2Nlc3MgcGF0aCIsDQo+ IGJ1dCBSVExfVkVSXzE2IChSVEw4MTU3KSBoYXMgYmVlbiBzdXBwb3J0ZWQgaW4tdHJlZSBzaW5j ZQ0KPiBmZDNjN2QwODBkZjUgKCJyODE1MjogQWRkIHN1cHBvcnQgZm9yIHRoZSBSVEw4MTU3IGhh cmR3YXJlIikgYW5kDQo+IFJUTF9WRVJfMTcgc2luY2UgdGhlIFJUTDgxNTkgc3VwcG9ydCBjb21t aXQsIGFuZCBib3RoIGFscmVhZHkgcmFuIHRoZWlyDQo+IFBIWSBhY2Nlc3NlcyB0aHJvdWdoIHRo ZSBPQ1AtYmFzZS1zd2l0Y2hpbmcgcGF0aC4NCj4gDQo+IElmIHRoZSBwcmVtaXNlIGlzIHJpZ2h0 IGFuZCB0aGVzZSBjaGlwcyBvbmx5IHJlYWNoIHRoZWlyIFBIWSB0aHJvdWdoDQo+IFVTQl9UR1BI WV9BRERSL0RBVEEvQ01ELCB0aGVuIGV2ZXJ5IFBIWSBhY2Nlc3Mgb24gc2hpcHBpbmcgaGFyZHdh cmUNCj4gc2luY2UgdGhvc2UgY29tbWl0cyB1c2VkIHRoZSB3cm9uZyBpbnRlcmZhY2U6IHRoZSBv Y3BfcmVnX3dyaXRlKCkgcGFyYW1ldGVyDQo+IHdyaXRlcyBpbiByODE1N19od19waHlfY2ZnKCkv cjgxNTlfaHdfcGh5X2NmZygpLCByODE1M19waHlfc3RhdHVzKCkgcG9sbGluZywNCj4gdGhlIEVF RSBhbmQgMTBHQlQgcmVwb3J0aW5nIGluIHJ0bDgxNTJfZ2V0X2xpbmtfa3NldHRpbmdzKCkgYW5k DQo+IHI4MTUzX2dldF9lZWUoKSwgdGhlIGFkdmVydGlzZW1lbnQgcHJvZ3JhbW1pbmcgaW4gcnRs ODE1Ml9zZXRfc3BlZWQoKSwNCj4gU0lPQ0dNSUlSRUcvU0lPQ1NNSUlSRUcgYW5kIHJ0bDgxNTNf aW5fbndheSgpLg0KPiANCj4gVGhhdCB3b3VsZCBtYWtlIHRoaXMgYSB1c2VyLXZpc2libGUgZml4 IGZvciByZWxlYXNlZCBoYXJkd2FyZSwgYnV0IHRoZXJlIGlzIG5vDQo+IEZpeGVzOiB0YWcsIG5v IHN0YWJsZSBDYyBhbmQgbm8gZGVzY3JpcHRpb24gb2YgdGhlIG9ic2VydmVkIHN5bXB0b20uICBJ Zg0KPiBpbnN0ZWFkIHRoZSBQTEFfT0NQX0dQSFlfQkFTRSB3aW5kb3cgZGlkIHdvcmsgb24gdGhl c2UgY2hpcHMsIGNvdWxkIHRoZQ0KPiBqdXN0aWZpY2F0aW9uIGZvciB0aGUgc2Vjb25kIHBhdGgg YmUgcmVzdGF0ZWQ/ICBBcyB3cml0dGVuIGl0IGlzIGhhcmQgdG8gdGVsbA0KPiB3aGljaCBjYXNl IGFwcGxpZXMgZm9yIGJhY2twb3J0aW5nLg0KPiANCj4gPg0KPiBbIC4uLiBdDQo+IA0KPiAtLQ0K PiBTYXNoaWtvIEFJIHJldmlldyDCtw0KPiBodHRwczovL25ldGRldi1haS5ib3RzLmxpbnV4LmRl di9zYXNoaWtvLyMvcGF0Y2hzZXQvMjAyNjA5MTcwNzA2MzcuNjI4MjctMQ0KPiAtbmljX3N3c2Ql NDByZWFsdGVrLmNvbQ0KDQpCYXNlZCBvbiB0aGUgZHJpdmVyJ3MgYmVoYXZpb3IsIHRoZXJlIGlz IG5vIGVycm9yIHByb3BhZ2F0aW9uIG9yIGhhbmRsaW5nLg0KSXQgcmVsaWVzIG9uIFJUTDgxNTJf SU5BQ0NFU1NJQkxFIHRvIGRpc2FibGUgZnVydGhlciByZWdpc3RlciBhY2Nlc3Mgd2hlbiBhIGNv bnRyb2wgdHJhbnNmZXIgZmFpbGVkLg0KVGhlcmVmb3JlLCBJIHdvdWxkIGZvbGxvdyB0aGUgb3Jp Z2luYWwgYmVoYXZpb3IgYW5kIG9ubHkgbG9nIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gYSB0aW1l b3V0IG9jY3Vycy4gDQpBZnRlciB0aGF0LCBJIHdpbGwgaW50cm9kdWNlIHByb3BlciBlcnJvciBo YW5kbGluZyBmb3IgdGhlIGRyaXZlciBpbiBhIGZ1dHVyZSBzZXJpZXMuDQoNCk9yIHNob3VsZCBJ IGludHJvZHVjZSBlcnJvciBwcm9wYWdhdGlvbiBhbmQgaGFuZGxpbmcgYmVmb3JlIHN1cHBvcnRp bmcgdGdwaHkgYWNjZXNzPw0KDQpCZXN0IFJlZ2FyZHMsDQpDaGloLUthaSANCg==