From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20190508100958.32637-1-chris@chris-wilson.co.uk> <20190508100958.32637-8-chris@chris-wilson.co.uk> <155794883584.12244.962912202740358175@skylake-alporthouse-com> From: Tvrtko Ursulin Message-ID: <07b44fa5-4e6e-59cf-31ca-941806baab7f@linux.intel.com> Date: Thu, 16 May 2019 09:51:34 +0100 MIME-Version: 1.0 In-Reply-To: <155794883584.12244.962912202740358175@skylake-alporthouse-com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 08/16] i915: Exercise creating context with shared GTT List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org, Tvrtko Ursulin List-ID: Ck9uIDE1LzA1LzIwMTkgMjA6MzMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTA1LTE1IDA3OjM3OjE4KQo+Pgo+PiBPbiAwOC8wNS8yMDE5IDExOjA5 LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiB2MjogVGVzdCBlYWNoIHNoYXJlZCBjb250ZXh0IGlz IGl0cyBvd24gdGltZWxpbmUgYW5kIGFsbG93cyByZXF1ZXN0Cj4+PiByZW9yZGVyaW5nIGJldHdl ZW4gc2hhcmVkIGNvbnRleHRzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Pj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFz LmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPj4+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtv LnVyc3VsaW5AaW50ZWwuY29tPgo+Pj4gQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFA bGludXguaW50ZWwuY29tPgo+Pj4gQ2M6IE1pY2hhbCBXYWpkZWN6a28gPG1pY2hhbC53YWpkZWN6 a29AaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgICBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAg ICB8ICA2OCArKysKPj4+ICAgIGxpYi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsK Pj4+ICAgIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgIHwgICAxICsKPj4+ICAgIHRlc3Rz L2k5MTUvZ2VtX2N0eF9zaGFyZWQuYyAgIHwgODU2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPj4+ICAgIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfd2hpc3Blci5jIHwgIDMyICstCj4+ PiAgICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCj4+PiAgICA2IGZpbGVz IGNoYW5nZWQsIDk2MiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+Pj4gICAgY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwo+Pj4KPj4+IGRpZmYgLS1n aXQgYS9saWIvaTkxNS9nZW1fY29udGV4dC5jIGIvbGliL2k5MTUvZ2VtX2NvbnRleHQuYwo+Pj4g aW5kZXggZjk0ZDg5Y2I0Li44ZmI4OTg0ZDEgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvaTkxNS9nZW1f Y29udGV4dC5jCj4+PiArKysgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCj4+PiBAQCAtMjcyLDYg KzI3Miw3NCBAQCB2b2lkIGdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCwgaW50IHByaW8pCj4+PiAgICAgICAgaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0 X3NldF9wcmlvcml0eShmZCwgY3R4X2lkLCBwcmlvKSwgMCk7Cj4+PiAgICB9Cj4+PiAgICAKPj4+ ICtpbnQKPj4+ICtfX2dlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAo+Pj4gKyAgICAgICAgICAg ICAgICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCj4+PiArICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCj4+PiArICAgICAgICAgICAgICAgICB1aW50MzJfdCAq b3V0KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVf ZXh0X2Nsb25lIGNsb25lID0gewo+Pj4gKyAgICAgICAgICAgICB7IC5uYW1lID0gSTkxNV9DT05U RVhUX0NSRUFURV9FWFRfQ0xPTkUgfSwKPj4+ICsgICAgICAgICAgICAgLmNsb25lX2lkID0gc3Jj LAo+Pj4gKyAgICAgICAgICAgICAuZmxhZ3MgPSBzaGFyZSwKPj4+ICsgICAgIH07Cj4+PiArICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dCBhcmcgPSB7Cj4+PiArICAg ICAgICAgICAgIC5mbGFncyA9IGZsYWdzIHwgSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19VU0Vf RVhURU5TSU9OUywKPj4+ICsgICAgICAgICAgICAgLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50 ZXIoJmNsb25lKSwKPj4+ICsgICAgIH07Cj4+PiArICAgICBpbnQgZXJyID0gMDsKPj4+ICsKPj4+ ICsgICAgIGlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JF QVRFX0VYVCwgJmFyZykpCj4+PiArICAgICAgICAgICAgIGVyciA9IC1lcnJubzsKPj4+ICsKPj4+ ICsgICAgICpvdXQgPSBhcmcuY3R4X2lkOwo+Pj4gKwo+Pj4gKyAgICAgZXJybm8gPSAwOwo+Pj4g KyAgICAgcmV0dXJuIGVycjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgX19nZW1fY29u dGV4dF9oYXMoaW50IGk5MTUsIHVpbnQzMl90IHNoYXJlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+ PiArewo+Pj4gKyAgICAgdWludDMyX3QgY3R4Owo+Pj4gKwo+Pj4gKyAgICAgX19nZW1fY29udGV4 dF9jbG9uZShpOTE1LCAwLCBzaGFyZSwgZmxhZ3MsICZjdHgpOwo+Pj4gKyAgICAgaWYgKGN0eCkK Pj4+ICsgICAgICAgICAgICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwo+Pj4gKwo+ Pj4gKyAgICAgZXJybm8gPSAwOwo+Pj4gKyAgICAgcmV0dXJuIGN0eDsKPj4+ICt9Cj4+PiArCj4+ PiArYm9vbCBnZW1fY29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpCj4+PiArewo+Pj4g KyAgICAgcmV0dXJuIF9fZ2VtX2NvbnRleHRfaGFzKGk5MTUsIEk5MTVfQ09OVEVYVF9DTE9ORV9W TSwgMCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK2Jvb2wgZ2VtX2hhc19xdWV1ZXMoaW50IGk5MTUpCj4+ PiArewo+Pj4gKyAgICAgcmV0dXJuIF9fZ2VtX2NvbnRleHRfaGFzKGk5MTUsCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9DT05URVhUX0NMT05FX1ZNLAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xF X1RJTUVMSU5FKTsKPj4+ICt9Cj4+PiArCj4+PiArdWludDMyX3QgZ2VtX2NvbnRleHRfY2xvbmUo aW50IGk5MTUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjLCB1bnNp Z25lZCBpbnQgc2hhcmUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGZsYWdzKQo+Pj4gK3sKPj4+ICsgICAgIHVpbnQzMl90IGN0eDsKPj4+ICsKPj4+ICsgICAgIGln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9jbG9uZShpOTE1LCBzcmMsIHNoYXJlLCBmbGFncywg JmN0eCksIDApOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGN0eDsKPj4+ICt9Cj4+PiArCj4+PiAr dWludDMyX3QgZ2VtX3F1ZXVlX2NyZWF0ZShpbnQgaTkxNSkKPj4+ICt7Cj4+PiArICAgICByZXR1 cm4gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOwo+Pj4g K30KPj4+ICsKPj4+ICAgIGJvb2wgZ2VtX2NvbnRleHRfaGFzX2VuZ2luZShpbnQgZmQsIHVpbnQz Ml90IGN0eCwgdWludDY0X3QgZW5naW5lKQo+Pj4gICAgewo+Pj4gICAgICAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWMgPSB7fTsKPj4+IGRpZmYgLS1naXQgYS9saWIvaTkx NS9nZW1fY29udGV4dC5oIGIvbGliL2k5MTUvZ2VtX2NvbnRleHQuaAo+Pj4gaW5kZXggYTA1Mjcx NGQ0Li44MDQzYzM0MDEgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvaTkxNS9nZW1fY29udGV4dC5oCj4+ PiArKysgYi9saWIvaTkxNS9nZW1fY29udGV4dC5oCj4+PiBAQCAtMjksNiArMjksMTkgQEAgaW50 IF9fZ2VtX2NvbnRleHRfY3JlYXRlKGludCBmZCwgdWludDMyX3QgKmN0eF9pZCk7Cj4+PiAgICB2 b2lkIGdlbV9jb250ZXh0X2Rlc3Ryb3koaW50IGZkLCB1aW50MzJfdCBjdHhfaWQpOwo+Pj4gICAg aW50IF9fZ2VtX2NvbnRleHRfZGVzdHJveShpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCk7Cj4+PiAg ICAKPj4+ICtpbnQgX19nZW1fY29udGV4dF9jbG9uZShpbnQgaTkxNSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgKm91dCk7Cj4+PiArdWludDMyX3QgZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5 MTUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBp bnQgc2hhcmUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdz KTsKPj4+ICsKPj4+ICt1aW50MzJfdCBnZW1fcXVldWVfY3JlYXRlKGludCBpOTE1KTsKPj4+ICsK Pj4+ICtib29sIGdlbV9jb250ZXh0c19oYXNfc2hhcmVkX2d0dChpbnQgaTkxNSk7Cj4+PiArYm9v bCBnZW1faGFzX3F1ZXVlcyhpbnQgaTkxNSk7Cj4+PiArCj4+PiAgICBib29sIGdlbV9oYXNfY29u dGV4dHMoaW50IGZkKTsKPj4+ICAgIHZvaWQgZ2VtX3JlcXVpcmVfY29udGV4dHMoaW50IGZkKTsK Pj4+ICAgIHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9iYW5uYWJsZShpbnQgZmQpOwo+Pj4gZGlm ZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz Cj4+PiBpbmRleCBlMWI3ZmVlYjIuLjM1NTJlODk1YiAxMDA2NDQKPj4+IC0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKPj4+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4+IEBAIC0y Miw2ICsyMiw3IEBAIFRFU1RTX3Byb2dzID0gXAo+Pj4gICAgICAgIGRybV9tbSBcCj4+PiAgICAg ICAgZHJtX3JlYWQgXAo+Pj4gICAgICAgIGk5MTUvZ2VtX2N0eF9jbG9uZSBcCj4+PiArICAgICBp OTE1L2dlbV9jdHhfc2hhcmVkIFwKPj4+ICAgICAgICBpOTE1L2dlbV92bV9jcmVhdGUgXAo+Pj4g ICAgICAgIGttc18zZCBcCj4+PiAgICAgICAga21zX2FkZGZiX2Jhc2ljIFwKPj4+IGRpZmYgLS1n aXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMgYi90ZXN0cy9pOTE1L2dlbV9jdHhfc2hh cmVkLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAuLjAwNzZm NWU5ZAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fY3R4X3NoYXJl ZC5jCj4+PiBAQCAtMCwwICsxLDg1NiBAQAo+Pj4gKy8qCj4+PiArICogQ29weXJpZ2h0IMKpIDIw MTcgSW50ZWwgQ29ycG9yYXRpb24KPj4KPj4gMjAxOQo+IAo+IE5haCwgdGhhdCB3b3VsZCBpbXBs eSBJIHB1dCBhbnkgdGhvdWdodCBpbnRvIHRvdWNoaW5nIGl0IHNpbmNlLgo+IAo+Pj4gK3N0YXRp YyB2b2lkIGV4aGF1c3Rfc2hhcmVkX2d0dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ Pj4gKyNkZWZpbmUgRVhIQVVTVF9MUkMgMHgxCj4+PiArewo+Pj4gKyAgICAgaTkxNSA9IGdlbV9y ZW9wZW5fZHJpdmVyKGk5MTUpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X2ZvcmsocGlkLCAxKSB7Cj4+ PiArICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7 Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9 IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0 MDk2KQo+Pj4gKyAgICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg LmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIC5idWZmZXJfY291bnQgPSAxLAo+Pj4gKyAgICAgICAgICAgICB9Owo+Pj4gKyAgICAg ICAgICAgICB1aW50MzJfdCBwYXJlbnQsIGNoaWxkOwo+Pj4gKyAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGNvdW50ID0gMDsKPj4+ICsgICAgICAgICAgICAgaW50IGVycjsKPj4+ICsKPj4+ICsg ICAgICAgICAgICAgZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihi YmUpKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgY2hpbGQgPSAwOwo+Pj4gKyAgICAgICAgICAg ICBmb3IgKDs7KSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gY2hpbGQ7Cj4+ PiArICAgICAgICAgICAgICAgICAgICAgZXJyID0gX19nZW1fY29udGV4dF9jbG9uZShpOTE1LAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50 LCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCAmY2hpbGQpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChlcnIpCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsK Pj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBFWEhBVVNUX0xSQykgewo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY2J1Zi5yc3ZkMSA9IGNoaWxkOwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gX19nZW1fZXhlY2J1ZihpOTE1LCAm ZXhlY2J1Zik7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICB9Cj4+Cj4+IFdoYXQgYXJlIHRoZSBzdG9wIGNvbmRpdGlvbnMgaW4gdGhp cyB0ZXN0LCB3aXRoIGFuZCB3aXRob3V0IHRoZQo+PiBFWEhBVVNUX0xSQyBmbGFnPyBJdCB3b3Vs ZCBiZSBnb29kIHRvIHB1dCB0aGF0IGluIGEgY29tbWVudC4KPiAKPiBJdCBydW5zIHVudGlsIHRo ZSBrZXJuZWwgZGllcy4gVGhlIGdpdmVhd2F5IGlzIG1lYW50IHRvIGJlIHRoZSB0ZXN0IG5hbWUu Cj4gICAKPj4gRXNwZWNpYWxseSBzaW5jZSBBRkFJUiB0aGlzIG9uZSB3YXMgY2F1c2luZyBPT00g Zm9yIG1lIHNvIG1pZ2h0IG5lZWQgdG8KPj4gYmUgdHdlYWtlZC4KPiAKPiBJdCBydW5zIHVudGls IHRoZSBrZXJuZWwgZGllcy4KCkFyZW4ndCB3ZSBub3QgYWxsb3dlZCB0byBhZGQgZmFpbGluZyB0 ZXN0cz8KCj4gCj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKPj4+ICsg ICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICBnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxl KTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWd0X2luZm8oIkNyZWF0ZWQgJWx1IHNoYXJlZCBj b250ZXh0cywgYmVmb3JlICVkICglcylcbiIsCj4+PiArICAgICAgICAgICAgICAgICAgICAgIGNv dW50LCBlcnIsIHN0cmVycm9yKC1lcnIpKTsKPj4+ICsgICAgIH0KPj4+ICsgICAgIGNsb3NlKGk5 MTUpOwo+Pj4gKyAgICAgaWd0X3dhaXRjaGlsZHJlbigpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgdm9pZCBleGVjX3NoYXJlZF9ndHQoaW50IGk5MTUsIHVuc2lnbmVkIGludCByaW5nKQo+Pj4g K3sKPj4+ICsgICAgIGNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZp ZChpOTE1KSk7Cj4+PiArICAgICBjb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJf RU5EOwo+Pj4gKyAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ Pj4gKyAgICAgICAgICAgICAuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KQo+Pj4gKyAg ICAgfTsKPj4+ICsgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9 IHsKPj4+ICsgICAgICAgICAgICAgLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmop LAo+Pj4gKyAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0gMSwKPj4+ICsgICAgICAgICAgICAg LmZsYWdzID0gcmluZywKPj4+ICsgICAgIH07Cj4+PiArICAgICB1aW50MzJfdCBzY3JhdGNoID0g b2JqLmhhbmRsZTsKPj4+ICsgICAgIHVpbnQzMl90IGJhdGNoWzE2XTsKPj4+ICsgICAgIGludCBp Owo+Pj4gKwo+Pj4gKyAgICAgZ2VtX3JlcXVpcmVfcmluZyhpOTE1LCByaW5nKTsKPj4+ICsgICAg IGlndF9yZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoaTkxNSwgcmluZykpOwo+Pj4gKwo+Pj4g KyAgICAgLyogTG9hZCBvYmplY3QgaW50byBwbGFjZSBpbiB0aGUgR1RUICovCj4+PiArICAgICBn ZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOwo+Pj4gKyAg ICAgZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+Pj4gKwo+Pj4gKyAgICAgLyogUHJlc3Vt ZSBub3RoaW5nIGNhdXNlcyBhbiBldmljdGlvbiBpbiB0aGUgbWVhbnRpbWUgKi8KPj4+ICsKPj4+ ICsgICAgIG9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+Pj4gKwo+Pj4gKyAg ICAgaSA9IDA7Cj4+PiArICAgICBiYXRjaFtpXSA9IE1JX1NUT1JFX0RXT1JEX0lNTSB8IChnZW4g PCA2ID8gMSA8PCAyMiA6IDApOwo+Pj4gKyAgICAgaWYgKGdlbiA+PSA4KSB7Cj4+PiArICAgICAg ICAgICAgIGJhdGNoWysraV0gPSBvYmoub2Zmc2V0Owo+Pj4gKyAgICAgICAgICAgICBiYXRjaFsr K2ldID0gMDsKPj4+ICsgICAgIH0gZWxzZSBpZiAoZ2VuID49IDQpIHsKPj4+ICsgICAgICAgICAg ICAgYmF0Y2hbKytpXSA9IDA7Cj4+PiArICAgICAgICAgICAgIGJhdGNoWysraV0gPSBvYmoub2Zm c2V0Owo+Pj4gKyAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAgICAgYmF0Y2hbaV0tLTsKPj4+ ICsgICAgICAgICAgICAgYmF0Y2hbKytpXSA9IG9iai5vZmZzZXQ7Cj4+PiArICAgICB9Cj4+PiAr ICAgICBiYXRjaFsrK2ldID0gMHhjMGZmZWU7Cj4+PiArICAgICBiYXRjaFsrK2ldID0gTUlfQkFU Q0hfQlVGRkVSX0VORDsKPj4+ICsgICAgIGdlbV93cml0ZShpOTE1LCBvYmouaGFuZGxlLCAwLCBi YXRjaCwgc2l6ZW9mKGJhdGNoKSk7Cj4+PiArCj4+PiArICAgICBvYmoub2Zmc2V0ICs9IDQwOTY7 IC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBjYXVzZSBhbiBldmljdGlvbiEgKi8KPj4KPj4gSXMgNGsg YXBhcnQgc2FmZT8KPiAKPiBTaW5jZSB0byBjaGFuZ2Ugd291bGQgaW1wbHkgYW4gQUJJIGJyZWFr IGFuZCBJIHNlZSBubyBwYXJhbSBpbmRpY2F0aW5nCj4gYW4gQUJJIGNoYW5nZSwgYW5kIEpvb25h cyBrZWVwcyBvbiByZWZ1c2luZyB0byBhZGQgc3VjaCBpbmZvcm1hdGlvbi4KCldoeSBpdCB3b3Vs ZCBiZSBhbiBBQkkgYnJlYWs/IFdoeSB3b3VsZCB0aGUgZHJpdmVyIGJlIG5vdCBhbGxvd2VkIHRv IGFkZCAKYXJiaXRyYXJ5IHBhZGRpbmcsIG9yIHVzZSBsYXJnZXIgcGd0YWJsZSBlbnRyeSBvciBz b21ldGhpbmcsIHNvIGlmIHlvdSAKYXNzdW1lICs0ayBpcyBlbXB0eSBpdCBjb3VsZCBhY3R1YWxs eSBub3QgYmU/Cgo+ICAgCj4+IEEgc2hvcnQgY29tbWVudCBvbiBob3cgZG9lcyB0aGlzIHRlc3Qg d29yayB3b3VsZCBiZSBnb29kLgo+Pgo+Pj4gKyAgICAgb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNU X1BJTk5FRDsKPj4+ICsgICAgIGV4ZWNidWYucnN2ZDEgPSBnZW1fY29udGV4dF9jbG9uZShpOTE1 LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOwo+Pj4gKyAgICAgaWYgKGdlbiA+IDMgJiYg Z2VuIDwgNikKPj4+ICsgICAgICAgICAgICAgZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VD VVJFOwo+Pj4gKwo+Pj4gKyAgICAgZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+Pj4gKyAg ICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBleGVjYnVmLnJzdmQxKTsKPj4+ICsgICAgIGdl bV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOyAvKiB3cml0ZSBoYXphcmQgbGllcyAqLwo+Pj4gKyAg ICAgZ2VtX2Nsb3NlKGk5MTUsIG9iai5oYW5kbGUpOwo+Pj4gKwo+Pj4gKyAgICAgZ2VtX3JlYWQo aTkxNSwgc2NyYXRjaCwgMCwgYmF0Y2gsIHNpemVvZih1aW50MzJfdCkpOwo+Pj4gKyAgICAgZ2Vt X2Nsb3NlKGk5MTUsIHNjcmF0Y2gpOwo+Pj4gKwo+Pj4gKyAgICAgaWd0X2Fzc2VydF9lcV91MzIo KmJhdGNoLCAweGMwZmZlZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgbm9wX3N5bmMo aW50IGk5MTUsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgaW50IHJpbmcsIGludDY0X3QgdGltZW91 dCkKPj4+ICt7Cj4+PiArICAgICBjb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJf RU5EOwo+Pj4gKyAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ Pj4gKyAgICAgICAgICAgICAuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKPj4+ICsg ICAgIH07Cj4+PiArICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYg PSB7Cj4+PiArICAgICAgICAgICAgIC5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2Jq KSwKPj4+ICsgICAgICAgICAgICAgLmJ1ZmZlcl9jb3VudCA9IDEsCj4+PiArICAgICAgICAgICAg IC5mbGFncyA9IHJpbmcsCj4+PiArICAgICAgICAgICAgIC5yc3ZkMSA9IGN0eCwKPj4+ICsgICAg IH07Cj4+PiArICAgICBpbnQgZXJyOwo+Pj4gKwo+Pj4gKyAgICAgZ2VtX3dyaXRlKGk5MTUsIG9i ai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPj4+ICsgICAgIGdlbV9leGVjYnVmKGk5 MTUsICZleGVjYnVmKTsKPj4+ICsgICAgIGVyciA9IGdlbV93YWl0KGk5MTUsIG9iai5oYW5kbGUs ICZ0aW1lb3V0KTsKPj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKPj4+ICsK Pj4+ICsgICAgIHJldHVybiBlcnI7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGhhc19z aW5nbGVfdGltZWxpbmUoaW50IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgdWludDMyX3QgY3R4Owo+ Pj4gKwo+Pj4gKyAgICAgX19nZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCAwLAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1F TElORSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eCk7Cj4+PiArICAgICBpZiAo Y3R4KQo+Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4+ PiArCj4+PiArICAgICByZXR1cm4gY3R4ICE9IDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBi b29sIGlnbm9yZV9lbmdpbmUodW5zaWduZWQgZW5naW5lKQo+Pj4gK3sKPj4+ICsgICAgIGlmIChl bmdpbmUgPT0gMCkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4+PiArCj4+PiArICAg ICBpZiAoZW5naW5lID09IEk5MTVfRVhFQ19CU0QpCj4+PiArICAgICAgICAgICAgIHJldHVybiB0 cnVlOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgdm9pZCBzaW5nbGVfdGltZWxpbmUoaW50IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgY29uc3Qg dWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPj4+ICsgICAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPj4+ICsgICAgICAgICAgICAgLmhhbmRsZSA9 IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCj4+PiArICAgICB9Owo+Pj4gKyAgICAgc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+Pj4gKyAgICAgICAgICAgICAuYnVm ZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCj4+PiArICAgICAgICAgICAgIC5idWZm ZXJfY291bnQgPSAxLAo+Pj4gKyAgICAgfTsKPj4+ICsgICAgIHN0cnVjdCBzeW5jX2ZlbmNlX2lu Zm8gcmluZ3NbMTZdOwo+Pgo+PiBDb3VsZCB1c2UgZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lIHRv IGNvdW50IHRoZSBlbmdpbmVzLiBCdXQgd2UgcHJvYmFibHkKPj4gaGF2ZSBwbGVudHkgb2YgdGhp cyBhcm91bmQgdGhlIGNvZGUgYmFzZS4KPj4KPj4+ICsgICAgIHN0cnVjdCBzeW5jX2ZpbGVfaW5m byBzeW5jX2ZpbGVfaW5mbyA9IHsKPj4+ICsgICAgICAgICAgICAgLm51bV9mZW5jZXMgPSAxLAo+ Pj4gKyAgICAgfTsKPj4+ICsgICAgIHVuc2lnbmVkIGludCBlbmdpbmU7Cj4+PiArICAgICBpbnQg bjsKPj4+ICsKPj4+ICsgICAgIGlndF9yZXF1aXJlKGhhc19zaW5nbGVfdGltZWxpbmUoaTkxNSkp Owo+Pj4gKwo+Pj4gKyAgICAgZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNp emVvZihiYmUpKTsKPj4+ICsgICAgIGdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPj4+ICsg ICAgIGdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOwo+Pj4gKwo+Pj4gKyAgICAgLyoKPj4+ICsg ICAgICAqIEZvciBhICJzaW5nbGUgdGltZWxpbmUiIGNvbnRleHQsIGVhY2ggcmluZyBpcyBvbiB0 aGUgY29tbW9uCj4+PiArICAgICAgKiB0aW1lbGluZSwgdW5saWtlIGEgbm9ybWFsIGNvbnRleHQg d2hlcmUgZWFjaCByaW5nIGhhcyBhbgo+Pj4gKyAgICAgICogaW5kZXBlbmRlbnQgdGltZWxpbmUu IFRoYXQgaXMgbm8gbWF0dGVyIHdoaWNoIGVuZ2luZSB3ZSBzdWJtaXQKPj4+ICsgICAgICAqIHRv LCBpdCByZXBvcnRzIHRoZSBzYW1lIHRpbWVsaW5lIG5hbWUgYW5kIGZlbmNlIGNvbnRleHQuIEhv d2V2ZXIsCj4+PiArICAgICAgKiB0aGUgZmVuY2UgY29udGV4dCBpcyBub3QgcmVwb3J0ZWQgdGhy b3VnaCB0aGUgc3luY19mZW5jZV9pbmZvLgo+Pgo+PiBJcyB0aGUgdGVzdCB1c2VmdWwgdGhlbj8g VGhlcmUgd2FzIG9uZSBJIHJldmlld2VkIGVhcmxpZXIgaW4gdGhpcyBzZXJpZXMKPj4gd2hpY2gg dGVzdGVkIGZvciBleGVjdXRpb24gb3JkZXJpbmcsIHdoaWNoIHNvdW5kcyBsaWtlIGlzIHdoYXQn cyBuZWVkZWQuCj4gCj4gSXQgaXMgYSB2YXJpYW50LiBUaGlzIG9uZSBpcyBhIGNvdXBsZSBvZiB5 ZWFycyBvbGRlci4gQm90aCBhY2NvbXBsaXNoCj4gc2ltaWxhciB0aGluZ3MgdGhyb3VnaCB2ZXJ5 IGRpZmZlcmVudCBtZWFucywgdGhlIG1vcmUgdGhlIHNlcmVuZGlwaXRvdXMuCj4gCj4+Cj4+PiAr ICAgICAgKi8KPj4+ICsgICAgIGV4ZWNidWYucnN2ZDEgPQo+Pj4gKyAgICAgICAgICAgICBnZW1f Y29udGV4dF9jbG9uZShpOTE1LCAwLCAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7Cj4+PiArICAg ICBleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNFX09VVDsKPj4+ICsgICAgIG4gPSAwOwo+ Pj4gKyAgICAgZm9yX2VhY2hfZW5naW5lKGk5MTUsIGVuZ2luZSkgewo+Pgo+PiBmb3JfZWFjaF9w aHlzaWNhbF9lbmdpbmUgdG8gYWxpZ24gd2l0aCBBbmRpJ3Mgd29yaz8KPiAKPiBObywgdGhpcyB3 b3VsZCBiZSBhbiBBQkkgaXRlcmF0b3Igbm90IGEgcGh5c2ljYWwgaXRlcmF0b3IuCgpMZWdhY3kg QUJJLCB3aHk/IEl0IHRoZW4gY292ZXJzIGEgc3Vic2V0IG9mIGVuZ2luZXMgc28gaXMgaXQgdXNl ZnVsIHRvIApjb3ZlciBtb3JlIHRoYW4gb25lIGJ1dCBub3QgYWxsPwoKPiAgIAo+Pj4gKyAgICAg ICAgICAgICBnZW1fZXhlY2J1Zl93cihpOTE1LCAmZXhlY2J1Zik7Cj4+PiArICAgICAgICAgICAg IHN5bmNfZmlsZV9pbmZvLnN5bmNfZmVuY2VfaW5mbyA9IHRvX3VzZXJfcG9pbnRlcigmcmluZ3Nb bl0pOwo+Pj4gKyAgICAgICAgICAgICBkb19pb2N0bChleGVjYnVmLnJzdmQyID4+IDMyLCBTWU5D X0lPQ19GSUxFX0lORk8sICZzeW5jX2ZpbGVfaW5mbyk7Cj4+PiArICAgICAgICAgICAgIGNsb3Nl KGV4ZWNidWYucnN2ZDIgPj4gMzIpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBpZ3RfaW5mbygi cmluZ1slZF0gZmVuY2U6ICVzICVzXG4iLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBuLCBy aW5nc1tuXS5kcml2ZXJfbmFtZSwgcmluZ3Nbbl0ub2JqX25hbWUpOwo+Pj4gKyAgICAgICAgICAg ICBuKys7Cj4+PiArICAgICB9Cj4+PiArICAgICBnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsK Pj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKPj4+ICsKPj4+ICsgICAgIGZv ciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnQo IXN0cmNtcChyaW5nc1swXS5kcml2ZXJfbmFtZSwgcmluZ3NbaV0uZHJpdmVyX25hbWUpKTsKPj4+ ICsgICAgICAgICAgICAgaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBdLm9ial9uYW1lLCByaW5n c1tpXS5vYmpfbmFtZSkpOwo+Pgo+PiBXaGF0IGlzIGluIG9ial9uYW1lPwo+IAo+IFRoZSB0aW1l bGluZSBuYW1lLiBzeW5jX2ZpbGUgaXMgcGxhaW4gb2xkIHVzZWxlc3MuIFRoZSBhc3NlcnRzIGhl cmUgYXJlCj4gZHJpdmVsLgo+IAo+Pj4gKyAgICAgfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg dm9pZCBleGVjX3NpbmdsZV90aW1lbGluZShpbnQgaTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCj4+ PiArewo+Pj4gKyAgICAgdW5zaWduZWQgaW50IG90aGVyOwo+Pj4gKyAgICAgaWd0X3NwaW5fdCAq c3BpbjsKPj4+ICsgICAgIHVpbnQzMl90IGN0eDsKPj4+ICsKPj4+ICsgICAgIGdlbV9yZXF1aXJl X3JpbmcoaTkxNSwgcmluZyk7Cj4+PiArICAgICBpZ3RfcmVxdWlyZShoYXNfc2luZ2xlX3RpbWVs aW5lKGk5MTUpKTsKPj4+ICsKPj4+ICsgICAgIC8qCj4+PiArICAgICAgKiBPbiBhbiBvcmRpbmFy eSBjb250ZXh0LCBhIGJsb2NrYWdlIG9uIG9uZSByaW5nIGRvZXNuJ3QgcHJldmVudAo+Pj4gKyAg ICAgICogZXhlY3V0aW9uIG9uIGFuIG90aGVyLgo+Pj4gKyAgICAgICovCj4+PiArICAgICBjdHgg PSAwOwo+Pj4gKyAgICAgc3BpbiA9IE5VTEw7Cj4+PiArICAgICBmb3JfZWFjaF9lbmdpbmUoaTkx NSwgb3RoZXIpIHsKPj4KPj4gZm9yX2VhY2hfcGh5c2ljYWwKPiAKPiBNb2Rlcm4gaW52ZW50aW9u cy4KPiAgIAo+Pj4gKyAgICAgICAgICAgICBpZiAob3RoZXIgPT0gcmluZyB8fCBpZ25vcmVfZW5n aW5lKG90aGVyKSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+ICsKPj4+ ICsgICAgICAgICAgICAgaWYgKHNwaW4gPT0gTlVMTCkgewo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIHNwaW4gPSBfX2lndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4LCAuZW5naW5lID0gb3Ro ZXIpOwo+Pj4gKyAgICAgICAgICAgICB9IGVsc2Ugewo+Pj4gKyAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC5idWZmZXJzX3B0ciA9IHNwaW4tPmV4ZWNidWYuYnVmZmVy c19wdHIsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0g c3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuZmxhZ3MgPSBvdGhlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5y c3ZkMSA9IGN0eCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPj4+ICsgICAgICAgICAgICAg fQo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgaWd0X3JlcXVpcmUoc3Bpbik7Cj4+PiArICAgICBpZ3Rf YXNzZXJ0X2VxKG5vcF9zeW5jKGk5MTUsIGN0eCwgcmluZywgTlNFQ19QRVJfU0VDKSwgMCk7Cj4+ PiArICAgICBpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOwo+Pj4gKwo+Pj4gKyAgICAgLyoKPj4+ ICsgICAgICAqIEJ1dCBpZiB3ZSBjcmVhdGUgYSBjb250ZXh0IHdpdGgganVzdCBhIHNpbmdsZSBz aGFyZWQgdGltZWxpbmUsCj4+PiArICAgICAgKiB0aGVuIGl0IHdpbGwgYmxvY2sgd2FpdGluZyBm b3IgdGhlIGVhcmxpZXIgcmVxdWVzdHMgb24gdGhlCj4+PiArICAgICAgKiBvdGhlciBlbmdpbmVz Lgo+Pj4gKyAgICAgICovCj4+PiArICAgICBjdHggPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAw LCAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9DT05URVhUX0NSRUFU RV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOwo+Pj4gKyAgICAgc3BpbiA9IE5VTEw7Cj4+PiArICAg ICBmb3JfZWFjaF9lbmdpbmUoaTkxNSwgb3RoZXIpIHsKPj4KPj4gRGl0dG8uCj4gCj4gSGV5ISBX aGVyZSB3YXMgdGhhdCB3aGVuIHRoaXMgY29kZSB3YXMgd3JpdHRlbl5XIGNvcGllZCA6LXAKPiAg IAo+Pj4gKyAgICAgICAgICAgICBpZiAob3RoZXIgPT0gcmluZyB8fCBpZ25vcmVfZW5naW5lKG90 aGVyKSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+ICsKPj4+ICsgICAg ICAgICAgICAgaWYgKHNwaW4gPT0gTlVMTCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHNw aW4gPSBfX2lndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4LCAuZW5naW5lID0gb3RoZXIpOwo+ Pj4gKyAgICAgICAgICAgICB9IGVsc2Ugewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5idWZmZXJzX3B0ciA9IHNwaW4tPmV4ZWNidWYuYnVmZmVyc19wdHIs Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0gc3Bpbi0+ ZXhlY2J1Zi5idWZmZXJfY291bnQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu ZmxhZ3MgPSBvdGhlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yc3ZkMSA9 IGN0eCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4g KyAgICAgfQo+Pj4gKyAgICAgaWd0X2Fzc2VydChzcGluKTsKPj4+ICsgICAgIGlndF9hc3NlcnRf ZXEobm9wX3N5bmMoaTkxNSwgY3R4LCByaW5nLCBOU0VDX1BFUl9TRUMpLCAtRVRJTUUpOwo+Pj4g KyAgICAgaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgc3RvcmVfZHdvcmQoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgcmluZywK Pj4+ICsgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IG9mZnNl dCwgdWludDMyX3QgdmFsdWUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29y aywgdW5zaWduZWQgd3JpdGVfZG9tYWluKQo+Pj4gK3sKPj4+ICsgICAgIGNvbnN0IGludCBnZW4g PSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSk7Cj4+PiArICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbM107Cj4+PiArICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7Cj4+PiArICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4+PiArICAgICB1aW50MzJfdCBiYXRjaFsxNl07Cj4+ PiArICAgICBpbnQgaTsKPj4+ICsKPj4+ICsgICAgIG1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9m KGV4ZWNidWYpKTsKPj4+ICsgICAgIGV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50 ZXIob2JqICsgIWNvcmspOwo+Pj4gKyAgICAgZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyICsgISFj b3JrOwo+Pj4gKyAgICAgZXhlY2J1Zi5mbGFncyA9IHJpbmc7Cj4+PiArICAgICBpZiAoZ2VuIDwg NikKPj4+ICsgICAgICAgICAgICAgZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOwo+ Pj4gKyAgICAgZXhlY2J1Zi5yc3ZkMSA9IGN0eDsKPj4+ICsKPj4+ICsgICAgIG1lbXNldChvYmos IDAsIHNpemVvZihvYmopKTsKPj4+ICsgICAgIG9ialswXS5oYW5kbGUgPSBjb3JrOwo+Pj4gKyAg ICAgb2JqWzFdLmhhbmRsZSA9IHRhcmdldDsKPj4+ICsgICAgIG9ialsyXS5oYW5kbGUgPSBnZW1f Y3JlYXRlKGk5MTUsIDQwOTYpOwo+Pj4gKwo+Pj4gKyAgICAgbWVtc2V0KCZyZWxvYywgMCwgc2l6 ZW9mKHJlbG9jKSk7Cj4+PiArICAgICByZWxvYy50YXJnZXRfaGFuZGxlID0gb2JqWzFdLmhhbmRs ZTsKPj4+ICsgICAgIHJlbG9jLnByZXN1bWVkX29mZnNldCA9IDA7Cj4+PiArICAgICByZWxvYy5v ZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwo+Pj4gKyAgICAgcmVsb2MuZGVsdGEgPSBvZmZzZXQ7 Cj4+PiArICAgICByZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T047Cj4+PiArICAgICByZWxvYy53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW47Cj4+PiArICAg ICBvYmpbMl0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOwo+Pj4gKyAgICAg b2JqWzJdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+Pj4gKwo+Pj4gKyAgICAgaSA9IDA7Cj4+PiAr ICAgICBiYXRjaFtpXSA9IE1JX1NUT1JFX0RXT1JEX0lNTSB8IChnZW4gPCA2ID8gMSA8PCAyMiA6 IDApOwo+Pj4gKyAgICAgaWYgKGdlbiA+PSA4KSB7Cj4+PiArICAgICAgICAgICAgIGJhdGNoWysr aV0gPSBvZmZzZXQ7Cj4+PiArICAgICAgICAgICAgIGJhdGNoWysraV0gPSAwOwo+Pj4gKyAgICAg fSBlbHNlIGlmIChnZW4gPj0gNCkgewo+Pj4gKyAgICAgICAgICAgICBiYXRjaFsrK2ldID0gMDsK Pj4+ICsgICAgICAgICAgICAgYmF0Y2hbKytpXSA9IG9mZnNldDsKPj4+ICsgICAgICAgICAgICAg cmVsb2Mub2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7Cj4+PiArICAgICB9IGVsc2Ugewo+Pj4g KyAgICAgICAgICAgICBiYXRjaFtpXS0tOwo+Pj4gKyAgICAgICAgICAgICBiYXRjaFsrK2ldID0g b2Zmc2V0Owo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgYmF0Y2hbKytpXSA9IHZhbHVlOwo+Pj4gKyAg ICAgYmF0Y2hbKytpXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4+PiArICAgICBnZW1fd3JpdGUo aTkxNSwgb2JqWzJdLmhhbmRsZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkpOwo+Pj4gKyAgICAg Z2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+Pj4gKyAgICAgZ2VtX2Nsb3NlKGk5MTUsIG9i alsyXS5oYW5kbGUpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdWludDMyX3QgY3JlYXRlX2hp Z2hlc3RfcHJpb3JpdHkoaW50IGk5MTUpCj4+PiArewo+Pj4gKyAgICAgdWludDMyX3QgY3R4ID0g Z2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+Pj4gKwo+Pj4gKyAgICAgLyoKPj4+ICsgICAgICAq IElmIHRoZXJlIGlzIG5vIHByaW9yaXR5IHN1cHBvcnQsIGFsbCBjb250ZXh0cyB3aWxsIGhhdmUg ZXF1YWwKPj4+ICsgICAgICAqIHByaW9yaXR5IChhbmQgdGhlcmVmb3JlIHRoZSBtYXggdXNlciBw cmlvcml0eSksIHNvIG5vIGNvbnRleHQKPj4+ICsgICAgICAqIGNhbiBvdmVydGFrZSB1cywgYW5k IHdlIGVmZmVjdGl2ZWx5IGNhbiBmb3JtIGEgcGx1Zy4KPj4+ICsgICAgICAqLwo+Pj4gKyAgICAg X19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBNQVhfUFJJTyk7Cj4+PiArCj4+ PiArICAgICByZXR1cm4gY3R4Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB1bnBsdWdf c2hvd19xdWV1ZShpbnQgaTkxNSwgc3RydWN0IGlndF9jb3JrICpjLCB1bnNpZ25lZCBpbnQgZW5n aW5lKQo+Pj4gK3sKPj4+ICsgICAgIGlndF9zcGluX3QgKnNwaW5bTUFYX0VMU1BfUUxFTl07Cj4+ Cj4+IFdoeSBpcyB0aGlzIDE2Pwo+IAo+IDJ4IGFzIGJpZyBhcyB0aGUgZGVlcGVzdCBrbm93biBx bGVuLiBBbmQgMTYgaXMgdGhhdCBudW1iZXIgdGhhdCBjcm9wcyB1cAo+IGV2ZXJ5d2hlcmUgYXMg YSAianVzdCBiaWcgZW5vdWdoIG51bWJlciIKPiAgIAo+Pj4gKwo+Pj4gKyAgICAgZm9yIChpbnQg biA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4pOyBuKyspIHsKPj4+ICsgICAgICAgICAgICAgY29u c3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAuY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHkoaTkxNSksCj4+PiArICAgICAgICAg ICAgICAgICAgICAgLmVuZ2luZSA9IGVuZ2luZSwKPj4+ICsgICAgICAgICAgICAgfTsKPj4+ICsg ICAgICAgICAgICAgc3BpbltuXSA9IF9faWd0X3NwaW5fZmFjdG9yeShpOTE1LCAmb3B0cyk7Cj4+ PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOwo+Pj4g KyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgaWd0X2NvcmtfdW5wbHVnKGMpOyAvKiBiYXRjaGVzIHdp bGwgbm93IGJlIHF1ZXVlZCBvbiB0aGUgZW5naW5lICovCj4+PiArICAgICBpZ3RfZGVidWdmc19k dW1wKGk5MTUsICJpOTE1X2VuZ2luZV9pbmZvIik7Cj4+PiArCj4+PiArICAgICBmb3IgKGludCBu ID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4rKykKPj4+ICsgICAgICAgICAgICAgaWd0X3Nw aW5fZnJlZShpOTE1LCBzcGluW25dKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHVpbnQzMl90 IHN0b3JlX3RpbWVzdGFtcChpbnQgaTkxNSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgcmluZywKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIG1taW9fYmFzZSkKPj4+ICt7Cj4+PiArICAgICBjb25zdCBib29s IHI2NGIgPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPj0gODsKPj4+ICsg ICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPj4+ICsgICAgICAg ICAgICAgLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCj4+PiArICAgICAgICAgICAg IC5yZWxvY2F0aW9uX2NvdW50ID0gMSwKPj4+ICsgICAgIH07Cj4+PiArICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2MgPSB7Cj4+PiArICAgICAgICAgICAgIC50 YXJnZXRfaGFuZGxlID0gb2JqLmhhbmRsZSwKPj4+ICsgICAgICAgICAgICAgLm9mZnNldCA9IDIg KiBzaXplb2YodWludDMyX3QpLAo+Pj4gKyAgICAgICAgICAgICAuZGVsdGEgPSA0MDkyLAo+Pj4g KyAgICAgICAgICAgICAucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LAo+Pj4gKyAgICAgfTsKPj4+ICsgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZXhlY2J1ZiA9IHsKPj4+ICsgICAgICAgICAgICAgLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZvYmopLAo+Pj4gKyAgICAgICAgICAgICAuYnVmZmVyX2NvdW50ID0gMSwKPj4+ICsgICAg ICAgICAgICAgLmZsYWdzID0gcmluZywKPj4+ICsgICAgICAgICAgICAgLnJzdmQxID0gY3R4LAo+ Pj4gKyAgICAgfTsKPj4+ICsgICAgIHVpbnQzMl90IGJhdGNoW10gPSB7Cj4+PiArICAgICAgICAg ICAgIDB4MjQgPDwgMjMgfCAoMSArIHI2NGIpLCAvKiBTUk0gKi8KPj4+ICsgICAgICAgICAgICAg bW1pb19iYXNlICsgMHgzNTgsCj4+PiArICAgICAgICAgICAgIDQwOTIsCj4+PiArICAgICAgICAg ICAgIDAsCj4+PiArICAgICAgICAgICAgIE1JX0JBVENIX0JVRkZFUl9FTkQKPj4+ICsgICAgIH07 Cj4+PiArCj4+PiArICAgICBpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZp ZChpOTE1KSkgPj0gNyk7Cj4+PiArCj4+PiArICAgICBnZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRs ZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkpOwo+Pj4gKyAgICAgb2JqLnJlbG9jc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJnJlbG9jKTsKPj4+ICsKPj4+ICsgICAgIGdlbV9leGVjYnVmKGk5MTUs ICZleGVjYnVmKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiBvYmouaGFuZGxlOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBpbmRlcGVuZGVudChpbnQgaTkxNSwgdW5zaWduZWQgcmluZywg dW5zaWduZWQgZmxhZ3MpCj4+PiArewo+Pj4gKyAgICAgdWludDMyX3QgaGFuZGxlW0FSUkFZX1NJ WkUocHJpb3JpdGllcyldOwo+Pj4gKyAgICAgaWd0X3NwaW5fdCAqc3BpbltNQVhfRUxTUF9RTEVO XTsKPj4+ICsgICAgIHVuc2lnbmVkIGludCBtbWlvX2Jhc2U7Cj4+PiArCj4+PiArICAgICAvKiBY WFggaTkxNV9xdWVyeSgpISAqLwo+Pj4gKyAgICAgc3dpdGNoIChyaW5nKSB7Cj4+PiArICAgICBj YXNlIEk5MTVfRVhFQ19ERUZBVUxUOgo+Pj4gKyAgICAgY2FzZSBJOTE1X0VYRUNfUkVOREVSOgo+ Pj4gKyAgICAgICAgICAgICBtbWlvX2Jhc2UgPSAweDIwMDA7Cj4+PiArICAgICAgICAgICAgIGJy ZWFrOwo+Pj4gKyNpZiAwCj4+PiArICAgICBjYXNlIEk5MTVfRVhFQ19CU0Q6Cj4+PiArICAgICAg ICAgICAgIG1taW9fYmFzZSA9IDB4MTIwMDA7Cj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4g KyNlbmRpZgo+Pj4gKyAgICAgY2FzZSBJOTE1X0VYRUNfQkxUOgo+Pj4gKyAgICAgICAgICAgICBt bWlvX2Jhc2UgPSAweDIyMDAwOwo+Pj4gKyAgICAgICAgICAgICBicmVhazsKPj4+ICsKPj4+ICsg ICAgIGNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+Pj4gKyAgICAgICAgICAgICBpZiAoaW50ZWxfZ2Vu KGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDExKQo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIG1taW9fYmFzZSA9IDB4MWQ4MDAwOwo+Pj4gKyAgICAgICAgICAgICBlbHNlCj4+PiArICAg ICAgICAgICAgICAgICAgICAgbW1pb19iYXNlID0gMHgxYTAwMDsKPj4+ICsgICAgICAgICAgICAg YnJlYWs7Cj4+PiArCj4+PiArICAgICBkZWZhdWx0Ogo+Pj4gKyAgICAgICAgICAgICBpZ3Rfc2tp cCgibW1pbyBiYXNlIG5vdCBrbm93blxuIik7Cj4+PiArICAgICB9Cj4+Cj4+IFVmZmYgdGhpcyBp cyBxdWl0ZSBxdWVzdGlvbmFibGUuIFNob3VsZCB3ZSByYXRoZXIgaGF2ZSB0aGlzIHN1YnRlc3Qg aW4KPj4gc2VsZnRlc3RzIG9ubHk/Cj4gCj4gV2Ugc2hvdWxkIGJlIGV4cG9ydGluZyB0aGlzIGlu Zm9ybWF0aW9uLiBJdCBpcyBhIG5vbi1wcml2aWxlZ2VkIHJlZ2lzdGVyCj4gdGhhdCBpcyB1c2Vk IGJ5IG5vcm1hbCBjbGllbnRzIHRvIG1lYXN1cmUgZWxhcHNlZCB0aW1lLgoKSSBzZWUuLiB3aG8g dXNlcyBpdD8gTWVzYT8gSXMgaXQganVzdCBvbmUgcmVnaXN0ZXI/IFdoYXQgd291bGQgbWFrZSBt b3JlIApzZW5zZSAtIGFkZCBhIHF1ZXJ5IHRvIHJlYWQgdGhpcyByZWdpc3Rlciwgb3IgYWRkIGEg cXVlcnkgdG8gZ2V0IHRoZSAKcmVnaXN0ZXIgYWRkcmVzcywgb3IgbW1pb19iYXNlIChhcyB5b3Ug d2VyZSBwcm9wb3Npbmcgc29tZSB0aW1lIGFnbyk/Cgo+IAo+Pj4gKwo+Pj4gKyAgICAgZm9yIChp bnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4pOyBuKyspIHsKPj4+ICsgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAuY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHkoaTkxNSksCj4+PiArICAgICAg ICAgICAgICAgICAgICAgLmVuZ2luZSA9IHJpbmcsCj4+PiArICAgICAgICAgICAgIH07Cj4+PiAr ICAgICAgICAgICAgIHNwaW5bbl0gPSBfX2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOwo+ Pj4gKyAgICAgICAgICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIG9wdHMuY3R4KTsKPj4+ ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShw cmlvcml0aWVzKTsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgIHVpbnQzMl90IGN0eCA9IGdlbV9x dWV1ZV9jcmVhdGUoaTkxNSk7Cj4+PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHgsIHByaW9yaXRpZXNbaV0pOwo+Pj4gKyAgICAgICAgICAgICBoYW5kbGVb aV0gPSBzdG9yZV90aW1lc3RhbXAoaTkxNSwgY3R4LCByaW5nLCBtbWlvX2Jhc2UpOwo+Pj4gKyAg ICAgICAgICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7Cj4+PiArICAgICB9Cj4+ PiArCj4+PiArICAgICBmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4rKykK Pj4+ICsgICAgICAgICAgICAgaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluW25dKTsKPj4+ICsKPj4+ ICsgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmlvcml0aWVzKTsgaSsrKSB7 Cj4+PiArICAgICAgICAgICAgIHVpbnQzMl90ICpwdHI7Cj4+PiArCj4+PiArICAgICAgICAgICAg IHB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgaGFuZGxlW2ldLCA0MDk2LCBQUk9UX1JFQUQpOwo+ Pj4gKyAgICAgICAgICAgICBnZW1fc2V0X2RvbWFpbihpOTE1LCBoYW5kbGVbaV0sIC8qIG5vIHdy aXRlIGhhemFyZCBsaWVzISAqLwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1 X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPj4+ICsgICAgICAgICAgICAg Z2VtX2Nsb3NlKGk5MTUsIGhhbmRsZVtpXSk7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGhhbmRs ZVtpXSA9IHB0clsxMDIzXTsKPj4KPj4gMTAyMyByZWxhdGVzIHRvIDQwOTIgZnJvbSBzdG9yZV90 aW1lc3RhbXAgSSBnYXRoZXIuIFRoZSB0d28gbmVlZCB0byBiZQo+PiBkZWZpbmVkIGNsb3NlciB0 b2dldGhlci4KPj4KPj4+ICsgICAgICAgICAgICAgbXVubWFwKHB0ciwgNDA5Nik7Cj4+PiArCj4+ PiArICAgICAgICAgICAgIGlndF9kZWJ1ZygiY3R4WyVkXSAucHJpbz0lZCwgdGltZXN0YW1wPSV1 XG4iLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaSwgcHJpb3JpdGllc1tpXSwgaGFuZGxl W2ldKTsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGlndF9hc3NlcnQoKGludDMyX3QpKGhh bmRsZVtISV0gLSBoYW5kbGVbTE9dKSA8IDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCByZW9yZGVyKGludCBpOTE1LCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCBmbGFncykKPj4+ICsj ZGVmaW5lIEVRVUFMIDEKPj4+ICt7Cj4+PiArICAgICBJR1RfQ09SS19IQU5ETEUoY29yayk7Cj4+ PiArICAgICB1aW50MzJfdCBzY3JhdGNoOwo+Pj4gKyAgICAgdWludDMyX3QgKnB0cjsKPj4+ICsg ICAgIHVpbnQzMl90IGN0eFsyXTsKPj4+ICsgICAgIHVpbnQzMl90IHBsdWc7Cj4+PiArCj4+PiAr ICAgICBjdHhbTE9dID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgIGdlbV9jb250 ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhbTE9dLCBNSU5fUFJJTyk7Cj4+PiArCj4+PiArICAg ICBjdHhbSEldID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgIGdlbV9jb250ZXh0 X3NldF9wcmlvcml0eShpOTE1LCBjdHhbSEldLCBmbGFncyAmIEVRVUFMID8gTUlOX1BSSU8gOiAw KTsKPj4+ICsKPj4+ICsgICAgIHNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+Pj4g KyAgICAgcGx1ZyA9IGlndF9jb3JrX3BsdWcoJmNvcmssIGk5MTUpOwo+Pj4gKwo+Pj4gKyAgICAg LyogV2UgZXhwZWN0IHRoZSBoaWdoIHByaW9yaXR5IGNvbnRleHQgdG8gYmUgZXhlY3V0ZWQgZmly c3QsIGFuZAo+Pj4gKyAgICAgICogc28gdGhlIGZpbmFsIHJlc3VsdCB3aWxsIGJlIHZhbHVlIGZy b20gdGhlIGxvdyBwcmlvcml0eSBjb250ZXh0Lgo+Pj4gKyAgICAgICovCj4+PiArICAgICBzdG9y ZV9kd29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCBzY3JhdGNoLCAwLCBjdHhbTE9dLCBwbHVnLCAw KTsKPj4+ICsgICAgIHN0b3JlX2R3b3JkKGk5MTUsIGN0eFtISV0sIHJpbmcsIHNjcmF0Y2gsIDAs IGN0eFtISV0sIHBsdWcsIDApOwo+Pj4gKwo+Pj4gKyAgICAgdW5wbHVnX3Nob3dfcXVldWUoaTkx NSwgJmNvcmssIHJpbmcpOwo+Pj4gKyAgICAgZ2VtX2Nsb3NlKGk5MTUsIHBsdWcpOwo+Pj4gKwo+ Pj4gKyAgICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHhbTE9dKTsKPj4+ICsgICAgIGdl bV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W0hJXSk7Cj4+PiArCj4+PiArICAgICBwdHIgPSBn ZW1fbW1hcF9fZ3R0KGk5MTUsIHNjcmF0Y2gsIDQwOTYsIFBST1RfUkVBRCk7Cj4+PiArICAgICBn ZW1fc2V0X2RvbWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8K Pj4+ICsgICAgICAgICAgICAgICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RP TUFJTl9HVFQpOwo+Pj4gKyAgICAgZ2VtX2Nsb3NlKGk5MTUsIHNjcmF0Y2gpOwo+Pj4gKwo+Pj4g KyAgICAgaWYgKGZsYWdzICYgRVFVQUwpIC8qIGVxdWFsIHByaW9yaXR5LCByZXN1bHQgd2lsbCBi ZSBmaWZvICovCj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4 W0hJXSk7Cj4+PiArICAgICBlbHNlCj4+PiArICAgICAgICAgICAgIGlndF9hc3NlcnRfZXFfdTMy KHB0clswXSwgY3R4W0xPXSk7Cj4+PiArICAgICBtdW5tYXAocHRyLCA0MDk2KTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgcHJvbW90aW9uKGludCBpOTE1LCB1bnNpZ25lZCByaW5nKQo+ Pj4gK3sKPj4+ICsgICAgIElHVF9DT1JLX0hBTkRMRShjb3JrKTsKPj4+ICsgICAgIHVpbnQzMl90 IHJlc3VsdCwgZGVwOwo+Pj4gKyAgICAgdWludDMyX3QgKnB0cjsKPj4+ICsgICAgIHVpbnQzMl90 IGN0eFszXTsKPj4+ICsgICAgIHVpbnQzMl90IHBsdWc7Cj4+PiArCj4+PiArICAgICBjdHhbTE9d ID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgIGdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHhbTE9dLCBNSU5fUFJJTyk7Cj4+PiArCj4+PiArICAgICBjdHhbSEldID0g Z2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPj4+ICsgICAgIGdlbV9jb250ZXh0X3NldF9wcmlvcml0 eShpOTE1LCBjdHhbSEldLCAwKTsKPj4+ICsKPj4+ICsgICAgIGN0eFtOT0lTRV0gPSBnZW1fcXVl dWVfY3JlYXRlKGk5MTUpOwo+Pj4gKyAgICAgZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUs IGN0eFtOT0lTRV0sIE1JTl9QUklPLzIpOwo+Pj4gKwo+Pj4gKyAgICAgcmVzdWx0ID0gZ2VtX2Ny ZWF0ZShpOTE1LCA0MDk2KTsKPj4+ICsgICAgIGRlcCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7 Cj4+PiArCj4+PiArICAgICBwbHVnID0gaWd0X2NvcmtfcGx1ZygmY29yaywgaTkxNSk7Cj4+PiAr Cj4+PiArICAgICAvKiBFeHBlY3QgdGhhdCBISSBwcm9tb3RlcyBMTywgc28gdGhlIG9yZGVyIHdp bGwgYmUgTE8sIEhJLCBOT0lTRS4KPj4+ICsgICAgICAqCj4+PiArICAgICAgKiBmaWZvIHdvdWxk IGJlIE5PSVNFLCBMTywgSEkuCj4+PiArICAgICAgKiBzdHJpY3QgcHJpb3JpdHkgd291bGQgYmUg IEhJLCBOT0lTRSwgTE8KPj4+ICsgICAgICAqLwo+Pj4gKyAgICAgc3RvcmVfZHdvcmQoaTkxNSwg Y3R4W05PSVNFXSwgcmluZywgcmVzdWx0LCAwLCBjdHhbTk9JU0VdLCBwbHVnLCAwKTsKPj4+ICsg ICAgIHN0b3JlX2R3b3JkKGk5MTUsIGN0eFtMT10sIHJpbmcsIHJlc3VsdCwgMCwgY3R4W0xPXSwg cGx1ZywgMCk7Cj4+PiArCj4+PiArICAgICAvKiBsaW5rIExPIDwtPiBISSB2aWEgYSBkZXBlbmRl bmN5IG9uIGFub3RoZXIgYnVmZmVyICovCj4+PiArICAgICBzdG9yZV9kd29yZChpOTE1LCBjdHhb TE9dLCByaW5nLCBkZXAsIDAsIGN0eFtMT10sIDAsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP Tik7Cj4+PiArICAgICBzdG9yZV9kd29yZChpOTE1LCBjdHhbSEldLCByaW5nLCBkZXAsIDAsIGN0 eFtISV0sIDAsIDApOwo+Pj4gKwo+Pj4gKyAgICAgc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0hJXSwg cmluZywgcmVzdWx0LCAwLCBjdHhbSEldLCAwLCAwKTsKPj4+ICsKPj4+ICsgICAgIHVucGx1Z19z aG93X3F1ZXVlKGk5MTUsICZjb3JrLCByaW5nKTsKPj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBw bHVnKTsKPj4+ICsKPj4+ICsgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W05PSVNF XSk7Cj4+PiArICAgICBnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtMT10pOwo+Pj4gKyAg ICAgZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHhbSEldKTsKPj4+ICsKPj4+ICsgICAgIHB0 ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgZGVwLCA0MDk2LCBQUk9UX1JFQUQpOwo+Pj4gKyAgICAg Z2VtX3NldF9kb21haW4oaTkxNSwgZGVwLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KPj4+ ICsgICAgICAgICAgICAgICAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01B SU5fR1RUKTsKPj4+ICsgICAgIGdlbV9jbG9zZShpOTE1LCBkZXApOwo+Pj4gKwo+Pj4gKyAgICAg aWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBjdHhbSEldKTsKPj4+ICsgICAgIG11bm1hcChwdHIs IDQwOTYpOwo+Pj4gKwo+Pj4gKyAgICAgcHRyID0gZ2VtX21tYXBfX2d0dChpOTE1LCByZXN1bHQs IDQwOTYsIFBST1RfUkVBRCk7Cj4+PiArICAgICBnZW1fc2V0X2RvbWFpbihpOTE1LCByZXN1bHQs IC8qIG5vIHdyaXRlIGhhemFyZCBsaWVzISAqLwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIEk5 MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+Pj4gKyAgICAgZ2VtX2Ns b3NlKGk5MTUsIHJlc3VsdCk7Cj4+PiArCj4+PiArICAgICBpZ3RfYXNzZXJ0X2VxX3UzMihwdHJb MF0sIGN0eFtOT0lTRV0pOwo+Pj4gKyAgICAgbXVubWFwKHB0ciwgNDA5Nik7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyB2b2lkIHNtb2tldGVzdChpbnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5z aWduZWQgdGltZW91dCkKPj4+ICt7Cj4+PiArICAgICBjb25zdCBpbnQgbmNwdXMgPSBzeXNjb25m KF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKPj4+ICsgICAgIHVuc2lnbmVkIGVuZ2luZXNbMTZdOwo+ Pj4gKyAgICAgdW5zaWduZWQgbmVuZ2luZTsKPj4+ICsgICAgIHVuc2lnbmVkIGVuZ2luZTsKPj4+ ICsgICAgIHVpbnQzMl90IHNjcmF0Y2g7Cj4+PiArICAgICB1aW50MzJfdCAqcHRyOwo+Pj4gKwo+ Pj4gKyAgICAgbmVuZ2luZSA9IDA7Cj4+PiArICAgICBmb3JfZWFjaF9lbmdpbmUoaTkxNSwgZW5n aW5lKSB7Cj4+PiArICAgICAgICAgICAgIGlmIChpZ25vcmVfZW5naW5lKGVuZ2luZSkpCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGVu Z2luZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKPj4+ICsgICAgIH0KPj4+ICsgICAgIGlndF9yZXF1 aXJlKG5lbmdpbmUpOwo+Pgo+PiBmb3JfZWFjaF9waHlzaWNhbCBhbmQgY291bnJpbmcgdGhlIGVu Z2luZXMgZm9yIGVuZ2luZXMgYXJyYXkgd291bGQgYmUKPj4gYmV0dGVyIEkgdGhpbmsuCj4+Cj4+ PiArCj4+PiArICAgICBzY3JhdGNoID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKPj4+ICsgICAg IGlndF9mb3JrKGNoaWxkLCBuY3B1cykgewo+Pj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGNvdW50ID0gMDsKPj4+ICsgICAgICAgICAgICAgdWludDMyX3QgY3R4Owo+Pj4gKwo+Pj4gKyAg ICAgICAgICAgICBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV9wZXJ0dXJiKGNoaWxkKTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPj4+ICsg ICAgICAgICAgICAgaWd0X3VudGlsX3RpbWVvdXQodGltZW91dCkgewo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGludCBwcmlvOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHByaW8g PSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KE1BWF9QUklPIC0gTUlOX1BS SU8pICsgTUlOX1BSSU87Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGk5MTUsIGN0eCwgcHJpbyk7Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgICAg ICAgZW5naW5lID0gZW5naW5lc1toYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4 KG5lbmdpbmUpXTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzdG9yZV9kd29yZChpOTE1LCBj dHgsIGVuZ2luZSwgc2NyYXRjaCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA4KmNoaWxkICsgMCwgfmNoaWxkLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIDApOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHN0 ZXAgPSAwOyBzdGVwIDwgODsgc3RlcCsrKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RvcmVfZHdvcmQoaTkxNSwgY3R4LCBlbmdpbmUsIHNjcmF0Y2gsCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4KmNoaWxkICsgNCwgY291bnQrKywKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOwo+Pj4gKyAg ICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgIGdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg Y3R4KTsKPj4+ICsgICAgIH0KPj4+ICsgICAgIGlndF93YWl0Y2hpbGRyZW4oKTsKPj4+ICsKPj4+ ICsgICAgIHB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5NiwgUFJPVF9SRUFE KTsKPj4+ICsgICAgIGdlbV9zZXRfZG9tYWluKGk5MTUsIHNjcmF0Y2gsIC8qIG5vIHdyaXRlIGhh emFyZCBsaWVzISAqLwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIEk5MTVfR0VNX0RPTUFJTl9H VFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+Pj4gKyAgICAgZ2VtX2Nsb3NlKGk5MTUsIHNjcmF0 Y2gpOwo+Pj4gKwo+Pj4gKyAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG5jcHVzOyBuKysp IHsKPj4+ICsgICAgICAgICAgICAgaWd0X2Fzc2VydF9lcV91MzIocHRyWzIqbl0sIH5uKTsKPj4+ ICsgICAgICAgICAgICAgLyoKPj4+ICsgICAgICAgICAgICAgICogTm90ZSB0aGlzIGNvdW50IGlz IGFwcHJveGltYXRlIGR1ZSB0byB1bmNvbnN0cmFpbmVkCj4+PiArICAgICAgICAgICAgICAqIG9y ZGVyaW5nIG9mIHRoZSBkd29yZCB3cml0ZXMgYmV0d2VlbiBlbmdpbmVzLgo+Pj4gKyAgICAgICAg ICAgICAgKgo+Pj4gKyAgICAgICAgICAgICAgKiBUYWtlIHRoZSByZXN1bHQgd2l0aCBhIHBpbmNo IG9mIHNhbHQuCj4+PiArICAgICAgICAgICAgICAqLwo+Pj4gKyAgICAgICAgICAgICBpZ3RfaW5m bygiQ2hpbGRbJWRdIGNvbXBsZXRlZCAldSBjeWNsZXNcbiIsICBuLCBwdHJbMipuKzFdKTsKPj4+ ICsgICAgIH0KPj4+ICsgICAgIG11bm1hcChwdHIsIDQwOTYpOwo+Pj4gK30KPj4+ICsKPj4+ICtp Z3RfbWFpbgo+Pj4gK3sKPj4+ICsgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lICplOwo+Pj4gKyAgICAgaW50IGk5MTUgPSAtMTsKPj4+ICsKPj4+ICsgICAgIGlndF9maXh0 dXJlIHsKPj4+ICsgICAgICAgICAgICAgaTkxNSA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+Pj4gKyAgICAgICAgICAgICBpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4+PiArICAgICB9 Cj4+PiArCj4+PiArICAgICBpZ3Rfc3VidGVzdF9ncm91cCB7Cj4+PiArICAgICAgICAgICAgIGln dF9maXh0dXJlIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3RfcmVxdWlyZShnZW1fY29u dGV4dHNfaGFzX3NoYXJlZF9ndHQoaTkxNSkpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGln dF9mb3JrX2hhbmdfZGV0ZWN0b3IoaTkxNSk7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsKPj4+ ICsgICAgICAgICAgICAgaWd0X3N1YnRlc3QoImNyZWF0ZS1zaGFyZWQtZ3R0IikKPj4+ICsgICAg ICAgICAgICAgICAgICAgICBjcmVhdGVfc2hhcmVkX2d0dChpOTE1LCAwKTsKPj4+ICsKPj4+ICsg ICAgICAgICAgICAgaWd0X3N1YnRlc3QoImRldGFjaGVkLXNoYXJlZC1ndHQiKQo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGNyZWF0ZV9zaGFyZWRfZ3R0KGk5MTUsIERFVEFDSEVEKTsKPj4+ICsK Pj4+ICsgICAgICAgICAgICAgaWd0X3N1YnRlc3QoImRpc2pvaW50LXRpbWVsaW5lcyIpCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgZGlzam9pbnRfdGltZWxpbmVzKGk5MTUpOwo+Pj4gKwo+Pj4g KyAgICAgICAgICAgICBpZ3Rfc3VidGVzdCgic2luZ2xlLXRpbWVsaW5lIikKPj4+ICsgICAgICAg ICAgICAgICAgICAgICBzaW5nbGVfdGltZWxpbmUoaTkxNSk7Cj4+PiArCj4+PiArICAgICAgICAg ICAgIGlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQiKQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIGV4aGF1c3Rfc2hhcmVkX2d0dChpOTE1LCAwKTsKPj4+ICsKPj4+ICsgICAgICAgICAg ICAgaWd0X3N1YnRlc3QoImV4aGF1c3Qtc2hhcmVkLWd0dC1scmMiKQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGV4aGF1c3Rfc2hhcmVkX2d0dChpOTE1LCBFWEhBVVNUX0xSQyk7Cj4+PiArCj4+ PiArICAgICAgICAgICAgIGZvciAoZSA9IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzOyBlLT5uYW1l OyBlKyspIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZ3Rfc3VidGVzdF9mKCJleGVjLXNo YXJlZC1ndHQtJXMiLCBlLT5uYW1lKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXhlY19zaGFyZWRfZ3R0KGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncyk7Cj4+Cj4+IFRoZSBz YW1lIHByZXZpb3VzbHkgcmFpc2VkIHF1ZXN0aW9uIG9uIHNob3VsZCBpdCBpdGVyYXRlIHRoZSBs ZWdhY3kKPj4gZXhlY2J1ZiBlbmdpbmVzIG9yIHBoeXNpY2FsIGVuZ2luZXMuIE1heWJlIHlvdSB3 b24ndCBkaWZmZXJlbnQgc3VidGVzdHMKPj4gZG8gYm90aD8KPiAKPiBJdCBzaG91bGQgYmUgdGVz dGluZyB0aGUgY3Jvc3MgYmV0d2VlbiB0aGUgY29udGV4dCBhbmQgZXhlY2J1ZiB1QUJJLCBub3QK PiBwaHlzaWNhbC4KClNhbWUgcXVlc3Rpb24gYXMgZWFybGllciwgd2h5IGlzIHRoaXMgY3Jvc3Mg aW50ZXJlc3Rpbmc/IEkgbWVhbiB3aGF0IGlzIAppbnRlcmVzdGluZyBpbiBpbnRlcnNlY3Rpb24g YmV0d2VlbiBsZWdhY3kgZXhlY2J1ZiBlbmdpbmUgc2VsZWN0aW9uIGFuZCAKcHBndHQgc2hhcmlu Zz8gQW5kIGF0IHRoZSBzYW1lIHRpbWUgbm90IHJlbGV2YW50IHRvIGV4ZXJjaXNlIHRoZSBuZXcg CmV4ZWNidWYgZW5naW5lIHNlbGVjdGlvbiBhYmk/CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==