From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joshua Otto Subject: Re: [PATCH RFC 07/20] migration: defer precopy policy to libxl Date: Thu, 30 Mar 2017 01:19:41 -0400 Message-ID: <20170330051941.GC5346@eagle> References: <1490605592-12189-1-git-send-email-jtotto@uwaterloo.ca> <1490605592-12189-8-git-send-email-jtotto@uwaterloo.ca> <00c2630a-b919-09b5-1a91-116e4a3f9e19@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ctSV4-0004ju-UN for xen-devel@lists.xenproject.org; Thu, 30 Mar 2017 05:19:59 +0000 Content-Disposition: inline In-Reply-To: <00c2630a-b919-09b5-1a91-116e4a3f9e19@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , xen-devel@lists.xenproject.org Cc: ian.jackson@eu.citrix.com, hjarmstr@uwaterloo.ca, wei.liu2@citrix.com, czylin@uwaterloo.ca, imhy.yang@gmail.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBNYXIgMjksIDIwMTcgYXQgMDk6MTg6MTBQTSArMDEwMCwgQW5kcmV3IENvb3BlciB3 cm90ZToKPiBPbiAyNy8wMy8xNyAxMDowNiwgSm9zaHVhIE90dG8gd3JvdGU6Cj4gPiBUaGUgcHJl Y29weSBwaGFzZSBvZiB0aGUgeGNfZG9tYWluX3NhdmUoKSBsaXZlIG1pZ3JhdGlvbiBhbGdvcml0 aG0gaGFzCj4gPiBoaXN0b3JpY2FsbHkgYmVlbiBpbXBsZW1lbnRlZCB0byBydW4gdW50aWwgZWl0 aGVyIGEpIChhbG1vc3QpIG5vIHBhZ2VzCj4gPiBhcmUgZGlydHkgb3IgYikgc29tZSBmaXhlZCwg aGFyZC1jb2RlZCBtYXhpbXVtIG51bWJlciBvZiBwcmVjb3B5Cj4gPiBpdGVyYXRpb25zIGhhcyBi ZWVuIGV4Y2VlZGVkLiAgVGhpcyBwb2xpY3kgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhcmUKPiA+ IGxlc3MgdGhhbiBpZGVhbCBmb3IgYSBmZXcgcmVhc29uczoKPiA+IC0gdGhlIGxvZ2ljIG9mIHRo ZSBwb2xpY3kgaXMgaW50ZXJ0d2luZWQgd2l0aCB0aGUgY29udHJvbCBmbG93IG9mIHRoZQo+ID4g ICBtZWNoYW5pc20gb2YgdGhlIHByZWNvcHkgc3RhZ2UKPiA+IC0gaXQgY2FuJ3QgdGFrZSBpbnRv IGFjY291bnQgZmFjdHMgZXh0ZXJuYWwgdG8gdGhlIGltbWVkaWF0ZQo+ID4gICBtaWdyYXRpb24g Y29udGV4dCwgc3VjaCBhcyBpbnRlcmFjdGl2ZSB1c2VyIGlucHV0IG9yIHRoZSBwYXNzYWdlIG9m Cj4gPiAgIHdhbGwtY2xvY2sgdGltZQo+ID4gLSBpdCBkb2VzIG5vdCBwZXJtaXQgdGhlIHVzZXIg dG8gY2hhbmdlIHRoZWlyIG1pbmQsIG92ZXIgdGltZSwgYWJvdXQKPiA+ICAgd2hhdCB0byBkbyBh dCB0aGUgZW5kIG9mIHRoZSBwcmVjb3B5ICh0aGV5IGdldCBhbiB1bmNvbmRpdGlvbmFsCj4gPiAg IHRyYW5zaXRpb24gaW50byB0aGUgc3RvcC1hbmQtY29weSBwaGFzZSBvZiB0aGUgbWlncmF0aW9u KQo+ID4KPiA+IFRvIHBlcm1pdCB1c2VycyB0byBpbXBsZW1lbnQgYXJiaXRyYXJ5IGhpZ2hlci1s ZXZlbCBwb2xpY2llcyBnb3Zlcm5pbmcKPiA+IHdoZW4gdGhlIGxpdmUgbWlncmF0aW9uIHByZWNv cHkgcGhhc2Ugc2hvdWxkIGVuZCwgYW5kIHdoYXQgc2hvdWxkIGJlCj4gPiBkb25lIG5leHQ6Cj4g PiAtIGFkZCBhIHByZWNvcHlfcG9saWN5KCkgY2FsbGJhY2sgdG8gdGhlIHhjX2RvbWFpbl9zYXZl KCkgdXNlci1zdXBwbGllZAo+ID4gICBjYWxsYmFja3MKPiA+IC0gZHVyaW5nIHRoZSBwcmVjb3B5 IHBoYXNlIG9mIGxpdmUgbWlncmF0aW9ucywgY29uc3VsdCB0aGlzIHBvbGljeSBhZnRlcgo+ID4g ICBlYWNoIGJhdGNoIG9mIHBhZ2VzIHRyYW5zbWl0dGVkIGFuZCB0YWtlIHRoZSBkaWN0YXRlZCBh Y3Rpb24sIHdoaWNoCj4gPiAgIG1heSBiZSB0byBhKSBhYm9ydCB0aGUgbWlncmF0aW9uIGVudGly ZWx5LCBiKSBjb250aW51ZSB3aXRoIHRoZQo+ID4gICBwcmVjb3B5LCBvciBjKSBwcm9jZWVkIHRv IHRoZSBzdG9wLWFuZC1jb3B5IHBoYXNlLgo+ID4gLSBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9u IG9mIHRoZSBvbGQgcG9saWN5IGFzIHN1Y2ggYSBjYWxsYmFjayBpbgo+ID4gICBsaWJ4bCBhbmQg cGx1bWIgaXQgdGhyb3VnaCB0aGUgSVBDIG1hY2hpbmVyeSB0byBsaWJ4YywgZWZmZWN0aXZlbHkK PiA+ICAgbWFpbnRhaW5nIHRoZSBvbGQgcG9saWN5IGZvciBub3cKPiA+Cj4gPiBTaWduZWQtb2Zm LWJ5OiBKb3NodWEgT3R0byA8anRvdHRvQHV3YXRlcmxvby5jYT4KPiAKPiBUaGlzIHBhdGNoIHNo b3VsZCBiZSBzcGxpdCBpbnRvIHR3by4gIE9uZSBtb2RpZnlpbmcgbGlieGMgdG8gdXNlIHN0cnVj dAo+IHByZWNvcHlfc3RhdHMsIGFuZCBhIHNlY29uZCB0byB3aXJlIHVwIHRoZSBSUEMgY2FsbC4K CldpbGwgZG8uCgo+ID4gLS0tCj4gPiAgdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oICAg ICB8ICAyMyArKysrLQo+ID4gIHRvb2xzL2xpYnhjL3hjX25vbWlncmF0ZS5jICAgICAgICAgfCAg IDMgKy0KPiA+ICB0b29scy9saWJ4Yy94Y19zcl9jb21tb24uaCAgICAgICAgIHwgICA3ICstCj4g PiAgdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jICAgICAgICAgICB8IDE5NCArKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gPiAgdG9vbHMvbGlieGwvbGlieGxfZG9tX3NhdmUu YyAgICAgICB8ICAyMCArKysrCj4gPiAgdG9vbHMvbGlieGwvbGlieGxfc2F2ZV9jYWxsb3V0LmMg ICB8ICAgMyArLQo+ID4gIHRvb2xzL2xpYnhsL2xpYnhsX3NhdmVfaGVscGVyLmMgICAgfCAgIDcg Ky0KPiA+ICB0b29scy9saWJ4bC9saWJ4bF9zYXZlX21zZ3NfZ2VuLnBsIHwgICA0ICstCj4gPiAg OCBmaWxlcyBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCj4gPgo+ ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaCBiL3Rvb2xzL2xp YnhjL2luY2x1ZGUveGVuZ3Vlc3QuaAo+ID4gaW5kZXggYWE4Y2M4Yi4uMzBmZmI2ZiAxMDA2NDQK PiA+IC0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaAo+ID4gKysrIGIvdG9vbHMv bGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oCj4gPiBAQCAtMzksNiArMzksMTQgQEAKPiA+ICAgKi8K PiA+ICBzdHJ1Y3QgeGVuZXZ0Y2huX2hhbmRsZTsKPiA+ICAKPiA+ICsvKiBGb3Igc2F2ZSdzIHBy ZWNvcHlfcG9saWN5KCkuICovCj4gPiArc3RydWN0IHByZWNvcHlfc3RhdHMKPiA+ICt7Cj4gPiAr ICAgIHVuc2lnbmVkIGl0ZXJhdGlvbjsKPiA+ICsgICAgdW5zaWduZWQgdG90YWxfd3JpdHRlbjsK PiA+ICsgICAgbG9uZyBkaXJ0eV9jb3VudDsgLyogLTEgaWYgdW5rbm93biAqLwo+IAo+IHRvdGFs X3dyaXR0ZW4gYW5kIGRpcnR5X2NvdW50IGFyZSBsaWFibGUgdG8gYmUgZXF1YWwsIHNvIGhhdmlu ZyB0aGVtIGFzCj4gZGlmZmVyZW50IHdpZHRocyBvZiBpbnRlZ2VyIGNsZWFybHkgY2FuJ3QgYmUg Y29ycmVjdC4KCkhtbW0sIEkgY291bGQgaGF2ZSBzd29ybiB0aGF0IEkgY2hvc2UgdGhlIHdpZHRo IHRvIG1hdGNoIHRoZSB0eXBlIG9mIGRpcnR5X2NvdW50CmluIHRoZSBzaGFkb3cgb3Agc3RhdHMs IGJ1dCBJJ3ZlIGNoZWNrZWQgYWdhaW4gYW5kIGl0J3MgdWludDMyX3QgdGhlcmUgc28gSSdtCm5v dCBzdXJlIHdoYXQgSSB3YXMgdGhpbmtpbmcuCgo+IAo+ID4gK307Cj4gPiArCj4gPiAgLyogY2Fs bGJhY2tzIHByb3ZpZGVkIGJ5IHhjX2RvbWFpbl9zYXZlICovCj4gPiAgc3RydWN0IHNhdmVfY2Fs bGJhY2tzIHsKPiA+ICAgICAgLyogQ2FsbGVkIGFmdGVyIGV4cGlyYXRpb24gb2YgY2hlY2twb2lu dCBpbnRlcnZhbCwKPiA+IEBAIC00Niw2ICs1NCwxNyBAQCBzdHJ1Y3Qgc2F2ZV9jYWxsYmFja3Mg ewo+ID4gICAgICAgKi8KPiA+ICAgICAgaW50ICgqc3VzcGVuZCkodm9pZCogZGF0YSk7Cj4gPiAg Cj4gPiArICAgIC8qIENhbGxlZCBhZnRlciBldmVyeSBiYXRjaCBvZiBwYWdlIGRhdGEgc2VudCBk dXJpbmcgdGhlIHByZWNvcHkgcGhhc2Ugb2YgYQo+ID4gKyAgICAgKiBsaXZlIG1pZ3JhdGlvbiB0 byBhc2sgdGhlIGNhbGxlciB3aGF0IHRvIGRvIG5leHQgYmFzZWQgb24gdGhlIGN1cnJlbnQKPiA+ ICsgICAgICogc3RhdGUgb2YgdGhlIHByZWNvcHkgbWlncmF0aW9uLgo+ID4gKyAgICAgKi8KPiA+ ICsjZGVmaW5lIFhHU19QT0xJQ1lfQUJPUlQgICAgICAgICAgKC0xKSAvKiBBYmFuZG9uIHRoZSBt aWdyYXRpb24gZW50aXJlbHkgYW5kCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogdGlkeSB1cC4gKi8KPiA+ICsjZGVmaW5lIFhHU19QT0xJQ1lfQ09OVElOVUVf UFJFQ09QWSAwICAvKiBSZW1haW4gaW4gdGhlIHByZWNvcHkgcGhhc2UuICovCj4gPiArI2RlZmlu ZSBYR1NfUE9MSUNZX1NUT1BfQU5EX0NPUFkgICAgMSAgLyogSW1tZWRpYXRlbHkgc3VzcGVuZCBh bmQgdHJhbnNtaXQgdGhlCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogcmVtYWluaW5nIGRpcnR5IHBhZ2VzLiAqLwo+ID4gKyAgICBpbnQgKCpwcmVjb3B5X3Bv bGljeSkoc3RydWN0IHByZWNvcHlfc3RhdHMgc3RhdHMsIHZvaWQgKmRhdGEpOwo+IAo+IFN0cnVj dHVyZXMgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB2YWx1ZSBsaWtlIHRoaXMsIGFzIHRoZSBjb21w aWxlciBoYXMKPiB0byBkbyBhIGxvdCBvZiBtZW1jcHkoKSB3b3JrIHRvIG1ha2UgaXQgaGFwcGVu LiAgWW91IHNob3VsZCBwYXNzIGJ5Cj4gY29uc3QgcG9pbnRlciwgYXMgKGFzIGZhciBhcyBJIGNh biB0ZWxsKSwgdGhleSBhcmUgc3RyaWN0bHkgcmVhZC1vbmx5IHRvCj4gdGhlIGltcGxlbWVudGF0 aW9uIG9mIHRoaXMgaG9vaz8KCkkgY2hvc2UgdG8gcGFzcyBieSB2YWx1ZSB0byBtYWtlIHRoZSBJ UEMgcGx1bWJpbmcgZWFzaWVyIC0KbGlieGxfc2F2ZV9tc2dzX2dlbi5wbCBkb2Vzbid0IGtub3cg d2hhdCB0byBkbyBhYm91dCBwb2ludGVycywgYW5kIChub3QgYmVpbmcKdGhlIHN0cm9uZ2VzdCBQ ZXJsIHByb2dyYW1tZXIuLi4pIEkgZGlkbid0IHdhbnQgdG8gdm9sdW50ZWVyIHRvIGJlIHRoZSBv bmUgdG8KdGVhY2ggaXQuCgpJcyB0aGUgbWVtY3B5KCkgcmVhbGx5IHNpZ25pZmljYW50IGhlcmU/ ICBJZiB0aGlzIHdlcmUgYSB0aWdodCBsb29wLCBzdXJlLCBidXQKZXZlcnkgaW52b2NhdGlvbiBv ZiB0aGUgcG9saWN5IGNhbGxiYWNrIGltcGxpZXMgYm90aCBhIDRNQiBuZXR3b3JrIHRyYW5zZmVy Cl9hbmRfIGEgc3luY2hyb25vdXMgUlBDLgoKPiA+ICsKPiA+ICAgICAgLyogQ2FsbGVkIGFmdGVy IHRoZSBndWVzdCdzIGRpcnR5IHBhZ2VzIGhhdmUgYmVlbgo+ID4gICAgICAgKiAgY29waWVkIGlu dG8gYW4gb3V0cHV0IGJ1ZmZlci4KPiA+ICAgICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gcmVzdW1l cyB0aGUgZ3Vlc3QgJiB0aGUgZGV2aWNlIG1vZGVsLAo+ID4gQEAgLTEwMCw4ICsxMTksOCBAQCB0 eXBlZGVmIGVudW0gewo+ID4gICAqICAgICAgICBkb2Vzbid0IHVzZSBjaGVja3BvaW50aW5nCj4g PiAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKPiA+ICAgKi8KPiA+IC1p bnQgeGNfZG9tYWluX3NhdmUoeGNfaW50ZXJmYWNlICp4Y2gsIGludCBpb19mZCwgdWludDMyX3Qg ZG9tLCB1aW50MzJfdCBtYXhfaXRlcnMsCj4gPiAtICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IG1heF9mYWN0b3IsIHVpbnQzMl90IGZsYWdzIC8qIFhDRkxBR1NfeHh4ICovLAo+ID4gK2ludCB4 Y19kb21haW5fc2F2ZSh4Y19pbnRlcmZhY2UgKnhjaCwgaW50IGlvX2ZkLCB1aW50MzJfdCBkb20s Cj4gPiArICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzIC8qIFhDRkxBR1NfeHh4ICov LAo+ID4gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2F2ZV9jYWxsYmFja3MqIGNhbGxiYWNr cywgaW50IGh2bSwKPiA+ICAgICAgICAgICAgICAgICAgICAgeGNfbWlncmF0aW9uX3N0cmVhbV90 IHN0cmVhbV90eXBlLCBpbnQgcmVjdl9mZCk7Cj4gCj4gSXQgd291bGQgYmUgY2xlYW5lciBmb3Ig ZXhpc3RpbmcgY2FsbGVycywgYW5kIHRvIGV4dGVuZCBpbiB0aGUgZnV0dXJlLAo+IHRvIGVuY2Fw c3VsYXRlIGFsbCBvZiB0aGVzZSBwYXJhbWV0ZXJzIGluIGEgc3RydWN0IGRvbWFpbl9zYXZlX3Bh cmFtcwo+IGFuZCBwYXNzIGl0IGJ5IHBvaW50ZXIgdG8gaGVyZS4KPiAKPiBUaGF0IHdheSwgd2Un ZCBhdm9pZCB0aGUgc2l0dWF0aW9uIHdlIGN1cnJlbnRseSBoYXZlIHdoZXJlIHNvbWUKPiBpbmZv cm1hdGlvbiBpcyBwYXNzZWQgaW4gYml0ZmllbGRzIGluIGEgc2luZ2xlIHBhcmFtZXRlciwgd2hl cmVhcyBvdGhlcgo+IGJvb2xlYW5zIGFyZSBwYXNzZWQgYXMgaW50ZWdlcnMuCj4gCj4gVGhlIGh2 bSBwYXJhbWV0ZXIgc3BlY2lmaWNhbGx5IGlzIHVzZWxlc3MsIGFuZCBjYW4gYmUgcmVtb3ZlZCBi eQo+IHJlYXJyYW5naW5nIHRoZSBzYW5pdHkgY2hlY2tzIHVudGlsIGFmdGVyIHRoZSB4Y19kb21h aW5fZ2V0aW5mbygpIGNhbGwuCj4gCj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMv eGNfbm9taWdyYXRlLmMgYi90b29scy9saWJ4Yy94Y19ub21pZ3JhdGUuYwo+ID4gaW5kZXggMTVj ODM4Zi4uMmFmNjRlNCAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xzL2xpYnhjL3hjX25vbWlncmF0ZS5j Cj4gPiArKysgYi90b29scy9saWJ4Yy94Y19ub21pZ3JhdGUuYwo+ID4gQEAgLTIwLDggKzIwLDcg QEAKPiA+ICAjaW5jbHVkZSA8eGVuY3RybC5oPgo+ID4gICNpbmNsdWRlIDx4ZW5ndWVzdC5oPgo+ ID4gIAo+ID4gLWludCB4Y19kb21haW5fc2F2ZSh4Y19pbnRlcmZhY2UgKnhjaCwgaW50IGlvX2Zk LCB1aW50MzJfdCBkb20sIHVpbnQzMl90IG1heF9pdGVycywKPiA+IC0gICAgICAgICAgICAgICAg ICAgdWludDMyX3QgbWF4X2ZhY3RvciwgdWludDMyX3QgZmxhZ3MsCj4gPiAraW50IHhjX2RvbWFp bl9zYXZlKHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9fZmQsIHVpbnQzMl90IGRvbSwgdWludDMy X3QgZmxhZ3MsCj4gPiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYXZlX2NhbGxiYWNrcyog Y2FsbGJhY2tzLCBpbnQgaHZtLAo+ID4gICAgICAgICAgICAgICAgICAgICB4Y19taWdyYXRpb25f c3RyZWFtX3Qgc3RyZWFtX3R5cGUsIGludCByZWN2X2ZkKQo+ID4gIHsKPiA+IGRpZmYgLS1naXQg YS90b29scy9saWJ4Yy94Y19zcl9jb21tb24uaCBiL3Rvb2xzL2xpYnhjL3hjX3NyX2NvbW1vbi5o Cj4gPiBpbmRleCBiMWFhODhlLi5hOTE2MGJkIDEwMDY0NAo+ID4gLS0tIGEvdG9vbHMvbGlieGMv eGNfc3JfY29tbW9uLmgKPiA+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX3NyX2NvbW1vbi5oCj4gPiBA QCAtMTk4LDEyICsxOTgsMTEgQEAgc3RydWN0IHhjX3NyX2NvbnRleHQKPiA+ICAgICAgICAgICAg ICAvKiBGdXJ0aGVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgc3RyZWFtLiAqLwo+ID4g ICAgICAgICAgICAgIGJvb2wgZGVidWc7Cj4gPiAgCj4gPiAtICAgICAgICAgICAgLyogUGFyYW1l dGVycyBmb3IgdHdlYWtpbmcgbGl2ZSBtaWdyYXRpb24uICovCj4gPiAtICAgICAgICAgICAgdW5z aWduZWQgbWF4X2l0ZXJhdGlvbnM7Cj4gPiAtICAgICAgICAgICAgdW5zaWduZWQgZGlydHlfdGhy ZXNob2xkOwo+ID4gLQo+ID4gICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcDJtX3NpemU7Cj4g PiAgCj4gPiArICAgICAgICAgICAgc3RydWN0IHByZWNvcHlfc3RhdHMgc3RhdHM7Cj4gPiArICAg ICAgICAgICAgaW50IHBvbGljeV9kZWNpc2lvbjsKPiA+ICsKPiA+ICAgICAgICAgICAgICB4ZW5f cGZuX3QgKmJhdGNoX3BmbnM7Cj4gPiAgICAgICAgICAgICAgdW5zaWduZWQgbnJfYmF0Y2hfcGZu czsKPiA+ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpkZWZlcnJlZF9wYWdlczsKPiA+IGRp ZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19zcl9zYXZlLmMgYi90b29scy9saWJ4Yy94Y19zcl9z YXZlLmMKPiA+IGluZGV4IDc5N2FlYzUuLmViOTUzMzQgMTAwNjQ0Cj4gPiAtLS0gYS90b29scy9s aWJ4Yy94Y19zcl9zYXZlLmMKPiA+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX3NyX3NhdmUuYwo+ID4g QEAgLTI3MSwxMyArMjcxLDI5IEBAIHN0YXRpYyBpbnQgd3JpdGVfYmF0Y2goc3RydWN0IHhjX3Ny X2NvbnRleHQgKmN0eCkKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ICsgKiBUZXN0IGlmIHRoZSBi YXRjaCBpcyBmdWxsLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBib29sIGJhdGNoX2Z1bGwoc3RydWN0 IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAKPiBjb25zdCBzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4 Cj4gCj4gVGhpcyBpcyBhIHByZWRpY2F0ZSwgYWZ0ZXIgYWxsLgo+IAo+ID4gK3sKPiA+ICsgICAg cmV0dXJuIGN0eC0+c2F2ZS5ucl9iYXRjaF9wZm5zID09IE1BWF9CQVRDSF9TSVpFOwo+ID4gK30K PiA+ICsKPiA+ICsvKgo+ID4gKyAqIFRlc3QgaWYgdGhlIGJhdGNoIGlzIGVtcHR5Lgo+ID4gKyAq Lwo+ID4gK3N0YXRpYyBib29sIGJhdGNoX2VtcHR5KHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgp Cj4gPiArewo+ID4gKyAgICByZXR1cm4gY3R4LT5zYXZlLm5yX2JhdGNoX3BmbnMgPT0gMDsKPiA+ ICt9Cj4gPiArCj4gPiArLyoKPiA+ICAgKiBGbHVzaCBhIGJhdGNoIG9mIHBmbnMgaW50byB0aGUg c3RyZWFtLgo+ID4gICAqLwo+ID4gIHN0YXRpYyBpbnQgZmx1c2hfYmF0Y2goc3RydWN0IHhjX3Ny X2NvbnRleHQgKmN0eCkKPiA+ICB7Cj4gPiAgICAgIGludCByYyA9IDA7Cj4gPiAgCj4gPiAtICAg IGlmICggY3R4LT5zYXZlLm5yX2JhdGNoX3BmbnMgPT0gMCApCj4gPiArICAgIGlmICggYmF0Y2hf ZW1wdHkoY3R4KSApCj4gPiAgICAgICAgICByZXR1cm4gcmM7Cj4gPiAgCj4gPiAgICAgIHJjID0g d3JpdGVfYmF0Y2goY3R4KTsKPiA+IEBAIC0yOTMsMTkgKzMwOSwxMiBAQCBzdGF0aWMgaW50IGZs dXNoX2JhdGNoKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgpCj4gPiAgfQo+ID4gIAo+ID4gIC8q Cj4gPiAtICogQWRkIGEgc2luZ2xlIHBmbiB0byB0aGUgYmF0Y2gsIGZsdXNoaW5nIHRoZSBiYXRj aCBpZiBmdWxsLgo+ID4gKyAqIEFkZCBhIHNpbmdsZSBwZm4gdG8gdGhlIGJhdGNoLgo+ID4gICAq Lwo+ID4gLXN0YXRpYyBpbnQgYWRkX3RvX2JhdGNoKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgs IHhlbl9wZm5fdCBwZm4pCj4gPiArc3RhdGljIHZvaWQgYWRkX3RvX2JhdGNoKHN0cnVjdCB4Y19z cl9jb250ZXh0ICpjdHgsIHhlbl9wZm5fdCBwZm4pCj4gPiAgewo+ID4gLSAgICBpbnQgcmMgPSAw Owo+ID4gLQo+ID4gLSAgICBpZiAoIGN0eC0+c2F2ZS5ucl9iYXRjaF9wZm5zID09IE1BWF9CQVRD SF9TSVpFICkKPiA+IC0gICAgICAgIHJjID0gZmx1c2hfYmF0Y2goY3R4KTsKPiA+IC0KPiA+IC0g ICAgaWYgKCByYyA9PSAwICkKPiA+IC0gICAgICAgIGN0eC0+c2F2ZS5iYXRjaF9wZm5zW2N0eC0+ c2F2ZS5ucl9iYXRjaF9wZm5zKytdID0gcGZuOwo+ID4gLQo+ID4gLSAgICByZXR1cm4gcmM7Cj4g PiArICAgIGFzc2VydChjdHgtPnNhdmUubnJfYmF0Y2hfcGZucyA8IE1BWF9CQVRDSF9TSVpFKTsK PiA+ICsgICAgY3R4LT5zYXZlLmJhdGNoX3BmbnNbY3R4LT5zYXZlLm5yX2JhdGNoX3BmbnMrK10g PSBwZm47Cj4gPiAgfQo+ID4gIAo+ID4gIC8qCj4gPiBAQCAtMzUyLDEwICszNjEsMTUgQEAgc3Rh dGljIGludCBzdXNwZW5kX2RvbWFpbihzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4KQo+ID4gICAq IFNlbmQgYSBzdWJzZXQgb2YgcGFnZXMgaW4gdGhlIGd1ZXN0cyBwMm0sIGFjY29yZGluZyB0byB0 aGUgZGlydHkgYml0bWFwLgo+ID4gICAqIFVzZWQgZm9yIGVhY2ggc3Vic2VxdWVudCBpdGVyYXRp b24gb2YgdGhlIGxpdmUgbWlncmF0aW9uIGxvb3AuCj4gPiAgICoKPiA+ICsgKiBEdXJpbmcgdGhl IHByZWNvcHkgc3RhZ2Ugb2YgYSBsaXZlIG1pZ3JhdGlvbiwgdGVzdCB0aGUgdXNlci1zdXBwbGll ZAo+ID4gKyAqIHBvbGljeSBmdW5jdGlvbiBhZnRlciBlYWNoIGJhdGNoIG9mIHBhZ2VzIGFuZCBj dXQgb2ZmIHRoZSBvcGVyYXRpb24KPiA+ICsgKiBlYXJseSBpZiBpbmRpY2F0ZWQuICBVbmxlc3Mg YWJvcnRpbmcsIHRoZSBkaXJ0eSBwYWdlcyByZW1haW5pbmcgaW4gdGhpcyByb3VuZAo+ID4gKyAq IGFyZSB0cmFuc2ZlcnJlZCBpbnRvIHRoZSBkZWZlcnJlZF9wYWdlcyBiaXRtYXAuCj4gCj4gSXMg dGhpcyBhY3R1YWxseSBhIHNlbnNpYmxlIHRoaW5nIHRvIGRvPyAgT24gaXRlcmF0aW9uIDAsIHRo aXMgaXMgZ29pbmcKPiB0byBiZSBhIHBoZW5vbWVuYWwgbnVtYmVyIG9mIFJQQyBjYWxscywgd2hp Y2ggYXJlIGFsbCBnb2luZyB0byBtYWtlIHRoZQo+IHNhbWUgZGVjaXNpb24uCgpXaXRoIHRoZSBl eGlzdGluZyBwb2xpY3k/ICBOby4gIEhvd2V2ZXIsIHRoZSBncmFuZCBpZGVhIGlzIHRvIHBlcm1p dCBvdGhlcgpwb2xpY2llcyB3aGVyZSB0aGlzIGRvZXMgbWFrZSBzZW5zZS4gIEFzIGFuIGV4YW1w bGUsIEkgdGhpbmsgaXQgd291bGQgYmUgcmVhbGx5CnVzZWZ1bCBmb3IgdXNlcnMgdG8gYmUgYWJs ZSB0byBzcGVjaWZ5IGEgdGltZW91dCwgaW4gc2Vjb25kcywgZm9yIHRoZSBwcmVjb3B5CnBoYXNl LCBhZnRlciB3aGljaCB0aGUgbWlncmF0aW9uIGFkdmFuY2VzIHRvIGl0cyBuZXh0IHBoYXNlIChJ J2xsIGVsYWJvcmF0ZSBtb3JlCm9uIHRoaXMgaW4gdGhlIG90aGVyIGRpc2N1c3Npb24gdGhyZWFk KS4KCkl0J3MgdHJ1ZSB0aGF0IHRoaXMgbWVhbnMgYSBsb3Qgb2YgUlBDLiAgVGhlIGhvcGUgaXMg dGhhdCB0aGUgY29zdCBvZiBlYWNoIFJQQwpzaG91bGQgYmUgbmVnbGlnaWJsZSBpbiBjb21wYXJp c29uIHRvIGEgNE1CIHN5bmNocm9ub3VzIG5ldHdvcmsgY29weS4KCj4gCj4gPiArICoKPiA+ICAg KiBCaXRtYXAgaXMgYm91bmRlZCBieSBwMm1fc2l6ZS4KPiA+ICAgKi8KPiA+ICBzdGF0aWMgaW50 IHNlbmRfZGlydHlfcGFnZXMoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbnRyaWVzKQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVudHJpZXMsIGJvb2wgcHJlY29weSkK PiAKPiBTaG91bGRuJ3QgdGhpcyBwcmVjb3B5IGJvb2xlYW4gYmUgc29tZSBraW5kIG9mIHN0YXRl IHZhcmlhYmxlIGluIGN0eCA/CgpJIHN1cHBvc2UgaXQgY291bGQgYmUuICBJIHdhcyBhIGJpdCB3 b3JyaWVkIHRoYXQgdGhlcmUgd291bGQgYmUgb2JqZWN0aW9ucyB0bwpwaWxpbmcgdG9vIG1hbnkg YWRkaXRpb25hbCB2YXJpYWJsZXMgaW50byB0aGUgY29udGV4dCwgYmVjYXVzZSBlYWNoIGlzCmVz c2VudGlhbGx5IGFuIGltcGxpY2l0IGV4dHJhIHBhcmFtZXRlciB0byBldmVyeSBmdW5jdGlvbiBo ZXJlLgoKPiAKPiA+ICB7Cj4gPiAgICAgIHhjX2ludGVyZmFjZSAqeGNoID0gY3R4LT54Y2g7Cj4g PiAgICAgIHhlbl9wZm5fdCBwOwo+ID4gQEAgLTM2NCwzMSArMzc4LDU3IEBAIHN0YXRpYyBpbnQg c2VuZF9kaXJ0eV9wYWdlcyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LAo+ID4gICAgICBERUNM QVJFX0hZUEVSQ0FMTF9CVUZGRVJfU0hBRE9XKHVuc2lnbmVkIGxvbmcsIGRpcnR5X2JpdG1hcCwK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5zYXZlLmRpcnR5 X2JpdG1hcF9oYnVmKTsKPiA+ICAKPiA+IC0gICAgZm9yICggcCA9IDAsIHdyaXR0ZW4gPSAwOyBw IDwgY3R4LT5zYXZlLnAybV9zaXplOyArK3AgKQo+ID4gKyAgICBpbnQgKCpwcmVjb3B5X3BvbGlj eSkoc3RydWN0IHByZWNvcHlfc3RhdHMsIHZvaWQgKikgPQo+ID4gKyAgICAgICAgY3R4LT5zYXZl LmNhbGxiYWNrcy0+cHJlY29weV9wb2xpY3k7Cj4gPiArICAgIHZvaWQgKmRhdGEgPSBjdHgtPnNh dmUuY2FsbGJhY2tzLT5kYXRhOwo+ID4gKwo+ID4gKyAgICBhc3NlcnQoYmF0Y2hfZW1wdHkoY3R4 KSk7Cj4gPiArICAgIGZvciAoIHAgPSAwLCB3cml0dGVuID0gMDsgcCA8IGN0eC0+c2F2ZS5wMm1f c2l6ZTsgKQo+IAo+IFRoaXMgbG9va3Mgc3VzcGljaW91cyB3aXRob3V0IGFuIGluY3JlbWVudC4g IENvbmNlcHR1YWxseSwgaXQgbWlnaHQgYmUKPiBiZXR0ZXIgYXMgYSBkbyB7fSB3aGlsZSAoIGRl Y2lzaW9uID09IFhHU19QT0xJQ1lfQ09OVElOVUVfUFJFQ09QWSApOyBsb29wPwoKU3VyZSwgSSB0 aGluayB0aGF0IHdvdWxkIHJlYWQganVzdCBmaW5lIHRvby4KPiAKPiA+ICAgICAgewo+ID4gLSAg ICAgICAgaWYgKCAhdGVzdF9iaXQocCwgZGlydHlfYml0bWFwKSApCj4gPiAtICAgICAgICAgICAg Y29udGludWU7Cj4gPiArICAgICAgICBpZiAoIGN0eC0+c2F2ZS5saXZlICYmIHByZWNvcHkgKQo+ ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIGN0eC0+c2F2ZS5wb2xpY3lfZGVjaXNpb24g PSBwcmVjb3B5X3BvbGljeShjdHgtPnNhdmUuc3RhdHMsIGRhdGEpOwo+IAo+IE5ld2xpbmUgaGVy ZSBwbGVhc2UuCj4gCj4gPiArICAgICAgICAgICAgaWYgKCBjdHgtPnNhdmUucG9saWN5X2RlY2lz aW9uID09IFhHU19QT0xJQ1lfQUJPUlQgKQo+ID4gKyAgICAgICAgICAgIHsKPiAKPiBQbGVhc2Ug YnV0IGEgbG9nIG1lc3NhZ2UgaGVyZSBpbmRpY2F0aW5nIHRoYXQgYWJvcnQgaGFzIGJlZW4gcmVx dWVzdGVkLiAKPiBPdGhlcndpc2UsIHRoZSBtaWdyYXRpb24gd2lsbCBnaXZlIHVwIHdpdGggYSBm YWlsdXJlIGFuZCBubyBvYnZpb3VzCj4gaW5kaWNhdGlvbiB3aHkuCj4gCj4gPiArICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgZWxz ZSBpZiAoIGN0eC0+c2F2ZS5wb2xpY3lfZGVjaXNpb24gIT0gWEdTX1BPTElDWV9DT05USU5VRV9Q UkVDT1BZICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiArICAgICAgICAgICAgICAgIC8qIEFueSBv dXRzdGFuZGluZyBkaXJ0eSBwYWdlcyBhcmUgbm93IGRlZmVycmVkIHVudGlsIHRoZSBuZXh0Cj4g PiArICAgICAgICAgICAgICAgICAqIHBoYXNlIG9mIHRoZSBtaWdyYXRpb24uICovCj4gCj4gLyoK PiAgKiBUaGUgY29tbWVudCBzdHlsZSBmb3IgbXVsdGlsaW5lIGNvbW1lbnRzCj4gICogaXMgbGlr ZSB0aGlzLgo+ICAqLwo+IAo+ID4gKyAgICAgICAgICAgICAgICBiaXRtYXBfb3IoY3R4LT5zYXZl LmRlZmVycmVkX3BhZ2VzLCBkaXJ0eV9iaXRtYXAsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICBjdHgtPnNhdmUucDJtX3NpemUpOwo+ID4gKyAgICAgICAgICAgICAgICBpZiAoIGVudHJp ZXMgPiB3cml0dGVuICkKPiA+ICsgICAgICAgICAgICAgICAgICAgIGN0eC0+c2F2ZS5ucl9kZWZl cnJlZF9wYWdlcyArPSBlbnRyaWVzIC0gd3JpdHRlbjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg ICAgZ290byBkb25lOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsgICAgICAgIH0KPiA+ICAKPiA+ IC0gICAgICAgIHJjID0gYWRkX3RvX2JhdGNoKGN0eCwgcCk7Cj4gPiArICAgICAgICBmb3IgKCA7 IHAgPCBjdHgtPnNhdmUucDJtX3NpemUgJiYgIWJhdGNoX2Z1bGwoY3R4KTsgKytwICkKPiA+ICsg ICAgICAgIHsKPiA+ICsgICAgICAgICAgICBpZiAoIHRlc3RfYW5kX2NsZWFyX2JpdChwLCBkaXJ0 eV9iaXRtYXApICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiArICAgICAgICAgICAgICAgIGFkZF90 b19iYXRjaChjdHgsIHApOwo+ID4gKyAgICAgICAgICAgICAgICArK3dyaXR0ZW47Cj4gPiArICAg ICAgICAgICAgICAgICsrY3R4LT5zYXZlLnN0YXRzLnRvdGFsX3dyaXR0ZW47Cj4gPiArICAgICAg ICAgICAgfQo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgcmMgPSBmbHVzaF9iYXRj aChjdHgpOwo+ID4gICAgICAgICAgaWYgKCByYyApCj4gPiAgICAgICAgICAgICAgcmV0dXJuIHJj Owo+ID4gIAo+ID4gLSAgICAgICAgLyogVXBkYXRlIHByb2dyZXNzIGV2ZXJ5IDRNQiB3b3J0aCBv ZiBtZW1vcnkgc2VudC4gKi8KPiA+IC0gICAgICAgIGlmICggKHdyaXR0ZW4gJiAoKDFVIDw8ICgy MiAtIDEyKSkgLSAxKSkgPT0gMCApCj4gPiAtICAgICAgICAgICAgeGNfcmVwb3J0X3Byb2dyZXNz X3N0ZXAoeGNoLCB3cml0dGVuLCBlbnRyaWVzKTsKPiA+IC0KPiA+IC0gICAgICAgICsrd3JpdHRl bjsKPiA+ICsgICAgICAgIC8qIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBldmVyeSBiYXRjaCAoNE1C KSB3b3J0aCBvZiBtZW1vcnkgc2VudC4gKi8KPiA+ICsgICAgICAgIHhjX3JlcG9ydF9wcm9ncmVz c19zdGVwKHhjaCwgd3JpdHRlbiwgZW50cmllcyk7Cj4gPiAgICAgIH0KPiA+ICAKPiA+IC0gICAg cmMgPSBmbHVzaF9iYXRjaChjdHgpOwo+ID4gLSAgICBpZiAoIHJjICkKPiA+IC0gICAgICAgIHJl dHVybiByYzsKPiA+IC0KPiA+ICAgICAgaWYgKCB3cml0dGVuID4gZW50cmllcyApCj4gPiAgICAg ICAgICBEUFJJTlRGKCJCaXRtYXAgY29udGFpbmVkIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVk Li4uIik7Cj4gPiAgCj4gPiAgICAgIHhjX3JlcG9ydF9wcm9ncmVzc19zdGVwKHhjaCwgZW50cmll cywgZW50cmllcyk7Cj4gPiAgCj4gPiArIGRvbmU6Cj4gPiAgICAgIHJldHVybiBjdHgtPnNhdmUu b3BzLmNoZWNrX3ZtX3N0YXRlKGN0eCk7Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTM5NiwxNCArNDM2 LDE0IEBAIHN0YXRpYyBpbnQgc2VuZF9kaXJ0eV9wYWdlcyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAq Y3R4LAo+ID4gICAqIFNlbmQgYWxsIHBhZ2VzIGluIHRoZSBndWVzdHMgcDJtLiAgVXNlZCBhcyB0 aGUgZmlyc3QgaXRlcmF0aW9uIG9mIHRoZSBsaXZlCj4gPiAgICogbWlncmF0aW9uIGxvb3AsIGFu ZCBmb3IgYSBub24tbGl2ZSBzYXZlLgo+ID4gICAqLwo+ID4gLXN0YXRpYyBpbnQgc2VuZF9hbGxf cGFnZXMoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiA+ICtzdGF0aWMgaW50IHNlbmRfYWxs X3BhZ2VzKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgsIGJvb2wgcHJlY29weSkKPiA+ICB7Cj4g PiAgICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JVRkZFUl9TSEFET1codW5zaWduZWQgbG9uZywgZGly dHlfYml0bWFwLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgt PnNhdmUuZGlydHlfYml0bWFwX2hidWYpOwo+ID4gIAo+ID4gICAgICBiaXRtYXBfc2V0KGRpcnR5 X2JpdG1hcCwgY3R4LT5zYXZlLnAybV9zaXplKTsKPiA+ICAKPiA+IC0gICAgcmV0dXJuIHNlbmRf ZGlydHlfcGFnZXMoY3R4LCBjdHgtPnNhdmUucDJtX3NpemUpOwo+ID4gKyAgICByZXR1cm4gc2Vu ZF9kaXJ0eV9wYWdlcyhjdHgsIGN0eC0+c2F2ZS5wMm1fc2l6ZSwgcHJlY29weSk7Cj4gPiAgfQo+ ID4gIAo+ID4gIHN0YXRpYyBpbnQgZW5hYmxlX2xvZ2RpcnR5KHN0cnVjdCB4Y19zcl9jb250ZXh0 ICpjdHgpCj4gPiBAQCAtNDQ2LDggKzQ4Niw3IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3Byb2dyZXNz X3N0cmluZyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LAo+ID4gICAgICB4Y19pbnRlcmZhY2Ug KnhjaCA9IGN0eC0+eGNoOwo+ID4gICAgICBjaGFyICpuZXdfc3RyID0gTlVMTDsKPiA+ICAKPiA+ IC0gICAgaWYgKCBhc3ByaW50ZigmbmV3X3N0ciwgIkZyYW1lcyBpdGVyYXRpb24gJXUgb2YgJXUi LAo+ID4gLSAgICAgICAgICAgICAgICAgIGl0ZXIsIGN0eC0+c2F2ZS5tYXhfaXRlcmF0aW9ucykg PT0gLTEgKQo+ID4gKyAgICBpZiAoIGFzcHJpbnRmKCZuZXdfc3RyLCAiRnJhbWVzIGl0ZXJhdGlv biAldSIsIGl0ZXIpID09IC0xICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgUEVSUk9SKCJVbmFi bGUgdG8gYWxsb2NhdGUgbmV3IHByb2dyZXNzIHN0cmluZyIpOwo+ID4gICAgICAgICAgcmV0dXJu IC0xOwo+ID4gQEAgLTQ2OCwyMCArNTA3LDQ3IEBAIHN0YXRpYyBpbnQgc2VuZF9tZW1vcnlfbGl2 ZShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4KQo+ID4gICAgICB4Y19pbnRlcmZhY2UgKnhjaCA9 IGN0eC0+eGNoOwo+ID4gICAgICB4Y19zaGFkb3dfb3Bfc3RhdHNfdCBzdGF0cyA9IHsgMCwgY3R4 LT5zYXZlLnAybV9zaXplIH07Cj4gPiAgICAgIGNoYXIgKnByb2dyZXNzX3N0ciA9IE5VTEw7Cj4g PiAtICAgIHVuc2lnbmVkIHg7Cj4gPiAgICAgIGludCByYzsKPiA+ICAKPiA+ICsgICAgREVDTEFS RV9IWVBFUkNBTExfQlVGRkVSX1NIQURPVyh1bnNpZ25lZCBsb25nLCBkaXJ0eV9iaXRtYXAsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+c2F2ZS5kaXJ0eV9i aXRtYXBfaGJ1Zik7Cj4gPiArCj4gPiArICAgIGludCAoKnByZWNvcHlfcG9saWN5KShzdHJ1Y3Qg cHJlY29weV9zdGF0cywgdm9pZCAqKSA9Cj4gPiArICAgICAgICBjdHgtPnNhdmUuY2FsbGJhY2tz LT5wcmVjb3B5X3BvbGljeTsKPiA+ICsgICAgdm9pZCAqZGF0YSA9IGN0eC0+c2F2ZS5jYWxsYmFj a3MtPmRhdGE7Cj4gPiArCj4gPiAgICAgIHJjID0gdXBkYXRlX3Byb2dyZXNzX3N0cmluZyhjdHgs ICZwcm9ncmVzc19zdHIsIDApOwo+ID4gICAgICBpZiAoIHJjICkKPiA+ICAgICAgICAgIGdvdG8g b3V0Owo+ID4gIAo+ID4gLSAgICByYyA9IHNlbmRfYWxsX3BhZ2VzKGN0eCk7Cj4gPiArI2RlZmlu ZSBDT05TVUxUX1BPTElDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+IAo+IDooCj4gCj4gVGhlIHJlYXNvbiB0aGlzIGNvZGUgaXMgcmVh ZGFibGUgYW5kIChob3BlZnVsbHkpIGVhc3kgdG8gZm9sbG93LCBpcyBkdWUKPiBpbiBsYXJnZSBw YXJ0IHRvIGEgbGFjayBvZiBtYWNyb3MgbGlrZSB0aGlzIHRyeWluZyB0byBoaWRlIHdoYXQgaXMK PiBhY3R1YWxseSBnb2luZyBvbi4KCk9rYXksIEknbGwgaW5saW5lIGl0LiAgSSBndWVzcyBJIHRo b3VnaHQgSSBtaWdodCBnZXQgYXdheSB3aXRoIGl0IGJlY2F1c2UgaXQncwpuZXZlciBtb3JlIHRo YW4gYSBzY3JlZW4gYnVmZmVyIGF3YXkgZnJvbSBpdHMgY2FsbHNpdGVzLgoKPiAKPiA+ICsgICAg ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgICBpZiAoIGN0eC0+c2F2ZS5wb2xpY3lfZGVj aXNpb24gPT0gWEdTX1BPTElDWV9BQk9SVCApICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAg ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgICAgICByYyA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAg ICAgICAgZ290byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAg IGVsc2UgaWYgKCBjdHgtPnNhdmUucG9saWN5X2RlY2lzaW9uICE9IFhHU19QT0xJQ1lfQ09OVElO VUVfUFJFQ09QWSApICBcCj4gPiArICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICAg ICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgICAgICBnb3RvIG91dDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ID4gKyAgICB9IHdoaWxlICgwKQo+ID4gKwo+ID4gKyAgICBjdHgtPnNh dmUuc3RhdHMgPSAoc3RydWN0IHByZWNvcHlfc3RhdHMpCj4gPiArICAgICAgICB7Cj4gPiArICAg ICAgICAgICAgLml0ZXJhdGlvbiAgICAgPSAwLAo+ID4gKyAgICAgICAgICAgIC50b3RhbF93cml0 dGVuID0gMCwKPiA+ICsgICAgICAgICAgICAuZGlydHlfY291bnQgICA9IC0xCj4gPiArICAgICAg ICB9Owo+ID4gKyAgICByYyA9IHNlbmRfYWxsX3BhZ2VzKGN0eCwgLyogcHJlY29weSAqLyB0cnVl KTsKPiA+ICAgICAgaWYgKCByYyApCj4gPiAgICAgICAgICBnb3RvIG91dDsKPiA+ICAKPiA+IC0g ICAgZm9yICggeCA9IDE7Cj4gPiAtICAgICAgICAgICgoeCA8IGN0eC0+c2F2ZS5tYXhfaXRlcmF0 aW9ucykgJiYKPiA+IC0gICAgICAgICAgIChzdGF0cy5kaXJ0eV9jb3VudCA+IGN0eC0+c2F2ZS5k aXJ0eV90aHJlc2hvbGQpKTsgKyt4ICkKPiA+ICsgICAgLyogc2VuZF9hbGxfcGFnZXMoKSBoYXMg dXBkYXRlZCB0aGUgc3RhdHMgKi8KPiA+ICsgICAgQ09OU1VMVF9QT0xJQ1k7Cj4gPiArCj4gPiAr ICAgIGZvciAoIGN0eC0+c2F2ZS5zdGF0cy5pdGVyYXRpb24gPSAxOyA7ICsrY3R4LT5zYXZlLnN0 YXRzLml0ZXJhdGlvbiApCj4gCj4gQWdhaW4sIHdpdGhvdXQgYW4gZXhpdCBjb25kaXRpb24sIHRo aXMgbG9va3Mgc3VzcGljaW91cy4KClN1cmUsIEknbGwgdHVybiB0aGlzIG9uZSBpbnRvIGEgZG8g e30gd2hpbGUoKSB0b28uCgpUaGFuayB5b3UgZm9yIHRoZSByZXZpZXchCgpKb3NoCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4t ZGV2ZWwK