From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [DOC v7] PV Calls protocol design Date: Fri, 20 Jan 2017 14:56:26 -0500 Message-ID: <20170120195626.GA26132@char.us.oracle.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cUfIh-0000r4-0g for xen-devel@lists.xenproject.org; Fri, 20 Jan 2017 19:56:43 +0000 Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: jgross@suse.com, lars.kurth@citrix.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, Stefano Stabellini , Paul.Durrant@citrix.com, xen-devel@lists.xenproject.org, joao.m.martins@oracle.com, boris.ostrovsky@oracle.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBKYW4gMTAsIDIwMTcgYXQgMDQ6MTM6MjZQTSAtMDgwMCwgU3RlZmFubyBTdGFiZWxs aW5pIHdyb3RlOgo+IFVwb24gcmVxdWVzdCBmcm9tIEtvbnJhZCwgSSBhbSBhdHRhY2hpbmcgdGhl IG91dHB1dCBvZiBwYWhvbGUgb24gdGhlIEMKPiBzdHJ1Y3RzIGRlZmluZWQgYnkgUFZDYWxscy4g QXMgeW91IGNhbiBzZWUsIGFsaWdubWVudHMgYW5kIHNpemVzIG9mIGFsbAoKVGhhbmsgeW91IQo+ IGZpZWxkcyBhcmUgdGhlIHNhbWUsIGV4Y2VwdCBmb3IgdGhlIHBhZGRpbmcgYXQgdGhlIGVuZCBv ZiBtYW55IHJlcXVlc3QKPiBzdHJ1Y3RzICh0aGV5IG5lZWQgdG8gYmUgbXVsdGlwbGUgb2YgOCBi eXRlcyBvbiA2NGJpdCkuIEhvd2V2ZXIsIHN0cnVjdAoKV291bGQgaXQgbWFrZSBzZW5zZSB0byBh ZGQKCiNpZmRlZiBDT05GSUdfWDg2XzMyCnVpbnQ4X3RbWF0gX3BhZDsKI2VuZGlmCgpzbyBpdCB3 aWxsIG5pY2VseSBmaWxsIGl0IG91dD8KCj4geGVuX3B2Y2FsbHNfZHVtbXkgZHVtbXkgZW5zdXJl cyB0aGF0IHRoZSBvdmVyYWxsIHNpemUgb2Ygc3RydWN0Cj4geGVuX3B2Y2FsbHNfcmVxdWVzdCBp cyB0aGUgc2FtZSBvbiBib3RoIDMyIGFuZCA2NC4KClllcyBpbmRlZWQuIFRoYW5rIHlvdSEKCj4g PiAjIFBWIENhbGxzIFByb3RvY29sIHZlcnNpb24gMQo+ID4gCj4gPiAjIyBHbG9zc2FyeQo+ID4g Cj4gPiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiB0ZXJtcyBhbmQgZGVmaW5pdGlvbnMgdXNl ZCBpbiB0aGUgWGVuCj4gPiBjb21tdW5pdHkuIElmIHlvdSBhcmUgYSBYZW4gY29udHJpYnV0b3Ig eW91IGNhbiBza2lwIHRoaXMgc2VjdGlvbi4KPiA+IAo+ID4gKiBQVgo+ID4gCj4gPiAgIFNob3J0 IGZvciBwYXJhdmlydHVhbGl6ZWQuCj4gPiAKPiA+ICogRG9tMAo+ID4gCj4gPiAgIEZpcnN0IHZp cnR1YWwgbWFjaGluZSB0aGF0IGJvb3RzLiBJbiBtb3N0IGNvbmZpZ3VyYXRpb25zIERvbTAgaXMK PiA+ICAgcHJpdmlsZWdlZCBhbmQgaGFzIGNvbnRyb2wgb3ZlciBoYXJkd2FyZSBkZXZpY2VzLCBz dWNoIGFzIG5ldHdvcmsKPiA+ICAgY2FyZHMsIGdyYXBoaWMgY2FyZHMsIGV0Yy4KPiA+IAo+ID4g KiBEb21VCj4gPiAKPiA+ICAgUmVndWxhciB1bnByaXZpbGVnZWQgWGVuIHZpcnR1YWwgbWFjaGlu ZS4KPiA+IAo+ID4gKiBEb21haW4KPiA+IAo+ID4gICBBIFhlbiB2aXJ0dWFsIG1hY2hpbmUuIERv bTAgYW5kIGFsbCBEb21VcyBhcmUgYWxsIHNlcGFyYXRlIFhlbgo+ID4gICBkb21haW5zLgo+ID4g Cj4gPiAqIEd1ZXN0Cj4gPiAKPiA+ICAgU2FtZSBhcyBkb21haW46IGEgWGVuIHZpcnR1YWwgbWFj aGluZS4KPiA+IAo+ID4gKiBGcm9udGVuZAo+ID4gCj4gPiAgIEVhY2ggRG9tVSBoYXMgb25lIG9y IG1vcmUgcGFyYXZpcnR1YWxpemVkIGZyb250ZW5kIGRyaXZlcnMgdG8gYWNjZXNzCj4gPiAgIGRp c2tzLCBuZXR3b3JrLCBjb25zb2xlLCBncmFwaGljcywgZXRjLiBUaGUgcHJlc2VuY2Ugb2YgUFYg ZGV2aWNlcyBpcwo+ID4gICBhZHZlcnRpemVkIG9uIFhlblN0b3JlLCBhIGNyb3NzIGRvbWFpbiBr ZXktdmFsdWUgZGF0YWJhc2UuIEZyb250ZW5kcwo+ID4gICBhcmUgc2ltaWxhciBpbiBpbnRlbnQg dG8gdGhlIHZpcnRpbyBkcml2ZXJzIGluIExpbnV4Lgo+ID4gCj4gPiAqIEJhY2tlbmQKPiA+IAo+ ID4gICBBIFhlbiBwYXJhdmlydHVhbGl6ZWQgYmFja2VuZCB0eXBpY2FsbHkgcnVucyBpbiBEb20w IGFuZCBpdCBpcyB1c2VkIHRvCj4gPiAgIGV4cG9ydCBkaXNrcywgbmV0d29yaywgY29uc29sZSwg Z3JhcGhpY3MsIGV0Y3MsIHRvIERvbVVzLiBCYWNrZW5kcyBjYW4KPiA+ICAgbGl2ZSBib3RoIGlu IGtlcm5lbCBzcGFjZSBhbmQgaW4gdXNlcnNwYWNlLiBGb3IgZXhhbXBsZSB4ZW4tYmxrYmFjawo+ ID4gICBsaXZlcyB1bmRlciBkcml2ZXJzL2Jsb2NrIGluIHRoZSBMaW51eCBrZXJuZWwgYW5kIHhl bl9kaXNrIGxpdmVzIHVuZGVyCj4gPiAgIGh3L2Jsb2NrIGluIFFFTVUuIFBhcmF2aXJ0dWFsaXpl ZCBiYWNrZW5kcyBhcmUgc2ltaWxhciBpbiBpbnRlbnQgdG8KPiA+ICAgdmlydGlvIGRldmljZSBl bXVsYXRvcnMuCj4gPiAKPiA+ICogVk1YIGFuZCBTVk0KPiA+ICAgCj4gPiAgIE9uIEludGVsIHBy b2Nlc3NvcnMsIFZNWCBpcyB0aGUgQ1BVIGZsYWcgZm9yIFZULXgsIGhhcmR3YXJlCj4gPiAgIHZp cnR1YWxpemF0aW9uIHN1cHBvcnQuIEl0IGNvcnJlc3BvbmRzIHRvIFNWTSBvbiBBTUQgcHJvY2Vz c29ycy4KPiA+IAo+ID4gCj4gPiAKPiA+ICMjIFJhdGlvbmFsZQo+ID4gCj4gPiBQViBDYWxscyBp cyBhIHBhcmF2aXJ0dWFsaXplZCBwcm90b2NvbCB0aGF0IGFsbG93cyB0aGUgaW1wbGVtZW50YXRp b24gb2YKPiA+IGEgc2V0IG9mIFBPU0lYIGZ1bmN0aW9ucyBpbiBhIGRpZmZlcmVudCBkb21haW4u IFRoZSBQViBDYWxscyBmcm9udGVuZAo+ID4gc2VuZHMgUE9TSVggZnVuY3Rpb24gY2FsbHMgdG8g dGhlIGJhY2tlbmQsIHdoaWNoIGltcGxlbWVudHMgdGhlbSBhbmQKPiA+IHJldHVybnMgYSB2YWx1 ZSB0byB0aGUgZnJvbnRlbmQuCgoicmV0dXJucyBhIHZhbHVlIHRvIHRoZSBmcm9udGVuZCBhbmQg YWN0cyBvbiB0aGUgZnVuY3Rpb24gY2FsbC4iCj4gPiAKPiA+IFRoaXMgdmVyc2lvbiBvZiB0aGUg ZG9jdW1lbnQgY292ZXJzIG5ldHdvcmtpbmcgZnVuY3Rpb24gY2FsbHMsIHN1Y2ggYXMKPiA+IGNv bm5lY3QsIGFjY2VwdCwgYmluZCwgcmVsZWFzZSwgbGlzdGVuLCBwb2xsLCByZWN2bXNnIGFuZCBz ZW5kbXNnOyBidXQKPiA+IHRoZSBwcm90b2NvbCBpcyBtZWFudCB0byBiZSBlYXNpbHkgZXh0ZW5k ZWQgdG8gY292ZXIgZGlmZmVyZW50IHNldHMgb2YKPiA+IGNhbGxzLiBVbmltcGxlbWVudGVkIGNv bW1hbmRzIHJldHVybiBFTk9UU1VQLgo+ID4gCj4gPiBQViBDYWxscyBwcm92aWRlIHRoZSBmb2xs b3dpbmcgYmVuZWZpdHM6Cj4gPiAqIGZ1bGwgdmlzaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgYmVoYXZp b3Igb24gdGhlIGJhY2tlbmQgZG9tYWluLCBhbGxvd2luZwo+ID4gICBmb3IgaW5leHBlbnNpdmUg ZmlsdGVyaW5nIGFuZCBtYW5pcHVsYXRpb24gb2YgYW55IGd1ZXN0IGNhbGxzCj4gPiAqIGV4Y2Vs bGVudCBwZXJmb3JtYW5jZQo+ID4gCj4gPiBTcGVjaWZpY2FsbHksIFBWIENhbGxzIGZvciBuZXR3 b3JraW5nIG9mZmVyIHRoZXNlIGFkdmFudGFnZXM6Cj4gPiAqIGd1ZXN0IG5ldHdvcmtpbmcgd29y a3Mgb3V0IG9mIHRoZSBib3ggd2l0aCBWUE5zLCB3aXJlbGVzcyBuZXR3b3JrcyBhbmQKPiA+ICAg YW55IG90aGVyIGNvbXBsZXggY29uZmlndXJhdGlvbnMgb24gdGhlIGhvc3QKPiA+ICogZ3Vlc3Qg c2VydmljZXMgbGlzdGVuIG9uIHBvcnRzIGJvdW5kIGRpcmVjdGx5IHRvIHRoZSBiYWNrZW5kIGRv bWFpbiBJUAo+ID4gICBhZGRyZXNzZXMKPiA+ICogbG9jYWxob3N0IGJlY29tZXMgYSBzZWN1cmUg bmFtZXNwYWNlIGZvciBpbnRlci1WTXMgY29tbXVuaWNhdGlvbnMKPiA+CgpbTm90IHN1cmUgSSB1 bmRlcnN0YW5kIHRoYXQgYnV0IGl0IHByb2JhYmx5IGlzIGV4cGxhaW5lZCBpbiBkZXRhaWwgbGF0 ZXIgb24/XQoKRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGRlZmluZSB3aGF0ICduYW1lc3BhY2UnIGlz ID8gSSBtZWFuIEkga25vdyB3aGF0IGl0IGlzCmluIGNvbnRleHQgb2YgQysrIGJ1dCBJIHByZXN1 bWUgd2l0aCBjZ3JvdXBzIGFuZCBzdWNoIGl0IGlzIGRpZmZlcmVudD8gCj4gPiAKPiA+ICMjIERl c2lnbgo+ID4gCj4gPiAjIyMgV2h5IFhlbj8KPiA+IAo+ID4gUFYgQ2FsbHMgYXJlIHBhcnQgb2Yg YW4gZWZmb3J0IHRvIGNyZWF0ZSBhIHNlY3VyZSBydW50aW1lIGVudmlyb25tZW50Cj4gPiBmb3Ig Y29udGFpbmVycyAoT0NJIGltYWdlcyB0byBiZSBwcmVjaXNlKS4gUFYgQ2FsbHMgYXJlIGJhc2Vk IG9uIFhlbiwKCk9DSSA9IE9wZW4gQ29udGFpbmVycyBJbml0aWF0aXZlPwoKUGVyaGFwcyBtZW50 aW9uIHRoYXQgaW4gZ2xvc3Nhcnkgb3IganVzdCBzcGVsbCBpdCBvdXQgaGVyZSwgbGlrZToKCnMv T0NJIGltYWdlcy9PcGVuIENvbnRhaW5lcnMgSW5pdGlhdGl2ZSwgYWthIE9DSS8KCj4gPiBhbHRo b3VnaCBwb3J0aW5nIHRoZW0gdG8gb3RoZXIgaHlwZXJ2aXNvcnMgaXMgcG9zc2libGUuIFhlbiB3 YXMgY2hvc2VuCj4gPiBiZWNhdXNlIG9mIGl0cyBzZWN1cml0eSBhbmQgaXNvbGF0aW9uIHByb3Bl cnRpZXMgYW5kIGJlY2F1c2UgaXQgc3VwcG9ydHMKPiA+IFBWIGd1ZXN0cywgYSB0eXBlIG9mIHZp cnR1YWwgbWFjaGluZXMgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGhhcmR3YXJlCj4gPiB2aXJ0dWFs aXphdGlvbiBleHRlbnNpb25zIChWTVggb24gSW50ZWwgcHJvY2Vzc29ycyBhbmQgU1ZNIG9uIEFN RAo+ID4gcHJvY2Vzc29ycykuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgUFYgQ2FsbHMgaXMg bWVhbnQgZm9yIGNvbnRhaW5lcnMKPiA+IGFuZCBjb250YWluZXJzIGFyZSBvZnRlbiBydW4gb24g dG9wIG9mIHB1YmxpYyBjbG91ZCBpbnN0YW5jZXMsIHdoaWNoIGRvCj4gPiBub3Qgc3VwcG9ydCBu ZXN0ZWQgVk1YIChvciBTVk0pIGFzIG9mIHRvZGF5IChsYXRlIDIwMTYpLiBYZW4gUFYgZ3Vlc3Rz CgpzL2xhdGUgMjAxNi9lYXJseSAyMDE3LwoKPiA+IGFyZSBsaWdodHdlaWdodCwgbWluaW1hbGlz dCwgYW5kIGRvIG5vdCByZXF1aXJlIG1hY2hpbmUgZW11bGF0aW9uOiBhbGwKPiA+IHByb3BlcnRp ZXMgdGhhdCBtYWtlIHRoZW0gYSBnb29kIGZpdCBmb3IgdGhlIHByb2plY3QuCgpzL3RoZSBwcm9q ZWN0L3RoaXMgcHJvamVjdC8KPiA+IAo+ID4gIyMjIFhlbnN0b3JlCj4gPiAKPiA+IFRoZSBmcm9u dGVuZCBhbmQgdGhlIGJhY2tlbmQgY29ubmVjdCB2aWEgW3hlbnN0b3JlXSB0bwo+ID4gZXhjaGFu Z2UgaW5mb3JtYXRpb24uIFRoZSB0b29sc3RhY2sgY3JlYXRlcyBmcm9udCBhbmQgYmFjayBub2Rl cyB3aXRoCj4gPiBzdGF0ZSBbWGVuYnVzU3RhdGVJbml0aWFsaXNpbmddLiBUaGUgcHJvdG9jb2wg bm9kZSBuYW1lCgpzL3N0YXRlL3N0YXRlIG9mLwo+ID4gaXMgKipwdmNhbGxzKiouICBUaGVyZSBj YW4gb25seSBiZSBvbmUgUFYgQ2FsbHMgZnJvbnRlbmQgcGVyIGRvbWFpbi4KPiA+IAo+ID4gIyMj IyBGcm9udGVuZCBYZW5CdXMgTm9kZXMKPiA+IAo+ID4gcG9ydAo+ID4gICAgICBWYWx1ZXM6ICAg ICAgICAgPHVpbnQzMl90Pgo+ID4gCj4gPiAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBYZW4g ZXZlbnQgY2hhbm5lbCB1c2VkIHRvIHNpZ25hbCBhY3Rpdml0eQo+ID4gICAgICBpbiB0aGUgcmlu ZyBidWZmZXIuCgpyaW5nIGJ1ZmZlciBvciBjb21tYW5kIHJpbmc/CgpPciByaW5nIGJ1ZmZlcnM/ CgpZb3Ugc2VlbSB0byBoYXZlOgoKICAgICAgICAgICAgICAgIDE6TiAgICAgICAgICAgICAgMTpO CiAgY29tbWFuZCByaW5nIC0tLS0tLT4gZGF0YSByaW5nIC0tLT4gcmluZyBidWZmZXIKCkFuZCB0 aGUgZGF0YSByaW5nIGNyZWF0ZXMgMSBldmVudCBjaGFubmVsIGZvciBOIHJpbmcgYnVmZmVycyB3 aGVuIHdlIGhhdmUgJ2Nvbm5lY3QnCmNhbGwuIEJ1dCB0aGF0IGlzIGRvbmUgb3V0c2lkZSBYZW5C dXMuIEluIHRoZW9yeSB5b3UgY291bGQgaGF2ZSA1MDAgZXh0cmEgY29ubmVjdGlvbnM/CgpBbnlo b3cgdGhpcyAncG9ydCcgaGFzIHRvIGJlIGZvciB0aGUgY29tbWFuZCByaW5nPwoKICAgIAo+ID4g Cj4gPiByaW5nLXJlZgo+ID4gICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgo+ID4gCj4g PiAgICAgIFRoZSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24gZm9yIHRo ZSBiYWNrZW5kIHRvIG1hcAo+ID4gICAgICB0aGUgc29sZSBwYWdlIGluIGEgc2luZ2xlIHBhZ2Ug c2l6ZWQgcmluZyBidWZmZXIuIExhdGVyIG9uIHRoaXMKCnJpbmcgYnVmZmVyPyBPciBjb21tYW5k IHJpbmc/Cgo+ID4gICAgICByaW5nIHdpbGwgYmUgcmVmZXJyZWQgdG8gY29tbWFuZHMgcmluZy4K CnMvTGF0ZXIgb24gdGhpcyByaW5nIHdpbGwgYmUgdG8gY29tbWFuZHMgcmluZy9UaGlzIHJpbmcg d2lsbCBiZSBrbm93biBhcyBjb21tYW5kcyByaW5nLi8KCkJ1dCB3aHk/IFdoeSBub3QganVzdCBj YWxsIGl0ICdjb21tYW5kIHJpbmcnIGZyb20gdGhlIHN0YXJ0PwoKPiA+IAo+ID4gIyMjIyBCYWNr ZW5kIFhlbkJ1cyBOb2Rlcwo+ID4gCj4gPiB2ZXJzaW9uCj4gPiAgICAgIFZhbHVlczogICAgICAg ICA8dWludDMyX3Q+Cj4gPiAKPiA+ICAgICAgUHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQgYnkg dGhlIGJhY2tlbmQuIEN1cnJlbnRseSB0aGUgdmFsdWUgaXMKPiA+ICAgICAgMS4KPiA+IAo+ID4g bWF4LXBhZ2Utb3JkZXIKPiA+ICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KPiA+IAo+ ID4gICAgICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSBvZiBhIG1lbW9yeSBhbGxvY2F0aW9u IGluIHVuaXRzIG9mCj4gPiAgICAgIGxiKG1hY2hpbmUgcGFnZXMpLCBlLmcuIDAgPT0gMSBwYWdl LCAgMSA9IDIgcGFnZXMsIDIgPT0gNCBwYWdlcywKCmxiPyBJc24ndCB0aGF0IGxpa2UgJ3BvdW5k LW1hc3MnIGFiYnJldmF0aW9uPwoKSSB0aGluayB5b3UgbWVhbiBsb2cybiBvciBsb2dhcml0aG0u IENvdWxkIHlvdSBqdXN0IHVzZSB0aGF0IHBsZWFzZT8KCj4gPiAgICAgIGV0Yy4KPiA+IAo+ID4g ZnVuY3Rpb24tY2FsbHMKPiA+ICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KPiA+IAo+ ID4gICAgICBWYWx1ZSAiMCIgbWVhbnMgdGhhdCBubyBjYWxscyBhcmUgc3VwcG9ydGVkLgo+ID4g ICAgICBWYWx1ZSAiMSIgbWVhbnMgdGhhdCBzb2NrZXQsIGNvbm5lY3QsIHJlbGVhc2UsIGJpbmQs IGxpc3RlbiwgYWNjZXB0Cj4gPiAgICAgIGFuZCBwb2xsIGFyZSBzdXBwb3J0ZWQuCj4gPiAKPiA+ ICMjIyMgU3RhdGUgTWFjaGluZQo+ID4gCj4gPiBJbml0aWFsaXphdGlvbjoKPiA+IAo+ID4gICAg ICpGcm9udCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJhY2sqCj4gPiAgICAgWGVu YnVzU3RhdGVJbml0aWFsaXNpbmcgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxpc2lu Zwo+ID4gICAgIC0gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAgICAgLSBRdWVyeSBi YWNrZW5kIGRldmljZQo+ID4gICAgICAgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAg ICAgICBpZGVudGlmaWNhdGlvbiBkYXRhLgo+ID4gICAgIC0gU2V0dXAgT1MgZGV2aWNlIGluc3Rh bmNlLiAgICAgICAgICAgLSBQdWJsaXNoIGJhY2tlbmQgZmVhdHVyZXMKPiA+ICAgICAtIEFsbG9j YXRlIGFuZCBpbml0aWFsaXplIHRoZSAgICAgICAgICAgYW5kIHRyYW5zcG9ydCBwYXJhbWV0ZXJz Cj4gPiAgICAgICByZXF1ZXN0IHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4gPiAgICAgLSBQdWJsaXNoIHRyYW5zcG9ydCBwYXJhbWV0ZXJzICAgICAgICAgICAg ICAgICAgICAgICB8Cj4gPiAgICAgICB0aGF0IHdpbGwgYmUgaW4gZWZmZWN0IGR1cmluZyAgICAg ICAgICAgICAgICAgICAgICBWCj4gPiAgICAgICB0aGlzIGNvbm5lY3Rpb24uICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdFdhaXQKPiA+ICAgICAgICAgICAgICAgICAg fAo+ID4gICAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAgICAgIFYKPiA+ICAgICAg ICBYZW5idXNTdGF0ZUluaXRpYWxpc2VkCj4gPiAKPiA+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0gUXVlcnkgZnJvbnRlbmQgdHJhbnNwb3J0IHBhcmFtZXRlcnMu Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIENvbm5lY3Qg dG8gdGhlIHJlcXVlc3QgcmluZyBhbmQKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXZlbnQgY2hhbm5lbC4KPiA+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNv bm5lY3RlZAo+ID4gCj4gPiAgICAgIC0gUXVlcnkgYmFja2VuZCBkZXZpY2UgcHJvcGVydGllcy4K PiA+ICAgICAgLSBGaW5hbGl6ZSBPUyB2aXJ0dWFsIGRldmljZQo+ID4gICAgICAgIGluc3RhbmNl Lgo+ID4gICAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAgICAgIHwKPiA+ICAgICAg ICAgICAgICAgICAgVgo+ID4gICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZAo+ID4gCj4gPiBP bmNlIGZyb250ZW5kIGFuZCBiYWNrZW5kIGFyZSBjb25uZWN0ZWQsIHRoZXkgaGF2ZSBhIHNoYXJl ZCBwYWdlLCB3aGljaAo+ID4gd2lsbCBpcyB1c2VkIHRvIGV4Y2hhbmdlIG1lc3NhZ2VzIG92ZXIg YSByaW5nLCBhbmQgYW4gZXZlbnQgY2hhbm5lbCwKPiA+IHdoaWNoIGlzIHVzZWQgdG8gc2VuZCBu b3RpZmljYXRpb25zLgo+ID4gCj4gPiBTaHV0ZG93bjoKPiA+IAo+ID4gICAgICpGcm9udCogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkJhY2sqCj4gPiAgICAgWGVuYnVzU3RhdGVDb25uZWN0 ZWQgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZAo+ID4gICAgICAgICAgICAgICAg IHwKPiA+ICAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAgICAgVgo+ID4gICAgICAg IFhlbmJ1c1N0YXRlQ2xvc2luZwo+ID4gCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtIFVubWFwIGdyYW50cwo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLSBVbmJpbmQgZXZ0Y2hucwo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVgo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYZW5idXNTdGF0ZUNsb3NpbmcKPiA+IAo+ID4gICAgIC0gVW5iaW5kIGV2dGNo bnMKPiA+ICAgICAtIEZyZWUgcmluZ3MKPiA+ICAgICAtIEZyZWUgZGF0YSBzdHJ1Y3R1cmVzCj4g PiAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAgICB8Cj4gPiAgICAgICAgICAgICAg ICBWCj4gPiAgICAgICAgWGVuYnVzU3RhdGVDbG9zZWQKPiA+IAo+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLSBGcmVlIHJlbWFpbmluZyBkYXRhIHN0cnVjdHVyZXMK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDbG9zZWQK PiA+IAo+ID4gCj4gPiAjIyMgQ29tbWFuZHMgUmluZwo+ID4gCj4gPiBUaGUgc2hhcmVkIHJpbmcg aXMgdXNlZCBieSB0aGUgZnJvbnRlbmQgdG8gZm9yd2FyZCBQT1NJWCBmdW5jdGlvbiBjYWxscwo+ ID4gdG8gdGhlIGJhY2tlbmQuIFdlIHNoYWxsIHJlZmVyIHRvIHRoaXMgcmluZyBhcyAqKmNvbW1h bmRzIHJpbmcqKiB0bwo+ID4gZGlzdGluZ3Vpc2ggaXQgZnJvbSBvdGhlciByaW5ncyB3aGljaCBj YW4gYmUgY3JlYXRlZCBsYXRlciBpbiB0aGUKPiA+IGxpZmVjeWNsZSBvZiB0aGUgcHJvdG9jb2wg KHNlZSBbRGF0YSByaW5nXSkuIFRoZSBncmFudCByZWZlcmVuY2UgZm9yCj4gPiBzaGFyZWQgcGFn ZSBmb3IgdGhpcyByaW5nIGlzIHNoYXJlZCBvbiB4ZW5zdG9yZSAoc2VlIFtGcm9udGVuZCBYZW5C dXMKPiA+IE5vZGVzXSkuIFRoZSByaW5nIGZvcm1hdCBpcyBkZWZpbmVkIHVzaW5nIHRoZSBmYW1p bGlhcgo+ID4gYERFRklORV9SSU5HX1RZUEVTYCBtYWNybyAoYHhlbi9pbmNsdWRlL3B1YmxpYy9p by9yaW5nLmhgKS4gIEZyb250ZW5kCj4gPiByZXF1ZXN0cyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBy aW5nIHVzaW5nIHRoZSBgUklOR19HRVRfUkVRVUVTVGAgbWFjcm8uCj4gPiBUaGUgbGlzdCBvZiBj b21tYW5kcyBiZWxvdyBpcyBpbiBjYWxsaW5nIG9yZGVyLgo+ID4gCj4gPiBUaGUgZm9ybWF0IGlz IGRlZmluZWQgYXMgZm9sbG93czoKPiA+ICAgICAKPiA+ICAgICAjZGVmaW5lIFBWQ0FMTFNfU09D S0VUICAgICAgICAgMAo+ID4gICAgICNkZWZpbmUgUFZDQUxMU19DT05ORUNUICAgICAgICAxCj4g PiAgICAgI2RlZmluZSBQVkNBTExTX1JFTEVBU0UgICAgICAgIDIKPiA+ICAgICAjZGVmaW5lIFBW Q0FMTFNfQklORCAgICAgICAgICAgMwo+ID4gICAgICNkZWZpbmUgUFZDQUxMU19MSVNURU4gICAg ICAgICA0Cj4gPiAgICAgI2RlZmluZSBQVkNBTExTX0FDQ0VQVCAgICAgICAgIDUKPiA+ICAgICAj ZGVmaW5lIFBWQ0FMTFNfUE9MTCAgICAgICAgICAgNgo+ID4gCj4gPiAgICAgc3RydWN0IHhlbl9w dmNhbGxzX3JlcXVlc3Qgewo+ID4gICAgIAl1aW50MzJfdCByZXFfaWQ7IC8qIHByaXZhdGUgdG8g Z3Vlc3QsIGVjaG9lZCBpbiByZXNwb25zZSAqLwo+ID4gICAgIAl1aW50MzJfdCBjbWQ7ICAgIC8q IGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwo+ID4gICAgIAl1bmlvbiB7Cj4gPiAgICAgCQlzdHJ1Y3Qg eGVuX3B2Y2FsbHNfc29ja2V0IHsKPiA+ICAgICAJCQl1aW50NjRfdCBpZDsKPiA+ICAgICAJCQl1 aW50MzJfdCBkb21haW47Cj4gPiAgICAgCQkJdWludDMyX3QgdHlwZTsKPiA+ICAgICAJCQl1aW50 MzJfdCBwcm90b2NvbDsKPiA+ICAgICAJCX0gc29ja2V0Owo+ID4gICAgIAkJc3RydWN0IHhlbl9w dmNhbGxzX2Nvbm5lY3Qgewo+ID4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ID4gICAgIAkJCXVpbnQ4 X3QgYWRkclsyOF07Cj4gPiAgICAgCQkJdWludDMyX3QgbGVuOwo+ID4gICAgIAkJCXVpbnQzMl90 IGZsYWdzOwo+ID4gICAgIAkJCWdyYW50X3JlZl90IHJlZjsKPiA+ICAgICAJCQl1aW50MzJfdCBl dnRjaG47Cj4gPiAgICAgCQl9IGNvbm5lY3Q7Cj4gPiAgICAgCQlzdHJ1Y3QgeGVuX3B2Y2FsbHNf cmVsZWFzZSB7Cj4gPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gPiAgICAgCQkJdWludDhfdCByZXVz ZTsKPiA+ICAgICAJCX0gcmVsZWFzZTsKPiA+ICAgICAJCXN0cnVjdCB4ZW5fcHZjYWxsc19iaW5k IHsKPiA+ICAgICAJCQl1aW50NjRfdCBpZDsKPiA+ICAgICAJCQl1aW50OF90IGFkZHJbMjhdOwo+ ID4gICAgIAkJCXVpbnQzMl90IGxlbjsKPiA+ICAgICAJCX0gYmluZDsKPiA+ICAgICAJCXN0cnVj dCB4ZW5fcHZjYWxsc19saXN0ZW4gewo+ID4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ID4gICAgIAkJ CXVpbnQzMl90IGJhY2tsb2c7Cj4gPiAgICAgCQl9IGxpc3RlbjsKPiA+ICAgICAJCXN0cnVjdCB4 ZW5fcHZjYWxsc19hY2NlcHQgewo+ID4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ID4gICAgIAkJCXVp bnQ2NF90IGlkX25ldzsKPiA+ICAgICAJCQlncmFudF9yZWZfdCByZWY7Cj4gPiAgICAgCQkJdWlu dDMyX3QgZXZ0Y2huOwo+ID4gICAgIAkJfSBhY2NlcHQ7Cj4gPiAgICAgCQlzdHJ1Y3QgeGVuX3B2 Y2FsbHNfcG9sbCB7Cj4gPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gPiAgICAgCQl9IHBvbGw7Cj4g PiAgICAgCQkvKiBkdW1teSBtZW1iZXIgdG8gZm9yY2Ugc2l6ZW9mKHN0cnVjdCB4ZW5fcHZjYWxs c19yZXF1ZXN0KSB0byBtYXRjaCBhY3Jvc3MgYXJjaHMgKi8KPiA+ICAgICAJCXN0cnVjdCB4ZW5f cHZjYWxsc19kdW1teSB7Cj4gPiAgICAgCQkJdWludDhfdCBkdW1teVs1Nl07Cj4gPiAgICAgCQl9 IGR1bW15Owo+ID4gICAgIAl9IHU7Cj4gPiAgICAgfTsKPiA+IAo+ID4gVGhlIGZpcnN0IHR3byBm aWVsZHMgYXJlIGNvbW1vbiBmb3IgZXZlcnkgY29tbWFuZC4gVGhlaXIgYmluYXJ5IGxheW91dAo+ ID4gaXM6Cj4gPiAKPiA+ICAgICAwICAgICAgIDQgICAgICAgOAo+ID4gICAgICstLS0tLS0tKy0t LS0tLS0rCj4gPiAgICAgfHJlcV9pZCB8ICBjbWQgIHwKPiA+ICAgICArLS0tLS0tLSstLS0tLS0t Kwo+ID4gCj4gPiAtICoqcmVxX2lkKiogaXMgZ2VuZXJhdGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQg aXMgYSBjb29raWUgdXNlZCB0bwo+ID4gICBpZGVudGlmeSBvbmUgc3BlY2lmaWMgcmVxdWVzdC9y ZXNwb25zZSBwYWlyIG9mIGNvbW1hbmRzLiBOb3QgdG8gYmUKPiA+ICAgY29uZnVzZWQgd2l0aCBh bnkgY29tbWFuZCAqKmlkKiogd2hpY2ggYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSBzb2NrZXQKPiA+ ICAgYWNyb3NzIG11bHRpcGxlIGNvbW1hbmRzLCBzZWUgW1NvY2tldF0uCj4gPiAtICoqY21kKiog aXMgdGhlIGNvbW1hbmQgcmVxdWVzdGVkIGJ5IHRoZSBmcm9udGVuZDoKPiA+IAo+ID4gICAgIC0g YFBWQ0FMTFNfU09DS0VUYDogIDAKPiA+ICAgICAtIGBQVkNBTExTX0NPTk5FQ1RgOiAxCj4gPiAg ICAgLSBgUFZDQUxMU19SRUxFQVNFYDogMgo+ID4gICAgIC0gYFBWQ0FMTFNfQklORGA6ICAgIDMK PiA+ICAgICAtIGBQVkNBTExTX0xJU1RFTmA6ICA0Cj4gPiAgICAgLSBgUFZDQUxMU19BQ0NFUFRg OiAgNQo+ID4gICAgIC0gYFBWQ0FMTFNfUE9MTGA6ICAgIDYKPiA+IAo+ID4gQm90aCBmaWVsZHMg YXJlIGVjaG9lZCBiYWNrIGJ5IHRoZSBiYWNrZW5kLiBTZWUgW1NvY2tldCBmYW1pbGllcyBhbmQK PiA+IGFkZHJlc3MgZm9ybWF0XSBmb3IgdGhlIGZvcm1hdCBvZiB0aGUgKiphZGRyKiogZmllbGQg b2YgY29ubmVjdCBhbmQKPiA+IGJpbmQuIFRoZSBtYXhpbXVtIHNpemUgb2YgY29tbWFuZCBzcGVj aWZpYyBhcmd1bWVudHMgaXMgNTYgYnl0ZXMuIEFueQo+ID4gZnV0dXJlIGNvbW1hbmQgdGhhdCBy ZXF1aXJlcyBtb3JlIHRoYW4gdGhhdCB3aWxsIG5lZWQgYSBidW1wIHRoZQo+ID4gKip2ZXJzaW9u Kiogb2YgdGhlIHByb3RvY29sLgoKV291bGQgaXQgbWFrZSBzZW5zZSB0byBzYXkgdGhhdCB0aGUg cHJvdG9jb2wgc2hvdWxkIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlPwoKQXMgaWYgeW91IGJ1bXAg dG8gMiB0aGVuIHlvdSBjYW4gc3RpbGwgc3VwcG9ydCAxPwoKT3Igc2hvdWxkIHRoZXJlIGJlIGFu IG5lZ290YXRpb24gd2l0aCBmcm9udGVuZCBhbmQgYmFja2VkIG9uIHRoZSB2ZXJzaW9uPwpTaW1p bGFyIHRvIGhvdyB0aGUgb3RoZXIgdmFsdWVzIGNhbiBiZSBuZWdvdGlhdGVkPwoKPiA+IAo+ID4g U2ltaWxhcmx5IHRvIG90aGVyIFhlbiByaW5nIGJhc2VkIHByb3RvY29scywgYWZ0ZXIgd3JpdGlu ZyBhIHJlcXVlc3QgdG8KPiA+IHRoZSByaW5nLCB0aGUgZnJvbnRlbmQgY2FsbHMgYFJJTkdfUFVT SF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZYCBhbmQKPiA+IGlzc3VlcyBhbiBldmVudCBjaGFu bmVsIG5vdGlmaWNhdGlvbiB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIHJlcXVpcmVkLgo+ID4gCj4g PiBCYWNrZW5kIHJlc3BvbnNlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSByaW5nIHVzaW5nIHRoZSBg UklOR19HRVRfUkVTUE9OU0VgIG1hY3JvLgo+ID4gVGhlIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5n Ogo+ID4gCj4gPiAgICAgc3RydWN0IHhlbl9wdmNhbGxzX3Jlc3BvbnNlIHsKPiA+ICAgICAgICAg dWludDMyX3QgcmVxX2lkOwo+ID4gICAgICAgICB1aW50MzJfdCBjbWQ7Cj4gPiAgICAgICAgIGlu dDMyX3QgcmV0Owo+ID4gICAgICAgICB1aW50MzJfdCBwYWQ7Cj4gPiAgICAgICAgIHVuaW9uIHsK PiA+ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNfc29ja2V0IHsKPiA+ICAgICAJCQl1aW50NjRf dCBpZDsKPiA+ICAgICAJCX0gc29ja2V0Owo+ID4gICAgIAkJc3RydWN0IF94ZW5fcHZjYWxsc19j b25uZWN0IHsKPiA+ICAgICAJCQl1aW50NjRfdCBpZDsKPiA+ICAgICAJCX0gY29ubmVjdDsKPiA+ ICAgICAJCXN0cnVjdCBfeGVuX3B2Y2FsbHNfcmVsZWFzZSB7Cj4gPiAgICAgCQkJdWludDY0X3Qg aWQ7Cj4gPiAgICAgCQl9IHJlbGVhc2U7Cj4gPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNhbGxzX2Jp bmQgewo+ID4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ID4gICAgIAkJfSBiaW5kOwo+ID4gICAgIAkJ c3RydWN0IF94ZW5fcHZjYWxsc19saXN0ZW4gewo+ID4gICAgIAkJCXVpbnQ2NF90IGlkOwo+ID4g ICAgIAkJfSBsaXN0ZW47Cj4gPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNhbGxzX2FjY2VwdCB7Cj4g PiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gPiAgICAgCQl9IGFjY2VwdDsKPiA+ICAgICAJCXN0cnVj dCBfeGVuX3B2Y2FsbHNfcG9sbCB7Cj4gPiAgICAgCQkJdWludDY0X3QgaWQ7Cj4gPiAgICAgCQl9 IHBvbGw7Cj4gPiAgICAgCQlzdHJ1Y3QgX3hlbl9wdmNhbGxzX2R1bW15IHsKPiA+ICAgICAJCQl1 aW50OF90IGR1bW15WzhdOwo+ID4gICAgIAkJfSBkdW1teTsKPiA+ICAgICAJfSB1Owo+ID4gICAg IH07Cj4gPiAKPiA+IFRoZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgY29tbW9uIGZvciBldmVyeSBy ZXNwb25zZS4gVGhlaXIgYmluYXJ5IGxheW91dAo+ID4gaXM6Cj4gPiAKPiA+ICAgICAwICAgICAg IDQgICAgICAgOCAgICAgICAxMiAgICAgIDE2Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rCj4gPiAgICAgfHJlcV9pZCB8ICBjbWQgIHwgIHJldCAgfCAgcGFkICB8Cj4g PiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gPiAKPiA+IC0gKipyZXFf aWQqKjogZWNob2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gPiAtICoqY21kKio6IGVjaG9lZCBiYWNr IGZyb20gcmVxdWVzdAo+ID4gLSAqKnJldCoqOiByZXR1cm4gdmFsdWUsIGlkZW50aWZpZXMgc3Vj Y2VzcyAoMCkgb3IgZmFpbHVyZSAoc2VlIGVycm9yIG51bWJlcnMKPiA+ICAgYmVsb3cpLiBJZiB0 aGUgKipjbWQqKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLCByZXQgaXMgRU5PVFNV UC4KClVoLCB3aGVyZSBhcmUgdGhvc2UgZXJyb3IgbnVtYmVycz8KCk9yIHBlcmhhcHMgIHlvdSBt ZWFudCwgc2VlICJbRXJyb3IgbnVtYmVyc10gaW4gZnVydGhlciBzZWN0aW9ucy4iID8KCj4gPiAt ICoqcGFkKio6IHBhZGRpbmcKPiA+IAo+ID4gQWZ0ZXIgY2FsbGluZyBgUklOR19QVVNIX1JFU1BP TlNFU19BTkRfQ0hFQ0tfTk9USUZZYCwgdGhlIGJhY2tlbmQgY2hlY2tzIHdoZXRoZXIKPiA+IGl0 IG5lZWRzIHRvIG5vdGlmeSB0aGUgZnJvbnRlbmQgYW5kIGRvZXMgc28gdmlhIGV2ZW50IGNoYW5u ZWwuCj4gPiAKPiA+IEEgZGVzY3JpcHRpb24gb2YgZWFjaCBjb21tYW5kLCB0aGVpciBhZGRpdGlv bmFsIHJlcXVlc3QgYW5kIHJlc3BvbnNlCj4gPiBmaWVsZHMgZm9sbG93Lgo+ID4gCj4gPiAKPiA+ ICMjIyMgU29ja2V0Cj4gPiAKPiA+IFRoZSAqKnNvY2tldCoqIG9wZXJhdGlvbiBjb3JyZXNwb25k cyB0byB0aGUgUE9TSVggW3NvY2tldF1bc29ja2V0XQo+ID4gZnVuY3Rpb24uIEl0IGNyZWF0ZXMg YSBuZXcgc29ja2V0IG9mIHRoZSBzcGVjaWZpZWQgZmFtaWx5LCB0eXBlIGFuZAo+ID4gcHJvdG9j b2wuICoqaWQqKiBpcyBmcmVlbHkgY2hvc2VuIGJ5IHRoZSBmcm9udGVuZCBhbmQgcmVmZXJlbmNl cyB0aGlzCj4gPiBzcGVjaWZpYyBzb2NrZXQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuIFNlZSAi U29ja2V0IGZhbWlsaWVzIGFuZAo+ID4gYWRkcmVzcyBmb3JtYXQiIGJlbG93Lgo+ID4gCj4gPiBS ZXF1ZXN0IGZpZWxkczoKPiA+IAo+ID4gLSAqKmNtZCoqIHZhbHVlOiAwCj4gPiAtIGFkZGl0aW9u YWwgZmllbGRzOgo+ID4gICAtICoqaWQqKjogZ2VuZXJhdGVkIGJ5IHRoZSBmcm9udGVuZCwgaXQg aWRlbnRpZmllcyB0aGUgbmV3IHNvY2tldAo+ID4gICAtICoqZG9tYWluKio6IHRoZSBjb21tdW5p Y2F0aW9uIGRvbWFpbgo+ID4gICAtICoqdHlwZSoqOiB0aGUgc29ja2V0IHR5cGUKPiA+ICAgLSAq KnByb3RvY29sKio6IHRoZSBwYXJ0aWN1bGFyIHByb3RvY29sIHRvIGJlIHVzZWQgd2l0aCB0aGUg c29ja2V0LCB1c3VhbGx5IDAKPiA+IAo+ID4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+ID4gCj4g PiAgICAgOCAgICAgICAxMiAgICAgIDE2ICAgICAgMjAgICAgIDI0ICAgICAgIDI4Cj4gPiAgICAg Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKPiA+ICAgICB8ICAgICAg IGlkICAgICAgfGRvbWFpbiB8IHR5cGUgIHxwcm90b2NvfAo+ID4gICAgICstLS0tLS0tKy0tLS0t LS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gPiAKPiA+IFJlc3BvbnNlIGFkZGl0aW9uYWwg ZmllbGRzOgo+ID4gCj4gPiAtICoqaWQqKjogZWNob2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gPiAK PiA+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6Cj4gPiAKPiA+ICAgICAxNiAgICAgICAyMCAgICAg ICAyNAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0tKwo+ID4gICAgIHwgICAgICAgaWQgICAgICAg fAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0tKwo+ID4gCj4gPiBSZXR1cm4gdmFsdWU6Cj4gPiAK PiA+ICAgLSAwIG9uIHN1Y2Nlc3MKPiA+ICAgLSBTZWUgdGhlIFtQT1NJWCBzb2NrZXQgZnVuY3Rp b25dW2Nvbm5lY3RdIGZvciBlcnJvciBuYW1lczsgdGhlIGNvcnJlc3BvbmRpbmcKPiA+ICAgICBl cnJvciBudW1iZXJzIGFyZSBzcGVjaWZpZWQgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KCk9yIHBl cmhhcHMgIHlvdSBtZWFudCwgc2VlICJbRXJyb3IgbnVtYmVyc10gaW4gZnVydGhlciBzZWN0aW9u cy4iID8KPiA+IAo+ID4gIyMjIyBDb25uZWN0Cj4gPiAKPiA+IFRoZSAqKmNvbm5lY3QqKiBvcGVy YXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIFtjb25uZWN0XVtjb25uZWN0XQo+ID4gZnVu Y3Rpb24uIEl0IGNvbm5lY3RzIGEgcHJldmlvdXNseSBjcmVhdGVkIHNvY2tldCAoaWRlbnRpZmll ZCBieSAqKmlkKiopCj4gPiB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCj4gPiAKPiA+IFRoZSBj b25uZWN0IG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IHNoYXJlZCByaW5nLCB3aGljaCB3ZSdsbCBj YWxsICoqZGF0YQo+ID4gcmluZyoqLiBUaGUgW0RhdGEgcmluZ10gaXMgdXNlZCB0byBzZW5kIGFu ZCByZWNlaXZlIGRhdGEgZnJvbSB0aGUKPiA+IHNvY2tldC4gVGhlIGNvbm5lY3Qgb3BlcmF0aW9u IHBhc3NlcyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzOgo+ID4gKipldnRjaG4qKiBhbmQgKipy ZWYqKi4gKipldnRjaG4qKiBpcyB0aGUgcG9ydCBudW1iZXIgb2YgYSBuZXcgZXZlbnQKPiA+IGNo YW5uZWwgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBub3RpZmljYXRpb25zIG9mIGFjdGl2aXR5IG9u IHRoZSBkYXRhCj4gPiByaW5nLiAqKnJlZioqIGlzIHRoZSBncmFudCByZWZlcmVuY2Ugb2YgYSBw YWdlIHdoaWNoIGNvbnRhaW5zIHNoYXJlZAo+ID4gaW5kaWNlcyB0aGF0IHBvaW50IHRvIHRoZSB3 cml0ZSBhbmQgcmVhZCBsb2NhdGlvbnMgaW4gdGhlIHJpbmcgYnVmZmVycy4KCndoaWNoIHJpbmcg YnVmZmVyPyBQZXJoYXBzIHNheToKCnMvaW4gdGhlIHJpbmcgYnVmZmVycy9vZiB0aGUgcmluZyBi dWZmZXJzICh0byBiZSBzZXR1cCBieSB0aGlzIGZ1bmN0aW9uKS8gPwoKT3IgYXJlIHJpbmcgYnVm ZmVycyBkYXRhIHJpbmdzPwoKTm8gd2FpdCwgdGhleSBhcmUgbm90LgoKUGVyaGFwcyB0aGlzOgoK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgIERhdGEgcmluZzoo cHZjYWxsc19kYXRhX2ludGYpCnwgQ29tbWFuZCByaW5nOiAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgIHJpbmcgYnVmZmVy cwp8IEAwOiB4ZW5fcHZjYWxsc19jb25uZWN0OiAgfCAgICAgICAgICAgICAgICAgfEAwIHB2Y2Fs bHNfZGF0YV9pbnRmOiB8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCnwgQDQ0OiBy ZWYgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rQDc2OiByaW5nX29yZGVyID0g MSAgIHwgICAgICAgICAgICAgfCBAMC0+MjA0ODogaW4gICAgIHwKfCAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHxAODA6IHJlZlswXSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KyAgICAgICAgICAgICAgICAgfEA4NDogcmVmWzFdKyAgICAgICAgICB8ICAgICAgICAgICAgIHwg QDIwNDgtPjQwOTU6IG91dCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgIHwgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IChyaW5nIGJ1ZmZlcnMpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0r LS0tLS0tLS0tLS0rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgQDAtPjIwNDg6IGluICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgQDIwNDktPjQwOTU6IG91dCB8 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0t LS0tLS0tLS0tLS0tLS0rCgoKPyBUaGF0IGlzIHdoYXQgdGhpcyBsb29rcyBsaWtlIHJpZ2h0PwoK PiA+ICoqcmVmKiogYWxzbyBjb250YWlucyB0aGUgZnVsbCBhcnJheSBvZiBncmFudCByZWZlcmVu Y2VzIGZvciB0aGUgcmluZwo+ID4gYnVmZmVycy4gV2hlbiB0aGUgZnJvbnRlbmQgaXNzdWVzIGEg Kipjb25uZWN0KiogY29tbWFuZCwgdGhlIGJhY2tlbmQ6CgpPSywgc28gcmluZyBidWZmZXJzICE9 IGRhdGEgcmluZ3MuCgpQZXJoYXBzIGV4cGxhaW4gd2hhdCBhbiByaW5nIGJ1ZmZlciBpcyBiZWZv cmUgaGFuZD8KCkxpa2UgW1RoZSBjb25uZWN0IG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IHNoYXJl ZCByaW5nLCB3aGljaCB3ZSB3aWxsIGNhbGwKKipkYXRhIHJpbmcqKiwgaXQgYWxzbyBjcmVhdGVz IHNlY29uZGFyeSByaW5ncyBrbm93biBhcyAqKnJpbmcgYnVmZmVycyoqCndoaWNoIHdpbGwgaGF2 ZSB0aGUgYWN0dWFsIGRhdGEuXQo/CltlZGl0OiBzLyoqcmluZyBidWZmZXJzKiovKipkYXRhIHJp bmcgaW50ZXJmYWNlcyoqLyBdID8KCj4gPiAKPiA+IC0gZmluZHMgaXRzIG93biBpbnRlcm5hbCBz b2NrZXQgY29ycmVzcG9uZGluZyB0byAqKmlkKioKPiA+IC0gY29ubmVjdHMgdGhlIHNvY2tldCB0 byAqKmFkZHIqKgo+ID4gLSBtYXBzIHRoZSBncmFudCByZWZlcmVuY2UgKipyZWYqKiwgdGhlIHNo YXJlZCBwYWdlIGNvbnRhaW5zIHRoZSBkYXRhCj4gPiAgIHJpbmcgaW50ZXJmYWNlIChgc3RydWN0 IHB2Y2FsbHNfZGF0YV9pbnRmYCkKClNvIGxhdGVyIGluIHRoZSBzcGVjIHlvdSBjYWxsIHRoZSAn cmluZyBidWZmZXInIGFzICdkYXRhIHJpbmcgaW50ZXJmYWNlJy4KQnV0IG5vdCBhbHdheXMgKFNl ZSAqKkRhdGEgcmluZyoqKQoKUGVyaGFwcyB3ZSBhbHdheXMgc2hvdWxkIGNhbGwgaXQgJ2RhdGEg cmluZyBpbnRlcmZhY2UnID8KCj4gPiAtIG1hcHMgYWxsIHRoZSBncmFudCByZWZlcmVuY2VzIGxp c3RlZCBpbiBgc3RydWN0IHB2Y2FsbHNfZGF0YV9pbnRmYCBhbmQKPiA+ICAgdXNlcyB0aGVtIGFz IHNoYXJlZCBtZW1vcnkgZm9yIHRoZSByaW5nIGJ1ZmZlcnMKPiA+IC0gYmluZCB0aGUgKipldnRj aG4qKgo+ID4gLSByZXBsaWVzIHRvIHRoZSBmcm9udGVuZAo+ID4gCj4gPiBUaGUgW0RhdGEgcmlu Z10gZm9ybWF0IHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4gVGhl CgouLiBhbmQgW1JpbmcgYnVmZmVyc10KCj4gPiBkYXRhIHJpbmcgaXMgdW5tYXBwZWQgYW5kIGZy ZWVkIHVwb24gaXNzdWluZyBhICoqcmVsZWFzZSoqIGNvbW1hbmQgb24KPiA+IHRoZSBhY3RpdmUg c29ja2V0IGlkZW50aWZpZWQgYnkgKippZCoqLgoKLi4gb3Igc3RhdGUgY2hhbmdlIChGcm9udGVu ZCBjaGFuZ2luZyBzdGF0ZSwgZXRjKSA/Cgo+ID4gCj4gPiBSZXF1ZXN0IGZpZWxkczoKPiA+IAo+ ID4gLSAqKmNtZCoqIHZhbHVlOiAwCj4gPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ID4gICAtICoq aWQqKjogaWRlbnRpZmllcyB0aGUgc29ja2V0Cj4gPiAgIC0gKiphZGRyKio6IGFkZHJlc3MgdG8g Y29ubmVjdCB0bywgc2VlIHRoZSBhZGRyZXNzIGZvcm1hdCBzZWN0aW9uIGZvciBtb3JlCgoKcy9h ZGRyZXNzIGZvcm1hdC9bU29ja2V0IGZhbWlsaWVzIGFuZCBhZGRyZXNzIGZvcm1hdF0vCgo+ID4g ICAgIGluZm9ybWF0aW9uCj4gPiAgIC0gKipsZW4qKjogYWRkcmVzcyBsZW5ndGgKPiA+ICAgLSAq KmZsYWdzKio6IGZsYWdzIGZvciB0aGUgY29ubmVjdGlvbiwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1 c2FnZQo+ID4gICAtICoqcmVmKio6IGdyYW50IHJlZmVyZW5jZSBvZiB0aGUgcGFnZSBjb250YWlu aW5nIGBzdHJ1Y3QKPiA+ICAgICBwdmNhbGxzX2RhdGFfaW50ZmAKPiA+ICAgLSAqKmV2dGNobioq OiBwb3J0IG51bWJlciBvZiB0aGUgZXZ0Y2huIHRvIHNpZ25hbCBhY3Rpdml0eSBvbiB0aGUgZGF0 YSByaW5nCj4gPiAKPiA+IFJlcXVlc3QgYmluYXJ5IGxheW91dDoKPiA+IAo+ID4gICAgIDggICAg ICAgMTIgICAgICAxNiAgICAgIDIwICAgICAgMjQgICAgICAyOCAgICAgIDMyICAgICAgMzYgICAg ICA0MCAgICAgIDQ0Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ID4gICAgIHwgICAgICAgaWQg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgICAgICAgICAgICAgICAgICAg ICAgIHwKPiA+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gPiAgICAgfCBsZW4gICB8IGZsYWdzIHwg IHJlZiAgfGV2dGNobiB8Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0r Cj4gPiAKPiA+IFJlc3BvbnNlIGFkZGl0aW9uYWwgZmllbGRzOgo+ID4gCj4gPiAtICoqaWQqKjog ZWNob2VkIGJhY2sgZnJvbSByZXF1ZXN0Cj4gPiAKPiA+IFJlc3BvbnNlIGJpbmFyeSBsYXlvdXQ6 Cj4gPiAKPiA+ICAgICAxNiAgICAgIDIwICAgICAgMjQKPiA+ICAgICArLS0tLS0tLSstLS0tLS0t Kwo+ID4gICAgIHwgICAgICAgaWQgICAgICB8Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiA+ IAo+ID4gUmV0dXJuIHZhbHVlOgo+ID4gCj4gPiAgIC0gMCBvbiBzdWNjZXNzCj4gPiAgIC0gU2Vl IHRoZSBbUE9TSVggY29ubmVjdCBmdW5jdGlvbl1bY29ubmVjdF0gZm9yIGVycm9yIG5hbWVzOyB0 aGUgY29ycmVzcG9uZGluZwo+ID4gICAgIGVycm9yIG51bWJlcnMgYXJlIHNwZWNpZmllZCBsYXRl ciBpbiB0aGlzIGRvY3VtZW50LgoKT3IgcGVyaGFwcyAgeW91IG1lYW50LCBzZWUgIltFcnJvciBu dW1iZXJzXSBpbiBmdXJ0aGVyIHNlY3Rpb25zLiIgPwo+ID4gCj4gPiAjIyMjIFJlbGVhc2UKPiA+ IAo+ID4gVGhlICoqcmVsZWFzZSoqIG9wZXJhdGlvbiBjbG9zZXMgYW4gZXhpc3RpbmcgYWN0aXZl IG9yIGEgcGFzc2l2ZSBzb2NrZXQuCj4gPiAKPiA+IFdoZW4gYSByZWxlYXNlIGNvbW1hbmQgaXMg aXNzdWVkIG9uIGEgcGFzc2l2ZSBzb2NrZXQsIHRoZSBiYWNrZW5kCj4gPiByZWxlYXNlcyBpdCBh bmQgZnJlZXMgaXRzIGludGVybmFsIG1hcHBpbmdzLiBXaGVuIGEgcmVsZWFzZSBjb21tYW5kIGlz Cj4gPiBpc3N1ZWQgZm9yIGFuIGFjdGl2ZSBzb2NrZXQsIHRoZSBkYXRhIHJpbmcgaXMgYWxzbyB1 bm1hcHBlZCBhbmQgZnJlZWQ6CgpzL2RhdGEgcmluZy9kYXRhIHJpbmcgYW5kIGJ1ZmZlciByaW5n cy8/Cj4gPiAKPiA+IC0gZnJvbnRlbmQgc2VuZHMgcmVsZWFzZSBjb21tYW5kIGZvciBhbiBhY3Rp dmUgc29ja2V0Cj4gPiAtIGJhY2tlbmQgcmVsZWFzZXMgdGhlIHNvY2tldAo+ID4gLSBiYWNrZW5k IHVubWFwcyB0aGUgZGF0YSByaW5nIGJ1ZmZlcnMKPiA+IC0gYmFja2VuZCB1bm1hcHMgdGhlIGRh dGEgcmluZyBpbnRlcmZhY2UKCldoYXQgaXMgJ2RhdGEgcmluZyBpbnRlcmZhY2UnLCBhaCEgcmlu ZyBidWZmZXIhIFttZW50aW9uZWQgaW4gJ2Nvbm5lY3QnIHNlY3Rpb25dCgpBcmVuJ3QgdGhlc2Ug dHdvIGFib3ZlIHRoZSBzYW1lIHRoaW5nIHRoZW4/CgpCdXQgaWYgbm90LCB0aGVuIHMvaW50ZXJm YWNlL2ludGVyZmFjZXMvCgo+ID4gLSBiYWNrZW5kIHVuYmluZHMgdGhlIGV2dGNobgoKcy9ldnRj aG4vZXZlbnQgY2hhbm5lbC8KCj4gPiAtIGJhY2tlbmQgcmVwbGllcyB0byBmcm9udGVuZAoKLi53 aXRoIGFuICoqcmV0KiogdmFsdWUuCgo+ID4gLSBmcm9udGVuZCBmcmVlcyByaW5nIGFuZCB1bmJp bmRzIGV2dGNobgoKcy9yaW5nL2RhdGEgcmluZy8Kcy9ldnRjaG4vZXZlbnQgY2hhbm5lbC8KCj4g PiAKPiA+IFJlcXVlc3QgZmllbGRzOgo+ID4gCj4gPiAtICoqY21kKiogdmFsdWU6IDEKPiA+IC0g YWRkaXRpb25hbCBmaWVsZHM6Cj4gPiAgIC0gKippZCoqOiBpZGVudGlmaWVzIHRoZSBzb2NrZXQK PiA+ICAgLSAqKnJldXNlKio6IGFuIG9wdGltaXphdGlvbiBoaW50IGZvciB0aGUgYmFja2VuZC4g VGhlIGZpZWxkIGlzCj4gPiAgICAgaWdub3JlZCBmb3IgcGFzc2l2ZSBzb2NrZXRzLiBXaGVuIHNl dCB0byAxLCB0aGUgZnJvbnRlbmQgbGV0cyB0aGUKPiA+ICAgICBiYWNrZW5kIGtub3cgdGhhdCBp dCB3aWxsIHJldXNlIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIGdyYW50IHBhZ2VzCj4gPiAgICAg KGludGVyZmFjZSBhbmQgZGF0YSByaW5nKSBhbmQgZXZ0Y2huIHdoZW4gY3JlYXRpbmcgb25lIG9m IHRoZSBuZXh0CgppbnRlcmZhY2UuLiB0aGF0IGlzIHRoZSAncmluZyBidWZmZXInISA/CgpTbyAn ZGF0YSByaW5nIGludGVyZmFjZSBhbmQgZGF0YSByaW5nJyBvcgoncmluZyBidWZmZXIgYW5kIGRh dGEgcmluZycgPwoKCj4gPiAgICAgYWN0aXZlIHNvY2tldHMuIFRoZSBiYWNrZW5kIGNhbiB0YWtl IGFkdmFudGFnZSBvZiBpdCBieSBkZWxheWluZwo+ID4gICAgIHVubWFwcGluZyBncmFudHMgYW5k IHVuYmluZGluZyB0aGUgZXZ0Y2huLiBUaGUgYmFja2VuZCBpcyBmcmVlIHRvCj4gPiAgICAgaWdu b3JlIHRoZSBoaW50LiBSZXVzZWQgZGF0YSByaW5ncyBhcmUgZm91bmQgYnkgKipyZWYqKiwgdGhl IGdyYW50Cj4gPiAgICAgcmVmZXJlbmNlIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGluZGlj ZXMuCj4gPiAKPiA+IFJlcXVlc3QgYmluYXJ5IGxheW91dDoKPiA+IAo+ID4gICAgIDggICAgICAg MTIgICAgICAxNiAgICAxNwo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0rCj4gPiAgICAg fCAgICAgICBpZCAgICAgIHxyZXVzZXwKPiA+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tKwo+ ID4gCj4gPiBSZXNwb25zZSBhZGRpdGlvbmFsIGZpZWxkczoKPiA+IAo+ID4gLSAqKmlkKio6IGVj aG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+ID4gCj4gPiBSZXNwb25zZSBiaW5hcnkgbGF5b3V0Ogo+ ID4gCj4gPiAgICAgMTYgICAgICAyMCAgICAgIDI0Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSsK PiA+ICAgICB8ICAgICAgIGlkICAgICAgfAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rCj4gPiAK PiA+IFJldHVybiB2YWx1ZToKPiA+IAo+ID4gICAtIDAgb24gc3VjY2Vzcwo+ID4gICAtIFNlZSB0 aGUgW1BPU0lYIHNodXRkb3duIGZ1bmN0aW9uXVtzaHV0ZG93bl0gZm9yIGVycm9yIG5hbWVzOyB0 aGUKPiA+ICAgICBjb3JyZXNwb25kaW5nIGVycm9yIG51bWJlcnMgYXJlIHNwZWNpZmllZCBsYXRl ciBpbiB0aGlzIGRvY3VtZW50LgoKCk9yIHBlcmhhcHMgIHlvdSBtZWFudCwgc2VlICJbRXJyb3Ig bnVtYmVyc10gaW4gZnVydGhlciBzZWN0aW9ucy4iID8KPiA+IAo+ID4gIyMjIyBCaW5kCj4gPiAK PiA+IFRoZSAqKmJpbmQqKiBvcGVyYXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIFtiaW5k XVtiaW5kXSBmdW5jdGlvbi4KPiA+IEl0IGFzc2lnbnMgdGhlIGFkZHJlc3MgcGFzc2VkIGFzIHBh cmFtZXRlciB0byBhIHByZXZpb3VzbHkgY3JlYXRlZAo+ID4gc29ja2V0LCBpZGVudGlmaWVkIGJ5 ICoqaWQqKi4gKipCaW5kKiosICoqbGlzdGVuKiogYW5kICoqYWNjZXB0KiogYXJlCj4gPiB0aGUg dGhyZWUgb3BlcmF0aW9ucyByZXF1aXJlZCB0byBoYXZlIGZ1bGx5IHdvcmtpbmcgcGFzc2l2ZSBz b2NrZXRzIGFuZAo+ID4gc2hvdWxkIGJlIGlzc3VlZCBpbiB0aGlzIG9yZGVyLgoKcy90aGlzL3Ro YXQvCj4gPiAKPiA+IFJlcXVlc3QgZmllbGRzOgo+ID4gCj4gPiAtICoqY21kKiogdmFsdWU6IDIK PiA+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gPiAgIC0gKippZCoqOiBpZGVudGlmaWVzIHRoZSBz b2NrZXQKPiA+ICAgLSAqKmFkZHIqKjogYWRkcmVzcyB0byBjb25uZWN0IHRvLCBzZWUgdGhlIGFk ZHJlc3MgZm9ybWF0IHNlY3Rpb24gZm9yIG1vcmUKCnMvYWRkcmVzcyBmb3JtYXQvW1NvY2tldCBm YW1pbGllcyBhbmQgYWRkcmVzcyBmb3JtYXRdLwo+ID4gICAgIGluZm9ybWF0aW9uCj4gPiAgIC0g KipsZW4qKjogYWRkcmVzcyBsZW5ndGgKPiA+IAo+ID4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+ ID4gCj4gPiAgICAgOCAgICAgICAxMiAgICAgIDE2ICAgICAgMjAgICAgICAyNCAgICAgIDI4ICAg ICAgMzIgICAgICAzNiAgICAgIDQwICAgICAgNDQKPiA+ICAgICArLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4g PiAgICAgfCAgICAgICBpZCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciAg ICAgICAgICAgICAgICAgICAgICAgfAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSst LS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKPiA+ICAgICB8 ICBsZW4gIHwKPiA+ICAgICArLS0tLS0tLSsKPiA+IAo+ID4gUmVzcG9uc2UgYWRkaXRpb25hbCBm aWVsZHM6Cj4gPiAKPiA+IC0gKippZCoqOiBlY2hvZWQgYmFjayBmcm9tIHJlcXVlc3QKPiA+IAo+ ID4gUmVzcG9uc2UgYmluYXJ5IGxheW91dDoKPiA+IAo+ID4gICAgIDE2ICAgICAgMjAgICAgICAy NAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rCj4gPiAgICAgfCAgICAgICBpZCAgICAgIHwKPiA+ ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ID4gCj4gPiBSZXR1cm4gdmFsdWU6Cj4gPiAKPiA+ICAg LSAwIG9uIHN1Y2Nlc3MKPiA+ICAgLSBTZWUgdGhlIFtQT1NJWCBiaW5kIGZ1bmN0aW9uXVtiaW5k XSBmb3IgZXJyb3IgbmFtZXM7IHRoZSBjb3JyZXNwb25kaW5nIGVycm9yCj4gPiAgICAgbnVtYmVy cyBhcmUgc3BlY2lmaWVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCgoKPiA+IAo+ID4gCj4gPiAj IyMjIExpc3Rlbgo+ID4gCj4gPiBUaGUgKipsaXN0ZW4qKiBvcGVyYXRpb24gbWFya3MgdGhlIHNv Y2tldCBhcyBhIHBhc3NpdmUgc29ja2V0LiBJdCBjb3JyZXNwb25kcyB0bwo+ID4gdGhlIFtQT1NJ WCBsaXN0ZW4gZnVuY3Rpb25dW2xpc3Rlbl0uCj4gPiAKPiA+IFJldXFlc3QgZmllbGRzOgo+ID4g Cj4gPiAtICoqY21kKiogdmFsdWU6IDMKPiA+IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gPiAgIC0g KippZCoqOiBpZGVudGlmaWVzIHRoZSBzb2NrZXQKPiA+ICAgLSAqKmJhY2tsb2cqKjogdGhlIG1h eGltdW0gbGVuZ3RoIHRvIHdoaWNoIHRoZSBxdWV1ZSBvZiBwZW5kaW5nCj4gPiAgICAgY29ubmVj dGlvbnMgbWF5IGdyb3cKCkluIGJ5dGVzPwpNYXkgd2FudCB0byBiZSBzcGVjaWZpYyBvbiB0aGF0 LgoKPiA+IAo+ID4gUmVxdWVzdCBiaW5hcnkgbGF5b3V0Ogo+ID4gCj4gPiAgICAgOCAgICAgICAx MiAgICAgIDE2ICAgICAgMjAKPiA+ICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gPiAg ICAgfCAgICAgICBpZCAgICAgIHxiYWNrbG9nfAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0t LS0tLSsKPiA+IAo+ID4gUmVzcG9uc2UgYWRkaXRpb25hbCBmaWVsZHM6Cj4gPiAKPiA+IC0gKipp ZCoqOiBlY2hvZWQgYmFjayBmcm9tIHJlcXVlc3QKPiA+IAo+ID4gUmVzcG9uc2UgYmluYXJ5IGxh eW91dDoKPiA+IAo+ID4gICAgIDE2ICAgICAgMjAgICAgICAyNAo+ID4gICAgICstLS0tLS0tKy0t LS0tLS0rCj4gPiAgICAgfCAgICAgICBpZCAgICAgIHwKPiA+ICAgICArLS0tLS0tLSstLS0tLS0t Kwo+ID4gCj4gPiBSZXR1cm4gdmFsdWU6Cj4gPiAgIC0gMCBvbiBzdWNjZXNzCj4gPiAgIC0gU2Vl IHRoZSBbUE9TSVggbGlzdGVuIGZ1bmN0aW9uXVtsaXN0ZW5dIGZvciBlcnJvciBuYW1lczsgdGhl IGNvcnJlc3BvbmRpbmcKPiA+ICAgICBlcnJvciBudW1iZXJzIGFyZSBzcGVjaWZpZWQgbGF0ZXIg aW4gdGhpcyBkb2N1bWVudC4KCgpPciBwZXJoYXBzICB5b3UgbWVhbnQsIHNlZSAiW0Vycm9yIG51 bWJlcnNdIGluIGZ1cnRoZXIgc2VjdGlvbnMuIiA/Cj4gPiAKPiA+IAo+ID4gIyMjIyBBY2NlcHQK PiA+IAo+ID4gVGhlICoqYWNjZXB0Kiogb3BlcmF0aW9uIGV4dHJhY3RzIHRoZSBmaXJzdCBjb25u ZWN0aW9uIHJlcXVlc3Qgb24gdGhlCj4gPiBxdWV1ZSBvZiBwZW5kaW5nIGNvbm5lY3Rpb25zIGZv ciB0aGUgbGlzdGVuaW5nIHNvY2tldCBpZGVudGlmaWVkIGJ5Cj4gPiAqKmlkKiogYW5kIGNyZWF0 ZXMgYSBuZXcgY29ubmVjdGVkIHNvY2tldC4gVGhlIGlkIG9mIHRoZSBuZXcgc29ja2V0IGlzCj4g PiBhbHNvIGNob3NlbiBieSB0aGUgZnJvbnRlbmQgYW5kIHBhc3NlZCBhcyBhbiBhZGRpdGlvbmFs IGZpZWxkIG9mIHRoZQo+ID4gYWNjZXB0IHJlcXVlc3Qgc3RydWN0ICgqKmlkX25ldyoqKS4gU2Vl IHRoZSBbUE9TSVggYWNjZXB0IGZ1bmN0aW9uXVthY2NlcHRdCj4gPiBhcyByZWZlcmVuY2UuCj4g PiAKPiA+IFNpbWlsYXJseSB0byB0aGUgKipjb25uZWN0Kiogb3BlcmF0aW9uLCAqKmFjY2VwdCoq IGNyZWF0ZXMgYSBuZXcgW0RhdGEKPiA+IHJpbmddLiBUaGUgZGF0YSByaW5nIGlzIHVzZWQgdG8g c2VuZCBhbmQgcmVjZWl2ZSBkYXRhIGZyb20gdGhlIHNvY2tldC4KCnMvcmluZ10vcmluZ10gYW5k IE4gZGF0YSByaW5nIGJ1ZmZlcnMuLwoKPiA+IFRoZSAqKmFjY2VwdCoqIG9wZXJhdGlvbiBwYXNz ZXMgdHdvIGFkZGl0aW9uYWwgcGFyYW1ldGVyczogKipldnRjaG4qKgo+ID4gYW5kICoqcmVmKiou ICoqZXZ0Y2huKiogaXMgdGhlIHBvcnQgbnVtYmVyIG9mIGEgbmV3IGV2ZW50IGNoYW5uZWwgd2hp Y2gKPiA+IHdpbGwgYmUgdXNlZCBmb3Igbm90aWZpY2F0aW9ucyBvZiBhY3Rpdml0eSBvbiB0aGUg ZGF0YSByaW5nLiAqKnJlZioqIGlzCj4gPiB0aGUgZ3JhbnQgcmVmZXJlbmNlIG9mIGEgcGFnZSB3 aGljaCBjb250YWlucyBzaGFyZWQgaW5kaWNlcyB0aGF0IHBvaW50Cj4gPiB0byB0aGUgd3JpdGUg YW5kIHJlYWQgbG9jYXRpb25zIGluIHRoZSByaW5nIGJ1ZmZlcnMuICoqcmVmKiogYWxzbwo+ID4g Y29udGFpbnMgdGhlIGZ1bGwgYXJyYXkgb2YgZ3JhbnQgcmVmZXJlbmNlcyBmb3IgdGhlIHJpbmcg YnVmZmVycy4KPiA+IAo+ID4gVGhlIGJhY2tlbmQgd2lsbCByZXBseSB0byB0aGUgcmVxdWVzdCBv bmx5IHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcwo+ID4gc3VjY2Vzc2Z1bGx5IGFjY2VwdGVkLCBp LmUuIHRoZSBiYWNrZW5kIGRvZXMgbm90IHJldHVybiBFQUdBSU4gb3IKPiA+IEVXT1VMREJMT0NL Lgo+ID4gCj4gPiBFeGFtcGxlIHdvcmtmbG93Ogo+ID4gCj4gPiAtIGZyb250ZW5kIGlzc3VlcyBh biAqKmFjY2VwdCoqIHJlcXVlc3QKPiA+IC0gYmFja2VuZCB3YWl0cyBmb3IgYSBjb25uZWN0aW9u IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0Cj4gPiAtIGEgbmV3IGNvbm5lY3Rpb24gYmVj b21lcyBhdmFpbGFibGUKPiA+IC0gYmFja2VuZCBhY2NlcHRzIHRoZSBuZXcgY29ubmVjdGlvbgo+ ID4gLSBiYWNrZW5kIGNyZWF0ZXMgYW4gaW50ZXJuYWwgbWFwcGluZyBmcm9tICoqaWRfbmV3Kiog dG8gdGhlIG5ldyBzb2NrZXQKPiA+IC0gYmFja2VuZCBtYXBzIHRoZSBncmFudCByZWZlcmVuY2Ug KipyZWYqKiwgdGhlIHNoYXJlZCBwYWdlIGNvbnRhaW5zIHRoZQo+ID4gICBkYXRhIHJpbmcgaW50 ZXJmYWNlIChgc3RydWN0IHB2Y2FsbHNfZGF0YV9pbnRmYCkKPiA+IC0gYmFja2VuZCBtYXBzIGFs bCB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBsaXN0ZWQgaW4gYHN0cnVjdAo+ID4gICBwdmNhbGxzX2Rh dGFfaW50ZmAgYW5kIHVzZXMgdGhlbSBhcyBzaGFyZWQgbWVtb3J5IGZvciB0aGUgbmV3IGRhdGEK PiA+ICAgcmluZwoKcy9kYXRhIHJpbmcvcmluZyBidWZmZXIvCgpvcgpzL2RhdGEgcmluZy9kYXRh IHJpbmcgaW50ZXJmYWNlLwoKPiA+IC0gYmFja2VuZCBiaW5kcyB0aGUgKipldnRjaG4qKgoKcy90 aGUvdG8gdGhlLwoKPiA+IC0gYmFja2VuZCByZXBsaWVzIHRvIHRoZSBmcm9udGVuZAoKd2l0aCBh biAqKnJldCoqIHZhbHVlLgo+ID4gCj4gPiBSZXF1ZXN0IGZpZWxkczoKPiA+IAo+ID4gLSAqKmNt ZCoqIHZhbHVlOiA0Cj4gPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ID4gICAtICoqaWQqKjogaWQg b2YgbGlzdGVuaW5nIHNvY2tldAo+ID4gICAtICoqaWRfbmV3Kio6IGlkIG9mIHRoZSBuZXcgc29j a2V0Cj4gPiAgIC0gKipyZWYqKjogZ3JhbnQgcmVmZXJlbmNlIG9mIHRoZSBkYXRhIHJpbmcgaW50 ZXJmYWNlIChgc3RydWN0Cj4gPiAgICAgcHZjYWxsc19kYXRhX2ludGZgKQo+ID4gICAtICoqZXZ0 Y2huKio6IHBvcnQgbnVtYmVyIG9mIHRoZSBldnRjaG4gdG8gc2lnbmFsIGFjdGl2aXR5IG9uIHRo ZSBkYXRhIHJpbmcKCi4uIGFuZCByaW5nIGJ1ZmZlcnMuCgo+ID4gCj4gPiBSZXF1ZXN0IGJpbmFy eSBsYXlvdXQ6Cj4gPiAKPiA+ICAgICA4ICAgICAgIDEyICAgICAgMTYgICAgICAyMCAgICAgIDI0 ICAgICAgMjggICAgICAzMgo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSsKPiA+ICAgICB8ICAgICAgIGlkICAgICAgfCAgICBpZF9uZXcgICAg IHwgIHJlZiAgfGV2dGNobiB8Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0rLS0tLS0tLSstLS0tLS0tKwo+ID4gCj4gPiBSZXNwb25zZSBhZGRpdGlvbmFsIGZpZWxkczoK PiA+IAo+ID4gLSAqKmlkKio6IGlkIG9mIHRoZSBsaXN0ZW5pbmcgc29ja2V0LCBlY2hvZWQgYmFj ayBmcm9tIHJlcXVlc3QKPiA+IAo+ID4gUmVzcG9uc2UgYmluYXJ5IGxheW91dDoKPiA+IAo+ID4g ICAgIDE2ICAgICAgMjAgICAgICAyNAo+ID4gICAgICstLS0tLS0tKy0tLS0tLS0rCj4gPiAgICAg fCAgICAgICBpZCAgICAgIHwKPiA+ICAgICArLS0tLS0tLSstLS0tLS0tKwo+ID4gCj4gPiBSZXR1 cm4gdmFsdWU6Cj4gPiAKPiA+ICAgLSAwIG9uIHN1Y2Nlc3MKPiA+ICAgLSBTZWUgdGhlIFtQT1NJ WCBhY2NlcHQgZnVuY3Rpb25dW2FjY2VwdF0gZm9yIGVycm9yIG5hbWVzOyB0aGUgY29ycmVzcG9u ZGluZwo+ID4gICAgIGVycm9yIG51bWJlcnMgYXJlIHNwZWNpZmllZCBsYXRlciBpbiB0aGlzIGRv Y3VtZW50LgoKCk9yIHBlcmhhcHMgIHlvdSBtZWFudCwgc2VlICJbRXJyb3IgbnVtYmVyc10gaW4g ZnVydGhlciBzZWN0aW9ucy4iID8KPiA+IAo+ID4gCj4gPiAjIyMjIFBvbGwKPiA+IAo+ID4gSW4g dGhpcyB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCwgdGhlICoqcG9sbCoqIG9wZXJhdGlvbiBpcyBv bmx5IHZhbGlkCj4gPiBmb3IgcGFzc2l2ZSBzb2NrZXRzLiBGb3IgYWN0aXZlIHNvY2tldHMsIHRo ZSBmcm9udGVuZCBzaG91bGQgbG9vayBhdCB0aGUKPiA+IHN0YXRlIG9mIHRoZSBkYXRhIHJpbmcu IFdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIHF1ZXVlCgpCeSBzdGF0 ZSB5b3UgbWVhbiB0aGUgaW5fcHJvZCA/IElmIHNvIHBlcmhhcHMgJ2xvb2sgYXQgdGhlIHByb2R1 Y2VyL2NvbnN1bWVyCmluZGljaWVzIGluIHRoZSBkYXRhIHJpbmcnID8KCj4gPiBvZiB0aGUgcGFz c2l2ZSBzb2NrZXQsIHRoZSBiYWNrZW5kIGdlbmVyYXRlcyBhIHJlc3BvbnNlIGFuZCBub3RpZmll cyB0aGUKPiA+IGZyb250ZW5kLgo+ID4gCj4gPiBSZXF1ZXN0IGZpZWxkczoKPiA+IAo+ID4gLSAq KmNtZCoqIHZhbHVlOiA1Cj4gPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ID4gICAtICoqaWQqKjog aWRlbnRpZmllcyB0aGUgbGlzdGVuaW5nIHNvY2tldAo+ID4gCj4gPiBSZXF1ZXN0IGJpbmFyeSBs YXlvdXQ6Cj4gPiAKPiA+ICAgICA4ICAgICAgIDEyICAgICAgMTYKPiA+ICAgICArLS0tLS0tLSst LS0tLS0tKwo+ID4gICAgIHwgICAgICAgaWQgICAgICB8Cj4gPiAgICAgKy0tLS0tLS0rLS0tLS0t LSsKPiA+IAo+ID4gCj4gPiBSZXNwb25zZSBhZGRpdGlvbmFsIGZpZWxkczoKPiA+IAo+ID4gLSAq KmlkKio6IGVjaG9lZCBiYWNrIGZyb20gcmVxdWVzdAo+ID4gCj4gPiBSZXNwb25zZSBiaW5hcnkg bGF5b3V0Ogo+ID4gCj4gPiAgICAgMTYgICAgICAgMjAgICAgICAgMjQKPiA+ICAgICArLS0tLS0t LS0rLS0tLS0tLS0rCj4gPiAgICAgfCAgICAgICAgaWQgICAgICAgfAo+ID4gICAgICstLS0tLS0t LSstLS0tLS0tLSsKPiA+IAo+ID4gUmV0dXJuIHZhbHVlOgo+ID4gCj4gPiAgIC0gMCBvbiBzdWNj ZXNzCj4gPiAgIC0gU2VlIHRoZSBbUE9TSVggcG9sbCBmdW5jdGlvbl1bcG9sbF0gZm9yIGVycm9y IG5hbWVzOyB0aGUgY29ycmVzcG9uZGluZyBlcnJvcgo+ID4gICAgIG51bWJlcnMgYXJlIHNwZWNp ZmllZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgoKR3Vlc3Qgd2hhdCBJIGFtIGdvaW5nIHRvIGFz ayBoZXJlIDotKQoKPiA+IAo+ID4gIyMjIyBFcnJvciBudW1iZXJzCj4gPiAKPiA+IFRoZSBudW1i ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm9yIG5hbWVzIHNwZWNpZmllZCBieSBQT1NJWCBh cmU6Cj4gPiAKPiA+ICAgICBbRVBFUk1dICAgICAgICAgLTEKPiA+ICAgICBbRU5PRU5UXSAgICAg ICAgLTIKPiA+ICAgICBbRVNSQ0hdICAgICAgICAgLTMKPiA+ICAgICBbRUlOVFJdICAgICAgICAg LTQKPiA+ICAgICBbRUlPXSAgICAgICAgICAgLTUKPiA+ICAgICBbRU5YSU9dICAgICAgICAgLTYK PiA+ICAgICBbRTJCSUddICAgICAgICAgLTcKPiA+ICAgICBbRU5PRVhFQ10gICAgICAgLTgKPiA+ ICAgICBbRUJBREZdICAgICAgICAgLTkKPiA+ICAgICBbRUNISUxEXSAgICAgICAgLTEwCj4gPiAg ICAgW0VBR0FJTl0gICAgICAgIC0xMQo+ID4gICAgIFtFV09VTERCTE9DS10gICAtMTEKPiA+ICAg ICBbRU5PTUVNXSAgICAgICAgLTEyCj4gPiAgICAgW0VBQ0NFU10gICAgICAgIC0xMwo+ID4gICAg IFtFRkFVTFRdICAgICAgICAtMTQKPiA+ICAgICBbRUJVU1ldICAgICAgICAgLTE2Cj4gPiAgICAg W0VFWElTVF0gICAgICAgIC0xNwo+ID4gICAgIFtFWERFVl0gICAgICAgICAtMTgKPiA+ICAgICBb RU5PREVWXSAgICAgICAgLTE5Cj4gPiAgICAgW0VJU0RJUl0gICAgICAgIC0yMQo+ID4gICAgIFtF SU5WQUxdICAgICAgICAtMjIKPiA+ICAgICBbRU5GSUxFXSAgICAgICAgLTIzCj4gPiAgICAgW0VN RklMRV0gICAgICAgIC0yNAo+ID4gICAgIFtFTk9TUENdICAgICAgICAtMjgKPiA+ICAgICBbRVJP RlNdICAgICAgICAgLTMwCj4gPiAgICAgW0VNTElOS10gICAgICAgIC0zMQo+ID4gICAgIFtFRE9N XSAgICAgICAgICAtMzMKPiA+ICAgICBbRVJBTkdFXSAgICAgICAgLTM0Cj4gPiAgICAgW0VERUFE TEtdICAgICAgIC0zNQo+ID4gICAgIFtFREVBRExPQ0tdICAgICAtMzUKPiA+ICAgICBbRU5BTUVU T09MT05HXSAgLTM2Cj4gPiAgICAgW0VOT0xDS10gICAgICAgIC0zNwo+ID4gICAgIFtFTk9URU1Q VFldICAgICAtMzkKPiA+ICAgICBbRU5PU1lTXSAgICAgICAgLTM4Cj4gPiAgICAgW0VOT0RBVEFd ICAgICAgIC02MQo+ID4gICAgIFtFVElNRV0gICAgICAgICAtNjIKPiA+ICAgICBbRUJBRE1TR10g ICAgICAgLTc0Cj4gPiAgICAgW0VPVkVSRkxPV10gICAgIC03NQo+ID4gICAgIFtFSUxTRVFdICAg ICAgICAtODQKPiA+ICAgICBbRVJFU1RBUlRdICAgICAgLTg1Cj4gPiAgICAgW0VOT1RTT0NLXSAg ICAgIC04OAo+ID4gICAgIFtFT1BOT1RTVVBQXSAgICAtOTUKPiA+ICAgICBbRUFGTk9TVVBQT1JU XSAgLTk3Cj4gPiAgICAgW0VBRERSSU5VU0VdICAgIC05OAo+ID4gICAgIFtFQUREUk5PVEFWQUlM XSAtOTkKPiA+ICAgICBbRU5PQlVGU10gICAgICAgLTEwNQo+ID4gICAgIFtFSVNDT05OXSAgICAg ICAtMTA2Cj4gPiAgICAgW0VOT1RDT05OXSAgICAgIC0xMDcKPiA+ICAgICBbRVRJTUVET1VUXSAg ICAgLTExMAo+ID4gICAgIFtFTk9UU1VQXSAgICAgIC01MjQKPiA+IAo+ID4gIyMjIyBTb2NrZXQg ZmFtaWxpZXMgYW5kIGFkZHJlc3MgZm9ybWF0Cj4gPiAKPiA+IFRoZSBmb2xsb3dpbmcgZGVmaW5p dGlvbnMgYW5kIGV4cGxpY2l0IHNpemVzLCB0b2dldGhlciB3aXRoIFBPU0lYCj4gPiBbc3lzL3Nv Y2tldC5oXVthZGRyZXNzXSBhbmQgW25ldGluZXQvaW4uaF1baW5dIGRlZmluZSBzb2NrZXQgZmFt aWxpZXMgYW5kCj4gPiBhZGRyZXNzIGZvcm1hdC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgb25seSB0 aGUgKipkb21haW4qKiBgQUZfSU5FVGAsICoqdHlwZSoqCj4gPiBgU09DS19TVFJFQU1gIGFuZCAq KnByb3RvY29sKiogYDBgIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZQo+ID4g c3BlYywgb3RoZXJzIHJldHVybiBFTk9UU1VQLgoKcy9zcGVjLC9zcGVjaWZpY2F0aW9uLC8KCj4g PiAKPiA+ICAgICAjZGVmaW5lIEFGX1VOU1BFQyAgIDAKPiA+ICAgICAjZGVmaW5lIEFGX1VOSVgg ICAgIDEgICAvKiBVbml4IGRvbWFpbiBzb2NrZXRzICAgICAgKi8KPiA+ICAgICAjZGVmaW5lIEFG X0xPQ0FMICAgIDEgICAvKiBQT1NJWCBuYW1lIGZvciBBRl9VTklYICAgKi8KPiA+ICAgICAjZGVm aW5lIEFGX0lORVQgICAgIDIgICAvKiBJbnRlcm5ldCBJUCBQcm90b2NvbCAgICAgKi8KPiA+ICAg ICAjZGVmaW5lIEFGX0lORVQ2ICAgIDEwICAvKiBJUCB2ZXJzaW9uIDYgICAgICAgICAqLwo+ID4g Cj4gPiAgICAgI2RlZmluZSBTT0NLX1NUUkVBTSAxCj4gPiAgICAgI2RlZmluZSBTT0NLX0RHUkFN ICAyCj4gPiAgICAgI2RlZmluZSBTT0NLX1JBVyAgICAzCj4gPiAKPiA+ICAgICAvKiBnZW5lcmlj IGFkZHJlc3MgZm9ybWF0ICovCj4gPiAgICAgc3RydWN0IHNvY2thZGRyIHsKPiA+ICAgICAgICAg dWludDE2X3Qgc2FfZmFtaWx5X3Q7Cj4gPiAgICAgICAgIGNoYXIgc2FfZGF0YVsyNl07Cj4gPiAg ICAgfTsKPiA+IAo+ID4gICAgIHN0cnVjdCBpbl9hZGRyIHsKPiA+ICAgICAgICAgdWludDMyX3Qg c19hZGRyOwo+ID4gICAgIH07Cj4gPiAKPiA+ICAgICAvKiBBRl9JTkVUIGFkZHJlc3MgZm9ybWF0 ICovCj4gPiAgICAgc3RydWN0IHNvY2thZGRyX2luIHsKPiA+ICAgICAgICAgdWludDE2X3QgICAg ICAgICBzYV9mYW1pbHlfdDsKPiA+ICAgICAgICAgdWludDE2X3QgICAgICAgICBzaW5fcG9ydDsK PiA+ICAgICAgICAgc3RydWN0IGluX2FkZHIgICBzaW5fYWRkcjsKPiA+ICAgICAgICAgY2hhciAg ICAgICAgICAgICBzaW5femVyb1syMF07Cj4gPiAgICAgfTsKPiA+IAo+ID4gCj4gPiAjIyMgRGF0 YSByaW5nCj4gPiAKPiA+IERhdGEgcmluZ3MgYXJlIHVzZWQgZm9yIHNlbmRpbmcgYW5kIHJlY2Vp dmluZyBkYXRhIG92ZXIgYSBjb25uZWN0ZWQgc29ja2V0LiBUaGV5Cj4gPiBhcmUgY3JlYXRlZCB1 cG9uIGEgc3VjY2Vzc2Z1bCAqKmFjY2VwdCoqIG9yICoqY29ubmVjdCoqIGNvbW1hbmQuCj4gPiBU aGUgKipzZW5kbXNnKiogYW5kICoqcmVjdm1zZyoqIGNhbGxzIGFyZSBpbXBsZW1lbnRlZCBieSBz ZW5kaW5nIGRhdGEgYW5kCj4gPiByZWNlaXZpbmcgZGF0YSBmcm9tIGRhdGEgcmluZ3MuCgpzL2Rh dGEgcmluZ3Mvc2Vjb25kYXJ5IGRhdGEgcmluZ3MgKGFuZCB1cGRhdGluZyB0aGUgcHJpbWFyeSBk YXRhIHJpbmcgaW5kaWNpZXMpLz8KPiA+IAo+ID4gQSBkYXRhIHJpbmcgaXMgY29tcG9zZWQgb2Yg dHdvIHBpZWNlczogdGhlIGludGVyZmFjZSBhbmQgdGhlICoqaW4qKiBhbmQgKipvdXQqKgo+ID4g YnVmZmVycy4gVGhlIGludGVyZmFjZSwgcmVwcmVzZW50ZWQgYnkgYHN0cnVjdCBwdmNhbGxzX3Jp bmdfaW50ZmAgaXMgc2hhcmVkCj4gPiBmaXJzdCBhbmQgcmVzaWRlcyBvbiB0aGUgcGFnZSB3aG9z ZSBncmFudCByZWZlcmVuY2UgaXMgcGFzc2VkIGJ5ICoqYWNjZXB0KiogYW5kCj4gPiAqKmNvbm5l Y3QqKiBhcyBwYXJhbWV0ZXIuIGBzdHJ1Y3QgcHZjYWxsc19yaW5nX2ludGZgIGNvbnRhaW5zIHRo ZSBsaXN0IG9mIGdyYW50CgpzL3BhcmFtZXRlci4vcGFyYW1ldGVyIChzZWUgKipyZWYqKiBpbiB0 aG9zZSBzZWN0aW9ucykvCgo+ID4gcmVmZXJlbmNlcyB3aGljaCBjb25zdGl0dXRlIHRoZSAqKmlu KiogYW5kICoqb3V0KiogZGF0YSBidWZmZXJzLgoKUGVyaGFwcyBhZGQ6Cgooc2VlICoqcmVmW10q KiBiZWxvdyBmb3Igb3JkZXIgYW5kIGNvdW50KQoKPiA+IAo+ID4gIyMjIyBEYXRhIHJpbmcgaW50 ZXJmYWNlCj4gPiAKPiA+ICAgICBzdHJ1Y3QgcHZjYWxsc19kYXRhX2ludGYgewo+ID4gICAgIAlQ VkNBTExTX1JJTkdfSURYIGluX2NvbnMsIGluX3Byb2Q7Cj4gPiAgICAgCWludDMyX3QgaW5fZXJy b3I7Cj4gPiAKPiA+ICAgICAJdWludDhfdCBwYWRbNTJdOwo+ID4gCj4gPiAgICAgCVBWQ0FMTFNf UklOR19JRFggb3V0X2NvbnMsIG91dF9wcm9kOwo+ID4gICAgIAlpbnQzMl90IG91dF9lcnJvcjsK PiA+IAo+ID4gICAgIAl1aW50MzJfdCByaW5nX29yZGVyOwoKV2h5IG5vdCBhZGQgc29tZSBleHRy YSBwYWRkaW5nIGhlcmUgPyBZb3UgZGlkIGl0IGZvciB0aGUKaW5fY29ucywgaW5fcHJvZCwgc28g eW91IGNvdWxkIGRvIGl0IGhlcmUgYXMgd2VsbD8KCgkJdWludDhfdCBwYWQyWzQ4XTsKCgo+ID4g ICAgIAlncmFudF9yZWZfdCByZWZbXTsKPiA+ICAgICB9Owo+ID4gCj4gPiAgICAgLyogbm90IGFj dHVhbGx5IEMgY29tcGxpYW50IChyaW5nX29yZGVyIGNoYW5nZXMgZnJvbSBzb2NrZXQgdG8gc29j a2V0KSAqLwo+ID4gICAgIHN0cnVjdCBwdmNhbGxzX2RhdGEgewo+ID4gICAgICAgICBjaGFyIGlu WygoMTw8cmluZ19vcmRlcik8PFBBR0VfU0hJRlQpLzJdOwo+ID4gICAgICAgICBjaGFyIG91dFso KDE8PHJpbmdfb3JkZXIpPDxQQUdFX1NISUZUKS8yXTsKPiA+ICAgICB9Owo+ID4gCj4gPiAtICoq cmluZ19vcmRlcioqCj4gPiAgIEl0IHJlcHJlc2VudHMgdGhlIG9yZGVyIG9mIHRoZSBkYXRhIHJp bmcuIFRoZSBmb2xsb3dpbmcgbGlzdCBvZiBncmFudAo+ID4gICByZWZlcmVuY2VzIGlzIG9mIGAo MSA8PCByaW5nX29yZGVyKWAgZWxlbWVudHMuIEl0IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4KPiA+ ICAgKiptYXgtZGF0YXJpbmctcGFnZS1vcmRlcioqLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGJhY2tl bmQgb24gWGVuQnVzLgoKVGhhdCAnbWF4LWRhdGFyaW5nLXBhZ2Utb3JkZXInIGlzIG5vdCBhbnl3 aGVyZSBpbiB0aGlzIHNwZWM/CgpXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIHNheSB0aGF0IGl0IG11 c3QgYmUgYXQgbWluaW51bSBvbmU/Cgo+ID4gLSAqKnJlZltdKioKPiA+ICAgVGhlIGxpc3Qgb2Yg Z3JhbnQgcmVmZXJlbmNlcyB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBkYXRhLiBUaGV5 IGFyZQo+ID4gICBtYXBwZWQgY29udGlndW9zbHkgaW4gdmlydHVhbCBtZW1vcnkuIFRoZSBmaXJz dCBoYWxmIG9mIHRoZSBwYWdlcyBpcyB0aGUKPiA+ICAgKippbioqIGFycmF5LCB0aGUgc2Vjb25k IGhhbGYgaXMgdGhlICoqb3V0KiogYXJyYXkuIFRoZSBhcnJheSBtdXN0Cj4gPiAgIGhhdmUgYSBw b3dlciBvZiB0d28gbnVtYmVyIG9mIGVsZW1lbnRzLgoKLi4gYW5kIGJlIHVwIHRvICdyaW5nX29y ZGVyJy4KCj4gPiAtICoqaW4qKiBpcyBhbiBhcnJheSB1c2VkIGFzIGNpcmN1bGFyIGJ1ZmZlcgo+ ID4gICBJdCBjb250YWlucyBkYXRhIHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGUgcHJvZHVjZXIg aXMgdGhlIGJhY2tlbmQsIHRoZQo+ID4gICBjb25zdW1lciBpcyB0aGUgZnJvbnRlbmQuCj4gPiAt ICoqb3V0KiogaXMgYW4gYXJyYXkgdXNlZCBhcyBjaXJjdWxhciBidWZmZXIKPiA+ICAgSXQgY29u dGFpbnMgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIFRoZSBwcm9kdWNlciBpcyB0 aGUgZnJvbnRlbmQsCj4gPiAgIHRoZSBjb25zdW1lciBpcyB0aGUgYmFja2VuZC4KPiA+IC0gKipp bl9jb25zKiogYW5kICoqaW5fcHJvZCoqCj4gPiAgIENvbnN1bWVyIGFuZCBwcm9kdWNlciBpbmRp Y2VzIGZvciBkYXRhIHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGV5IGtlZXAgdHJhY2sKPiA+ICAg b2YgaG93IG11Y2ggZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkIGJ5IHRoZSBmcm9udGVu ZCBmcm9tIHRoZSAqKmluKioKPiA+ICAgYXJyYXkuICoqaW5fcHJvZCoqIGlzIGluY3JlYXNlZCBi eSB0aGUgYmFja2VuZCwgYWZ0ZXIgd3JpdGluZyBkYXRhIHRvICoqaW4qKi4KPiA+ICAgKippbl9j b25zKiogaXMgaW5jcmVhc2VkIGJ5IHRoZSBmcm9udGVuZCwgYWZ0ZXIgcmVhZGluZyBkYXRhIGZy b20gKippbioqLgo+ID4gLSAqKm91dF9jb25zKiosICoqb3V0X3Byb2QqKgo+ID4gICBDb25zdW1l ciBhbmQgcHJvZHVjZXIgaW5kaWNlcyBmb3IgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUg c29ja2V0LiBUaGV5Cj4gPiAgIGtlZXAgdHJhY2sgb2YgaG93IG11Y2ggZGF0YSBoYXMgYmVlbiB3 cml0dGVuIGJ5IHRoZSBmcm9udGVuZCB0byAqKm91dCoqIGFuZAo+ID4gICBob3cgbXVjaCBkYXRh IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQgYnkgdGhlIGJhY2tlbmQuICoqb3V0X3Byb2QqKiBp cwo+ID4gICBpbmNyZWFzZWQgYnkgdGhlIGZyb250ZW5kLCBhZnRlciB3cml0aW5nIGRhdGEgdG8g KipvdXQqKi4gKipvdXRfY29ucyoqIGlzCj4gPiAgIGluY3JlYXNlZCBieSB0aGUgYmFja2VuZCwg YWZ0ZXIgcmVhZGluZyBkYXRhIGZyb20gKipvdXQqKi4KPiA+IC0gKippbl9lcnJvcioqIGFuZCAq Km91dF9lcnJvcioqIFRoZXkgc2lnbmFsIGVycm9ycyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgc29j a2V0Cj4gPiAgICgqKmluX2Vycm9yKiopIG9yIHdoZW4gd3JpdGluZyB0byB0aGUgc29ja2V0ICgq Km91dF9lcnJvcioqKS4gMCBtZWFucyBubwo+ID4gICBlcnJvcnMuIFdoZW4gYW4gZXJyb3Igb2Nj dXJzLCBubyBmdXJ0aGVyIHJlYWRzIG9yIHdyaXRlcyBvcGVyYXRpb25zIGFyZQo+ID4gICBwZXJm b3JtZWQgb24gdGhlIHNvY2tldC4gSW4gdGhlIGNhc2Ugb2YgYW4gb3JkZXJseSBzb2NrZXQgc2h1 dGRvd24gKGkuZS4gcmVhZAo+ID4gICByZXR1cm5zIDApICoqaW5fZXJyb3IqKiBpcyBzZXQgdG8g RU5PVENPTk4uICoqaW5fZXJyb3IqKiBhbmQgKipvdXRfZXJyb3IqKgo+ID4gICBhcmUgbmV2ZXIg c2V0IHRvIEVBR0FJTiBvciBFV09VTERCTE9DSy4KCgpIb3cgY29tZT8gV2hhdCBpcyBzbyBzcGVj aWFsIGFib3V0IEVBR0FJTiA/Cgo+ID4gCj4gPiBUaGUgYmluYXJ5IGxheW91dCBvZiBgc3RydWN0 IHB2Y2FsbHNfZGF0YV9pbnRmYCBmb2xsb3dzOgo+ID4gCj4gPiAgICAgMCAgICAgICAgIDQgICAg ICAgICA4ICAgICAgICAgMTIgICAgICAgICAgIDY0ICAgICAgICA2OCAgICAgICAgNzIgICAgICAg IDc2IAo+ID4gICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS8vLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCj4gPiAgICAgfCBpbl9jb25zIHwgaW5fcHJv ZCB8aW5fZXJyb3IgfCAgcGFkZGluZyAgIHxvdXRfY29ucyB8b3V0X3Byb2QgfG91dF9lcnJvcnwK PiA+ICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0vLy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKwo+ID4gCj4gPiAgICAgNzYgICAgICAgIDgwICAgICAg ICA4NCAgICAgICAgODggICAgICA0MDkyICAgICAgNDA5Ngo+ID4gICAgICstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLy8tLS0rLS0tLS0tLS0tKwo+ID4gICAgIHxyaW5nX29yZGV8 ICByZWZbMF0gfCAgcmVmWzFdIHwgICAgICAgICB8ICByZWZbTl0gfAo+ID4gICAgICstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLy8tLS0rLS0tLS0tLS0tKwo+ID4gCj4gPiAqKk4u QioqIEZvciBvbmUgcGFnZSwgTiBpcyBtYXhpbXVtIDEwMDQgKCg0MDk2LTgwKS80KSwgYnV0IGdp dmVuIHRoYXQgTiBuZWVkcwo+ID4gdG8gYmUgYSBwb3dlciBvZiB0d28sIGFjdHVhbGx5IG1heCBO IGlzIDUxMi4KCldvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gYWxzbyBzYXkgd2hhdCB3aGF0IHRoZSAn cmluZ19vcmRlcicgd291bGQgYmUgZm9yCk4gYmVpbmcgNTEyPwoKKDkgcmlnaHQ/KQoKPiA+IFRo ZSBiaW5hcnkgbGF5b3V0IG9mIHRoZSByaW5nIGJ1ZmZlcnMgZm9sbG93OgoKV291bGQgaXQgbWFr ZSBzZW5zZSB0byBoYXZlOgoKIyMjIFJpbmcgYnVmZmVyIChzZWNvbmRhcnkgZGF0YSByaW5nKQoK b3IgCgojIyMgSW50ZXJmYWNlIHJpbmcgYnVmZmVyCgo/CgpKdXN0IHRvIGNvbm5lY3QgdG8gdGhl IGVhcmxpZXIgc2VjdGlvbnMgdGhhdCB0YWxrIGFib3V0IGl0IChjb25uZWN0CmZvciBleGFtcGxl KQo+ID4gCj4gPiAgICAgMCAgICAgICAgICgoMTw8cmluZ19vcmRlcik8PFBBR0VfU0hJRlQpLzIg ICAgICAgKCgxPDxyaW5nX29yZGVyKTw8UEFHRV9TSElGVCkKPiA+ICAgICArLS0tLS0tLS0tLS0t Ly8tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS8vLS0tLS0tLS0tLS0tLSsKPiA+ICAgICB8ICAg ICAgICAgICAgaW4gICAgICAgICAgICAgfCAgICAgICAgICAgb3V0ICAgICAgICAgICAgIHwKPiA+ ICAgICArLS0tLS0tLS0tLS0tLy8tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS8vLS0tLS0tLS0t LS0tLSsKPiA+IAo+ID4gIyMjIyBXb3JrZmxvdwo+ID4gCj4gPiBUaGUgKippbioqIGFuZCAqKm91 dCoqIGFycmF5cyBhcmUgdXNlZCBhcyBjaXJjdWxhciBidWZmZXJzOgo+ID4gICAgIAo+ID4gICAg IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFycmF5KSA9PSAoKDE8PHJp bmdfb3JkZXIpPDxQQUdFX1NISUZUKS8yCj4gPiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwo+ID4gICAgIHx0byBjb25zdW1lfCAgICBmcmVlICAgIHx0byBjb25zdW1l IHwKPiA+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiAgICAg ICAgICAgICAgICBeICAgICAgICAgICAgXgo+ID4gICAgICAgICAgICAgICAgcHJvZCAgICAgICAg IGNvbnMKPiA+IAo+ID4gICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KGFycmF5KQo+ID4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiA+ ICAgICB8ICBmcmVlICAgIHwgdG8gY29uc3VtZSB8ICAgZnJlZSAgICB8Cj4gPiAgICAgKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ID4gICAgICAgICAgICAgICAgXiAgICAg ICAgICAgIF4KPiA+ICAgICAgICAgICAgICAgIGNvbnMgICAgICAgICBwcm9kCj4gPiAKPiA+IFRo ZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gY2FsY3VsYXRlIGhvdyBtYW55IGJ5 dGVzIGFyZSBjdXJyZW50bHkKPiA+IGxlZnQgdW5jb25zdW1lZCBpbiBhbiBhcnJheToKPiA+IAo+ ID4gICAgICNkZWZpbmUgX01BU0tfUFZDQUxMU19JRFgoaWR4LCByaW5nX3NpemUpICgoaWR4KSAm IChyaW5nX3NpemUtMSkpCj4gPiAKPiA+ICAgICBzdGF0aWMgaW5saW5lIFBWQ0FMTFNfUklOR19J RFggcHZjYWxsc19yaW5nX3VuY29uc3VtZWQoUFZDQUxMU19SSU5HX0lEWCBwcm9kLAo+ID4gICAg IAkJUFZDQUxMU19SSU5HX0lEWCBjb25zLAo+ID4gICAgIAkJUFZDQUxMU19SSU5HX0lEWCByaW5n X3NpemUpCj4gPiAgICAgewo+ID4gICAgIAlQVkNBTExTX1JJTkdfSURYIHNpemU7Cj4gPiAgICAg Cj4gPiAgICAgCWlmIChwcm9kID09IGNvbnMpCj4gPiAgICAgCQlyZXR1cm4gMDsKPiA+ICAgICAK PiA+ICAgICAJcHJvZCA9IF9NQVNLX1BWQ0FMTFNfSURYKHByb2QsIHJpbmdfc2l6ZSk7Cj4gPiAg ICAgCWNvbnMgPSBfTUFTS19QVkNBTExTX0lEWChjb25zLCByaW5nX3NpemUpOwo+ID4gICAgIAo+ ID4gICAgIAlpZiAocHJvZCA9PSBjb25zKQo+ID4gICAgIAkJcmV0dXJuIHJpbmdfc2l6ZTsKPiA+ ICAgICAKPiA+ICAgICAJaWYgKHByb2QgPiBjb25zKQo+ID4gICAgIAkJc2l6ZSA9IHByb2QgLSBj b25zOwo+ID4gICAgIAllbHNlIHsKPiA+ICAgICAJCXNpemUgPSByaW5nX3NpemUgLSBjb25zOwo+ ID4gICAgIAkJc2l6ZSArPSBwcm9kOwo+ID4gICAgIAl9Cj4gPiAgICAgCXJldHVybiBzaXplOwo+ ID4gICAgIH0KPiA+IAo+ID4gVGhlIHByb2R1Y2VyICh0aGUgYmFja2VuZCBmb3IgKippbioqLCB0 aGUgZnJvbnRlbmQgZm9yICoqb3V0KiopIHdyaXRlcyB0byB0aGUKPiA+IGFycmF5IGluIHRoZSBm b2xsb3dpbmcgd2F5Ogo+ID4gCj4gPiAtIHJlYWQgKmNvbnMqLCAqcHJvZCosICplcnJvciogZnJv bSBzaGFyZWQgbWVtb3J5CgpXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIHByZWZpeCB0aG9zZSB3aXRo ICdbaW58b3V0XScgYXMgYXBwcm9waWF0ZT8KCj4gPiAtIG1lbW9yeSBiYXJyaWVyCj4gPiAtIHJl dHVybiBvbiAqZXJyb3IqCgpEaXR0bwo+ID4gLSB3cml0ZSB0byBhcnJheSBhdCBwb3NpdGlvbiAq cHJvZCogdXAgdG8gKmNvbnMqLCB3cmFwcGluZyBhcm91bmQgdGhlIGNpcmN1bGFyCgpEaXR0byA6 LSkKPiA+ICAgYnVmZmVyIHdoZW4gbmVjZXNzYXJ5Cj4gPiAtIG1lbW9yeSBiYXJyaWVyCj4gPiAt IGluY3JlYXNlICpwcm9kKgoKQW5kIGhlcmUgYXMgd2VsbC4KPiA+IC0gbm90aWZ5IHRoZSBvdGhl ciBlbmQgdmlhIGV2dGNobgo+ID4gCj4gPiBUaGUgY29uc3VtZXIgKHRoZSBiYWNrZW5kIGZvciAq Km91dCoqLCB0aGUgZnJvbnRlbmQgZm9yICoqaW4qKikgcmVhZHMgZnJvbSB0aGUKPiA+IGFycmF5 IGluIHRoZSBmb2xsb3dpbmcgd2F5Ogo+ID4gCj4gPiAtIHJlYWQgKnByb2QqLCAqY29ucyosICpl cnJvciogZnJvbSBzaGFyZWQgbWVtb3J5CgpBZ2Fpbiwgc2FtZSBxdWVzdGlvbj8KCj4gPiAtIG1l bW9yeSBiYXJyaWVyCj4gPiAtIHJldHVybiBvbiAqZXJyb3IqCj4gPiAtIHJlYWQgZnJvbSBhcnJh eSBhdCBwb3NpdGlvbiAqY29ucyogdXAgdG8gKnByb2QqLCB3cmFwcGluZyBhcm91bmQgdGhlIGNp cmN1bGFyCj4gPiAgIGJ1ZmZlciB3aGVuIG5lY2Vzc2FyeQo+ID4gLSBtZW1vcnkgYmFycmllcgo+ ID4gLSBpbmNyZWFzZSAqY29ucyoKPiA+IC0gbm90aWZ5IHRoZSBvdGhlciBlbmQgdmlhIGV2dGNo bgo+ID4gCj4gPiBUaGUgcHJvZHVjZXIgdGFrZXMgY2FyZSBvZiB3cml0aW5nIG9ubHkgYXMgbWFu eSBieXRlcyBhcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlcgo+ID4gdXAgdG8gKmNvbnMqLiBUaGUg Y29uc3VtZXIgdGFrZXMgY2FyZSBvZiByZWFkaW5nIG9ubHkgYXMgbWFueSBieXRlcyBhcyBhdmFp bGFibGUKPiA+IGluIHRoZSBidWZmZXIgdXAgdG8gKnByb2QqLiAqZXJyb3IqIGlzIHNldCBieSB0 aGUgYmFja2VuZCB3aGVuIGFuIGVycm9yIG9jY3Vycwo+ID4gd3JpdGluZyBvciByZWFkaW5nIGZy b20gdGhlIHNvY2tldC4KClRoaXMgaW1wbGllcyB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgb3V0c3Rh bmRpbmcgImJ1cnN0IG9mIGRhdGEiIGF0IGEgdGltZS4KClRoYXQgaXMgc2luY2UgdGhlIF9jb25z IGFuZCBfcHJvZCBhcmUgdmFyaWFibGUgc2l6ZSAoVGhleSBhcmUganVzdApieXRlIGluZGljaWVz KSB5b3UgY2FuJ3QgYmF0Y2g/CgpCdXQgeW91IGNvdWxkIGhhdmUgaW4gcGFyYWxsZWwgbXVsdGlw bGUgY29ubmVjdGlvbnMgd2hpY2ggdXRpbGl6ZQpkaWZmZXJlbnQgcmluZyBidWZmZXJzLgoKV291 bGQgaXQgbWFrZSBzZW5zZSB0byBtZW50aW9uIHRoaXMgc29tZXdoZXJlIGhlcmU/CgoKTGFzdGx5 IHNob3VsZCB5b3UgaGF2ZSBhIHNlY2l0b24gdGhhdCB0YWxrcyBhYm91dCBvdGhlciBub24tVU5J WCBPU2VzPwoKPiA+IAo+ID4gCj4gPiBbeGVuc3RvcmVdOiBodHRwOi8veGVuYml0cy54ZW4ub3Jn L2RvY3MvdW5zdGFibGUvbWlzYy94ZW5zdG9yZS50eHQKPiA+IFtYZW5idXNTdGF0ZUluaXRpYWxp c2luZ106IGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9oeXBlcmNhbGwveDg2 XzY0L2luY2x1ZGUscHVibGljLGlvLHhlbmJ1cy5oLmh0bWwKPiA+IFthZGRyZXNzXTogaHR0cDov L3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzc5MDg3OTkveG5zL3N5c3NvY2tldC5oLmh0 bWwKPiA+IFtpbl06IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUz OTkvYmFzZWRlZnMvbmV0aW5ldC9pbi5oLmh0bWwKPiA+IFtzb2NrZXRdOiBodHRwOi8vcHVicy5v cGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zb2NrZXQuaHRtbAo+ ID4gW2Nvbm5lY3RdOiBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkwODc5 OS94bnMvY29ubmVjdC5odG1sCj4gPiBbc2h1dGRvd25dOiBodHRwOi8vcHVicy5vcGVuZ3JvdXAu b3JnL29ubGluZXB1YnMvNzkwODc5OS94bnMvc2h1dGRvd24uaHRtbAo+ID4gW2JpbmRdOiBodHRw Oi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvNzkwODc5OS94bnMvYmluZC5odG1sCj4g PiBbbGlzdGVuXTogaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzc5MDg3OTkv eG5zL2xpc3Rlbi5odG1sCj4gPiBbYWNjZXB0XTogaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9v bmxpbmVwdWJzLzc5MDg3OTkveG5zL2FjY2VwdC5odG1sCj4gPiBbcG9sbF06IGh0dHA6Ly9wdWJz Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy83OTA4Nzk5L3hzaC9wb2xsLmh0bWwKClRoYW5rIHlv dSEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=