From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83D0C6EE58 for ; Thu, 12 Sep 2019 23:22:11 +0000 (UTC) Date: Thu, 12 Sep 2019 16:23:42 -0700 From: Manasi Navare Message-ID: <20190912232342.GB3257@intel.com> References: <20190823182351.25822-1-madhumitha.tolakanahalli.pradeep@intel.com> <20190823182351.25822-3-madhumitha.tolakanahalli.pradeep@intel.com> <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> <20190827212949.GF701@intel.com> <20190912004703.GA6114@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH i-g-t v2 2/2] igt/tests/kms_dp_tiled_display: kms test for display port tiled displays List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Ser, Simon" Cc: "igt-dev@lists.freedesktop.org" , "madhumitha.tp@gmail.com" , "Latvala, Petri" List-ID: T24gVGh1LCBTZXAgMTIsIDIwMTkgYXQgMDU6NTE6NTNBTSAtMDcwMCwgU2VyLCBTaW1vbiB3cm90 ZToKPiBPbiBXZWQsIDIwMTktMDktMTEgYXQgMTc6NDcgLTA3MDAsIE1hbmFzaSBOYXZhcmUgd3Jv dGU6Cj4gPiBPbiBGcmksIEF1ZyAzMCwgMjAxOSBhdCAwNDozOTo1M0FNIC0wNzAwLCBTZXIsIFNp bW9uIHdyb3RlOgo+ID4gPiBPbiBUdWUsIDIwMTktMDgtMjcgYXQgMTQ6MjkgLTA3MDAsIE1hbmFz aSBOYXZhcmUgd3JvdGU6Cj4gPiA+ID4gT24gVHVlLCBBdWcgMjcsIDIwMTkgYXQgMDM6NDk6MzhB TSAtMDcwMCwgU2VyLCBTaW1vbiB3cm90ZToKPiA+ID4gPiA+IFRoYW5rcyBmb3IgdGhlIG5ldyB2 ZXJzaW9uISBIZXJlIGFyZSBzb21lIG1vcmUgY29tbWVudHMuIFNvbWUgb2YgdGhlbQo+ID4gPiA+ ID4gYXJlIG5pdHMsIHNvbWUgb2YgdGhlbSBhcmUgbW9yZSBzZXJpb3VzIHF1ZXN0aW9ucy4gRmVl bCBmcmVlIHRvIGxldCBtZQo+ID4gPiA+ID4ga25vdyBpZiBJJ20gbWlzdGFrZW4gb3IgaWYgeW91 IGRvbid0IHVuZGVyc3RhbmQgb25lIG9mIHRoZW0uCj4gPiA+ID4gCj4gPiA+ID4gVGhhbmtzIGZv ciB0aGUgcmV2aWV3IGNvbW1lbnRzIFNpbW9uLiBJIHdpbGwgYmUgd29ya2luZyBvbiBhZGRyZXNz aW5nIHRoZSBmb2xsb3dpbmcKPiA+ID4gPiByZXZpZXcgY29tbWVudHMgYW5kIHdpbGwgdGFrZSBv dmVyIHRoaXMgcGF0Y2ggc2luY2UgTWFkaHVtaXRoYSdzIGludGVybnNoaXAgaGFzIGVuZGVkLgo+ ID4gPiA+IEkgcmVhbGx5IGFwcHJlY2lhdGUgYWxsIHlvdXIgaGVscCBhbmQgZmVlZGJhY2sgb24g dGhpcy4KPiA+ID4gPiAKPiA+ID4gPiBQbGVhc2UgZmluZCBteSBhbnN3ZXJzIGJlbG93Ogo+ID4g PiA+IAo+ID4gPiA+ID4gT24gRnJpLCAyMDE5LTA4LTIzIGF0IDExOjIzIC0wNzAwLCBNYWRodW1p dGhhIFRvbGFrYW5haGFsbGkgUHJhZGVlcCB3cm90ZToKPiA+ID4gPiA+ID4gVGhpcyB0ZXN0IHZh bGlkYXRlcyB0aGUgdGlsZWQgRFAgZGlzcGxheXMgdG8gZGlzcGxheSBhIHRlc3QgcGF0dGVybgo+ ID4gPiA+ID4gPiBzZWFtbGVzc2x5IGFjcm9zcyB0aGUgdHdvIHRpbGVzLiBJdCB2YWxpZGF0ZXMg dGhlIHRyYW5zY29kZXIgcG9ydAo+ID4gPiA+ID4gPiBzeW5jIGZlYXR1cmUgb24gaTkxNSB0byBn ZXQgYSB0ZWFyZnJlZSB0aWxlZCBkaXNwbGF5IG91dHB1dC4KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IFJlbGF0ZWQga2VybmVsIHdvcmsgcGF0Y2hlcy0KPiA+ID4gPiA+ID4gaHR0cHM6Ly9wYXRj aHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Nlcmllcy81OTgzNy8jcmV2NC4KPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+IFRoaXMgdGVzdCBjYW4gZXZlbnR1YWxseSBiZSBleHRlbmRlZCB0byBjb3ZlciB0 aWxlZCBkaXNwbGF5IHN1cHBvcnQKPiA+ID4gPiA+ID4gb24gb3RoZXIgY29ubmVjdG9yIHR5cGVz Lgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gdjI6IEFkZGVkIGEgY2hlY2sgZm9yIGNoZWNraW5n IHBhZ2VmbGlwIGV2ZW50IHRpbWVzdGFtcHMgKFNpbW9uLCBNYW5hc2kpCj4gPiA+ID4gPiA+ICAg ICBNaW5vciBzdHlsZSBjaGFuZ2VzIChTaW1vbikKPiA+ID4gPiA+ID4gICAgQ29kZSBjbGVhbi11 cCBhbmQgcmVvcmRlcmluZwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IENj OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gPiA+ID4gPiBD YzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+Cj4gPiA+ID4gPiA+IENj OiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiBDYzogPG1hZGh1bWl0aGEudHBAZ21haWwuY29tPgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g U2lnbmVkLW9mZi1ieTogTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFByYWRlZXAgPG1hZGh1bWl0 aGEudG9sYWthbmFoYWxsaS5wcmFkZWVwQGludGVsLmNvbT4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ ID4gPiA+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAxICsKPiA+ID4gPiA+ID4g IHRlc3RzL2ttc19kcF90aWxlZF9kaXNwbGF5LmMgfCAzNDYgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiA+ID4gPiA+ID4gIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICAg fCAgIDEgKwo+ID4gPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygrKQo+ ID4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19kcF90aWxlZF9kaXNwbGF5 LmMKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiA+ID4gPiBpbmRleCBjMDJlNGQ5 NC4uNzU2MWFiOWIgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiA+ID4gPiA+ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiA+ID4gPiBA QCAtNDEsNiArNDEsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+ID4gPiA+ID4gIAlrbXNfY3Vyc29y X2VkZ2Vfd2FsayBcCj4gPiA+ID4gPiA+ICAJa21zX2N1cnNvcl9sZWdhY3kgXAo+ID4gPiA+ID4g PiAgCWttc19kcF9kc2MgXAo+ID4gPiA+ID4gPiArCWttc19kcF90aWxlZF9kaXNwbGF5IFwKPiA+ ID4gPiA+ID4gIAlrbXNfZHJhd19jcmMgXAo+ID4gPiA+ID4gPiAgCWttc19mYmNvbl9mYnQgXAo+ ID4gPiA+ID4gPiAgCWttc19mZW5jZV9waW5fbGVhayBcCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQg YS90ZXN0cy9rbXNfZHBfdGlsZWRfZGlzcGxheS5jIGIvdGVzdHMva21zX2RwX3RpbGVkX2Rpc3Bs YXkuYwo+ID4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiA+ID4gPiBpbmRleCAw MDAwMDAwMC4uMTYyZmJkZDkKPiA+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiA+ID4gPiAr KysgYi90ZXN0cy9rbXNfZHBfdGlsZWRfZGlzcGxheS5jCj4gPiA+ID4gPiA+IEBAIC0wLDAgKzEs MzQ2IEBACj4gPiA+ID4gPiA+ICsvKgo+ID4gPiA+ID4gPiArICogQ29weXJpZ2h0IMKpIDIwMTgg SW50ZWwgQ29ycG9yYXRpb24KPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+ID4gPiA+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ID4gPiA+ID4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiA+ID4gPiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gPiA+ ID4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiA+ID4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gPiA+ ID4gPiArICoKPiA+ID4gPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ID4gPiA+ID4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKPiA+ID4gPiA+ID4gKyAqIFNvZnR3YXJlLgo+ID4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiA+ID4gPiA+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKPiA+ID4gPiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gPiA+ID4gPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ID4gPiA+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiA+ ID4gPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gPiA+ID4gPiA+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4gPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gPiArICogQXV0aG9yczoKPiA+ID4gPiA+ ID4gKyAqICBNYWRodW1pdGhhIFRvbGFrYW5haGFsbGkgUHJhZGVlcAo+ID4gPiA+ID4gPiArICog ICAgICA8bWFkaHVtaXRoYS50b2xha2FuYWhhbGxpLnByYWRlZXBAaW50ZWwuY29tPgo+ID4gPiA+ ID4gPiArICoKPiA+ID4gPiA+ID4gKyAqIERpc3BsYXkgUG9ydCBUaWxlZCBEaXNwbGF5IFRlc3QK PiA+ID4gPiA+ID4gKyAqIFRoaXMgdGVzdCBwYXJzZXMgdGhlIHRpbGUgaW5mb3JtYXRpb24gb2Yg dGhlIGNvbm5lY3RvcnMgdGhhdCBoYXZlIFRJTEUKPiA+ID4gPiA+ID4gKyAqIHByb3BlcnR5IHNl dCwgc2V0cyB1cCB0aGUgZnJhbWVidWZmZXIgd2l0aCBjb3JyZWN0IG9mZnNldHMgY29ycmVzcG9u ZGluZyB0bwo+ID4gPiA+ID4gPiArICogdGhlIHRpbGUgb2Zmc2V0cyBhbmQgZG9lcyBhbiBhdG9t aWMgbW9kZXNldCB3aXRoIHR3byBDUlRDcyBmb3IgdHdvCj4gPiA+ID4gPiA+ICsgKiBjb25uZWN0 b3JzLiBQYWdlIGZsaXAgZXZlbnQgdGltZXN0YW1wIGZyb20gZWFjaCBDUlRDIGlzIGNvbGxlY3Rl ZCBhbmQKPiA+ID4gPiA+ID4gKyAqIGNvbXBhcmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgb2Nj dXJyZWQgaW4gYSBzeW5jaHJvbm91cyBtYW5uZXIuCj4gPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g PiArICogVGhpcyB0ZXN0IGN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IGhvcml6b250YWxseSB0aWxl ZCBkaXNwbGF5cywgaW4gbGluZSB3aXRoCj4gPiA+ID4gPiA+ICsgKiB0aGUgZGlzcGxheXMgc3Vw cG9ydGVkIGJ5IHRoZSBrZXJuZWwgYXQgdGhlIG1vbWVudC4KPiA+ID4gPiA+ID4gKyAqLwo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiA+ID4gPiA+ICsjaW5j bHVkZSAicG9sbC5oIgo+ID4gPiA+ID4gPiArI2luY2x1ZGUgImRybV9tb2RlLmgiCj4gPiA+ID4g PiA+ICsjaW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBmb3IgRGlzcGxheSBQb3J0IFRpbGVkIERpc3BsYXlz Iik7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsKPiA+ID4gPiA+ ID4gKwlpbnQgZHJtX2ZkOwo+ID4gPiA+ID4gPiArCWludCBudW1faF90aWxlczsKPiA+ID4gPiA+ ID4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5Owo+ID4gPiA+ID4gPiArCWVudW0gaWd0X2NvbW1p dF9zdHlsZSBjb21taXQ7Cj4gPiA+ID4gPiA+ICt9IGRhdGFfdDsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gPiA+ID4gPiArCWlndF9vdXRwdXRfdCAqb3V0 cHV0Owo+ID4gPiA+ID4gPiArCWlndF90aWxlX2luZm9fdCB0aWxlOwo+ID4gPiA+ID4gPiArCWln dF9mYl90IGZiX3Rlc3RfcGF0dGVybjsKPiA+ID4gPiA+ID4gKwllbnVtIHBpcGUgcGlwZTsKPiA+ ID4gPiA+ID4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+ID4gPiA+ID4gPiArCWRy bU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yOwo+ID4gPiA+ID4gPiArfSBkYXRhX2Nvbm5lY3Rv cl90Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IGRybV9wcm9wZXJ0eV9p c190aWxlKGRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4g PiArCXJldHVybiAoc3RyY21wKHByb3AtPm5hbWUgLCAiVElMRSIpID8gMCA6IDEpICYmCj4gPiA+ ID4gPiA+ICsJCQkgZHJtX3Byb3BlcnR5X3R5cGVfaXMocHJvcCwgRFJNX01PREVfUFJPUF9CTE9C KTsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQg Z2V0X2Nvbm5lY3Rvcl90aWxlX3Byb3BzKGRhdGFfdCAqZGF0YSwgZHJtTW9kZUNvbm5lY3RvclB0 ciBjb25uLAo+ID4gPiA+ID4gPiArCQlpZ3RfdGlsZV9pbmZvX3QgKnRpbGUpCj4gPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiA+ICsJaW50IGkgPSAwOwo+ID4gPiA+ID4gPiArCWRybU1vZGVQcm9wZXJ0 eVB0ciBwcm9wOwo+ID4gPiA+ID4gPiArCWRybU1vZGVQcm9wZXJ0eUJsb2JQdHIgYmxvYjsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBjb25uLT5jb3VudF9wcm9w czsgaSsrKSB7Cj4gPiA+ID4gPiA+ICsJCXByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZGF0YS0+ ZHJtX2ZkLCBjb25uLT5wcm9wc1tpXSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJaWd0 X2Fzc2VydChwcm9wKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQlpZiAoIWRybV9wcm9w ZXJ0eV9pc190aWxlKHByb3ApKQo+ID4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ID4gPiAK PiA+ID4gPiA+IFRoaXMgYnJhbmNoIGxlYWtzIHByb3AuCj4gPiA+ID4gCj4gPiA+ID4gRnJlZWlu ZyBwcm9wIGhlcmUgYmVmb3JlIGNvbnRpbnVpbmcgc2hkIGZpeCB0aGlzLCB3aWxsIGZpeCB0aGlz IGluIHRoZSBuZXh0IHJldgo+ID4gPiA+IAo+ID4gPiA+ID4gPiArCQlibG9iID0gZHJtTW9kZUdl dFByb3BlcnR5QmxvYihkYXRhLT5kcm1fZmQsCj4gPiA+ID4gPiA+ICsJCQkJY29ubi0+cHJvcF92 YWx1ZXNbaV0pOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWlmICghYmxvYikKPiA+ID4g PiA+ID4gKwkJCXJldHVybjsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhpcyBicmFuY2ggbGVha3Mg cHJvcC4KPiA+ID4gPiAKPiA+ID4gPiBBZ3JlZSwgd2lsbCBhZGQgZHJtTW9kZUZyZWVQcm9wZXJ0 eUJsb2IoYmxvYik7IGJlZm9yZSByZXR1cm4KPiA+ID4gPiAKPiA+ID4gPiA+ID4gKwkJaWd0X3Bh cnNlX2Nvbm5lY3Rvcl90aWxlX2Jsb2IoYmxvYiwgdGlsZSk7Cj4gPiA+ID4gPiA+ICsJCWJyZWFr Owo+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWRybU1vZGVGcmVl UHJvcGVydHkocHJvcCk7Cj4gPiA+ID4gPiA+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2IoYmxv Yik7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lk IGdldF9udW1iZXJfb2ZfaF90aWxlcyhkYXRhX3QgKmRhdGEpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4gPiA+ICsJZHJtTW9kZVJlc1B0ciByZXM7Cj4gPiA+ID4g PiA+ICsJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3I7Cj4gPiA+ID4gPiA+ICsJaWd0X3Rp bGVfaW5mb190IHRpbGUgPSB7Lm51bV9oX3RpbGUgPSAwfTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiArCWlndF9hc3NlcnQocmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQp KTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCByZXMtPmNvdW50 X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiA+ID4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yQ3VycmVudChkYXRhLT5kcm1fZmQsCj4gPiA+ID4gPiA+ICsJCQkJcmVzLT5jb25u ZWN0b3JzW2ldKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQlpZ3RfYXNzZXJ0KGNvbm5l Y3Rvcik7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJaWYgKCEoY29ubmVjdG9yLT5jb25u ZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCAmJgo+ID4gPiA+ID4gPiArCQkJY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpKQo+ID4g PiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IFRoaXMgY2FuIGJlIHNp bXBsaWZpZWQgdG8KPiA+ID4gPiA+IAo+ID4gPiA+ID4gICAgIGNvbm5lY3Rpb24gIT0gRFJNX01P REVfQ09OTkVDVEVEIHx8Cj4gPiA+ID4gPiAgICAgY29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVf Q09OTkVDVE9SX0Rpc3BsYXlQb3J0Cj4gPiA+ID4gCj4gPiA+ID4gWWVzIHdpbGwgc2ltcGxpZnkg aW4gdGhlIG5leHQgcmV2Cj4gPiA+ID4gCj4gPiA+ID4gPiBBZGRpdGlvbmFsbHksIHRoaXMgYnJh bmNoIGxlYWtzIHRoZSBjb25uZWN0b3IuCj4gPiA+ID4gCj4gPiA+ID4gSG1tLCBzbyBjYWxsIGRy bU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7IGJlZm9yZSBjb250aW51aW5nIHNoZCBiZSBm b2xsb3dlZCBpbiBnZW5lcmFsIHRocm91Z2hvdXQKPiA+ID4gPiB0aGUgY29kZSByaWdodD8KPiA+ ID4gCj4gPiA+IFllYWgsIHRoYXQgd291bGQgZml4IGl0Lgo+ID4gPiAKPiA+ID4gPiA+ID4gKwkJ Z2V0X2Nvbm5lY3Rvcl90aWxlX3Byb3BzKGRhdGEsIGNvbm5lY3RvciwgJnRpbGUpOwo+ID4gPiA+ ID4gPiArCQlkYXRhLT5udW1faF90aWxlcyA9IHRpbGUubnVtX2hfdGlsZTsKPiA+ID4gPiA+ID4g KwkJYnJlYWs7Cj4gPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJZHJt TW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKPiA+ID4gPiA+ID4gKwlkcm1Nb2RlRnJlZUNvbm5lY3Rv cihjb25uZWN0b3IpOwo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtz dGF0aWMgdm9pZCBnZXRfY29ubmVjdG9yKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0b3JfdCAq Y29ubikKPiA+ID4gPiA+IAo+ID4gPiA+ID4gTml0OiBzaW5jZSB0aGlzIGZpbGxzIGFsbCBjb25u ZWN0b3JzLCBtYXliZSBpdCBzaG91bGQgYmUgbmFtZWQKPiA+ID4gPiA+IGdldF9jb25uZWN0b3Jz ICh3aXRoIGFuIHMpLiBBbHNvIGl0J3Mgbm90IGNsZWFyIHRoYXQgY29ubiByZWZlcnMgdG8gYW4K PiA+ID4gPiA+IGFycmF5IG9mIGNvbm5lY3RvcnMsIG1heWJlIGl0IHNob3VsZCBiZSByZW5hbWVk IHRvIGNvbm5zLgo+ID4gPiA+IAo+ID4gPiA+IFllcyBJIGFncmVlIHRoYXQgd2lsbCBtYWtlIGl0 IG1vcmUgcmVhZGFibGUsIEkgd2lsbCBmaXggaXQgaW4gbmV4dCByZXYKPiA+ID4gPiAKPiA+ID4g PiA+IChBcHBsaWVzIHRvIHRoZSB3aG9sZSBwYXRjaCkKPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gPiArCWludCBjb3VudCA9IDA7Cj4gPiA+ID4gPiA+ICsJaWd0X291dHB1dF90 ICpvdXRwdXQ7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlmb3JfZWFjaF9jb25uZWN0ZWRf b3V0cHV0KGRhdGEtPmRpc3BsYXksIG91dHB1dCkgewo+ID4gPiA+ID4gPiArCQljb25uW2NvdW50 XS5jb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRhdGEtPmRpc3BsYXktPmRybV9mZCwK PiA+ID4gPiA+ID4gKwkJCQkJCW91dHB1dC0+aWQpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ ICsJCWlndF9hc3NlcnQoY29ubltjb3VudF0uY29ubmVjdG9yKTsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArCQlpZiAoIShjb25uW2NvdW50XS5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09 Cj4gPiA+ID4gPiA+ICsJCQlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpKQo+ID4gPiA+ ID4gPiArCQkJY29udGludWU7Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IFRoaXMgY2FuIGJlIHNpbXBs aWZpZWQgdG8KPiA+ID4gPiA+IAo+ID4gPiA+ID4gICAgIGlmIChjb25uZWN0b3JfdHlwZSAhPSBE Uk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEFkZGl0 aW9uYWxseSwgdGhpcyBicmFuY2ggbGVha3MgdGhlIGNvbm5lY3Rvci4KPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiArCQlnZXRfY29ubmVjdG9yX3RpbGVfcHJvcHMoZGF0YSwgY29ubltjb3VudF0uY29u bmVjdG9yLAo+ID4gPiA+ID4gPiArCQkJJmNvbm5bY291bnRdLnRpbGUpOwo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICsJCS8qIENoZWNrIGlmIHRoZSBjb25uZWN0b3JzIGJlbG9uZyB0byB0aGUg c2FtZSB0aWxlIGdyb3VwICovCj4gPiA+ID4gPiA+ICsJCWlmIChjb3VudCA+IDApCj4gPiA+ID4g PiA+ICsJCQlpZ3RfYXNzZXJ0KGNvbm5bY291bnRdLnRpbGUudGlsZV9ncm91cF9pZCA9PQo+ID4g PiA+ID4gPiArCQkJCWNvbm5bY291bnQtMV0udGlsZS50aWxlX2dyb3VwX2lkKTsKPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiArCQljb3VudCsrOwo+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4g K30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4gK3Jl c2V0X2ZyYW1lYnVmZmVyKGludCBkcm1fZmQsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpZ3RfZmJf dCAqZmIpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7 Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxh bmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gPiA+ID4gPiArCWln dF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7Cj4gPiA+ID4gPiA+ICsJaWd0X3JlbW92ZV9m Yihkcm1fZmQsIGZiKTsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr c3RhdGljIHZvaWQgcmVzZXRfb3V0cHV0KGlndF9vdXRwdXRfdCAqb3V0cHV0KQo+ID4gPiA+ID4g PiArewo+ID4gPiA+ID4gPiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX05PTkUp Owo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCB0 ZXN0X2NsZWFudXAoZGF0YV90ICpkYXRhLCBkYXRhX2Nvbm5lY3Rvcl90ICpjb25uKQo+ID4gPiA+ ID4gPiArewo+ID4gPiA+ID4gPiArCWludCBjb3VudDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGRhdGEtPm51bV9oX3RpbGVzOyBjb3VudCsrKSB7 Cj4gPiA+ID4gPiA+ICsJCWlmIChjb25uW2NvdW50XS5vdXRwdXQpIHsKPiA+ID4gPiA+ID4gKwkJ CXJlc2V0X2ZyYW1lYnVmZmVyKGRhdGEtPmRybV9mZCwgY29ubltjb3VudF0ub3V0cHV0LAo+ID4g PiA+ID4gPiArCQkJCSZjb25uW2NvdW50XS5mYl90ZXN0X3BhdHRlcm4pOwo+ID4gPiA+ID4gPiAr CQkJcmVzZXRfb3V0cHV0KGNvbm5bY291bnRdLm91dHB1dCk7Cj4gPiA+ID4gPiA+ICsJCX0KPiA+ ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkYXRhLT5kaXNw bGF5LCBkYXRhLT5jb21taXQpOwo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICtzdGF0aWMgdm9pZCBzZXR1cF9tb2RlKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0b3Jf dCAqY29ubl9kYXRhKQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3Qg YWN0dWFsbHkgc2V0dXAgdGhlIG91dHB1dCBtb2RlLCBpdCBvbmx5IHNldHMgdXAKPiA+ID4gPiA+ IHRoZSBwaXBlLiBJcyB0aGlzIGFuIG92ZXJsb29rPwo+ID4gPiA+IAo+ID4gPiA+IHllcyB3ZSBq dXN0IHNldCB0aGUgcGlwZS9DUlRDIGhlcmUgYW5kIHRoZSBhdG9taWMgY29tbWl0IGNhbGwgZG9l cyBhIGNvbXBsZXRlCj4gPiA+ID4gbW9kZXNldCB3aXRoIGNoZWNrIGFuZCBjb21taXQgd2l0aG91 dCBhbnkgb3V0cHV0IHNpbmNlIHdlIGRpZG50IHNldHVwIGZiIHlldC4KPiA+ID4gPiBCdXQgSSBh Z3JlZSB0aGF0IGNhbGxpbmcgaXQganVzdCBzZXR1cF9waXBlIHJvYmFibHkgbWFrZXMgaXQgbW9y ZSBpbnR1aXRpdmUKPiA+ID4gCj4gPiA+IE9oLCBJIGZvcmdvdCB0aGF0IGlndF9vdXRwdXRfc2V0 X3BpcGUgYWxzbyBzZXRzIHRoZSBtb2RlLgo+ID4gPiAKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ ID4gKwlpbnQgY291bnQgPSAwOwo+ID4gPiA+ID4gPiArCWVudW0gcGlwZSBwaXBlOwo+ID4gPiA+ ID4gPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJ Zm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVtX2hfdGlsZXM7IGNvdW50KyspIHsKPiA+ ID4gPiA+ID4gKwkJb3V0cHV0ID0gaWd0X291dHB1dF9mcm9tX2Nvbm5lY3RvcihkYXRhLT5kaXNw bGF5LAo+ID4gPiA+ID4gPiArCQkJCWNvbm5fZGF0YVtjb3VudF0uY29ubmVjdG9yKTsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArCQkvKgo+ID4gPiA+ID4gPiArCQkgKiBUaGUgb3V0cHV0IGlz IHNldCB0byBQSVBFX05PTkUgYW5kIHRoZW4gYXNzaWduZWQgYSBwaXBlLgo+ID4gPiA+ID4gPiAr CQkgKiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIGEgY29tcGxldGUgbW9kZXNldCBvY2N1cmVzIGV2 ZXJ5Cj4gPiA+ID4gPiA+ICsJCSAqIHRpbWUgdGhlIHRlc3QgaXMgcnVuLgo+ID4gPiA+ID4gPiAr CQkgKi8KPiA+ID4gPiA+ID4gKwkJcmVzZXRfb3V0cHV0KG91dHB1dCk7Cj4gPiA+ID4gPiAKPiA+ ID4gPiA+IElzIHRoaXMgbmVjZXNzYXJ5Pwo+ID4gPiA+IAo+ID4gPiA+IFllcyB0aGlzIGlzIG5l Y2Vzc2FyeSB0byBmb3JjZSBhIGNvbXBsZXRlIG1vZGVzZXQgZm9yIGVhY2ggdGVzdCBzaW5jZSBp ZiB0aGUgcGlwZQo+ID4gPiA+IGFzc2lnbm1lbnRzIG9yIHRoZSBtb2RlIGhhcyBub3QgY2hhbmdl ZCBpdCB3aWxsIG5vdCBzZXQgbmVlZHNfbW9kZXNldCBmbGFnIGluIHNpZGUga2VybmVsCj4gPiA+ ID4gYW5kIHdpbGwgbm90IGRvIGEgZnVsbCBhdG9taWMgY2hlY2sgYW5kIGNvbW1pdC4KPiA+ID4g Cj4gPiA+IEhtbSwgd2h5IGRvIHdlIG5lZWQgdG8gZG8gYSBuZXcgbW9kZXNldD8gSWYgdGhlIG1v ZGUgaXMgYWxyZWFkeSBzZXQgdG8KPiA+ID4gd2hhdCB3ZSB3YW50LCBubyBuZWVkIGZvciB0aGlz Pwo+ID4gPiAKPiA+ID4gKFNvcnJ5LCBJJ20gdW5mYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwgc2lk ZSBvZiB0aGluZ3MhKQo+ID4gPiAKPiA+ID4gPiA+ID4gKwkJZm9yX2VhY2hfcGlwZShkYXRhLT5k aXNwbGF5LCBwaXBlKSB7Cj4gPiA+ID4gPiA+ICsJCQlpZiAoY291bnQgPiAwICYmIHBpcGUgPT0g Y29ubl9kYXRhW2NvdW50LTFdLnBpcGUpCj4gPiA+ID4gPiA+ICsJCQkJY29udGludWU7Cj4gPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJCWlmIChpZ3RfcGlwZV9jb25uZWN0b3JfdmFsaWQocGlw ZSwgb3V0cHV0KSkgewo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCQkJY29ubl9kYXRhW2Nv dW50XS5waXBlID0gcGlwZTsKPiA+ID4gPiA+ID4gKwkJCQljb25uX2RhdGFbY291bnRdLm91dHB1 dCA9IG91dHB1dDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQkJCWlndF9vdXRwdXRfc2V0 X3BpcGUoY29ubl9kYXRhW2NvdW50XS5vdXRwdXQsCj4gPiA+ID4gPiA+ICsJCQkJCWNvbm5fZGF0 YVtjb3VudF0ucGlwZSk7Cj4gPiA+ID4gPiA+ICsJCQkJYnJlYWs7Cj4gPiA+ID4gPiA+ICsJCQl9 Cj4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsJaWd0X2Rpc3Bs YXlfY29tbWl0X2F0b21pYyhkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwKPiA+ID4gPiA+ID4gKwkJTlVMTCk7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIHNldHVwX2ZyYW1lYnVmZmVyKGRhdGFfdCAqZGF0YSwg ZGF0YV9jb25uZWN0b3JfdCAqY29ubikKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gKwlpbnQg Y291bnQ7Cj4gPiA+ID4gPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxlczsg Y291bnQrKykgewo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWlndF9jcmVhdGVfcGF0dGVy bl9mYihkYXRhLT5kcm1fZmQsCj4gPiA+ID4gPiA+ICsJCQkoY29ubltjb3VudF0udGlsZS50aWxl X2hfc2l6ZSAqCj4gPiA+ID4gPiA+ICsJCQlkYXRhLT5udW1faF90aWxlcyksCj4gPiA+ID4gPiAK PiA+ID4gPiA+IERvIHdlIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIG51bWJlciBvZiBob3Jpem9u dGFsIHRpbGVzIGhlcmU/IEl0IHNlZW1zCj4gPiA+ID4gPiB3ZSBvbmx5IHVzZSB0aGUgZmlyc3Qg dGlsZV9oX3NpemUgcGl4ZWxzIG9mIHRoZSBidWZmZXIuIEFtIEkgbWlzc2luZwo+ID4gPiA+ID4g c29tZXRoaW5nPwo+ID4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gWWVzIHdlIG9ubHkgdXNlIHRo ZSB0aWxlX2hfc2l6ZSBvZiB0aGUgYnVmZmVyIGF0IHRoZSBwcm9wZXIgb2Zmc2V0IG9mIHRpbGVf aF9sb2MKPiA+ID4gPiBTbyB0aGlzIGJlbG93IGxvZ2ljIHNoZCBiZSBtb2RpZmllZCB0byBvbmx5 IGNyZWF0ZSBmYiBvZiB0aGUgc2l6ZSB0aWxlX2hfc2l6ZSBpZiBpdHMgaW4gdGhlIGZvciBsb29w Cj4gPiA+ID4gb3IganVzdCBjcmVhdGUgb25lIGZiIG91dHNpZGUgdGhlIGxvb3Agb2YgdGhlIHNp emUgdGlsZV9oX3NpemUgKiBudW1fdGlsZXMgYW5kIHRoZW4ganVzdCB1c2UgdGhhdCB3aXRoIGRm ZmVyZW50Cj4gPiA+ID4gb2Zmc2V0cyBmb3IgdHdvIENSVENzCj4gPiA+ID4gCj4gPiA+ID4gV2hl biBJIGRpc2N1c3NlZCB0aGlzIG9uIGRyaS1kZXZlbCwgcGVvcGxlIHNhaWQgdGhhdCByZWFsIHVz ZXJzcGFjZSBjYW4gZGVjaWRlIHRvIGRvIGVpdGhlciBvbmUgc2luZ2xlIGZiIGZvciBhbGwgdGls ZXMKPiA+ID4gPiBvciBzZXBhcmF0ZSBvbmVzIHdoZXJlIGVhY2ggaXMgb2YgdGhlIHNpemUgZXF1 YWwgdG8gdGlsZSBzaXplLgo+ID4gPiA+IAo+ID4gPiA+IExldCBtZSBrbm93IGlmIHRoZXJlIGlz IGEgcHJlZmVyZW5jZQo+ID4gPiAKPiA+ID4gQXMgYSB1c2Vyc3BhY2UgZGV2LCBJJ2Qgc2F5IGEg c2luZ2xlIEZCIHdvdWxkIGJlIGEgbGl0dGxlIGJpdCBtb3JlCj4gPiA+IHJlYWxpc3RpYywgYnV0 IHllYWggSSBndWVzcyB1c2Vyc3BhY2UgY291bGQgdXNlIHR3byBGQnMgYXMgd2VsbC4gTm8gYmln Cj4gPiA+IGRlYWwsIEknbSBmaW5lIHdpdGggYm90aC4KPiA+ID4gCj4gPiA+ID4gPiBCdXQgbWF5 YmUgYSB0ZXN0IHRoYXQgd291bGQgYmV0dGVyIHJlZmxlY3QgcmVhbGl0eSB3b3VsZCBjcmVhdGUg YQo+ID4gPiA+ID4gc2luZ2xlIGZyYW1lYnVmZmVyIGZvciBhbGwgdGlsZWQgZGlzcGxheXMsIHRv IGRpc3BsYXkgYSBzaW5nbGUgaW1hZ2UKPiA+ID4gPiA+IGFjcm9zcyBhbGwgb2YgdGhlbT8KPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiArCQkJY29ubltjb3VudF0udGlsZS50aWxlX3Zfc2l6ZSwKPiA+ ID4gPiA+ID4gKwkJCURSTV9GT1JNQVRfWEJHUjg4ODgsCj4gPiA+ID4gPiA+ICsJCQlMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAo+ID4gPiA+ID4gPiArCQkJJmNvbm5bY291bnRdLmZiX3Rlc3Rf cGF0dGVybik7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJcHJpbWFyeSA9IGlndF9vdXRw dXRfZ2V0X3BsYW5lX3R5cGUoY29ubltjb3VudF0ub3V0cHV0LAo+ID4gPiA+ID4gPiArCQkJCURS TV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWlndF9w bGFuZV9zZXRfZmIocHJpbWFyeSwgJmNvbm5bY291bnRdLmZiX3Rlc3RfcGF0dGVybik7Cj4gPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJaWd0X2ZiX3NldF9zaXplKCZjb25uW2NvdW50XS5mYl90 ZXN0X3BhdHRlcm4sIHByaW1hcnksCj4gPiA+ID4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50 aWxlX2hfc2l6ZSwKPiA+ID4gPiA+ID4gKwkJCQljb25uW2NvdW50XS50aWxlLnRpbGVfdl9zaXpl KTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZjb25u W2NvdW50XS5mYl90ZXN0X3BhdHRlcm4sIHByaW1hcnksCj4gPiA+ID4gPiA+ICsJCQkJKGNvbm5b Y291bnRdLnRpbGUudGlsZV9oX3NpemUgKgo+ID4gPiA+ID4gPiArCQkJCWNvbm5bY291bnRdLnRp bGUudGlsZV9oX2xvYyksCj4gPiA+ID4gPiA+ICsJCQkJKGNvbm5bY291bnRdLnRpbGUudGlsZV92 X3NpemUgKgo+ID4gPiA+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV92X2xvYykpOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwcmltYXJ5LAo+ ID4gPiA+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUsCj4gPiA+ID4gPiA+ ICsJCQkJY29ubltjb3VudF0udGlsZS50aWxlX3Zfc2l6ZSk7Cj4gPiA+ID4gPiA+ICsJfQo+ID4g PiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBwYWdlX2Zs aXBfaGFuZGxlcihpbnQgZmQsIHVuc2lnbmVkIGludCBzZXEsCj4gPiA+ID4gPiA+ICsJCXVuc2ln bmVkIGludCB0dl9zZWMsIHVuc2lnbmVkIGludCB0dl91c2VjLAo+ID4gPiA+ID4gPiArCQl1bnNp Z25lZCBpbnQgY3J0Y19pZCwgdm9pZCAqZGF0YSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4g Kwlib29sIGV4cHIgPSBmYWxzZTsKPiA+ID4gPiA+ID4gKwlzdGF0aWMgdW5zaWduZWQgaW50IF90 dl9zZWMsIF90dl91c2VjOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJaWd0X2RlYnVnKCJQ YWdlIEZsaXAgRXZlbnQgcmVjZWl2ZWQgZnJvbSBDUlRDOiVkIGF0ICV1OiV1XG4iLCBjcnRjX2lk LAo+ID4gPiA+ID4gPiArCQl0dl9zZWMsIHR2X3VzZWMpOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiBX ZSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgd2UgcmVjZWl2ZSBleGFjdGx5IG9uZSBwYWdlLWZsaXAg cGVyIENSVEMuCj4gPiA+ID4gPiBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIGNydGNfaWQgKGFwYXJ0 IGZyb20gbG9nZ2luZyBwdXJwb3NlcykuCj4gPiA+ID4gCj4gPiA+ID4gSSBzZWUgc28gc29tZWhv dyBoYXZlIGEgc3RhdGljIGNvdW50IG9mIGV2ZW50cyBhbmQgbWFrZSBzdXJlIHBlciBjcnRjIGlk IGl0cyB0aGUgc2FtZSBjb3VudCBvcgo+ID4gPiA+IHNvbWUgc2ltaWxhciBsb2dpYwo+ID4gPiAK PiA+ID4gWWVhaC4gV2UgY291bGQgZm9yIGluc3RhbmNlIGFkZCBhICJib29sIGdvdF9wYWdlX2Zs aXAiIGZpZWxkIGluIG91cgo+ID4gPiBkYXRhX2Nvbm5lY3Rvcl90IHN0cnVjdCBhbmQgc2V0IGl0 IHRvIHRydWUgaGVyZSAobWFraW5nIHN1cmUgaXQncyBub3QKPiA+ID4gc2V0IHRvIHRydWUgYWxy ZWFkeSkuCj4gPiA+IAo+ID4gPiBBIHBvaW50ZXIgY2FuIGJlIHBhc3NlZCB0byBwYWdlX2ZsaXBf aGFuZGxlciB2aWEgdGhlIGRhdGEgYXJndW1lbnQuCj4gPiAKPiA+IEkgZGlkbnQgdW5kZXJzdGFu ZCB3aGF0IHlvdSBtZWFudCBieSBwYXNzaW5nIGEgcG9pbnRlciB0byBwYWdlX2ZsaXBfaGFuZGxl cgo+ID4gdmlhIHRoZSBkYXRhIGFyZ3VtZW50Pwo+ID4gSSBsb29rZWQgdGhyb3VnaCB0aGUgZHJt SGFuZGxlRXZlbnQgZGVmaW5pdGlvbiBhbmQgaXQgcG9wdWxhdGVzIHRoZSB2b2lkICpkYXRhCj4g PiBpbiBwYWdlX2ZsaXBfaGFuZGxlciB3aXRoIHZibGFuay0+dXNlcl9kYXRhCj4gPiBTbyBpdHMg bm90IGNsZWFyIHRvIG1lIGhvdyB3ZSBjYW4gcGFzcyBvdXIgZGF0YV9jb25uZWN0b3JfdCAtPiBn b3RfcGFnZV9mbGlwX2Jvb2wgdG8gcGFnZV9mbGlwX2hhbmRsZXIKPiA+IGFuZCBzZXQgdGhhdCB0 byB0cnVlIGhlcmUuCj4gCj4gSGkhCj4gCj4gVGhlIHVzZXJfZGF0YSBmaWVsZCBpcyBzZXQgdG8g dGhlIGxhc3QgYXJndW1lbnQgZ2l2ZW4gdG8KPiBkcm1Nb2RlQXRvbWljQ29tbWl0IChpbiBJR1Qs IHRvIGlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMpLiBDdXJyZW50bHkKPiB3ZSBzZXQgaXQgdG8g TlVMTCwgd2UgY291bGQgc2V0IGl0IHRvIHRoZSBkYXRhX2Nvbm5lY3Rvcl90IGFycmF5Lgo+IAo+ IElmIGl0IGhlbHBzLCBoZXJlIFsxXSBpcyBhIHZlcnkgc2ltaWxhciB0ZXN0IHRoYXQganVzdCBh dG9taWNhbGx5IHBhZ2UtCj4gZmxpcHMgb24gbXVsdGlwbGUgQ1JUQ3MgYXQgb25jZS4gTm90ZSBo b3cgdGhlIHBhZ2VfZmxpcF9oYW5kbGVyIHNldHMKPiBnb3RfcGFnZV9mbGlwIChhbmQgbWFrZXMg c3VyZSB0aGVyZSBhcmUgbm8gZG91YmxlIHBhZ2UtZmxpcHMpLiBBbHNvCj4gbm90ZSB0aGF0IHRo ZSBsYXN0IGFyZ3VtZW50IHRvIGlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMgaXMgbm90IE5VTEwK PiB3aGVuIHBhZ2UtZmxpcHBpbmcuCj4gCj4gWzFdOiBodHRwczovL3BhdGNod29yay5mcmVlZGVz a3RvcC5vcmcvcGF0Y2gvMzI5MzM2Lwo+IAo+ID4gSSBoYXZlIGFsbCB0aGUgb3RoZXIgY2hhbmdl cyBkb25lLCBzbyBpbiBteSByZXZpc2lvbiB0aGF0IEkgYW0gYWJvdXQgdG8gc2VuZCBhbGwgdGhl IGNoYW5nZXMgZXhjZXB0IGZvcgo+ID4gdGhpcyBjaGVjayB0byBkb3VibGUgY2hlY2sgbnVtYmVy IG9mIHBhZ2UgZmxpcCBldmVudHMgPT0gbnVtX2hfdGlsZXMgaXMgbWlzc2luZy4KPiA+IAo+ID4g QWxzbyBpIG9ic2VydmVkIHRoYXQgc2luY2UgdGhlIGV2ZW50cyBhcmUgcXVldWVkLCBpdCBjYWxs cyB0aGUgcGFnZSBmbGlwIGhhbmRsZXIgdHdpY2UgaW4gdGhlIGZpcnN0IHdhaXRfZm9yX3BhZ2Vf ZmxpcCgpIGNhbGwKPiA+IHNvIGV2ZW4gaWYgaSBsb29wIGl0IHRoZSBudW1iZXIgb2YgdGltZXMg PSBudW1iZXIgb2YgY29ubmVjdG9ycywgaXQgY2FsbHMgcGFnZSBmbGlwIGhhbmRsZXIgdHdpY2Ug Zm9yIHRoZSBmaXJzdCBsb29wCj4gPiBhbmQgdGhlbiBkb2VzbnQgY2FsbCBwYWdlIGZsaXAgaGFu ZGxlciB0ZWggc2Vjb25kIHRpbWUuCj4gPiAKPiA+IFNvIEkgYW0gc2tpcHBpbmcgdGhhdCBsb29w aW5nIHBhcnQgYXMgd2VsbC4KPiAKPiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGV2ZW50cyBi ZWluZyBxdWV1ZWQgYW5kIGFsbCBhcnJpdmluZyBpbiBqdXN0Cj4gb25lIHBvbGwoKSBjYWxsLCB3 ZSBjYW4ganVzdCBsb29wIHVudGlsIHdlIGdvdCBhbGwgcGFnZS1mbGlwcy4gRm9yCj4gaW5zdGFu Y2UsIHRoaXMgaXMgZG9uZSBpbiB0aGUgdGVzdCBJIGxpbmtlZCBiZWZvcmUgWzFdOgo+IAo+IAl3 aGlsZSAoIWdvdF9hbGxfcGFnZV9mbGlwcygmZGF0YSkpIHsKPiAJCXJldCA9IHBvbGwoJnBmZCwg MSwgMTAwMCk7Cj4gCQlpZ3RfYXNzZXJ0KHJldCA9PSAxKTsKPiAJCWRybUhhbmRsZUV2ZW50KGRh dGEuZHJtX2ZkLCAmZHJtX2V2ZW50KTsKPiAJfQo+IAo+IExldCBtZSBrbm93IGlmIHNvbWV0aGlu ZydzIG5vdCBjbGVhciwgb3IgaWYgeW91IHRoaW5rIHRoaXMgaXNuJ3QgdGhlCj4gcmlnaHQgYXBw cm9hY2ghCgpZZXMgSSB0cmllZCB0aGlzIGFwcHJvYWNoIGFuZCBpdCB3b3JrZWQsIEkgaGF2ZSB0 aGlzIGxvZ2ljIGluIHJldjQsIHBsZWFzZSBqdXN0IHJldmlldyByZXY0IApvZiB0aGUgcGF0Y2gu CkkgYWxzbyBhZGRlZCBhIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIHN0cnVjdHMgYXMgcGFydCBv ZiBjb21tb24gZGF0YV90IHN0cnVjdCBsaWtlCnlvdXIgdGVzdCwgbWFrZXMgaXQgZWFzaWVyIHRv IG5hdmlnYXRlIGJldHdlZW4gZnVuY3Rpb25zLgoKTm93IHRoZSByZXY0IHNob3VsZCBiZSBjb21w bGV0ZSBpbiB0ZXJtcyBvZiB2YWxpZGF0aW5nIHRoaXMgcGFnZSBmbGlwIGV2ZW50cyBsb2dpYwp0 byBjaGVjayB0aGF0IHRoZXJlIGlzIG9ubHkgMSBwYWdlIGZsaXAgcGVyIENSVEMgYW5kIHRoYXQg d2UgaGF2ZSBvYnRhaW5lZApwYWdlIGZsaXBzIGZvciBhbGwgY3J0Y3Mgd2l0aGluIHNhbWUgdmJs YW5rCgpQbGVhc2UgbGV0IG1lIGtub3cgeW91ciBmZWVkYmFjayBvbiByZXY0CgpSZWdhcmRzCk1h bmFzaQoKPiAKPiA+IFBsZWFzZSBsZXQgbWUga25vdyB5b3VyIHRob3VnaHRzIGFuZCBJIGxvb2sg Zm9yd2FyZCB0byB5b3VyIHJldmlldyBvbiB0ZWggbmV3IHJldmlzaW9uIEkgYW0gc2VuZGluZyB0 b2RheS4KPiAKPiBUaGFua3MhCj4gCj4gPiBNYW5hc2kKPiA+IAo+ID4gPiA+ID4gPiArCS8qIFNr aXAgdGhlIGZvbGxvd2luZyBjaGVja3MgZm9yIHRoZSBmaXJzdCBwYWdlIGZsaXAgZXZlbnQgKi8K PiA+ID4gPiA+ID4gKwlpZiAoX3R2X3NlYyA9PSAwIHx8IF90dl91c2VjID09IDApIHsKPiA+ID4g PiA+ID4gKwkJX3R2X3NlYyA9IHR2X3NlYzsKPiA+ID4gPiA+ID4gKwkJX3R2X3VzZWMgPSB0dl91 c2VjOwo+ID4gPiA+ID4gPiArCQlyZXR1cm47Cj4gPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ID4gKwkgKiBGb3Igc2VhbWxlc3MgdGVhci1mcmVl IGRpc3BsYXksIHRoZSBwYWdlIGZsaXAgZXZlbnQgdGltZXN0YW1wcwo+ID4gPiA+ID4gPiArCSAq IGZyb20gYWxsIHRoZSB0aWxlcyBzaG91bGQgbm90IGRpZmZlciBieSBtb3JlIHRoYW4gMTB1cy4K PiA+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ID4gKwlleHByID0gdHZfc2VjID09IF90dl9zZWMg JiYgKGFicyh0dl91c2VjIC0gX3R2X3VzZWMpIDwgMTApOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiBO aXQ6IHRoaXMgY291bGQgYmUgcmVuYW1lZCB0byBlLmcuIGlzX29uX3RpbWUsIGV4cHIgaXMgYSBw cmV0dHkgdmFndWUKPiA+ID4gPiA+IG5hbWUuCj4gPiA+ID4gCj4gPiA+ID4geWVzIGFncmVlIHdp bGwgcmVuYW1lIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZQo+ID4gPiA+IAo+ID4gPiA+ID4gPiAr CWlndF9mYWlsX29uX2YoIWV4cHIsICJEZWxheWVkIHBhZ2UgZmxpcCBldmVudCBmcm9tIENSVEM6 JWQgYXQgJXU6JXVcbiIsCj4gPiA+ID4gPiA+ICsJCWNydGNfaWQsIHR2X3NlYywgdHZfdXNlYyk7 Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlpZiAodHZfc2VjIDwgX3R2X3NlYykKPiA+ID4g PiA+ID4gKwkJX3R2X3NlYyA9IHR2X3NlYzsKPiA+ID4gPiA+ID4gKwlpZiAodHZfdXNlYyA8IF90 dl91c2VjKQo+ID4gPiA+ID4gPiArCQlfdHZfdXNlYyA9IHR2X3VzZWM7Cj4gPiA+ID4gPiAKPiA+ ID4gPiA+IFRoaXMgdXBkYXRlcyB0aGUgdGltZXN0YW1wIG9uIGVhY2ggcGFnZS1mbGlwLiBUaGlz IG1lYW5zIHRoYXQgdGhlIGZpcnN0Cj4gPiA+ID4gPiBhbmQgbGFzdCBwYWdlLWZsaXBzIGNvdWxk IGJlIGRlbGF5ZWQgYnkgbW9yZSB0aGFuIDEwwrVzIGlmIHRoZXJlIGFyZQo+ID4gPiA+ID4gaW50 ZXJtZWRpYXRlIHBhZ2UtZmxpcHMuIEZvciBpbnN0YW5jZSwgaWYgdGhlIGZpcnN0IHBhZ2UtZmxp cCBoYXBwZW5zCj4gPiA+ID4gPiBhdCB0PTDCtXMgYW5kIHRoZSBzZWNvbmQgb25lIGhhcHBlbnMg YXQgdD05wrVzLCB0aGUgbGFzdCBvbmUgY291bGQgaGFwcGVuCj4gPiA+ID4gPiBhdCB0PTE4wrVz IHdpdGhvdXQgbWFraW5nIHRoaXMgdGVzdCBmYWlscy4gSXMgdGhpcyBzb21ldGhpbmcgd2Ugd2Fu dCB0bwo+ID4gPiA+ID4gYWxsb3c/Cj4gPiA+ID4gCj4gPiA+ID4gTm9wZSBhbGwgb2YgdGhlbSBz aG91bGQgaGFwcGVuIHdpdGhpbiB0aGUgc2FtZSB2Ymxhbmsgc28gdGhlIGRpZmYgYmV0d2VlbiBh bGwKPiA+ID4gPiBzaG91bGQgYmUgPDEwdXMsIHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhlIGxvZ2lj IHRvIGRvIHRoYXQuCj4gPiA+ID4gCj4gPiA+ID4gc28gYmFzaWNhbGx5IGluc3RlYWQgb2YgbWFr aW5nIDwxMHVzIGNvbmRpdGlvbiBmb3IgdGhlIGNvbnNlY3V0aXZlIG9uZXMsIGl0IHNob3VsZCBi ZSBiZXR3ZWVuIHRoZSBmaXJzdCBvbmUKPiA+ID4gPiBhbmQgYWxsIG90aGVyIGV2ZW50cywgY29y cmVjdD8KPiA+ID4gCj4gPiA+IENvcnJlY3QhIFNvIHdlIGNhbiBqdXN0IGRyb3AgdGhlc2UgNCBs aW5lcywgdGhhdCBzaG91bGQgZG8gaXQuCj4gPiA+IAo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlZmxpcChpbnQgZHJtX2Zk KQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArCXN0cnVjdCBwb2xsZmQgcGZkOwo+ID4gPiA+ ID4gPiArCWRybUV2ZW50Q29udGV4dCBkcm1fZXZlbnQ7Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IE5p dDogdG8gbWFrZSBzdXJlIGdhcmJhZ2UgaXNuJ3QgcmVhZCBmcm9tIHRoaXMgc3RydWN0ICh0aGVy ZSBhcmUgb3RoZXIKPiA+ID4gPiA+IGZ1bmN0aW9uIHBvaW50ZXJzKSwgaXQncyBwcm9iYWJseSBz YWZlciB0byB6ZXJvLWZpbGwgaXQgKD0gezB9KS4KPiA+ID4gPiAKPiA+ID4gPiBHb3QgaXQKPiA+ ID4gPiAKPiA+ID4gPiA+ID4gKwlkcm1fZXZlbnQudmVyc2lvbiA9IDM7Cj4gPiA+ID4gPiA+ICsJ ZHJtX2V2ZW50LnBhZ2VfZmxpcF9oYW5kbGVyMiA9IHBhZ2VfZmxpcF9oYW5kbGVyOwo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICsJcGZkLmZkID0gZHJtX2ZkOwo+ID4gPiA+ID4gPiArCXBmZC5l dmVudHMgPSBQT0xMSU47Cj4gPiA+ID4gPiA+ICsJcGZkLnJldmVudHMgPSAwOwo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsJcG9sbCgmcGZkLCAxLCAxMDAwKTsKPiA+ID4gPiA+IAo+ID4gPiA+ ID4gTWF5YmUgd2Ugc2hvdWxkIGNoZWNrIHBvbGwoMikncyByZXR1cm4gdmFsdWU/Cj4gPiA+ID4g Cj4gPiA+ID4gcG9sbCgyKT8gT3IganVzdCBjaGVjayByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0 aW9uIHBvbGwoKSBqdXN0IGZvciBlcnJvciBoYW5kbGluZz8KPiA+ID4gCj4gPiA+IFllcywganVz dCBpbiBjYXNlLgo+ID4gPiAKPiA+ID4gKEFzIGEgc2lkZSBub3RlLCBwb2xsKDIpIHNpbXBseSBt ZWFucyAidGhlIHBvbGwgc3lzdGVtIGNhbGwiIGFuZCByZWZlcnMKPiA+ID4gdG8gcG9sbCdzIHN5 c2NhbGwgbWFucGFnZSBzZWN0aW9uLikKPiA+ID4gCj4gPiA+ID4gPiA+ICsJaWYgKHBmZC5yZXZl bnRzICYgUE9MTElOKQo+ID4gPiA+ID4gPiArCQlkcm1IYW5kbGVFdmVudChkcm1fZmQsICZkcm1f ZXZlbnQpOwo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJZiB3ZSBkb24ndCBnZXQgUE9MTElOIChlLmcu IGlmIHdlIHRpbWVvdXQpLCB3YWl0X2Zvcl9wYWdlZmxpcCB3aWxsCj4gPiA+ID4gPiBzaWxlbnRs eSBkbyBub3RoaW5nLCBhbmQgdGhlIHRlc3Qgd2lsbCBwYXNzLiBJbnN0ZWFkLCB3ZSBwcm9iYWJs eSB3YW50Cj4gPiA+ID4gPiB0byBmYWlsIGluIHRoaXMgY2FzZS4KPiA+ID4gPiAKPiA+ID4gPiBZ ZXMgdGhhdHMgY29ycmVjdCwganVzdCBhZGQgZWxzZSBjYXNlIHdpdGggaWd0X2Fzc2VydD8KPiA+ ID4gCj4gPiA+IFllcyEKPiA+ID4gCj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gK2lndF9tYWluCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICsJaWd0X2Rpc3BsYXlf dCBkaXNwbGF5Owo+ID4gPiA+ID4gPiArCWRhdGFfY29ubmVjdG9yX3QgKmNvbm5fZGF0YSA9IE5V TEw7Cj4gPiA+ID4gPiA+ICsJZGF0YV90IGRhdGEgPSB7LmRybV9mZCA9IDAsIC5udW1faF90aWxl cyA9IDAsCj4gPiA+ID4gPiA+ICsJCSAgICAgICAuZGlzcGxheSA9IE5VTEwsIC5jb21taXQgPSBD T01NSVRfTEVHQUNZfTsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gTml0OiBvbmUgY2FuIGp1c3QgZG8g YXNzaWduIHRvIHswfSB0byB6ZXJvLWZpbGwgdGhlIHN0cnVjdC4KPiA+ID4gPiAKPiA+ID4gPiBH b3QgaXQKPiA+ID4gPiAKPiA+ID4gPiA+ID4gKwlpZ3RfZml4dHVyZSB7Cj4gPiA+ID4gPiA+ICsJ CWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4g PiA+ID4gPiA+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsK PiA+ID4gPiA+ID4gKwkJaWd0X2Rpc3BsYXlfcmVzZXQoJmRpc3BsYXkpOwo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICsJCWRhdGEuZGlzcGxheSA9ICZkaXNwbGF5Owo+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ICsJCWdldF9udW1iZXJfb2ZfaF90aWxlcygmZGF0YSk7Cj4gPiA+ID4gPiA+ICsJ CWlndF9kZWJ1ZygiTnVtYmVyIG9mIEhvcml6b250YWwgVGlsZXM6ICVkXG4iLCBkYXRhLm51bV9o X3RpbGVzKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQlkYXRhLmNvbW1pdCA9IGRhdGEu ZGlzcGxheS0+aXNfYXRvbWljID8gQ09NTUlUX0FUT01JQyA6IENPTU1JVF9MRUdBQ1k7Cj4gPiA+ ID4gPiAKPiA+ID4gPiA+IFNob3VsZCB3ZSB0cnkgdG8gcnVuIHRoaXMgdGVzdCBhdCBhbGwgb24g ZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQKPiA+ID4gPiA+IGF0b21pYz8KPiA+ID4gPiA+IAo+ ID4gPiA+ID4gSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYXRvbWljLCB1c2VyLXNwYWNl IHdpbGwgc3VibWl0IHR3byBwYWdlLQo+ID4gPiA+ID4gZmxpcCByZXF1ZXN0cy4gSG93ZXZlciBp dCdzIHBvc3NpYmxlIHRoYXQgdGhlIGhhcmR3YXJlIGV4ZWN1dGVzIGEgcGFnZS0KPiA+ID4gPiA+ IGZsaXAgYmV0d2VlbiBib3RoIHJlcXVlc3RzOiB1c2VyLXNwYWNlIGNhbGxzIHRoZSBmaXJzdCBk cm1Nb2RlUGFnZUZsaXAsCj4gPiA+ID4gPiB0aGUgdmJsYW5rIGZvciB0aGlzIHBhcnRpY3VsYXIg Q1JUQyB0cmlnZ2VycywgdGhlbiB1c2VyLXNwYWNlIGNhbGxzIHRoZQo+ID4gPiA+ID4gc2Vjb25k IGRybU1vZGVQYWdlRmxpcC4gUGFnZS1mbGlwcyB3aWxsIGJlIG91dC1vZi1zeW5jIGJ5IG9uZSBm cmFtZS4KPiA+ID4gPiAKPiA+ID4gPiBIbW0sIHllYSBzaG91bGQgcHJvYmJhbHkgaGF2ZSBpZ3Rf cmVxdWlyZSBvbiBhdG9taWMKPiA+ID4gPiAKPiA+ID4gPiA+ID4gKwkJaWYgKGRhdGEubnVtX2hf dGlsZXMgPiAwKQo+ID4gPiA+ID4gPiArCQkJY29ubl9kYXRhID0gbWFsbG9jKGRhdGEubnVtX2hf dGlsZXMgKiBzaXplb2YoZGF0YV9jb25uZWN0b3JfdCkpOwo+ID4gPiA+ID4gPiArCX0KPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArCWlndF9zdWJ0ZXN0KCJiYXNpYy10ZXN0LXBhdHRlcm4iKSB7 Cj4gPiA+ID4gPiA+ICsJCWlndF9za2lwX29uKGRhdGEubnVtX2hfdGlsZXMgPT0gMCk7Cj4gPiA+ ID4gPiA+ICsJCWlndF9hc3NlcnQoY29ubl9kYXRhKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArCQlnZXRfY29ubmVjdG9yKCZkYXRhLCBjb25uX2RhdGEpOwo+ID4gPiA+ID4gPiArCQlzZXR1 cF9tb2RlKCZkYXRhLCBjb25uX2RhdGEpOwo+ID4gPiA+ID4gPiArCQlzZXR1cF9mcmFtZWJ1ZmZl cigmZGF0YSwgY29ubl9kYXRhKTsKPiA+ID4gPiA+ID4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0X2F0 b21pYyhkYXRhLmRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19OT05CTE9DSyB8Cj4gPiA+ID4gPiA+ ICsJCQlEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsIE5VTEwpOwo+ID4gPiA+ID4gPiArCQl3YWl0 X2Zvcl9wYWdlZmxpcChkYXRhLmRybV9mZCk7Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhlcmUgd2Ug b25seSB3YWl0IGZvciBhIHNpbmdsZSBwYWdlLWZsaXAuIFRoaXMgd2lsbCBvbmx5IHN0YXNoIHRo ZQo+ID4gPiA+ID4gdGltZXN0YW1wIG9mIHRoZSBmcnN0IHBhZ2UtZmxpcCB3aXRob3V0IGNoZWNr aW5nIHRoZSB0aW1lLXN0YW1wIG9mCj4gPiA+ID4gPiBzdWJzZXF1ZW50IHBhZ2UtZmxpcHMuIFdl IHNob3VsZCB3YWl0IGZvciBhcyBtYW55IHBhZ2UtZmxpcHMgYXMgZW5hYmxlZAo+ID4gPiA+ID4g dGlsZWQgY29ubmVjdG9ycy4KPiA+ID4gPiAKPiA+ID4gPiBUaGF0IHdhcyBvdXIgaW5pdGlhbCB1 bmRlcnN0YW5kaW5nIGFzIHdlbGwsIGJ1dCB3aXRoIGp1c3Qgb25lIHdhaXRfZm9yX3BhZ2VmbGlw IGNhbGwgd2UKPiA+ID4gPiB3ZXJlIGdldGluZyB0d28gcGFnZSBmbGlwIGV2ZW50cyBmb3IgdHdv IHRpbGVzCj4gPiA+ID4gRG8gd2UgbmVlZCB0byBjYWxsIHdhaXQgZm9yIHBhZ2UgZmxpcCBleHBs aWNpdGx5IHRoZSBudW1iZXIgb2YgdGltZXMgPSBudW1iZXIgb2YgdGlsZXM/Cj4gPiA+IAo+ID4g PiBPaCwgSSBzZWUuIFNvIGl0IHNlZW1zIHR3byBldmVudHMgYXJlIHF1ZXVlZC4gVGhlbiB3ZSBz aG91bGQgcHJvYmFibHkKPiA+ID4gbG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFnZS1mbGlwIGZvciBh bGwgQ1JUQ3MsIHNpbmNlIHRoZXJlJ3Mgbm8KPiA+ID4gZ3VhcmFudGVlIGFsbCBldmVudHMgd2ls bCBiZSBzZW50IGF0IG9uY2UuCj4gPiA+IAo+ID4gPiA+IFJlZ2FyZHMKPiA+ID4gPiBNYW5hc2kK PiA+ID4gPiAKPiA+ID4gPiA+ID4gKwkJdGVzdF9jbGVhbnVwKCZkYXRhLCBjb25uX2RhdGEpOwo+ ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWlndF9maXh0dXJlIHsK PiA+ID4gPiA+ID4gKwkJZnJlZShjb25uX2RhdGEpOwo+ID4gPiA+ID4gPiArCQljbG9zZShkYXRh LmRybV9mZCk7Cj4gPiA+ID4gPiA+ICsJCWttc3Rlc3RfcmVzdG9yZV92dF9tb2RlKCk7Cj4gPiA+ ID4gPiA+ICsJCWlndF9kaXNwbGF5X2ZpbmkoZGF0YS5kaXNwbGF5KTsKPiA+ID4gPiA+ID4gKwl9 Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWls ZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiA+ID4gPiA+IGluZGV4IGE3YjJiMzIyLi41MDI5MmRm OCAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gPiA+ID4g KysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gPiA+ID4gQEAgLTI2LDYgKzI2LDcgQEAgdGVz dF9wcm9ncyA9IFsKPiA+ID4gPiA+ID4gIAkna21zX2N1cnNvcl9lZGdlX3dhbGsnLAo+ID4gPiA+ ID4gPiAgCSdrbXNfY3Vyc29yX2xlZ2FjeScsCj4gPiA+ID4gPiA+ICAJJ2ttc19kcF9kc2MnLAo+ ID4gPiA+ID4gPiArCSdrbXNfZHBfdGlsZWRfZGlzcGxheScsCj4gPiA+ID4gPiA+ICAJJ2ttc19k cmF3X2NyYycsCj4gPiA+ID4gPiA+ICAJJ2ttc19mYmNvbl9mYnQnLAo+ID4gPiA+ID4gPiAgCSdr bXNfZmVuY2VfcGluX2xlYWsnLApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=