From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from ptx.hi.pengutronix.de ([2001:6f8:1178:2:5054:ff:fec0:8e10] ident=Debian-exim) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1WQD7h-0007Dv-Ux for ptxdist@pengutronix.de; Wed, 19 Mar 2014 10:49:21 +0100 Received: from mol by ptx.hi.pengutronix.de with local (Exim 4.80) (envelope-from ) id 1WQD7h-000621-T5 for ptxdist@pengutronix.de; Wed, 19 Mar 2014 10:49:21 +0100 Date: Wed, 19 Mar 2014 10:49:21 +0100 From: Michael Olbrich Message-ID: <20140319094921.GH5223@pengutronix.de> References: <1395220750-21683-1-git-send-email-post@lespocky.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1395220750-21683-1-git-send-email-post@lespocky.de> Subject: Re: [ptxdist] [PATCH] add some patches with fixes, partly queued upstream Reply-To: ptxdist@pengutronix.de List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: ptxdist-bounces@pengutronix.de Errors-To: ptxdist-bounces@pengutronix.de To: ptxdist@pengutronix.de T24gV2VkLCBNYXIgMTksIDIwMTQgYXQgMTA6MTk6MDlBTSArMDEwMCwgQWxleGFuZGVyIERhaGwg d3JvdGU6Cj4gVXBzdHJlYW0gbWlncmF0ZWQgdGhlIG9sZCBjb2RlIGJhc2UgdG8gZ2l0aHViIGlu IDIwMTE6Cj4gaHR0cHM6Ly9naXRodWIuY29tL3JhZmFlbHN0ZWlsL2xpYmNnaSDigJMgSSBnb3Qg dGhlIG9sZCBwdHhkaXN0IHBhdGNoZXMKPiBtZXJnZWQgaW4gMjAxMiBhbmQgdHdvIGZpeGVzIGZv ciBtZW0gbGVha2VzIGFzIHdlbGwuIFRvZGF5IEkgbWFkZSBwdWxsCj4gcmVxdWVzdHMgZm9yIE1p Y2hhZWwncyBwYXRjaCBmcm9tIGxhc3QgeWVhciBhbmQgYW5vdGhlciBmaXggb2YgbWluZSBmcm9t Cj4gdG9kYXkuIEhvd2V2ZXIgSSBkb3VidCB0aGUgbWFpbnRhaW5lciB3aWxsIGRvIGFub3RoZXIg cmVsZWFzZSBzb29uIG9yCj4gZXZlbiBhdCBhbGwsIHNvIEkgYWRkIG15IHBhdGNoZXMgaGVyZSwg dG9vLiBJJ20gc29ycnksIEkgc3F1ZWV6ZWQgdGhlCj4gcHR4ZGlzdCBwYXRjaGVzIGludG8gb25l IHVwc3RyZWFtLCBzbyBSb2JlcnQgbG9zdCBoaXMgY3JlZGl0IHRoZXJlLCBidXQKPiB0aGlzIGlz IG5vdCB0b3BpYyBvZiB0aGlzIHNlcmllcyBkaXNjdXNzaW9uLiA7LSkKCkNhbiB5b3UgcmVwbGFj ZSBvdXIgcGF0Y2hlcyB3aXRoIHdoYXRldmVyIHdhcyBhcHBsaWVkIHVwc3RyZWFtPyBUaGF0IHdp bGwKbWFrZSBpdCBlYXNpZXIgaW4gdGhlIGZ1dHVyZSBpZiB3ZSBldmVyIGdldCBhIHJlbGVhc2Uu CkFuZCBtYXJrIHRoZW0gYXMgdXBzdHJlYW0gKGxpa2UgcGF0Y2hlcy9vcGtnLXV0aWxzLXI0NzQ3 L3NlcmllcyBmb3IKZXhhbXBsZSkuCgpNaWNoYWVsCgo+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRl ciBEYWhsIDxwb3N0QGxlc3BvY2t5LmRlPgo+IC0tLQo+ICAuLi5saW5nLXdoaXRlc3BhY2UtbXkt ZWRpdG9yLXdvdWxkLWRvLXRoaXMtYS5wYXRjaCB8IDEzMzQgKysrKysrKysrKysrKysrKysrKysK PiAgLi4uLWFsbG9jYXRlZC1ieS11bmVzY2FwZV9zcGVjaWFsX2NoYXJzLWFmdGUucGF0Y2ggfCAg IDY0ICsKPiAgLi4uLWFsbG9jYXRlZC1mb3ItcmVhZGluZy1hbmQtcGFyc2luZy1QT1NULWQucGF0 Y2ggfCAgIDMyICsKPiAgLi4uLzAwMTQtRklMRS1yZXF1aXJlcy1pbmNsdWRpbmctc3RkaW8ucGF0 Y2ggICAgICAgfCAgIDIxICsKPiAgLi4ucGUtYnktb3B0aW1pemluZy1oZXh0YWJsZS1pbml0LWFu ZC1hY2Nlc3MucGF0Y2ggfCAgIDkzICsrCj4gIHBhdGNoZXMvbGliY2dpLTEuMC9zZXJpZXMgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQo+ICA2IGZpbGVzIGNoYW5nZWQsIDE1NTAg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hl cy9saWJjZ2ktMS4wLzAwMTEtcmVtb3ZlLXRyYWlsaW5nLXdoaXRlc3BhY2UtbXktZWRpdG9yLXdv dWxkLWRvLXRoaXMtYS5wYXRjaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy9saWJjZ2kt MS4wLzAwMTItZnJlZS1tZW1vcnktYWxsb2NhdGVkLWJ5LXVuZXNjYXBlX3NwZWNpYWxfY2hhcnMt YWZ0ZS5wYXRjaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTMt ZnJlZS1tZW1vcnktYWxsb2NhdGVkLWZvci1yZWFkaW5nLWFuZC1wYXJzaW5nLVBPU1QtZC5wYXRj aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTQtRklMRS1yZXF1 aXJlcy1pbmNsdWRpbmctc3RkaW8ucGF0Y2gKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMv bGliY2dpLTEuMC8wMDE1LWZpeC11bmVzY2FwZS1ieS1vcHRpbWl6aW5nLWhleHRhYmxlLWluaXQt YW5kLWFjY2Vzcy5wYXRjaAo+IAo+IGRpZmYgLS1naXQgYS9wYXRjaGVzL2xpYmNnaS0xLjAvMDAx MS1yZW1vdmUtdHJhaWxpbmctd2hpdGVzcGFjZS1teS1lZGl0b3Itd291bGQtZG8tdGhpcy1hLnBh dGNoIGIvcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTEtcmVtb3ZlLXRyYWlsaW5nLXdoaXRlc3BhY2Ut bXktZWRpdG9yLXdvdWxkLWRvLXRoaXMtYS5wYXRjaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uY2IwMzgzYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9wYXRjaGVzL2xp YmNnaS0xLjAvMDAxMS1yZW1vdmUtdHJhaWxpbmctd2hpdGVzcGFjZS1teS1lZGl0b3Itd291bGQt ZG8tdGhpcy1hLnBhdGNoCj4gQEAgLTAsMCArMSwxMzM0IEBACj4gK0Zyb206IEFsZXhhbmRlciBE YWhsIDxwb3N0QGxlc3BvY2t5LmRlPgo+ICtEYXRlOiBXZWQsIDI0IE9jdCAyMDEyIDExOjIwOjI0 ICswMjAwCj4gK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKG15 IGVkaXRvciB3b3VsZCBkbyB0aGlzIGFsbCB0aGUKPiArIHRpbWUpCj4gKwo+ICstLS0KPiArIHNy Yy9iYXNlNjQuYyAgfCAgIDYwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCj4gKyBzcmMv Y2dpLmMgICAgIHwgICA2MiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiArIHNyYy9j Z2kuaCAgICAgfCAgICA4ICsrLS0KPiArIHNyYy9jb29raWUuYyAgfCAgIDIwICsrKysrLS0tLS0K PiArIHNyYy9lcnJvci5jICAgfCAgICAyICstCj4gKyBzcmMvZ2VuZXJhbC5jIHwgICA1MCArKysr KysrKysrKystLS0tLS0tLS0tLS0KPiArIHNyYy9saXN0LmMgICAgfCAgIDI0ICsrKysrKy0tLS0t LQo+ICsgc3JjL21kNS5jICAgICB8ICAgIDYgKy0tCj4gKyBzcmMvc2Vzc2lvbi5jIHwgIDExOCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiArIHNyYy9zdHJpbmcuYyAgfCAgIDc0ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLQo+ICsgMTAgZmlsZXMgY2hhbmdlZCwgMjEyIGluc2VydGlvbnMoKyksIDIxMiBkZWxldGlv bnMoLSkKPiArCj4gK2RpZmYgLS1naXQgYS9zcmMvYmFzZTY0LmMgYi9zcmMvYmFzZTY0LmMKPiAr aW5kZXggYTZlNWQ1YS4uOTIzMWY4NCAxMDA2NDQKPiArLS0tIGEvc3JjL2Jhc2U2NC5jCj4gKysr KyBiL3NyYy9iYXNlNjQuYwo+ICtAQCAtMSw2ICsxLDYgQEAKPiArIC8qCj4gKyAJTGliQ0dJIGJh c2U2NCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGlzIGV4dHJlbWx5IGJhc2VkIG9uIHRoZSB3b3Jr IG9mIEJvYiBUb3dlciwKPiArLQlmcm9tIGl0cyBwcm9qZWMgaHR0cDovL2Jhc2U2NC5zb3VyY2Vm b3JnZS5uZXQuIFRoZSBmdW5jdGlvbnMgd2VyZSBhIGJpdCBtb2RpY2F0ZWQuIAo+ICsrCWZyb20g aXRzIHByb2plYyBodHRwOi8vYmFzZTY0LnNvdXJjZWZvcmdlLm5ldC4gVGhlIGZ1bmN0aW9ucyB3 ZXJlIGEgYml0IG1vZGljYXRlZC4KPiArIAlBYm92ZSBpcyB0aGUgTUlUIGxpY2Vuc2UgZnJvbSBi NjQuYyBvcmlnaW5hbCBjb2RlOgo+ICsgCj4gKyBMSUNFTkNFOiAgICAgICAgQ29weXJpZ2h0IChj KSAyMDAxIEJvYiBUcm93ZXIsIFRyYW50b3IgU3RhbmRhcmQgU3lzdGVtcyBJbmMuCj4gK0BAIC00 NiwxOSArNDYsMTkgQEAgdm9pZCBlbmNvZGVibG9jayggdW5zaWduZWQgY2hhciBpblszXSwgdW5z aWduZWQgY2hhciBvdXRbNF0sIGludCBsZW4gKQo+ICsgfQo+ICsgCj4gKyB2b2lkIGRlY29kZWJs b2NrKCB1bnNpZ25lZCBjaGFyIGluWzRdLCB1bnNpZ25lZCBjaGFyIG91dFszXSApCj4gKy17ICAg Cj4gKyt7Cj4gKyAJb3V0WzBdID0gKHVuc2lnbmVkIGNoYXIgKSAoaW5bMF0gPDwgMiB8IGluWzFd ID4+IDQpOwo+ICsgCW91dFsxXSA9ICh1bnNpZ25lZCBjaGFyICkgKGluWzFdIDw8IDQgfCBpblsy XSA+PiAyKTsKPiArIAlvdXRbMl0gPSAodW5zaWduZWQgY2hhciApICgoKGluWzJdIDw8IDYpICYg MHhjMCkgfCBpblszXSk7Cj4gKyB9Cj4gKyAKPiArLS8qKiAKPiArKy8qKgo+ICsgKiBAaW5ncm91 cCBsaWJjZ2lfc3RyaW5nCj4gKyAqLwo+ICsgCj4gKyAvKioKPiArICogRW5jb2RlcyBhIGdpdmVu IHRyaW5nIHRvIGl0cyBiYXNlNjQgZm9ybS4KPiArLSogCj4gKysqCj4gKyAqIEBwYXJhbSAqc3Ry IFN0cmluZyB0byBjb252ZXJ0Cj4gKyAqIEByZXR1cm4gQmFzZTY0IGVuY29kZWQgU3RyaW5nCj4g KyAqIEBzZWUgc3RyX2Jhc2U2NF9kZWNvZGUKPiArQEAgLTY5LDg0ICs2OSw4NCBAQCBjaGFyICpz dHJfYmFzZTY0X2VuY29kZShjaGFyICpzdHIpCj4gKyAJdW5zaWduZWQgaW50IGksIGxlbiwgYmxv Y2tzb3V0ID0gMCwgbGluZXNpemUgPSBzdHJsZW4oc3RyKTsKPiArIAljaGFyICp0bXAgPSBzdHI7 Cj4gKyAJY2hhciAqcmVzdWx0ID0gKGNoYXIgKiltYWxsb2MoKGxpbmVzaXplICsgMyAtIGxpbmVz aXplICUgMykgKiA0IC8gMyArIDEpOwo+ICstCQo+ICsrCj4gKyAJaWYgKCFyZXN1bHQpCj4gKyAJ CWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIkZhaWxlZCB0byBhbGxvYyBtZW1vcnkgYXQgYmFzZTY0 LmMiKTsKPiArLQkJCj4gKysKPiArIAl3aGlsZSAoKnRtcCkgewo+ICsgCQlsZW4gPSAwOwo+ICsg Cj4gKyAJCWZvciggaSA9IDA7IGkgPCAzOyBpKysgKSB7Cj4gKyAJCQlpbltpXSA9ICh1bnNpZ25l ZCBjaGFyKSgqdG1wKTsKPiArLQkJCQo+ICsrCj4gKyAJCQlpZiAoKnRtcCkKPiArIAkJCQlsZW4r KzsKPiArIAkJCWVsc2UKPiArIAkJCQlpbltpXSA9IDA7Cj4gKy0JCQkKPiArKwo+ICsgCQkJdG1w Kys7Cj4gKyAJCX0KPiArLQkJCj4gKysKPiArIAkJaWYoIGxlbiApIHsKPiArIAkJCWVuY29kZWJs b2NrKCBpbiwgb3V0LCBsZW4pOwo+ICstCQkKPiArLQkJCWZvciggaSA9IDA7IGkgPCA0OyBpKysg KSAKPiArKwo+ICsrCQkJZm9yKCBpID0gMDsgaSA8IDQ7IGkrKyApCj4gKyAJCQkJcmVzdWx0W2Js b2Nrc291dCsrXSA9IG91dFtpXTsKPiArLQkJfQkJCj4gKysJCX0KPiArIAl9Cj4gKy0JCj4gKysK PiArIAlyZXN1bHRbYmxvY2tzb3V0XSA9ICdcMCc7Cj4gKyAJcmV0dXJuIHJlc3VsdDsKPiArIH0K PiArIAo+ICstLyoqIAo+ICsrLyoqCj4gKyAqIEBpbmdyb3VwIGxpYmNnaV9zdHJpbmcKPiArICov Cj4gKyAKPiArIC8qKgo+ICsgKiBEZWNvZGUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuCj4gKy0q IAo+ICsrKgo+ICsgKiBAcGFyYW0gKnN0ciBFbmNvZGVkIFN0cmluZyB0byBkZWNvZGUKPiArICog QHJldHVybiBUaGUgZGVjb2RlZCBzdHJpbmcKPiArICogQHNlZSBzdHJfYmFzZTY0X2VuY29kZQo+ ICsgKiovCj4gKyBjaGFyICpzdHJfYmFzZTY0X2RlY29kZShjaGFyICpzdHIpCj4gKy17CQo+ICsr ewo+ICsgCXVuc2lnbmVkIGNoYXIgaW5bNF0sIG91dFszXSwgdjsKPiArIAl1bnNpZ25lZCBpbnQg aSwgbGVuLCBwb3MgPSAwOwo+ICsgCWNoYXIgKnRtcCA9IHN0cjsKPiArLQkKPiArKwo+ICsgCWNo YXIgKnJlc3VsdCA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7Cj4gKyAJaWYgKCFy ZXN1bHQpCj4gKyAJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIkZhaWxlZCB0byBhbGxvYyBtZW1v cnkgYXQgYmFzZTY0LmMiKTsKPiArLQkJCj4gKysKPiArIAl3aGlsZSgqdG1wKSB7Cj4gKyAJCWZv ciggbGVuID0gMCwgaSA9IDA7IGkgPCA0ICYmICp0bXA7IGkrKyApIHsKPiArIAkJCXYgPSAwOwo+ ICstCQkJCj4gKy0JCQl3aGlsZSgqdG1wICYmIHYgPT0gMCApIHsJCQkKPiArLQkJCQl2ID0gKHVu c2lnbmVkIGNoYXIpKCp0bXApOwkJCQkKPiArLQkJCQl2ID0gKHVuc2lnbmVkIGNoYXIpICgodiA8 IDQzIHx8IHYgPiAxMjIpID8gMCA6IGNkNjRbIHYgLSA0MyBdKTsJCQkJCj4gKy0JCQkJCj4gKysK PiArKwkJCXdoaWxlKCp0bXAgJiYgdiA9PSAwICkgewo+ICsrCQkJCXYgPSAodW5zaWduZWQgY2hh cikoKnRtcCk7Cj4gKysJCQkJdiA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPCA0MyB8fCB2ID4gMTIy KSA/IDAgOiBjZDY0WyB2IC0gNDMgXSk7Cj4gKysKPiArIAkJCQlpZiggdiApCj4gKyAJCQkJCXYg PSAodW5zaWduZWQgY2hhcikgKCh2ID09ICckJykgPyAwIDogdiAtIDYxKTsKPiArLQkJCQkJCj4g KysKPiArIAkJCQl0bXArKzsKPiArIAkJCX0KPiArLQkJCQo+ICsrCj4gKyAJCQlpZigqdG1wKSB7 Cj4gKyAJCQkJbGVuKys7Cj4gKy0JCQkJCj4gKy0JCQkJaWYoIHYgKSAKPiArKwo+ICsrCQkJCWlm KCB2ICkKPiArIAkJCQkJaW5baV0gPSAodW5zaWduZWQgY2hhcikgKHYgLSAxKTsKPiArIAkJCX0K PiArLQkJCWVsc2UgCj4gKysJCQllbHNlCj4gKyAJCQkJaW5baV0gPSAwOwo+ICsgCQl9Cj4gKy0J CQo+ICsrCj4gKyAJCWlmKGxlbikgewo+ICsgCQkJZGVjb2RlYmxvY2soIGluLCBvdXQgKTsKPiAr LQkJCQo+ICsrCj4gKyAJCQlmb3IoIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrICkKPiArIAkJCQly ZXN1bHRbcG9zKytdID0gb3V0W2ldOwo+ICsgCQl9Cj4gK2RpZmYgLS1naXQgYS9zcmMvY2dpLmMg Yi9zcmMvY2dpLmMKPiAraW5kZXggZWNhOWFjMi4uZTlkNzZhZSAxMDA2NDQKPiArLS0tIGEvc3Jj L2NnaS5jCj4gKysrKyBiL3NyYy9jZ2kuYwo+ICtAQCAtMjcsNyArMjcsNyBAQAo+ICsgI2luY2x1 ZGUgImNnaS5oIgo+ICsgI2luY2x1ZGUgImVycm9yLmgiCj4gKyAKPiArLS8vIFdob3cuLi4gaWYg aGV4dGFibGUgYXJyYXkgaGFzIGEgbGVuZ3RoIGxlc3MgdGhhbiAyNTYsIAo+ICsrLy8gV2hvdy4u LiBpZiBoZXh0YWJsZSBhcnJheSBoYXMgYSBsZW5ndGggbGVzcyB0aGFuIDI1NiwKPiArIC8vIHRo ZSBjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFycyBmdW5jdGlvbiB3aWxsIGZhaWwuICBBbmQgSSBk b24ndCBrbm93IHdoeQo+ICsgc3RhdGljIGludCBoZXh0YWJsZVsyNTZdOwo+ICsgCj4gK0BAIC02 MSwxMyArNjEsMTMgQEAgZm9ybXZhcnMgKnByb2Nlc3NfZGF0YShjaGFyICpxdWVyeSwgZm9ybXZh cnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0LCBjb25zdCBjaGEKPiArIAlhdXggPSBxdWVyeTsK PiArIAl3aGlsZSAoKnF1ZXJ5KSB7Cj4gKyAJCXBvc2l0aW9uID0gMDsKPiArLQkJCQkKPiArKwo+ ICsgCQlkYXRhID0gKGZvcm12YXJzICopbWFsbG9jKHNpemVvZihmb3JtdmFycykpOwo+ICsgCQlp ZiAoIWRhdGEpCj4gKyAJCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIsIF9f RklMRV9fLCBfX0xJTkVfXyk7Cj4gKy0JCQkKPiArLQkJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihm b3JtdmFycykpOwkJCQkJCQkKPiArLQkJCj4gKysKPiArKwkJbWVtc2V0KGRhdGEsIDAsIHNpemVv Zihmb3JtdmFycykpOwo+ICsrCj4gKyAJCS8vIFNjYW5zIHRoZSBzdHJpbmcgZm9yIHRoZSBuZXh0 ICdkZWxpbScgY2hhcmFjdGVyCj4gKyAJCXdoaWxlICgqYXV4ICYmICgqYXV4ICE9IGRlbGltKSkg ewo+ICsgCQkJcG9zaXRpb24rKzsKPiArQEAgLTg2LDcgKzg2LDcgQEAgZm9ybXZhcnMgKnByb2Nl c3NfZGF0YShjaGFyICpxdWVyeSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0LCBj b25zdCBjaGEKPiArIAo+ICsgCQlzdHJuY3B5KGRhdGEtPm5hbWUsIHF1ZXJ5LCBwb3NpdGlvbik7 Cj4gKyAJCWRhdGEtPm5hbWVbcG9zaXRpb25dID0gJ1wwJzsKPiArLQkJCj4gKysKPiArIAkJcXVl cnkgPSBhdXg7Cj4gKyAJCXBvc2l0aW9uID0gMDsKPiArIAkJd2hpbGUgKCphdXggJiYgKCphdXgg IT0gc2VwKSkgewo+ICtAQCAtOTcsMjcgKzk3LDI3IEBAIGZvcm12YXJzICpwcm9jZXNzX2RhdGEo Y2hhciAqcXVlcnksIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJzICoqbGFzdCwgY29uc3QgY2hh Cj4gKyAJCQkJCXBvc2l0aW9uKys7Cj4gKyAJCQkJfQo+ICsgCQkJfQo+ICstCQkJZWxzZQkJCQo+ ICsrCQkJZWxzZQo+ICsgCQkJCXBvc2l0aW9uKys7Cj4gKy0JCQkJCj4gKysKPiArIAkJCWF1eCsr Owo+ICsgCQkJaSsrOwo+ICsgCQl9Cj4gKy0JCQkJCj4gKysKPiArIAkJaWYgKCphdXgpIHsKPiAr IAkJCWF1eCsrOwo+ICsgCQkJaSsrOwo+ICsgCQl9Cj4gKy0JCQo+ICsrCj4gKyAJCWRhdGEtPnZh bHVlID0gKGNoYXIgKiltYWxsb2MocG9zaXRpb24rMSk7Cj4gKyAJCWlmIChkYXRhLT52YWx1ZSA9 PSBOVUxMKQo+ICsgCQkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiJXMsIGxpbmUgJXMiLCBfX0ZJ TEVfXywgX19MSU5FX18pOwo+ICsgCj4gKyAJCXN0cm5jcHkoZGF0YS0+dmFsdWUsIGNnaV91bmVz Y2FwZV9zcGVjaWFsX2NoYXJzKHF1ZXJ5KSwgcG9zaXRpb24pOwo+ICsgCQlkYXRhLT52YWx1ZVtw b3NpdGlvbl0gPSAnXDAnOwo+ICstCQkKPiArKwo+ICsgCQlzbGlzdF9hZGQoZGF0YSwgc3RhcnQs IGxhc3QpOwo+ICstCQkKPiArKwo+ICsgCQlxdWVyeSA9IGF1eDsKPiArIAl9Cj4gKyAKPiArQEAg LTEzNCw4ICsxMzQsOCBAQCBmb3JtdmFycyAqcHJvY2Vzc19kYXRhKGNoYXIgKnF1ZXJ5LCBmb3Jt dmFycyAqKnN0YXJ0LCBmb3JtdmFycyAqKmxhc3QsIGNvbnN0IGNoYQo+ICsgLyoqCj4gKyAqIFBy b2Nlc3MgSFRNTCBmb3JtIG9yIFVSTCBkYXRhLgo+ICsgKiBVc2VkIHRvIHJldHJpZXZlIEdFVCBv ciBQT1NUIGRhdGEuIEl0IGhhbmRsZXMgYXV0b21hdGljYWx5IHRoZSBjb3JyZWN0IFJFUVVFU1Rf TUVUSE9ELCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBhZnJhaWQgYWJvdXQgaXQuCj4gKy0qIEByZXR1 cm4gUmV0dXJucyB0aGUgY29udGVudHMgb2YgVVJMIG9yIEZPUk0gaW50byBhIGZvcm12YXJzIHZh cmlhYmxlLCBvciBOVUxMIGlmIEZBTFNFLiBNb3N0IG9mIHRpbWUsIHlvdSAKPiArLSogZG9uJ3Qg bmVlZCBhbnkgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGZvcm0gZGF0YSwgYmVjYXVzZSBpcyB1c2Vk IGFuIGludGVybmFsIHZhcmlhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIGNvbnRlbnRzLiAKPiArKyog QHJldHVybiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBVUkwgb3IgRk9STSBpbnRvIGEgZm9ybXZh cnMgdmFyaWFibGUsIG9yIE5VTEwgaWYgRkFMU0UuIE1vc3Qgb2YgdGltZSwgeW91Cj4gKysqIGRv bid0IG5lZWQgYW55IHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBmb3JtIGRhdGEsIGJlY2F1c2UgaXMg dXNlZCBhbiBpbnRlcm5hbCB2YXJpYWJsZSB0byBtYW5pcHVsYXRlIHRoZSBjb250ZW50cy4KPiAr ICogQHNlZSBjZ2lfaW5pdCwgY2dpX2luaXRfaGVhZGVycwo+ICsgKiovCj4gKyBmb3JtdmFycyAq Y2dpX3Byb2Nlc3NfZm9ybSgpCj4gK0BAIC0xNDYsNyArMTQ2LDcgQEAgZm9ybXZhcnMgKmNnaV9w cm9jZXNzX2Zvcm0oKQo+ICsgCj4gKyAJLy8gV2hlbiBNRVRIT0QgaGFzIG5vIGNvbnRlbnRzLCB0 aGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcHJvY2VzcyBpdCBhcyBHRVQgbWV0aG9kCj4gKyAJaWYg KG1ldGhvZCA9PSBOVUxMIHx8ICFzdHJjYXNlY21wKCJHRVQiLCBtZXRob2QpKSB7Cj4gKy0JCWNo YXIgKmRhZG9zOyAKPiArKwkJY2hhciAqZGFkb3M7Cj4gKyAJCWRhZG9zID0JZ2V0ZW52KCJRVUVS WV9TVFJJTkciKTsKPiArIAo+ICsgCQkvLyBTb21ldGltZXMsIEdFVCBjb21lcyB3aXRoIG5vdCBh bnkgZGF0YQo+ICtAQCAtMjIyLDcgKzIyMiw3IEBAIGludCBjZ2lfaW5jbHVkZShjb25zdCBjaGFy ICpmaWxlbmFtZSkKPiArIAo+ICsgCQlyZXR1cm4gMDsKPiArIAl9Cj4gKy0JCj4gKysKPiArICAJ d2hpbGUgKGZnZXRzKGJ1ZmZlciwgMjU1LCBpbmMpKQo+ICsgCQlwcmludGYoIiVzIiwgYnVmZmVy KTsKPiArIAo+ICtAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgY2dpX2luaXRfaGVhZGVycygpCj4g KyAqIEBwYXJhbSBuYW1lIEZvcm0gdmFyaWFibGUgbmFtZQo+ICsgKiBAcmV0dXJuIEZvcm0gdmFy aWFibGUgY29udGVudHMKPiArICogQHNlZSBjZ2lfcGFyYW0KPiArLSogCj4gKysqCj4gKyAqIEV4 YW1wbGU6Cj4gKyAqIEZvciBleGFtcGxlLCBpZiBpbiB5b3VyIEhUTUwgeW91IGhhdmUgc29tZXRo aW5nIGxpa2U8YnI+Cj4gKyAqICA8YnI+Cj4gK0BAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBjZ2lf aW5pdF9oZWFkZXJzKCkKPiArICogPC9wcmU+Cj4gKyAqICAgICAgIDxicj4KPiArICogdGhlbiwg dG8gcmV0cmlldmUgYWxsIHZhbHVlcywgeW91IGNhbiBtYWtlIGEgY29kZSBsaWtlPGJyPjxicj4K PiArLSogCj4gKysqCj4gKyAqIFxjb2RlCj4gKyAqIC8vIC4uLgo+ICsgKiBjaGFyICpkYXRhOwo+ ICtAQCAtMjk2LDEzICsyOTYsMTMgQEAgY2hhciAqY2dpX3BhcmFtX211bHRpcGxlKGNvbnN0IGNo YXIgKm5hbWUpCj4gKyB9Cj4gKyAKPiArIC8qKgo+ICstKiAgUmVjaXJlY3RzIHRvIHRoZSBzcGVj aWZpZWQgdXJsLiAKPiArKyogIFJlY2lyZWN0cyB0byB0aGUgc3BlY2lmaWVkIHVybC4KPiArICog UmVtZW1iZXIgdGhhdCB5b3UgY2Fubm90IHNlbmQgYW55IGhlYWRlciBiZWZvcmUgdGhpcyBmdW5j dGlvbiwgb3IgaXQgd2lsbCBub3Qgd29yay4KPiArICogPGI+Tm90ZTo8L2I+PGJyPgo+ICsgKiBM aWJDR0kgZG9lcyBub3QgaW1wbGVtZW50IFJGQyAyMzk2IHRvIG1ha2UgdGhlIGxpYiBzaW1wbGUg YW5kIHF1aWNrLiBZb3Ugc2hvdWxkIGJlIHN1cmUKPiArLSogdG8gcGFzcyBhIGNvcnJlY3QgVVJJ IHRvIHRoaXMgZnVuY3Rpb24uIAo+ICsrKiB0byBwYXNzIGEgY29ycmVjdCBVUkkgdG8gdGhpcyBm dW5jdGlvbi4KPiArICogQHBhcmFtIHVybCB1cmwgdG8gcmVkaXJlY3QgdGhlIGJyb3dzZXIKPiAr LSogCj4gKysqCj4gKyAqIFxjb2RlCj4gKyAqIGNnaV9yZWRpcmVjdCgiaHR0cDovL3d3d3cubGlu dXgub3JnIik7Cj4gKyAqIFxlbmRjb2RlCj4gK0BAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBpbml0 X2hleF90YWJsZSgpCj4gKyB9Cj4gKyAKPiArIC8qKgo+ICstKiAgTWFpbiBjZ2kgZnVuY3Rpb24u IAo+ICsrKiAgTWFpbiBjZ2kgZnVuY3Rpb24uCj4gKyAqICBDb25maWd1cmVzIGFsbCAobW9zdD8p IHdlIG5lZWQgdG8gIGdldCBjZ2kgbGlicmFyeSB3b3JraW5nIGNvcnJlY3RseS4gSXQgTVVTVCBi ZSBjYWxsZWQgYmVmb3JlCj4gKyAqICBhbnkgb3RoZXIgY2dpIGZ1bmN0aW9uLgo+ICsgKiAgQHNl ZSBjZ2lfZW5kLCBjZ2lfcHJvY2Vzc19mb3JtLCBjZ2lfaW5pdF9oZWFkZXJzCj4gK0BAIC0zNjAs NyArMzYwLDcgQEAgaW50IGNnaV9pbml0KCkKPiArIAkvLyBjYXVzZSBwcm9ibGVtcyB3aXRoIHNl c3Npb24ncy4gTm90ZSB0aGF0LCB3aGVuIHlvdSB3YW50Cj4gKyAJLy8gdG8gdXNlIHNlc3Npb24g d2l0aGluIHlvdXIgcHJvZ3JhbSwgeW91IG5lZWQgIGNnaV9nZXRfY29va2llcygpCj4gKyAJLy8g YmVmb3JlIHNlc3Npb25fc3RhcnQoKSwgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IHNvbWUgcHJvYmxl bXMuLi4gOikKPiArLQkvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gaGVyZSBpcyB0aGUgYmVzdCB3 YXkuIFRydXN0IG1lIDopCQo+ICsrCS8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBoZXJlIGlzIHRo ZSBiZXN0IHdheS4gVHJ1c3QgbWUgOikKPiArIAljZ2lfZ2V0X2Nvb2tpZXMoKTsKPiArIAo+ICsg CXJldHVybiAxOwo+ICtAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgY2dpX2VuZCgpCj4gKyAKPiAr IAlmb3JtdmFyc19sYXN0ID0gTlVMTDsKPiArIAo+ICstCWlmIChzZXNzX2xpc3Rfc3RhcnQpIAo+ ICsrCWlmIChzZXNzX2xpc3Rfc3RhcnQpCj4gKyAJCXNsaXN0X2ZyZWUoJnNlc3NfbGlzdF9zdGFy dCk7Cj4gKyAKPiArIAlpZiAoY29va2llc19zdGFydCkKPiArQEAgLTQxNCw3ICs0MTQsNyBAQCBj aGFyICpjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFycyhjaGFyICpzdHIpCj4gKyAJCQl0bXBbcG9z XSA9ICcgJzsKPiArIAkJZWxzZQo+ICsgCQkJdG1wW3Bvc10gPSBzdHJbaV07Cj4gKy0JCQo+ICsr Cj4gKyAJCXBvcysrOwo+ICsgCX0KPiArIAo+ICtAQCAtNDY0LDIxICs0NjQsMjEgQEAgY2hhciAq Y2dpX2VzY2FwZV9zcGVjaWFsX2NoYXJzKGNoYXIgKnN0cikKPiArIAo+ICsgLyoqCj4gKyAqIEdl dHMgdGhlIG9mIEhUTUwgb3IgVVJMIHZhcmlhYmxlIGluZGljYXRlZCBieSAnbmFtZScKPiArLSog QHBhcmFtIG5hbWUgRm9ybSBWYXJpYWJsZSBuYW1lIAo+ICsrKiBAcGFyYW0gbmFtZSBGb3JtIFZh cmlhYmxlIG5hbWUKPiArICogQHNlZSBjZ2lfcGFyYW1fbXVsdGlwbGUsICBjZ2lfcHJvY2Vzc19m b3JtLCBjZ2lfaW5pdAo+ICstKiAKPiArKyoKPiArICogXGNvZGUKPiArICogLy8gLi4uCj4gKyAq IGNoYXIgKmNvbnRlbnRzOwo+ICstKiAKPiArKyoKPiArICogY2dpX2luaXQoKTsKPiArICogY2dp X3Byb2Nlc3NfZm9ybSgpOwo+ICsgKiBjZ2lfaW5pdF9oZWFkZXJzKCk7Cj4gKy0qIAo+ICsrKgo+ ICsgKiBjb250ZW50cyA9IGNnaV9wYXJhbSgiZm9vIik7Cj4gKy0qIAo+ICsrKgo+ICsgKiBwdXRz KGNvbnRlbnRzKTsKPiArLSogCj4gKysqCj4gKyAqIC8vIC4uLgo+ICsgKiBcZW5kY29kZQo+ICsg KiovCj4gK2RpZmYgLS1naXQgYS9zcmMvY2dpLmggYi9zcmMvY2dpLmgKPiAraW5kZXggOTgxMmU3 YS4uNzMxNzM1ZCAxMDA2NDQKPiArLS0tIGEvc3JjL2NnaS5oCj4gKysrKyBiL3NyYy9jZ2kuaAo+ ICtAQCAtMjgsNyArMjgsNyBAQCBleHRlcm4gIkMiIHsKPiArIAo+ICsgLy8gZ2VuZXJhbCBwdXJw b3NlIGxpbmtlZCBsaXN0LiBBY3R1YWx5IGlzbid0IHZlcnkgcG9ydGFibGUKPiArIC8vIGJlY2F1 c2UgdXNlcyBvbmx5ICduYW1lJyBhbmQgJ3ZhbHVlJyB2YXJpYWJsZXMgdG8gc3RvcmUgZGF0YS4K PiArLS8vIFByb2JsYWJseSwgaW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyB3aWxsIGJlIHJlcGxh Y2VkIGJ5IAo+ICsrLy8gUHJvYmxhYmx5LCBpbiBhIGZ1dHVyZSByZWxlYXNlLCB0aGlzIHdpbGwg YmUgcmVwbGFjZWQgYnkKPiArIC8vIGFub3RoZXIgdHlwZSBvZiBzdHJ1Y3QKPiArIHR5cGVkZWYg c3RydWN0IGZvcm12YXJzQSB7Cj4gKyAgICAgICAgIGNoYXIgKm5hbWU7Cj4gK0BAIC04Niw3ICs4 Niw3IEBAIGV4dGVybiBpbnQgc2xpc3RfZGVsZXRlKGNoYXIgKm5hbWUsIGZvcm12YXJzICoqc3Rh cnQsIGZvcm12YXJzICoqbGFzdCk7Cj4gKyBleHRlcm4gY2hhciAqc2xpc3RfaXRlbShjb25zdCBj aGFyICpuYW1lLCBmb3JtdmFycyAqc3RhcnQpOwo+ICsgCj4gKyBleHRlcm4gdm9pZCBzbGlzdF9m cmVlKGZvcm12YXJzICoqc3RhcnQpOwo+ICstIAo+ICsrCj4gKyAvLyBTZXNzaW9uIHN0dWZmCj4g KyAvLyBXZSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gZ2V0IHRoZSBlcnJvciBtZXNzYWdlIGZy b20gYSAoIHBvc3NpYmxlICkgc2Vzc2lvbiBlcnJvcgo+ICsgLy8gVXNlIGl0IHRvZ2hldGVyIHdp dGggc2Vzc2lvbl9sYXN0ZXJyb3IKPiArQEAgLTk4LDcgKzk4LDcgQEAgZXh0ZXJuIGZvcm12YXJz ICpzZXNzX2xpc3Rfc3RhcnQ7Cj4gKyAKPiArIGV4dGVybiBjaGFyIFNFU1NJT05fU0FWRV9QQVRI WzI1NV07Cj4gKyBleHRlcm4gY2hhciBTRVNTSU9OX0NPT0tJRV9OQU1FWzUwXTsKPiArLSAKPiAr Kwo+ICsgZXh0ZXJuIHZvaWQgY2dpX3Nlc3Npb25fc2V0X21heF9pZGxlX3RpbWUodW5zaWduZWQg bG9uZyBzZWNvbmRzKTsKPiArIGV4dGVybiBpbnQgY2dpX3Nlc3Npb25fZGVzdHJveSgpOwo+ICsg ZXh0ZXJuIGludCBjZ2lfc2Vzc2lvbl9yZWdpc3Rlcl92YXIoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqdmFsdWUpOwo+ICtAQCAtMTA5LDcgKzEwOSw3IEBAIGV4dGVybiBpbnQgY2dpX3Nl c3Npb25fc3RhcnQoKTsKPiArIGV4dGVybiB2b2lkIGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lKGNv bnN0IGNoYXIgKmNvb2tpZV9uYW1lKTsKPiArIGV4dGVybiBjaGFyICpjZ2lfc2Vzc2lvbl92YXIo Y29uc3QgY2hhciAqbmFtZSk7Cj4gKyBleHRlcm4gdm9pZCBjZ2lfc2Vzc2lvbl9zYXZlX3BhdGgo Y29uc3QgY2hhciAqcGF0aCk7Cj4gKy0gCj4gKysKPiArICNpZmRlZiBfX2NwbHVzcGx1cwo+ICsg fQo+ICsgI2VuZGlmCj4gK2RpZmYgLS1naXQgYS9zcmMvY29va2llLmMgYi9zcmMvY29va2llLmMK PiAraW5kZXggYTExNjUwMy4uZTlkZWU5ZSAxMDA2NDQKPiArLS0tIGEvc3JjL2Nvb2tpZS5jCj4g KysrKyBiL3NyYy9jb29raWUuYwo+ICtAQCAtNDEsMjQgKzQxLDI0IEBAIGV4dGVybiBpbnQgY2dp X2Rpc3BsYXlfZXJyb3JzOwo+ICsgKi8KPiArIAo+ICsgLyoqCj4gKy0qIFNlbmQgYSBjb29raWUg dG8gdGhlIGNsaWVudC4gCj4gKysqIFNlbmQgYSBjb29raWUgdG8gdGhlIGNsaWVudC4KPiArICog QHBhcmFtIG5hbWUgQ29va2llIG5hbWUKPiArICogQHBhcmFtIHZhbHVlIENvb2tpZSB2YWx1ZQo+ ICstKiBAcGFyYW0gbWF4X2FnZSAgQ29va2llIHRpbWUgbGlmZSwgaW4gc2Vjb25kcy4gQSB2YWx1 ZSBlcXVhbCB0byAwICggemVybyApIG1lYW5zIHRvIGRpc2NhcmQgdGhlIGNvb2tpZSB3aGVuIHRo ZSBzZXNzaW9uIGlzIGRvbmUuIAo+ICsrKiBAcGFyYW0gbWF4X2FnZSAgQ29va2llIHRpbWUgbGlm ZSwgaW4gc2Vjb25kcy4gQSB2YWx1ZSBlcXVhbCB0byAwICggemVybyApIG1lYW5zIHRvIGRpc2Nh cmQgdGhlIGNvb2tpZSB3aGVuIHRoZSBzZXNzaW9uIGlzIGRvbmUuCj4gKyAqIEBwYXJhbSBwYXRo IENvb2tpZSBwYXRoIGF0IHRoZSBzZXJ2ZXIKPiArICogQHBhcmFtIGRvbWFpbiBEb21haW4gd2hl cmUgY29va2llIHdpbGwgd29yayA6KQo+ICsgKiBAcGFyYW0gc2VjdXJlIFNlY3VyZSBvciBub3QK PiArICogQHNlZSBjZ2lfY29va2llX3ZhbHVlCj4gKy0qIAo+ICsrKgo+ICsgKiBcY29kZQo+ICsg KiBjZ2lfYWRkX2Nvb2tpZSgibXljb29raWUiLCAibXljb29raWUgdmFsdWUiLCAwLCAwLCAwLCAw KTsKPiArLSogXGVuZGNvZGUgIAo+ICsrKiBcZW5kY29kZQo+ICsgKiovCj4gKy1pbnQgY2dpX2Fk ZF9jb29raWUoY29uc3QgY2hhciAqbmFtZSwgCj4gKy0JY29uc3QgY2hhciAqdmFsdWUsIAo+ICsr aW50IGNnaV9hZGRfY29va2llKGNvbnN0IGNoYXIgKm5hbWUsCj4gKysJY29uc3QgY2hhciAqdmFs dWUsCj4gKyAJY29uc3QgY2hhciAqbWF4X2FnZSwKPiArLQljb25zdCBjaGFyICpwYXRoLCAKPiAr LQljb25zdCBjaGFyICpkb21haW4sIAo+ICsrCWNvbnN0IGNoYXIgKnBhdGgsCj4gKysJY29uc3Qg Y2hhciAqZG9tYWluLAo+ICsgCWNvbnN0IGludCBzZWN1cmUpCj4gKyB7Cj4gKyAJaWYgKGhlYWRl cnNfaW5pdGlhbGl6ZWQpCj4gK0BAIC04MSw3ICs4MSw3IEBAIGludCBjZ2lfYWRkX2Nvb2tpZShj b25zdCBjaGFyICpuYW1lLAo+ICsgCj4gKyBmb3JtdmFycyAqY2dpX2dldF9jb29raWVzKCkKPiAr IHsKPiArLQlyZWdpc3RlciBmb3JtdmFycyAqZGF0YTsJCj4gKysJcmVnaXN0ZXIgZm9ybXZhcnMg KmRhdGE7Cj4gKyAJcmVnaXN0ZXIgc2l6ZV90IHBvc2l0aW9uOwo+ICsgCWNoYXIgKmNvb2tpZXMs ICphdXg7Cj4gKyAKPiArQEAgLTExNyw3ICsxMTcsNyBAQCBmb3JtdmFycyAqY2dpX2dldF9jb29r aWVzKCkKPiArIAkJCXBvc2l0aW9uID0gc3RybGVuKGNvb2tpZXMpOwo+ICsgCQl9Cj4gKyAJCWVs c2Ugewo+ICstCQkJd2hpbGUgKCphdXgrKyAhPSAnOycpIAo+ICsrCQkJd2hpbGUgKCphdXgrKyAh PSAnOycpCj4gKyAJCQkJcG9zaXRpb24rKzsKPiArIAkJCS8vIEVsaW1pbmF0ZSB0aGUgYmxhbmsg c3BhY2UgYWZ0ZXIgJzsnCj4gKyAJCQlhdXgrKzsKPiArZGlmZiAtLWdpdCBhL3NyYy9lcnJvci5j IGIvc3JjL2Vycm9yLmMKPiAraW5kZXggNWQyZGExMi4uMmY0OGIzYiAxMDA2NDQKPiArLS0tIGEv c3JjL2Vycm9yLmMKPiArKysrIGIvc3JjL2Vycm9yLmMKPiArQEAgLTIxLDcgKzIxLDcgQEAgdm9p ZCBsaWJjZ2lfZXJyb3IoaW50IGVycm9yX2NvZGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQo+ICsg CQlyZXR1cm47Cj4gKyAKPiArIAljZ2lfaW5pdF9oZWFkZXJzKCk7Cj4gKy0JdmFfc3RhcnQoYXJn dW1lbnRzLCBtc2cpOwkKPiArKwl2YV9zdGFydChhcmd1bWVudHMsIG1zZyk7Cj4gKyAKPiArIAlw cmludGYoIjxiPiVzPC9iPjogIiwgbGliY2dpX2Vycm9yX3R5cGVbZXJyb3JfY29kZV0pOwo+ICsg CXZwcmludGYobXNnLCBhcmd1bWVudHMpOwo+ICtkaWZmIC0tZ2l0IGEvc3JjL2dlbmVyYWwuYyBi L3NyYy9nZW5lcmFsLmMKPiAraW5kZXggYWQzNDM1Yy4uOTY2MmVjZSAxMDA2NDQKPiArLS0tIGEv c3JjL2dlbmVyYWwuYwo+ICsrKysgYi9zcmMvZ2VuZXJhbC5jCj4gK0BAIC00OSw3ICs0OSw3IEBA IHN0YXRpYyBpbnQgbmNvZGVzID0gc2l6ZW9mKGhlKSAvIHNpemVvZihzdHJ1Y3QgaXNvODg1OV8x NSk7Cj4gKyAKPiArIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgo+ICsgCQkJCQkJR0VORVJBTCBHUk9VUAo+ICstKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkK PiArKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KPiArIC8qKiBAZGVmZ3JvdXAgbGliY2dpX2dlbmVyYWwgR2VuZXJhbCBwdXJw b3NlCj4gKyAqIEB7Cj4gKyAqLwo+ICtAQCAtNTksNDIgKzU5LDQyIEBAIHN0YXRpYyBpbnQgbmNv ZGVzID0gc2l6ZW9mKGhlKSAvIHNpemVvZihzdHJ1Y3QgaXNvODg1OV8xNSk7Cj4gKyAqIGxpa2Ug JyZsdCcgYW5kICcmZ3QnCj4gKyAqIEBwYXJhbSBzdHIgU3RyaW5nIGNvbnRhaW5pbmcgY29kZSB0 byBwYXJzZQo+ICsgKiBAcmV0dXJuIFRoZSBuZXcgc3RyaW5nCj4gKy0qIEBhdXRob3IgUm9iZXJ0 IENzb2sgPHJjc29rQGdteC5kZT4gCj4gKysqIEBhdXRob3IgUm9iZXJ0IENzb2sgPHJjc29rQGdt eC5kZT4KPiArICovCj4gKyAvLyBUaGlzIG9uZSBuZWVkcyB0aGUgc3RydWN0IGFuZCBuY29kZXMg YWJvdmUuCj4gKy0vLyBuY29kZXMgaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3Ry dWN0LiAKPiArKy8vIG5jb2RlcyBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdHJ1 Y3QuCj4gKyBjaGFyICpodG1sZW50aXRpZXMoY29uc3QgY2hhciAqc3RyKQo+ICsgewo+ICsgCWNo YXIgKmJ1ZjsKPiArIAlpbnQgc2l6LCBsZW4sIGkgPSAwLCBqOwo+ICsgCj4gKyAJc2l6ID0gc3Ry bGVuKHN0cikgKyAxOwo+ICstCQo+ICstCWJ1ZiA9IChjaGFyICopbWFsbG9jKHNpeik7CQo+ICsr Cj4gKysJYnVmID0gKGNoYXIgKiltYWxsb2Moc2l6KTsKPiArIAlpZiAoIWJ1ZikKPiArIAkJbGli Y2dpX2Vycm9yKEVfTUVNT1JZLCAiRmFpbGVkIHRvIGFsbG9jIG1lbW9yeSBhdCBodG1sZW50aXRp ZXMsIGNnaS5jIik7Cj4gKy0JCj4gKysKPiArIAlmb3IgKDsgKnN0cjsgc3RyKyssIGkrKykgIHsK PiArIAkJZm9yIChqID0gMDsgaiA8IG5jb2RlczsgaisrKSB7Cj4gKyAJCQlpZiAoKnN0ciA9PSBo ZVtqXS5jb2RlKSB7Cj4gKyAJCQkJbGVuID0gc3RybGVuKGhlW2pdLmh0bWwpIC0gMTsKPiArLQkJ CQkKPiArLQkJCQlidWYgPSByZWFsbG9jKGJ1Ziwgc2l6ICs9IGxlbik7CQo+ICsrCj4gKysJCQkJ YnVmID0gcmVhbGxvYyhidWYsIHNpeiArPSBsZW4pOwo+ICsgCQkJCWlmICghYnVmKQo+ICsgCQkJ CQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGF0IGh0bWxl bnRpdGllcywgY2dpLmMiKTsKPiArLQkJCQkKPiArKwo+ICsgCQkJCXN0cmNweShidWYgKyBpLCBo ZVtqXS5odG1sKTsKPiArIAkJCQlpICs9IGxlbjsKPiArIAkJCQlicmVhazsKPiArIAkJCX0KPiAr IAkJfQo+ICstCQkJCj4gKy0JCWlmIChqID09IG5jb2RlcykgCj4gKysKPiArKwkJaWYgKGogPT0g bmNvZGVzKQo+ICsgCQkJYnVmW2ldID0gKnN0cjsKPiArIAl9Cj4gKy0JCj4gKysKPiArIAlidWZb aV0gPSAnXDAnOwo+ICstCXJldHVybiBidWY7CQo+ICsrCXJldHVybiBidWY7Cj4gKyB9Cj4gKyAK PiArIC8qKgo+ICtAQCAtMTAyLDIzICsxMDIsMjMgQEAgY2hhciAqaHRtbGVudGl0aWVzKGNvbnN0 IGNoYXIgKnN0cikKPiArICogQHBhcmFtIGZpbGVuYW1lIEZpbGVuYW1lIHRvIG9wZW4KPiArICog QHBhcmFtIHRvdGFsIEludGVnZXIgdmFyaWFibGUgcGFzc2VkIGFzIHJlZmVyZW5jZSwgd2hpY2gg d2lsbCBzdG9yZSB0aGUgdG90YWwgb2YgaXRlbXMKPiArICogQHJldHVybiBSZXR1cm5zIHRoZSBm aWxlIGluIGFuIGFycmF5LiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRv IGEgbGluZSBpbiB0aGUgZmlsZS4KPiArLSogCj4gKysqCj4gKyAqIFxjb2RlCj4gKyAqIGNoYXIg KipsaW5lczsKPiArICogdW5zaWduZWQgaW50IHRvdGFsLCBpOwo+ICstKiAgCj4gKysqCj4gKyAq IGxpbmVzID0gZmlsZSgiZmlsZW5hbWUuZXh0IiwgJnRvdGFsKTsKPiArLSogICAgCj4gKysqCj4g KyAqIHByaW50ZigiVG90YWwgb2YgbGluZXM6ICV1XG4iLCB0b3RhbCk7Cj4gKy0qICAgIAo+ICsr Kgo+ICsgKiBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykKPiArICoJcHJpbnRmKCJbJXVdICVz XG4iLCBpLCBsaW5lc1tpXSk7Cj4gKy0qICAgICAKPiArKyoKPiArICogZm9yIChpID0gMDsgaSA8 IHRvdGFsOyBpKyspIHsKPiArICogCWlmIChsaW5lc1tpXSkKPiArICoJCSBmcmVlKGxpbmVzW2ld KTsKPiArICogfQo+ICstKiBcZW5kY29kZQkgIAo+ICsrKiBcZW5kY29kZQo+ICsgKi8KPiArIGNo YXIgKipmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQo+ICsg ewo+ICtAQCAtMTM4LDcgKzEzOCw3IEBAIGNoYXIgKipmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1l LCB1bnNpZ25lZCBpbnQgKnRvdGFsKQo+ICsgCS8vIGluaXRpYWwgbGluZSBsZW5ndGgKPiArIAlj b2x1bW1zID0gMTAwOwo+ICsgCj4gKy0JLy8gSG93IG1hbnkgY2hhcmFjdGVyZXMgaW4gdGhlIGxp bmUgCj4gKysJLy8gSG93IG1hbnkgY2hhcmFjdGVyZXMgaW4gdGhlIGxpbmUKPiArIAljaGFyX2Nv dW50ID0gMTsKPiArIAo+ICsgCWkgPSAwOwo+ICtAQCAtMTQ4LDkgKzE0OCw5IEBAIGNoYXIgKipm aWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQo+ICsgCWlmICgh c3RyKQo+ICsgCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIsIF9fRklMRV9f LCBfX0xJTkVfXyk7Cj4gKyAKPiArLQkvLyBBbGxvY2F0ZSBpbml0aWFsIG1lbW9yeSB0byBidWYg dmFyaWFibGUuIEl0IGlzIHRoZSBvbmUgCj4gKysJLy8gQWxsb2NhdGUgaW5pdGlhbCBtZW1vcnkg dG8gYnVmIHZhcmlhYmxlLiBJdCBpcyB0aGUgb25lCj4gKyAJLy8gdGhhdCB3aWxsIGNvbnRhaW4g dGhlIGNoYXJzIG9mIHRoZSBsaW5lcwo+ICstCS8vIEJ5IGRlZmF1bHQsIHdlJ3JlIGFsbG9jYXRp bmcgODAgY2hhcnMuLiBpZiBtb3JlIGlzIG5lZWRlZCwgCj4gKysJLy8gQnkgZGVmYXVsdCwgd2Un cmUgYWxsb2NhdGluZyA4MCBjaGFycy4uIGlmIG1vcmUgaXMgbmVlZGVkLAo+ICsgCS8vIHRoZW4g d2UnbGwgcmVhbGxvYygpCj4gKyAJYnVmID0gKGNoYXIgKiltYWxsb2MoY29sdW1tcyk7Cj4gKyAJ aWYgKGJ1ZiA9PSBOVUxMKQo+ICtAQCAtMTU4LDggKzE1OCw4IEBAIGNoYXIgKipmaWxlKGNvbnN0 IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQo+ICsgCj4gKyAJd2hpbGUgKCFm ZW9mKGZwKSkgewo+ICsgCQljaCA9IGZnZXRjKGZwKTsKPiArLQkJCj4gKy0JCS8vIFRoZSBuZXh0 IHdoaWxlKCkgbG9vcCBpcyAgdG8gZ2V0IGFsbCBjb250ZW50cyBvZiBhY3R1YWwgbGluZSAKPiAr Kwo+ICsrCQkvLyBUaGUgbmV4dCB3aGlsZSgpIGxvb3AgaXMgIHRvIGdldCBhbGwgY29udGVudHMg b2YgYWN0dWFsIGxpbmUKPiArIAkJd2hpbGUgKChjaCAhPSAnXG4nKSAmJiAoY2ggIT0gRU9GKSkg ewo+ICsgCQkJLy8gSW5jcmVtZW50cyB0aGUgY2hhcmFjdGVyIGNvdW50ZXIKPiArIAkJCWNoYXJf Y291bnQrKzsKPiArQEAgLTIwMSw3ICsyMDEsNyBAQCBjaGFyICoqZmlsZShjb25zdCBjaGFyICpm aWxlbmFtZSwgdW5zaWduZWQgaW50ICp0b3RhbCkKPiArIAlmY2xvc2UoZnApOwo+ICsgCj4gKyAJ KnRvdGFsID0gbGluZXMgLSAxOwo+ICstCXJldHVybiBzdHI7CQo+ICsrCXJldHVybiBzdHI7Cj4g KyB9Cj4gKyAKPiArIC8qKgo+ICtkaWZmIC0tZ2l0IGEvc3JjL2xpc3QuYyBiL3NyYy9saXN0LmMK PiAraW5kZXggOGJkNjhmNy4uNDIzZjI4YiAxMDA2NDQKPiArLS0tIGEvc3JjL2xpc3QuYwo+ICsr KysgYi9zcmMvbGlzdC5jCj4gK0BAIC0yNiwxNSArMjYsMTUgQEAKPiArICNpbmNsdWRlICJlcnJv ci5oIgo+ICsgI2luY2x1ZGUgImNnaS5oIgo+ICsgCj4gKy0vLyBBZGQgYSBuZXcgaXRlbSB0byB0 aGUgbGlzdCAKPiArKy8vIEFkZCBhIG5ldyBpdGVtIHRvIHRoZSBsaXN0Cj4gKyB2b2lkIHNsaXN0 X2FkZChmb3JtdmFycyAqaXRlbSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0KQo+ ICsgewo+ICsgCS8vIGlmICpzdGFydCBpcyBlbXB0eSwgdGhlbiBvdXIgbGlzdCBpcyBhbHNvIGVt cHR5LiBTbywgdGhlIG9ubHkKPiArIAkvLyB0YXNrIHRvIGRvIGlzIGZpbGwgdGhlIHZhcmlhYmxl cyAqc3RhcnQgYW5kICpsYXN0IHdpdGggdGhlIGRhdGEgcG9pbnRlZCBieSBpdGVtCj4gKy0JLy8g KnN0YXJ0IGNvbnRhaW5zIHRoZSBmaXJ0cyBpdGVtIGluIHRoZSBsaXN0LCBhbmQgd2UgbmVlZCAq bGFzdCB0byBrbm93IHRoZSAKPiArKwkvLyAqc3RhcnQgY29udGFpbnMgdGhlIGZpcnRzIGl0ZW0g aW4gdGhlIGxpc3QsIGFuZCB3ZSBuZWVkICpsYXN0IHRvIGtub3cgdGhlCj4gKyAJLy8gZW5kIG9m IHRoZSBsaXN0Cj4gKyAJaWYgKCEqc3RhcnQpIHsKPiArLQkJLy8gaXRlbS0+bmV4dCBuZWVkcyB0 byBiZSBOVUxMLCBvdGhlcndpc2Ugd2UgbmV2ZXIgd2lsbCAKPiArKwkJLy8gaXRlbS0+bmV4dCBu ZWVkcyB0byBiZSBOVUxMLCBvdGhlcndpc2Ugd2UgbmV2ZXIgd2lsbAo+ICsgCQkvLyBmaW5kIHRo ZSBlbmQgb2YgbGlzdAo+ICsgCQlpdGVtLT5uZXh0ID0gTlVMTDsKPiArIAo+ICtAQCAtNTksOCAr NTksOCBAQCB2b2lkIHNsaXN0X2FkZChmb3JtdmFycyAqaXRlbSwgZm9ybXZhcnMgKipzdGFydCwg Zm9ybXZhcnMgKipsYXN0KQo+ICsgCj4gKyAvLyBEZWxldGUgZnJvbSBsaXN0IHRoZSBpdGVtIHBv aW50ZWQgYnkgbmFtZQo+ICsgCj4gKy0vLyBUaGlzIGNvZGUgaXMgYSBiaXQgY29tcGxpY2F0ZWQs IGFuZCBJIG5lZWRlZCBzb21lIAo+ICstLy8gbG9uZyBob3VycyB0byB0ZXJtaW5hdGUgaXQuIElu IGEgZnV0dXJlIHJlbGVhc2UsIAo+ICsrLy8gVGhpcyBjb2RlIGlzIGEgYml0IGNvbXBsaWNhdGVk LCBhbmQgSSBuZWVkZWQgc29tZQo+ICsrLy8gbG9uZyBob3VycyB0byB0ZXJtaW5hdGUgaXQuIElu IGEgZnV0dXJlIHJlbGVhc2UsCj4gKyAvLyBJIHdpbGwgZXhwbGFpbiB0aGUgYWxnb3JpdGhtIGJl dHRlcgo+ICsgaW50IHNsaXN0X2RlbGV0ZShjaGFyICpuYW1lLCBmb3JtdmFycyAqKnN0YXJ0LCBm b3JtdmFycyAqKmxhc3QpCj4gKyB7Cj4gK0BAIC02OCw3ICs2OCw3IEBAIGludCBzbGlzdF9kZWxl dGUoY2hhciAqbmFtZSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0KQo+ICsgCS8v ICpwcmlvciB3aWxsIHN0b3JlIHRoZSBwcmlvciBpdGVtIHJlbGFjdGVkIHRvIGFjdHVhbCBpbiB0 aGUgbG9vcAo+ICsgCWZvcm12YXJzICpiZWdpbiwgKnByaW9yOwo+ICsgCj4gKy0JLy8gQmVmb3Jl IG9mIGFsbCwgaXMgbW9yZSBzaW1wbGUgdG8gY2hlY2sgaWYgdGhlIGl0ZW0gCj4gKysJLy8gQmVm b3JlIG9mIGFsbCwgaXMgbW9yZSBzaW1wbGUgdG8gY2hlY2sgaWYgdGhlIGl0ZW0KPiArIAkvLyB0 byBkZWxldGUgaXMgaW4gdGhlIG5leHQgaXRlbS4gSWYgdHJ1ZSwgd2UgZG9uJ3QgbmVlZAo+ICsg CS8vIHRvIGVudGVyIGluIHRoZSBsb29wCj4gKyAJaWYgKCFzdHJjYXNlY21wKCgqc3RhcnQpLT5u YW1lLCBuYW1lKSkgewo+ICtAQCAtNzYsOCArNzYsOCBAQCBpbnQgc2xpc3RfZGVsZXRlKGNoYXIg Km5hbWUsIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJzICoqbGFzdCkKPiArIAkJKnN0YXJ0ID0g KCpzdGFydCktPm5leHQ7Cj4gKyAKPiArIAkJLy8gaWYgc3RhcnQgaXMgbnVsbCwgdGhlbiB3ZSBo YXZlbid0IG1vcmUgaXRlbnMKPiArLQkJLy8gaW4gdGhlIGxpc3QuLiAKPiArLQkJaWYgKCEqc3Rh cnQpIAo+ICsrCQkvLyBpbiB0aGUgbGlzdC4uCj4gKysJCWlmICghKnN0YXJ0KQo+ICsgCQkJKmxh c3QgPSBOVUxMOwo+ICsgCj4gKyAJCXJldHVybiAxIDsKPiArQEAgLTg2LDcgKzg2LDcgQEAgaW50 IHNsaXN0X2RlbGV0ZShjaGFyICpuYW1lLCBmb3JtdmFycyAqKnN0YXJ0LCBmb3JtdmFycyAqKmxh c3QpCj4gKyAJLy8gU3RvcmVzIHRoZSBzdGFydCBvZiB0aGUgbGlzdAo+ICsgCWJlZ2luID0gKnN0 YXJ0Owo+ICsgCj4gKy0JLy8gU3RheXMgaW4gdGhlIGxvb3Agd2hpbGUgdGhlIGl0ZW0gdG8gYmUg ZGVsZXRlZCAKPiArKwkvLyBTdGF5cyBpbiB0aGUgbG9vcCB3aGlsZSB0aGUgaXRlbSB0byBiZSBk ZWxldGVkCj4gKyAJLy8gaXMgbm90IGZvdW5kCj4gKyAJd2hpbGUgKCpzdGFydCkgewo+ICsgCQkv LyBTdG9yZXMgdGhlIHByaW9yIGl0ZW0gb2YgdGhlIGxpc3QKPiArQEAgLTk4LDEzICs5OCwxMyBA QCBpbnQgc2xpc3RfZGVsZXRlKGNoYXIgKm5hbWUsIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJz ICoqbGFzdCkKPiArIAkJLy8gdGhlIG5leHQgaXRlbSBpcyB0aGUgb25lIHRvIGJlIGRlbGV0ZWQ/ Pz8KPiArIAkJaWYgKCFzdHJjYXNlY21wKCgqc3RhcnQpLT5uZXh0LT5uYW1lLCBuYW1lKSkgewo+ ICsgCQkJLy8gQmVmb3JlLCBjaGVjayBpZiB0aGUgaXRlbSB0aGF0IHdpbGwgYmUgZGVsZXRlZAo+ ICstCQkJLy8gaXMgdGhlIGxhc3QuLi4gaWYgdHJ1ZSwgdGhlbiB0aGUgbmV4dCBpdGVtIG5lZWQg dG8gCj4gKysJCQkvLyBpcyB0aGUgbGFzdC4uLiBpZiB0cnVlLCB0aGVuIHRoZSBuZXh0IGl0ZW0g bmVlZCB0bwo+ICsgCQkJLy8gY29udGFpbiBudWxsICggdGhlIGVuZCBvZiBsaXN0ICksIGFuZCB0 aGUgYWN0dWFsCj4gKyAJCQkvLyB2YWx1ZSBpcyBjaGFuZ2VkIHdpdGggdGhlIHZhbHVlIG9mIHRo ZSBwcmlvciB2YXJpYWJsZQo+ICsgCQkJaWYgKCgqc3RhcnQpLT5uZXh0ID09ICpsYXN0KSB7Cj4g KyAJCQkJKCpzdGFydCktPm5leHQgPSBOVUxMOwo+ICsgCQkJCSpsYXN0ID0gcHJpb3I7Cj4gKy0J CQl9CQkJCj4gKysJCQl9Cj4gKyAJCQllbHNlCj4gKyAJCQkJLy8gb3RoZXJ3aXNlLi4uIHdlbGwK PiArIAkJCQkvLyB0aGUgaXRlbSB0aGF0IHdpbGwgYmUgZGVsZXRlZCBpcyBwb2ludGVkCj4gK0BA IC0xNTcsNyArMTU3LDcgQEAgY2hhciAqc2xpc3RfaXRlbShjb25zdCBjaGFyICpuYW1lLCBmb3Jt dmFycyAqc3RhcnQpCj4gKyAJYmVnaW4gPSBzdGFydDsKPiArIAo+ICsgCXdoaWxlIChiZWdpbikg ewo+ICstCQlpZiAoIXN0cmNhc2VjbXAoYmVnaW4tPm5hbWUsIG5hbWUpKSAKPiArKwkJaWYgKCFz dHJjYXNlY21wKGJlZ2luLT5uYW1lLCBuYW1lKSkKPiArIAkJCXJldHVybiAoIWJlZ2luLT52YWx1 ZVswXSA/IE5VTEwgOiBiZWdpbi0+dmFsdWUpOwo+ICsgCj4gKyAJCWJlZ2luID0gYmVnaW4tPm5l eHQ7Cj4gK2RpZmYgLS1naXQgYS9zcmMvbWQ1LmMgYi9zcmMvbWQ1LmMKPiAraW5kZXggNDRhMWRl Mi4uNTZjZjVjMCAxMDA2NDQKPiArLS0tIGEvc3JjL21kNS5jCj4gKysrKyBiL3NyYy9tZDUuYwo+ ICtAQCAtNTksNyArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBNRDVDb250ZXh0IE1ENV9DVFg7Cj4g KyAKPiArIC8qKgo+ICsgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBNRDUgZm9ybWF0Lgo+ICstKiAK PiArKyoKPiArICogQHBhcmFtIHN0ciBTdHJpbmcgdG8gY29udmVydCB0byBNRDUgaGFzaAo+ICsg KiBAcmV0dXJuIE1ENSBoYXNoIGNvZGUKPiArICoqLwo+ICtAQCAtODIsNyArODIsNyBAQCBjaGFy ICptZDUoY29uc3QgY2hhciAqc3RyKQo+ICsgCj4gKyAJLy8gZmluYWxseSwgaGVyZSBpcyBhIGZp bmFsIHN0cmluZyBlbmNyeXB0ZWQgaW4gaGV4IGZsb2F0IGZvcm1hdAo+ICsgCU1ENUZpbmFsKG1k LCAmY29udGV4dCk7Cj4gKy0JCj4gKysKPiArIAkvLyBoZXJlLCB0aGUgbG9vcCBpcyBsZXNzIHRo YW4gMzIgYmVjYXVzZSBhIG1kNSBzdHJpbmcgY2FuIGNvbnRlbnQKPiArIAkvLyBqdXN0IDMyIGJ5 dGVzCj4gKyAJZm9yKGkgPSAwOyBpIDwgMzI7IGkrKykgewo+ICtAQCAtMjA2LDcgKzIwNiw3IEBA IE1ENVVwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpi dWYsIHVuc2lnbmVkIGxlbikKPiArIH0KPiArIAo+ICsgLyoKPiArLSAqIEZpbmFsIHdyYXB1cCAt IHBhZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuIAo+ICsrICogRmlu YWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91bmRhcnkgd2l0aCB0aGUgYml0IHBhdHRlcm4K PiArICAqIDEgMCogKDY0LWJpdCBjb3VudCBvZiBiaXRzIHByb2Nlc3NlZCwgTVNCLWZpcnN0KQo+ ICsgICovCj4gKyB2b2lkCj4gK2RpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbi5jIGIvc3JjL3Nlc3Np b24uYwo+ICtpbmRleCBhOWQyZWYxLi40ZDk2YzNlIDEwMDY0NAo+ICstLS0gYS9zcmMvc2Vzc2lv bi5jCj4gKysrKyBiL3NyYy9zZXNzaW9uLmMKPiArQEAgLTI2LDcgKzI2LDcgQEAKPiArICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKi8K PiArIAo+ICstLyoqIAo+ICsrLyoqCj4gKyAqIEBkZWZncm91cCBsaWJjZ2lfc2Vzc2lvbiBTZXNz aW9uIEhhbmRsaW5nCj4gKyAqICAgT25lIG9mIHRoZSBtb3N0IGRpZmVyZW5jaWFscyBvZiBMaWJD R0kgaXMgaXRzIHN1cHBvcnQgdG8gc2Vzc2lvbnMsIGEgbWVjaGFuaXNtIHRoYXQgcGVybWl0cwo+ ICsgKiAgIHRoZSBhcHBsaWNhdGlvbiB0byBrZWVwIHZhcmlhYmxlcyB0cm91Z2ggdGhlIHVzZXIn cyBzZXNzaW9uLCB3aGVuIGhlIGlzIHZpc2l0aW5nIHlvdXIgd2Vic2l0ZS4KPiArQEAgLTM1LDkg KzM1LDkgQEAKPiArICogPHRyPgo+ICsgKiA8dGQ+Cj4gKyAqIAlTZXNzaW9uIGZ1bmN0aW9ucyBh cmUgZWFzeSB0byB1c2UgYW5kIHVuZGVyc3RhbmQsIGFuZCBwcm9iYWJseSB5b3UnbGwgd2FudCB0 byB0YWtlIGEgY2xvc2VyCj4gKy0qIAlsb29rIGF0IDxpPmNnaV9zZXNzaW9uX3NhdmVfcGF0aCgp PC9pPiBhbmQgPGk+Y2dpX3Nlc3Npb25fY29va2llX25hbWUoKTwvaT4gZnVuY3Rpb25zLiBUaGVz ZSBmdW5jdGlvbnMsIAo+ICsrKiAJbG9vayBhdCA8aT5jZ2lfc2Vzc2lvbl9zYXZlX3BhdGgoKTwv aT4gYW5kIDxpPmNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lKCk8L2k+IGZ1bmN0aW9ucy4gVGhlc2Ug ZnVuY3Rpb25zLAo+ICsgKiAJbGV0IHRoZSBwcm9ncmFtbWVyIHRvIHNldCB0aGUgZGlyZWN0b3J5 IHdoZXJlIHNlc3Npb24gZmlsZXMgd2lsbAo+ICstKiAJYmUgc2F2ZWQgaW4gdGhlIGhhcmQgZGlz ayBhbmQgdGhlIGNvb2tpZSBuYW1lIHRvIHRoZSBzZXNzaW9uLCByZXNwZWN0aXZlbHkuIAo+ICsr KiAJYmUgc2F2ZWQgaW4gdGhlIGhhcmQgZGlzayBhbmQgdGhlIGNvb2tpZSBuYW1lIHRvIHRoZSBz ZXNzaW9uLCByZXNwZWN0aXZlbHkuCj4gKyAqIAk8YnI+PGJyPgo+ICsgKiAJQXMgdGhlIENHSSBp cyBydW5uaW5nIG9uIHRoZSB3ZWJzZXJ2ZXIgd2hpY2ggYSBjb21tb24gdXNlciwgaXQgaGF2ZSBm dWxsIGFjY2VzcyB0byBpdHMgcmVzcGVjdGl2ZSBzZXNzaW9uCj4gKyAqIAlmaWxlLiBCdXQgdGhl IG1vc3QgYmlnIHByb2JsZW0gaXMgdGhhdCB5b3UgbWF5Cj4gK0BAIC0xMDIsNyArMTAyLDcgQEAg Y29uc3QgY2hhciAqc2Vzc2lvbl9lcnJvcl9tZXNzYWdlW10gPSB7Cj4gKyAgCSJTZXNzaW9uIHZh cmlhYmxlIG5vdCByZWdpc3RlcmVkIiwKPiArICAJIkZhaWxlZCB0byBvcGVuIHNlc3Npb24gZmls ZSBmb3IgbWFuaXB1bGF0aW9uIgo+ICsgfTsKPiArLSAKPiArKwo+ICsgCj4gKyAvLyBjZ2kuYwo+ ICsgZXh0ZXJuIGludCBoZWFkZXJzX2luaXRpYWxpemVkOwo+ICtAQCAtMTQyLDkgKzE0Miw5IEBA IHZvaWQgc2Vzc19nZW5lcmF0ZV9pZCgpCj4gKyAJc2Vzc19mbmFtZSA9IChjaGFyICopbWFsbG9j KHNhdmVfcGF0aF9sZW4gKyBTRVNTX0lEX0xFTiArIDEpOwo+ICsgCWlmICghc2Vzc19mbmFtZSkK PiArIAkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiRmlsZSAlcywgbGluZSAlcyIsIF9fRklMRV9f LCBfX0xJTkVfXyk7Cj4gKy0JCQo+ICstCWZvciAoaSA9IDA7IGkgPCBTRVNTX0lEX0xFTjsgaSsr KSAKPiArLQkJc2Vzc19pZFtpXSA9IHRhYmxlW3JhbmQoKSVsZW5dOwkKPiArKwo+ICsrCWZvciAo aSA9IDA7IGkgPCBTRVNTX0lEX0xFTjsgaSsrKQo+ICsrCQlzZXNzX2lkW2ldID0gdGFibGVbcmFu ZCgpJWxlbl07Cj4gKyAJc2Vzc19pZFtTRVNTX0lEX0xFTl0gPSAnXDAnOwo+ICsgCj4gKyAJc25w cmludGYoc2Vzc19mbmFtZSwgKFNFU1NfSURfTEVOICsgc2F2ZV9wYXRoX2xlbiArIDEpLCAiJXMl cyVzIiwgU0VTU0lPTl9TQVZFX1BBVEgsIFNFU1NJT05fRklMRV9QUkVGSVgsIHNlc3NfaWQpOwo+ ICtAQCAtMTU1LDEwICsxNTUsMTAgQEAgaW50IHNlc3NfY3JlYXRlX2ZpbGUoKQo+ICsgewo+ICsg CS8vIHRpbWV2YWwsIGdldHRpbWVvZmRheSBhcmUgdXNlZCB0b2doZXRlciB3aXRoIHNyYW5kKCkg ZnVuY3Rpb24KPiArIAlzdHJ1Y3QgdGltZXZhbCB0djsKPiArLQkKPiArKwo+ICsgCWdldHRpbWVv ZmRheSgmdHYsIE5VTEwpOwo+ICsgCXNyYW5kKHR2LnR2X3NlYyAqIHR2LnR2X3VzZWMgKiAxMDAw MDApOwo+ICstCQo+ICsrCj4gKyAJc2Vzc19nZW5lcmF0ZV9pZCgpOwo+ICsgCXNlc3NfZmlsZSA9 IGZvcGVuKHNlc3NfZm5hbWUsICJ3Iik7Cj4gKyAJaWYgKCFzZXNzX2ZpbGUpIHsKPiArQEAgLTE2 OCwxNiArMTY4LDE2IEBAIGludCBzZXNzX2NyZWF0ZV9maWxlKCkKPiArIAo+ICsgCQlyZXR1cm4g MDsKPiArIAl9Cj4gKy0JCj4gKysKPiArIAkvLyBDaGFuZ2VzIGZpbGUgcGVybWlzc2lvbiB0byAw NjAwCj4gKyAJY2htb2Qoc2Vzc19mbmFtZSwgU19JUlVTUnxTX0lXVVNSKTsKPiArIAlmY2xvc2Uo c2Vzc19maWxlKTsKPiArIAo+ICsgCXJldHVybiAxOwo+ICstfQkKPiArK30KPiArIAo+ICstLyoq IAo+ICstKiBEZXN0cm95cyB0aGUgc2Vzc2lvbi4gCj4gKysvKioKPiArKyogRGVzdHJveXMgdGhl IHNlc3Npb24uCj4gKyAqIERlc3Ryb3lzIHRoZSBjdXJyZW50IG9wZW5lZCBzZXNzaW9uLCBpbmNs dWRpbmcgYWxsIGRhdGEuCj4gKyAqIEFmdGVyIHNlc3Npb25fZGVzdHJveSgpIHdhcyBjYWxsZWQs IGlzIG5vdCBtb3JlCj4gKyAqIHBvc3NpYmxlIHRvIHVzZSBzZXNzaW9uIGZ1bmN0aW9ucyBiZWZv cmUgYW4gYW5vdGhlcgo+ICtAQCAtMTkzLDEwICsxOTMsMTAgQEAgaW50IGNnaV9zZXNzaW9uX2Rl c3Ryb3koKQo+ICsgCQlzZXNzX2Zpbml0aWFsaXplZCA9IDA7Cj4gKyAJCXNsaXN0X2ZyZWUoJnNl c3NfbGlzdF9zdGFydCk7Cj4gKyAKPiArLQkJLy8gaGhobW1tLi4gCj4gKy0JCWlmIChoZWFkZXJz X2luaXRpYWxpemVkKSAKPiArKwkJLy8gaGhobW1tLi4KPiArKwkJaWYgKGhlYWRlcnNfaW5pdGlh bGl6ZWQpCj4gKyAJCQlsaWJjZ2lfZXJyb3IoRV9XQVJOSU5HLCAiSGVhZGVycyBhbHJlYXkgc2Vu dC4gc2Vzc2lvbl9kZXN0cm95KCkgY2FuJ3QgZnVsbHkgdW5yZWdpc3RlciB0aGUgc2Vzc2lvbiIp Owo+ICstCQllbHNlIAo+ICsrCQllbHNlCj4gKyAJCQljZ2lfYWRkX2Nvb2tpZShTRVNTSU9OX0NP T0tJRV9OQU1FLCAiIiwgMCwgMCwgMCwgMCk7Cj4gKyAKPiArIAkJcmV0dXJuIDE7Cj4gK0BAIC0y MTMsOSArMjEzLDkgQEAgaW50IGNnaV9zZXNzaW9uX2Rlc3Ryb3koKQo+ICsgaW50IHNlc3NfZmls ZV9yZXdyaXRlKCkKPiArIHsKPiArIAlmb3JtdmFycyAqZGF0YTsKPiArLQkKPiArKwo+ICsgCWNn aV9pbml0X2hlYWRlcnMoKTsKPiArLQkKPiArKwo+ICsgCS8vIFJld3JpdGVzIGFsbCBkYXRhIHRv IHNlc3Npb24gZmlsZQo+ICsgCXNlc3NfZmlsZSA9IGZvcGVuKHNlc3NfZm5hbWUsICJ3Iik7Cj4g KyAKPiArQEAgLTIyNiw3ICsyMjYsNyBAQCBpbnQgc2Vzc19maWxlX3Jld3JpdGUoKQo+ICsgCj4g KyAJCXJldHVybiAwOwo+ICsgCX0KPiArLQkKPiArKwo+ICsgCWRhdGEgPSBzZXNzX2xpc3Rfc3Rh cnQ7Cj4gKyAKPiArIAlpZiAoZGF0YSAhPSBOVUxMKSB7Cj4gK0BAIC0yNjAsMTAgKzI2MCwxMCBA QCBjaGFyICpjZ2lfc2Vzc2lvbl92YXIoY29uc3QgY2hhciAqdmFyX25hbWUpCj4gKyAKPiArIC8q Kgo+ICsgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgdGhhdCBMaWJDR0kgd2lsbCB1 c2UgdG8gc3RvcmUgc2Vzc2lvbidzIElELgo+ICstKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2Ug Y2dpX3Nlc3Npb25fc2F2ZV9wYXRoKCkuIAo+ICstKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbGV0IHlv dSB0byB1c2UgIGRpZmZlcmVudCBuYW1lcyBmb3IgZWFjaCBzaXRlLCBidXQgcmVtZW1iZXIsIHlv dSBjYW5ub3QgCj4gKy0qIHVzZSBtdWx0aXBsZSBzZXNzaW9uIGZvciB0aGUgc2FtZSBhcHBsaWNh dGlvbiB5ZXQuIAo+ICstKiAKPiArKyogVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIGNnaV9zZXNz aW9uX3NhdmVfcGF0aCgpLgo+ICsrKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbGV0IHlvdSB0byB1c2Ug IGRpZmZlcmVudCBuYW1lcyBmb3IgZWFjaCBzaXRlLCBidXQgcmVtZW1iZXIsIHlvdSBjYW5ub3QK PiArKyogdXNlIG11bHRpcGxlIHNlc3Npb24gZm9yIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHlldC4K PiArKyoKPiArICogQHBhcmFtIGNvb2tpZV9uYW1lIE5hbWUgb2YgdGhlIGNvb2tpZSB0byBjcmVh dGUKPiArICogQHNlZSBjZ2lfc2Vzc2lvbl9zYXZlX3BhdGgoKQo+ICsgKiBAbm90ZSBUaGlzIGZ1 bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjZ2lfc2Vzc2lvbl9zdGFydCgpCj4gK0BAIC0y NzYsMjMgKzI3NiwyMyBAQCB2b2lkIGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lKGNvbnN0IGNoYXIg KmNvb2tpZV9uYW1lKQo+ICsgLyoqCj4gKyAqIERlZmluZXMgd2hlcmUgc2Vzc2lvbiBjb250cm9s IGZpbGVzIHdpbGwgYmUgc2F2ZWQuCj4gKyAqIElmIGluIHRoZSB5b3VyIENHSSB5b3UgZG9uJ3Qg bWFrZSBhIGNhbGwgdG8gY2dpX3Nlc3Npb25fc2F2ZV9wYXRoKCksIExpYkNHSSB3aWxsCj4gKy0q IHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggaXMgIi90bXAvIi4gVG8gc2VlIGhvdyB0byBt b2RpZnkgdGhlIHZhbHVlLCBzZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlLiAKPiArKyogdXNlIHRo ZSBkZWZhdWx0IHZhbHVlLCB3aGljaCBpcyAiL3RtcC8iLiBUbyBzZWUgaG93IHRvIG1vZGlmeSB0 aGUgdmFsdWUsIHNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCj4gKyAqIDxicj5KdXN0IG5vdGUg eW91IG5lZWQgdG8gYWRkICcvJyBhdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkgbmFtZQo+ICsg KiBcY29kZQo+ICsgKiAvLyB5b3VyX2NnaS5jCj4gKy0qIC8vIFNldCAic2Vzc2lvbl9maWxlcyIg ZGlyZWN0b3J5IHVuZGVyIHlvdXIgQ0dJIGRpcmVjdG9yeSBhcyB0aGUgcGF0aCAKPiArKyogLy8g U2V0ICJzZXNzaW9uX2ZpbGVzIiBkaXJlY3RvcnkgdW5kZXIgeW91ciBDR0kgZGlyZWN0b3J5IGFz IHRoZSBwYXRoCj4gKyAqIC8vIHdoaWNoIExpYkNHSSB3aWxsIHVzZSB0byBzdG9yZSBzZXNzaW9u IGZpbGVzLgo+ICstKiAKPiArKyoKPiArICogY2dpX3Nlc3Npb25fc2F2ZV9wYXRoKCJzZXNzaW9u X2ZpbGVzLyIpOwo+ICsgKiAgXGVuZGNvZGUKPiArLSogIAo+ICstKiAgTm90ZSB0aGF0IHVzaW5n IHRoaXMgZm9ybSwgTGliQ0dJIHdpbGwgc2VhcmNoIGZvciAic2Vzc2lvbl9maWxlcyIgZGlyZWN0 b3J5IHVzaW5nIHJlbGF0aXZlIHBhdGggCj4gKysqCj4gKysqICBOb3RlIHRoYXQgdXNpbmcgdGhp cyBmb3JtLCBMaWJDR0kgd2lsbCBzZWFyY2ggZm9yICJzZXNzaW9uX2ZpbGVzIiBkaXJlY3Rvcnkg dXNpbmcgcmVsYXRpdmUgcGF0aAo+ICsgKiAgdG8geW91ciBjZ2kgYXBwbGljYXRpb24uIEZvciBl eGFtcGxlLCBpZiB5b3VyIENHSSBzY3JpcHQgaXMgbG9jYXRlZCBhdAo+ICsgKiAgL3Vzci9sb2Nh bC9odHRwZC93ZWIveW91cl9uYW1lL2NnaS1iaW4vIGRpcmVjdG9yeSwgYW5kIHlvdSB1c2UgdGhl IGFib3ZlIGRlY2xhcmF0aW9uLCB0aGUgZmlsZXMgZm9yIHRoZSBzZXNzaW9uIHdpbGwgYmUKPiAr LSogc3RvcmVkIGF0ICAvdXNyL2xvY2FsL2h0dHBkL3dlYi95b3VyX25hbWUvY2dpLWJpbi9zZXNz aW9uX2ZpbGVzIGRpcmVjdG9yeS4gCj4gKysqIHN0b3JlZCBhdCAgL3Vzci9sb2NhbC9odHRwZC93 ZWIveW91cl9uYW1lL2NnaS1iaW4vc2Vzc2lvbl9maWxlcyBkaXJlY3RvcnkuCj4gKyAqIFJlc3Vt aW5nLCB0aGUgcGF0aCBpcyByZWxhdGl2ZSB0byB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHJlc2lk ZXMuIDxicj48YnI+QW5kIHJlbWVtYmVyLCBMaWJDR0kgXGIgZG9lcyBcYiBub3QKPiArLSogY3Jl YXRlIHRoZSBkaXJlY3RvcnkgZm9yIHlvdS4gCj4gKy0qIAo+ICsrKiBjcmVhdGUgdGhlIGRpcmVj dG9yeSBmb3IgeW91Lgo+ICsrKgo+ICsgKiBAcGFyYW0gcGF0aCBQYXRoLCByZWxhdGl2ZSBvciBh YnNvbHV0ZQo+ICsgKiBAc2VlIGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lCj4gKyAqIEBub3RlIFRo aXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNnaV9zZXNzaW9uX3N0YXJ0KCkKPiAr QEAgLTMxMywxMiArMzEzLDEyIEBAIHZvaWQgY2dpX3Nlc3Npb25fc2F2ZV9wYXRoKGNvbnN0IGNo YXIgKnBhdGgpCj4gKyBpbnQgY2dpX3Nlc3Npb25fcmVnaXN0ZXJfdmFyKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnZhbHVlKQo+ICsgewo+ICsgCWZvcm12YXJzICpkYXRhOwo+ICstCQo+ ICsrCj4gKyAJaWYgKCFzZXNzX2luaXRpYWxpemVkKSB7Cj4gKyAJCXNlc3Npb25fbGFzdGVycm9y ID0gU0VTU19OT1RfSU5JVElBTElaRUQ7Cj4gKyAKPiArIAkJbGliY2dpX2Vycm9yKEVfV0FSTklO Rywgc2Vzc2lvbl9lcnJvcl9tZXNzYWdlW3Nlc3Npb25fbGFzdGVycm9yXSk7Cj4gKy0JCQo+ICsr Cj4gKyAJCXJldHVybiAwOwo+ICsgCX0KPiArIAo+ICtAQCAtMzI4LDE0ICszMjgsMTQgQEAgaW50 IGNnaV9zZXNzaW9uX3JlZ2lzdGVyX3Zhcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2 YWx1ZSkKPiArIAkJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19PUEVOX0ZJTEU7Cj4gKyAKPiAr IAkJCWxpYmNnaV9lcnJvcihFX1dBUk5JTkcsIHNlc3Npb25fZXJyb3JfbWVzc2FnZVtzZXNzaW9u X2xhc3RlcnJvcl0pOwo+ICstCQkJCj4gKysKPiArIAkJCXJldHVybiAwOwo+ICsgCQl9Cj4gKy0J CQo+ICsrCj4gKyAJCWRhdGEgPSAoZm9ybXZhcnMgKiltYWxsb2Moc2l6ZW9mKGZvcm12YXJzKSk7 Cj4gKyAJCWlmICghZGF0YSkKPiArIAkJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIiVzLCBsaW5l ICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsKPiArLQkJCj4gKysKPiArIAkJZGF0YS0+bmFtZSA9 IChjaGFyICopbWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOwo+ICsgCQlpZiAoIWRhdGEtPm5hbWUp Cj4gKyAJCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIsIF9fRklMRV9fLCBf X0xJTkVfXyk7Cj4gK0BAIC0zNTAsMTAgKzM1MCwxMCBAQCBpbnQgY2dpX3Nlc3Npb25fcmVnaXN0 ZXJfdmFyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQo+ICsgCj4gKyAJCXN0 cm5jcHkoZGF0YS0+bmFtZSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKPiArIAkJZGF0YS0+bmFtZVtz dHJsZW4obmFtZSldID0gJ1wwJzsKPiArLQkJCj4gKysKPiArIAkJc3RybmNweShkYXRhLT52YWx1 ZSwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOwo+ICsgCQlkYXRhLT52YWx1ZVtzdHJsZW4odmFsdWUp XSA9ICdcMCc7Cj4gKy0JCQo+ICsrCj4gKyAJCWlmICghc2Vzc19saXN0X2xhc3QpCj4gKyAJCQlm cHJpbnRmKHNlc3NfZmlsZSwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOwo+ICsgCQllbHNlCj4gK0BA IC0zODEsMTIgKzM4MSwxMiBAQCBpbnQgY2dpX3Nlc3Npb25fYWx0ZXJfdmFyKGNvbnN0IGNoYXIg Km5hbWUsIGNvbnN0IGNoYXIgKm5ld192YWx1ZSkKPiArIHsKPiArIAlyZWdpc3RlciBmb3JtdmFy cyAqZGF0YTsKPiArIAl1bnNpZ25lZCBpbnQgdmFsdWVfbGVuOwo+ICstCQo+ICsrCj4gKyAJZGF0 YSA9IHNlc3NfbGlzdF9zdGFydDsKPiArIAl3aGlsZSAoZGF0YSkgewo+ICsgCQlpZiAoIXN0cmNt cChkYXRhLT5uYW1lLCBuYW1lKSkgewo+ICsgCQkJdmFsdWVfbGVuID0gc3RybGVuKG5ld192YWx1 ZSkgKyAxOwo+ICstCQkJCj4gKysKPiArIAkJCWlmICh2YWx1ZV9sZW4gPiBzdHJsZW4oZGF0YS0+ dmFsdWUpKSB7Cj4gKyAJCQkJZGF0YS0+dmFsdWUgPSByZWFsbG9jKGRhdGEtPnZhbHVlLCB2YWx1 ZV9sZW4rMSk7Cj4gKyAJCQkJaWYgKCFkYXRhLT52YWx1ZSkKPiArQEAgLTM5Niw3ICszOTYsNyBA QCBpbnQgY2dpX3Nlc3Npb25fYWx0ZXJfdmFyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg Km5ld192YWx1ZSkKPiArIAo+ICsgCQkJc3RybmNweShkYXRhLT52YWx1ZSwgbmV3X3ZhbHVlLCB2 YWx1ZV9sZW4pOwo+ICsgCQkJZGF0YS0+dmFsdWVbdmFsdWVfbGVuXSA9ICdcMCc7Cj4gKy0JCQkK PiArKwo+ICsgCQkJc2Vzc19maWxlX3Jld3JpdGUoKTsKPiArIAo+ICsgCQkJcmV0dXJuIDE7Cj4g K0BAIC00MDQsOSArNDA0LDkgQEAgaW50IGNnaV9zZXNzaW9uX2FsdGVyX3Zhcihjb25zdCBjaGFy ICpuYW1lLCBjb25zdCBjaGFyICpuZXdfdmFsdWUpCj4gKyAKPiArIAkJZGF0YSA9IGRhdGEtPm5l eHQ7Cj4gKyAJfQo+ICstCQo+ICsrCj4gKyAJc2Vzc2lvbl9sYXN0ZXJyb3IgPSBTRVNTX1ZBUl9O T1RfUkVHSVNURVJFRDsKPiArLQkKPiArKwo+ICsgCXJldHVybiAwOwo+ICsgfQo+ICsgCj4gK0BA IC00MzcsNyArNDM3LDcgQEAgaW50IGNnaV9zZXNzaW9uX3VucmVnaXN0ZXJfdmFyKGNoYXIgKm5h bWUpCj4gKyAJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19OT1RfSU5JVElBTElaRUQ7Cj4gKyAK PiArIAkJbGliY2dpX2Vycm9yKEVfV0FSTklORywgc2Vzc2lvbl9lcnJvcl9tZXNzYWdlW3Nlc3Np b25fbGFzdGVycm9yXSk7Cj4gKy0JCQo+ICsrCj4gKyAJCXJldHVybiAwOwo+ICsgCX0KPiArIAo+ ICtAQCAtNDQ5LDcgKzQ0OSw3IEBAIGludCBjZ2lfc2Vzc2lvbl91bnJlZ2lzdGVyX3ZhcihjaGFy ICpuYW1lKQo+ICsgCQlyZXR1cm4gMDsKPiArIAl9Cj4gKyAKPiArLQlpZiAoIXNlc3NfZmlsZV9y ZXdyaXRlKCkpIAo+ICsrCWlmICghc2Vzc19maWxlX3Jld3JpdGUoKSkKPiArIAkJcmV0dXJuIDA7 Cj4gKyAKPiArIAlyZXR1cm4gMTsKPiArQEAgLTQ1Nyw3ICs0NTcsNyBAQCBpbnQgY2dpX3Nlc3Np b25fdW5yZWdpc3Rlcl92YXIoY2hhciAqbmFtZSkKPiArIAo+ICsgLyoqCj4gKyAqIFN0YXJ0cyBh IG5ldyBzZXNzaW9uLgo+ICstKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzdGFy dGluZyBhbmQgY3JlYXRpbmcgYSBuZXcgCj4gKysqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2li bGUgZm9yIHN0YXJ0aW5nIGFuZCBjcmVhdGluZyBhIG5ldwo+ICsgKiBzZXNzaW9uLiBJdCBtdXN0 IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHNlc3Npb24gZnVuY3Rpb24sCj4gKyAqIGFuZCBl dmVyeSB0aW1lIGJlZm9yZSBhbnkgSFRNTCBoZWFkZXIgaGFzIHNlbnQuCj4gKyAqIEBzZWUgc2Vz c2lvbl9kZXN0cm95KCkKPiArQEAgLTQ3MiwxMyArNDcyLDEzIEBAIGludCBjZ2lfc2Vzc2lvbl9z dGFydCgpCj4gKyAJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19TVEFSVEVEOwo+ICsgCj4gKyAJ CWxpYmNnaV9lcnJvcihFX1dBUk5JTkcsIHNlc3Npb25fZXJyb3JfbWVzc2FnZVtzZXNzaW9uX2xh c3RlcnJvcl0pOwo+ICstCQkKPiArKwo+ICsgCQlyZXR1cm4gMDsKPiArIAl9Cj4gKy0JCj4gKysK PiArIAlpZiAoaGVhZGVyc19pbml0aWFsaXplZCkgewo+ICsgCQlzZXNzaW9uX2xhc3RlcnJvciA9 IFNFU1NfSEVBREVSU19TRU5UOwo+ICstCQkKPiArKwo+ICsgCQlsaWJjZ2lfZXJyb3IoRV9XQVJO SU5HLCBzZXNzaW9uX2Vycm9yX21lc3NhZ2Vbc2Vzc2lvbl9sYXN0ZXJyb3JdKTsKPiArIAo+ICsg CQlyZXR1cm4gMDsKPiArQEAgLTQ4Nyw3ICs0ODcsNyBAQCBpbnQgY2dpX3Nlc3Npb25fc3RhcnQo KQo+ICsgCS8vIEdldCB0aGUgc2Vzc2lvbiBJRAo+ICsgCXNpZCA9IGNnaV9jb29raWVfdmFsdWUo U0VTU0lPTl9DT09LSUVfTkFNRSk7Cj4gKyAKPiArLQkvLyBJZiB0aGVyZSBpc24ndCBhIHNlc3Np b24gSUQsIHdlIG5lZWQgdG8gY3JlYXRlIG9uZSAKPiArKwkvLyBJZiB0aGVyZSBpc24ndCBhIHNl c3Npb24gSUQsIHdlIG5lZWQgdG8gY3JlYXRlIG9uZQo+ICsgCWlmIChzaWQgPT0gTlVMTCkgewo+ ICsgCQlpZiAoc2Vzc19jcmVhdGVfZmlsZSgpKSB7Cj4gKyAJCQljZ2lfYWRkX2Nvb2tpZShTRVNT SU9OX0NPT0tJRV9OQU1FLCBzZXNzX2lkLCAwLCAwLCAwLCAwKTsKPiArQEAgLTUwMiwxNyArNTAy LDE3IEBAIGludCBjZ2lfc2Vzc2lvbl9zdGFydCgpCj4gKyAJLy8gTWFrZSBzdXJlIHRoZSBmaWxl IGV4aXN0cwo+ICsgCWVsc2Ugewo+ICsgCQlzYXZlX3BhdGhfbGVuID0gc3RybGVuKFNFU1NJT05f U0FWRV9QQVRIKSArIHN0cmxlbihTRVNTSU9OX0ZJTEVfUFJFRklYKTsKPiArLQkJCj4gKysKPiAr IAkJc2Vzc19mbmFtZSA9IChjaGFyICopbWFsbG9jKHNhdmVfcGF0aF9sZW4gKyBTRVNTX0lEX0xF TiArIDEpOwo+ICsgCQlpZiAoIXNlc3NfZm5hbWUpCj4gKyAJCQlsaWJjZ2lfZXJyb3IoRV9NRU1P UlksICJGaWxlICVzLCBsaW5lICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsKPiArLQkKPiArKwo+ ICsgCQlzbnByaW50ZihzZXNzX2ZuYW1lLCAoU0VTU19JRF9MRU4gKyBzYXZlX3BhdGhfbGVuICsg MSksICIlcyVzJXMiLCBTRVNTSU9OX1NBVkVfUEFUSCwgU0VTU0lPTl9GSUxFX1BSRUZJWCwgc2lk KTsKPiArIAkJc2Vzc19mbmFtZVtTRVNTX0lEX0xFTiArIHNhdmVfcGF0aF9sZW5dID0gJ1wwJzsK PiArLQkJCj4gKy0JCWVycm5vID0gMDsJCQo+ICsrCj4gKysJCWVycm5vID0gMDsKPiArIAkJZnAg PSBmb3BlbihzZXNzX2ZuYW1lLCAiciIpOwo+ICstCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7IAo+ ICsrCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7Cj4gKyAJCQkvLyBUaGUgZmlsZSBkb2Vzbid0IGV4 aXN0cy4gQ3JlYXRlIGEgbmV3IHNlc3Npb24KPiArIAkJCWlmIChzZXNzX2NyZWF0ZV9maWxlKCkp IHsKPiArIAkJCQljZ2lfYWRkX2Nvb2tpZShTRVNTSU9OX0NPT0tJRV9OQU1FLCBzZXNzX2lkLCAw LCAwLCAwLCAwKTsKPiArQEAgLTUzMiwxNSArNTMyLDE1IEBAIGludCBjZ2lfc2Vzc2lvbl9zdGFy dCgpCj4gKyAJc2Vzc19pZFtTRVNTX0lEX0xFTl0gPSAnXDAnOwo+ICsgCj4gKyAJLy8gTm93IHdl IG5lZWQgdG8gcmVhZCBhbGwgdGhlIGZpbGUgY29udGVudHMKPiArLQkvLyBUaGlzIGlzIGEgdGVt cG9yYXJ5IHNvbHV0aW9uLCBJJ2xsIHRyeSB0byAKPiArKwkvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5 IHNvbHV0aW9uLCBJJ2xsIHRyeSB0bwo+ICsgCS8vIG1ha2UgYSBmYXN0ZXIgaW1wbGVtZW50YXRp b24KPiArIAlzdGF0KHNlc3NfZm5hbWUsICZzdCk7Cj4gKyAJYnVmID0gKGNoYXIgKiltYWxsb2Mo c3Quc3Rfc2l6ZSArIDIpOwo+ICsgCWlmICghYnVmKQo+ICsgCQlsaWJjZ2lfZXJyb3IoRV9NRU1P UlksICJGaWxlICVzLCBsaW5lICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsKPiArLQkJCj4gKysK PiArIAlmZ2V0cyhidWYsIHN0LnN0X3NpemUrMSwgZnApOwo+ICstCQkKPiArKwo+ICsgCWlmIChi dWYgIT0gTlVMTCAmJiBzdHJsZW4oYnVmKSA+IDEpCj4gKyAJCXByb2Nlc3NfZGF0YShidWYsICZz ZXNzX2xpc3Rfc3RhcnQsICZzZXNzX2xpc3RfbGFzdCwgJz0nLCAnOycpOwo+ICsgCj4gK0BAIC01 NTEsNiArNTUxLDYgQEAgaW50IGNnaV9zZXNzaW9uX3N0YXJ0KCkKPiArIAlyZXR1cm4gMTsKPiAr IH0KPiArIAo+ICstLyoqIAo+ICsrLyoqCj4gKyAqIEB9Cj4gKyAqLwo+ICtkaWZmIC0tZ2l0IGEv c3JjL3N0cmluZy5jIGIvc3JjL3N0cmluZy5jCj4gK2luZGV4IDNkYzQzN2YuLmUyYmJhOTcgMTAw NjQ0Cj4gKy0tLSBhL3NyYy9zdHJpbmcuYwo+ICsrKysgYi9zcmMvc3RyaW5nLmMKPiArQEAgLTMx LDcgKzMxLDcgQEAKPiArIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKPiArICogCQkJCQlTVFJJTkcgR1JPVVAKPiArICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArLS8qKiAK PiArKy8qKgo+ICsgKiBAZGVmZ3JvdXAgbGliY2dpX3N0cmluZyBTdHJpbmdzCj4gKyAqIEdlbmVy YWwgc3RyaW5nIG1hbmlwdWxhdGlvbiBhbmQgdXRpbGl0aWVzIGZ1bmN0aW9ucwo+ICsgKiBAewo+ ICtAQCAtNDAsMTIgKzQwLDEyIEBACj4gKyAvKioKPiArICogU2FtZSB0byBhZGRzbGFzaGVzKCks IGV4Y2VwdCB0aGF0IHRoaXMgb25lIG9ubHkgZG8gdGhlIGFjdGlvbiB3aGlsZSAnbicgaXMgZ3Jl YXQgdGhhbiAwLgo+ICsgKiBAcGFyYW0gcyBTdHJpbmcgdG8gcGFyc2UKPiArLSogQHBhcmFtIG4g TnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd29yayB3aXRoLiAKPiArKyogQHBhcmFtIG4gTnVtYmVy IG9mIGNoYXJhY3RlcnMgdG8gd29yayB3aXRoLgo+ICsgKiBAc2VlIGFkZHNsYXNoZXMoKQo+ICsg KiBcY29kZQo+ICsgKiBjaGFyICpuYW1lID0gIk15IHRlc3Qgc3RyaW5nIGlzIGNhbGxlZCBcImZv b2JhclwiIjsKPiArICogcHV0cyhuYW1lKTsgLy8gd2lsbCBkaXNwbGF5IE15IHRlc3Qgc3RyaW5n IGlzIGNhbGxlZCAiZm9vYmFyIgo+ICstKiAKPiArKyoKPiArICogbmFtZSA9IGFkZG5zbGFzaGVz KG5hbWUsIDMxKTsKPiArICogcHV0cyhuYW1lKTsgLy8gd2lsbCBkaXNwbGF5IE15IHRlc3Qgc3Ry aW5nIGlzIGNhbGxlZCBcImZvb2JhciIKPiArICogXGVuZGNvZGUKPiArQEAgLTgxLDcgKzgxLDcg QEAgY2hhciAqYWRkbnNsYXNoZXMoY2hhciAqcywgaW50IG4pCj4gKyAJcmV0dXJuIHRtcDsKPiAr IH0KPiArIAo+ICstLyoqIAo+ICsrLyoqCj4gKyAqIEFkZCBzbGFzaGVzIHRvIGEgc3RyaW5nIHdo ZW4gbmVjZXNzYXJ5Lgo+ICsgKiBBZGRzIGEgJ1wnIGluIGV2ZXJ5IHF1b3RlICggIiApLCBhcG9z dHJvcGhlICggJyApIG9yICBiYWNrc2xhc2ggKCBcICkKPiArICogSXQncyB1c2VmdWwgd2hlbiB3 b3JraW5nIHdpdGggZGF0YWJhc2VzLCBmb3IgZXhhbXBsZSwgYmVjYXVzZQo+ICtAQCAtOTMsNyAr OTMsNyBAQCBjaGFyICphZGRuc2xhc2hlcyhjaGFyICpzLCBpbnQgbikKPiArICogXGNvZGUKPiAr ICogY2hhciAqbmFtZSA9ICJNeSB0ZXN0IHN0cmluZyBpcyBjYWxsZWQgXCJmb29iYXJcIiI7Cj4g KyAqIHB1dHMobmFtZSk7IC8vIHdpbGwgZGlzcGxheSBNeSB0ZXN0IHN0cmluZyBpcyBjYWxsZWQg ImZvb2JhciIKPiArLSogCj4gKysqCj4gKyAqIG5hbWUgPSBhZGRzbGFzaGVzKG5hbWUpOwo+ICsg KiBwdXRzKG5hbWUpOyAvLyB3aWxsIGRpc3BsYXkgTXkgdGVzdCBzdHJpbmcgaXMgY2FsbGVkIFwi Zm9vYmFyXCIKPiArICogXGVuZGNvZGUKPiArQEAgLTEzMSw3ICsxMzEsNyBAQCBjaGFyICpzdHJp cG5zbGFzaGVzKGNoYXIgKnMsIGludCBuKQo+ICsgCQlyZXR1cm4gTlVMTDsKPiArIAo+ICsgCXdo aWxlICgqcykgewo+ICstCQlpZiAoKG4tLSA+IDApICYmICgqcyA9PSAnXFwnKSkgCj4gKysJCWlm ICgobi0tID4gMCkgJiYgKCpzID09ICdcXCcpKQo+ICsgCQkJcysrOwo+ICsgCQl0bXBbaisrXSA9 ICpzKys7Cj4gKyAJfQo+ICtAQCAtMjMzLDEwICsyMzMsMTAgQEAgdm9pZCB0cmltKGNoYXIgKnN0 cikKPiArICogQ29weSBwYXJ0IG9mIGEgc3RyaW5nLgo+ICsgKiBDb3B5ICBjb3VudCBjaGFyYWN0 ZXJzIGZyb20gc3JjLCBzdGFydGluZyBmcm9tIHN0YXJ0Cj4gKyAqIEBwYXJhbSBzcmMgU3RyaW5n IHRvIGNvcHkgZnJvbQo+ICstKiBAcGFyYW0gc3RhcnQgSW5pdGlhbCBvZmZzZXQgCj4gKysqIEBw YXJhbSBzdGFydCBJbml0aWFsIG9mZnNldAo+ICsgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIGNo YXJzIHRvIGNvcHkKPiArICogQHJldHVybiBUaGUgbmV3IHN0cmluZwo+ICstKiAKPiArKyoKPiAr ICogXGNvZGUKPiArICogY2hhciAqcGFydCwgKnN0ciA9ICJUZXN0IG9uZSwgdGVzdCB0d28iOwo+ ICsgKiBwYXJ0ID0gc3Vic3RyKHN0ciwgMSwgNSk7Cj4gK0BAIC0yNjUsMTIgKzI2NSwxMiBAQCBj aGFyICpzdWJzdHIoY2hhciAqc3JjLCBjb25zdCBpbnQgc3RhcnQsIGNvbnN0IGludCBjb3VudCkK PiArICogIGFuZCBzdG9yaW5nIHRoZSB0b3RhbCBvZiBwaWVjZXMgaW4gdG90YWwKPiArICogQHBh cmFtIHNyYyBTdHJpbmcgdG8gcGFyc2UKPiArICogQHBhcmFtIHRva2VuIENoYXJhY3RlciBkZWxp bWl0ZXIgdG8gc2VhcmNoLgo+ICstKiBAcGFyYW0gdG90YWwgQW4gaW50ZWdlciB2YXJpYWJsZSBw YXNzZWQgYXMgcmVmZXJlbmNlLCB3aGljaCBzdG9yZXMgdGhlIHRvdGFsIG9mIAo+ICsrKiBAcGFy YW0gdG90YWwgQW4gaW50ZWdlciB2YXJpYWJsZSBwYXNzZWQgYXMgcmVmZXJlbmNlLCB3aGljaCBz dG9yZXMgdGhlIHRvdGFsIG9mCj4gKyAqIGl0ZW5zIG9mIHRoZSBhcnJheQo+ICsgKiBAcmV0dXJu IFRoZSBhcnJheSwgd2hlcmUgZWFjaCBpdGVtIGlzIG9uZSBzZXBhcmV0ZWQgYnkgdG9rZW4KPiAr LSogCj4gKysqCj4gKyAqIFxjb2RlCj4gKy0qICAKPiArKyoKPiArICogIGNoYXIgKipwaWVjZXM7 Cj4gKyAqICBjaGFyICpuYW1lID0gIlRoaXMsaXMsYSxzdHJpbmcsb2YsdGVzdCI7Cj4gKyAqICBp bnQgdG90YWwsIGk7Cj4gK0BAIC0yODAsMTQgKzI4MCwxNCBAQCBjaGFyICpzdWJzdHIoY2hhciAq c3JjLCBjb25zdCBpbnQgc3RhcnQsIGNvbnN0IGludCBjb3VudCkKPiArICogXGVuZGNvZGUKPiAr ICoqLwo+ICsgY2hhciAqKmV4cGxvZGUoY2hhciAqc3JjLCBjb25zdCBjaGFyICp0b2tlbiwgaW50 ICp0b3RhbCkKPiArLXsJCj4gKyt7Cj4gKyAJY2hhciAqKnN0cjsKPiArIAlyZWdpc3RlciBpbnQg aSwgaiwgY291bnQsIGl0ZW0sIHN0YXJ0Owo+ICsgCWludCBsZW47Cj4gKyAKPiArIAlpZiAoIXNy YyB8fCAhdG9rZW4pIHsKPiArIAkJKnRvdGFsID0gMDsKPiArLQkJCj4gKysKPiArIAkJcmV0dXJu IE5VTEw7Cj4gKyAJfQo+ICsgCj4gK0BAIC0zNDgsNyArMzQ4LDcgQEAgY2hhciAqKmV4cGxvZGUo Y2hhciAqc3JjLCBjb25zdCBjaGFyICp0b2tlbiwgaW50ICp0b3RhbCkKPiArIAo+ICsgLyoqCj4g KyAqIFJlcGxhY2UgY2hhcmFjdGVyZXMgaW4gYSBzdHJpbmcsIGJ1dCBub3QgbW9yZSB0aGFuICdu Jy4KPiArLSogIFJlcGxhY2UgYWxsIG9jY291cmVuY2VzIG9mICpkZWxpbSBvbiAqc3JjIHdpdGgg Y2hhcmFjdGVyZXMgcG9pbnRlZCBieSAqd2l0aCwgCj4gKysqICBSZXBsYWNlIGFsbCBvY2NvdXJl bmNlcyBvZiAqZGVsaW0gb24gKnNyYyB3aXRoIGNoYXJhY3RlcmVzIHBvaW50ZWQgYnkgKndpdGgs Cj4gKyAqICBzdG9wcGluZyBhZnRlciAnbicgY2hhci4KPiArICogIEBwYXJhbSAqc3JjIFN0cmlu ZyB0byBwYXJzZQo+ICsgKiAgQHBhcmFtICpkZWxpbSBDaGFyYWN0ZXIgdG8gc2VhcmNoIHRoYXQg d2lsbCBiZSByZXBsYWNlZAo+ICtAQCAtMzU2LDcgKzM1Niw3IEBAIGNoYXIgKipleHBsb2RlKGNo YXIgKnNyYywgY29uc3QgY2hhciAqdG9rZW4sIGludCAqdG90YWwpCj4gKyAqICBAcGFyYW0gbiBN YXhpbXVtIG51bWJlciBvZiBjaGFycyB0byBwYXJzZQo+ICsgKiAgQHJldHVybiBUaGUgbmV3IHN0 cmluZwo+ICsgKiAgQHNlZSBzdHJfcmVwbGFjZQo+ICstKiAgCj4gKysqCj4gKyAqICBcY29kZQo+ ICsgKiAgY2hhciAqbGludXggPSAiTGludXggQyI7Cj4gKyAqICBsaW51eCA9IHN0cl9ucmVwbGFj ZShsaW51eCwgIkMiLCAiQ29vbCIsIHN0cmxlbihsaW51eCkpOwo+ICtAQCAtNDE0LDcgKzQxNCw3 IEBAIGNoYXIgKnN0cl9ucmVwbGFjZShjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlbGltLCBjb25z dCBjaGFyICp3aXRoLCBpbnQgbikKPiArIC8qKgo+ICsgKiBSZXBsYWNlIGNoYXJhY3RlcmVzIGlu IGEgc3RyaW5nLgo+ICsgKiAgUmVwbGFjZSBhbGwgb2Njb3VyZW5jZXMgb2YgKmRlbGltIG9uICpz cmMgd2l0aCBjaGFyYWN0ZXJlcyBwb2ludGVkIGJ5ICp3aXRoLgo+ICstKiAgVGhlIHByb2JsZW0g d2l0aCB0aGUgZm9sb3dpbmcgY29kZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvbmx5IHNlYXJjaGVz IGZvciB0aGUgCj4gKysqICBUaGUgcHJvYmxlbSB3aXRoIHRoZSBmb2xvd2luZyBjb2RlIGlzIHRo YXQgdGhlIGZ1bmN0aW9uIG9ubHkgc2VhcmNoZXMgZm9yIHRoZQo+ICsgKiAgZmlyc3QgY2FyYWN0 ZXIgb2YgKmRlbGltLCBpbmdvcmluZyB0aGUgcmVzdC4gT3RoZXIgcHJvYmxlbSBpcyBzcGVlZCBy ZWxhY2lvbmVkOgo+ICsgKiAgbm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBldmVyIGNvbXBhcmUgdGhl IGxlbmd0aCBvZiAqd2l0aCB0byBkbyB0aGUgY29ycmVjdCBhY3Rpb24uCj4gKyAqICBAcGFyYW0g c3JjIFN0cmluZyB0byBwYXJzZQo+ICtAQCAtNDIyLDcgKzQyMiw3IEBAIGNoYXIgKnN0cl9ucmVw bGFjZShjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlbGltLCBjb25zdCBjaGFyICp3aXRoLCBpbnQg bikKPiArICogIEBwYXJhbSB3aXRoIFN0cmluZyB0byByZXBsYWNlIHdpdGgKPiArICogIEByZXR1 cm4gVGhlIG5ldyBzdHJpbmcKPiArICogIEBzZWUgc3RyX25yZXBsYWNlCj4gKy0qICAKPiArKyoK PiArICogIFxjb2RlCj4gKyAqICBjaGFyICpsaW51eCA9ICJMaW51eCBDIjsKPiArICogIGxpbnV4 ID0gc3RyX3JlcGxhY2UobGludXgsICJDIiwgIkNvb2wiKTsKPiArQEAgLTQ1NCwxNCArNDU0LDE0 IEBAIGNoYXIgKnJlcGxhY2UoY2hhciAqc3RyLCBjb25zdCBjaGFyICpkZWxpbSwgY29uc3QgY2hh ciAqd2l0aCkKPiArIGludCBzdHJucG9zKGNoYXIgKnMsIGNoYXIgKmNoLCB1bnNpZ25lZCBpbnQg Y291bnQpCj4gKyB7Cj4gKyAJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHBvcyA9IDAsIGk7Cj4gKy0J Cj4gKysKPiArIAlmb3IgKGkgPSAwOyBpIDw9IGNvdW50ICYmICpzOyBpKyspIHsKPiArIAkJaWYg KCpzKysgPT0gKmNoKQo+ICsgCQkJcmV0dXJuIHBvczsKPiArLQkJCj4gKysKPiArIAkJcG9zKys7 Cj4gKyAJfQo+ICstCQo+ICsrCj4gKyAJcmV0dXJuIC0xOwo+ICsgfQo+ICsgCj4gK0BAIC00ODUs MTMgKzQ4NSwxMyBAQCBpbnQgc3RycG9zKGNoYXIgKnMsIGNoYXIgKmNoKQo+ICsgKiAgQHBhcmFt IGNvdW50IE51bWJlciBvZiBjaGFyYWN0ZXJlcyB0byBkZWxldGUKPiArICogIEByZXR1cm4gVGhl IG5ldyBzdHJpbmcKPiArICogIEBzZWUgc3RybmRlbCgpCj4gKy0qIAo+ICsrKgo+ICsgKiAgXGNv ZGUKPiArICogICp0eHQgPSAiU29tZSB0ZXh0IHRvIHRlc3QgYW55dGhpbmciOwo+ICsgKiAgcHV0 cyh0eHQpOwo+ICsgKiAgdHh0ID0gc3RyZGVsKHR4dCwgMiwgOCk7Cj4gKyAqICBwdXRzKHR4dCk7 Cj4gKy0qIFxlbmRjb2RlICAgCj4gKysqIFxlbmRjb2RlCj4gKyAqKi8KPiArIGNoYXIgKnN0cmRl bChjaGFyICpzLCBpbnQgc3RhcnQsIGludCBjb3VudCkKPiArIHsKPiArQEAgLTUwOCw3ICs1MDgs NyBAQCBjaGFyICpzdHJkZWwoY2hhciAqcywgaW50IHN0YXJ0LCBpbnQgY291bnQpCj4gKyAJCWxp YmNnaV9lcnJvcihFX01FTU9SWSwgIiVzLCBsaW5lICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsK PiArIAo+ICsgCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewo+ICstCQlpZiAoKGkgPj0gc3Rh cnQpICYmIChpIDwgKHN0YXJ0K2NvdW50KSkpIAo+ICsrCQlpZiAoKGkgPj0gc3RhcnQpICYmIChp IDwgKHN0YXJ0K2NvdW50KSkpCj4gKyAJCQlzKys7Cj4gKyAJCWVsc2UKPiArIAkJCXRtcFtjb250 YWRvcisrXSA9ICpzKys7Cj4gK0BAIC01MzYsMzcgKzUzNiwzNyBAQCBjaGFyICpyZWN2bGluZShG SUxFICpzKQo+ICsgCXNpemVfdCBzaXogPSAwOwo+ICsgCj4gKyAJZm9yICg7IChjaCA9IGZnZXRj KHMpKSAhPSBFT0Y7IGkrKykgewo+ICstCQlpZiAoaSA9PSBzaXopIAo+ICsrCQlpZiAoaSA9PSBz aXopCj4gKyAJCQlidWYgPSByZWFsbG9jKGJ1Ziwgc2l6ICs9IEJVRlNJWik7Cj4gKy0JCQkKPiAr Kwo+ICsgCQlidWZbaV0gPSBjaDsKPiArLQkJCj4gKysKPiArIAkJaWYgKGJ1ZltpXSA9PSAnXG4n KSB7Cj4gKyAJCQlidWZbaV0gPSAnXDAnOwo+ICstCQkJCj4gKy0JCQlpZiAoaSA+IDAgJiYgYnVm W2ktMV0gPT0gJ1xyJykgCj4gKysKPiArKwkJCWlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAnXHIn KQo+ICsgCQkJCWJ1ZltpLTFdID0gJ1wwJzsKPiArLQkJCQkKPiArKwo+ICsgCQkJcmV0dXJuIGJ1 ZjsKPiArIAkJfQo+ICsgCX0KPiArLQkKPiArKwo+ICsgCWlmIChpID4gMCkgewo+ICsgCQlpZiAo aSA9PSBzaXopIGJ1ZiA9IHJlYWxsb2MoYnVmLCBzaXogKyAxKTsKPiArIAkJCWJ1ZltpXSA9ICdc MCc7Cj4gKy0JCQkKPiArKwo+ICsgCQlyZXR1cm4gYnVmOwo+ICsgCX0KPiArLQkKPiArKwo+ICsg CXJldHVybiBOVUxMOwo+ICsgfQo+ICsgCj4gKyAvKioKPiArICogTWFrZXMgYSBzdHJpbmcuCj4g KyAqIFdvcmtzIGxpa2UgcHJpbnRmKCksIHdpdGggdGhlIGRpZmZlcmVuY2UKPiArLSogdGhhdCBp dCByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdGhlIAo+ICsrKiB0aGF0IGl0IHJldHVybnMgYSBz dHJpbmcgdGhhdCBpcyB0aGUKPiArICogY29uY2F0ZW5hdGlvbiBvZiB0aGUgdmFsdWVzIHBhc3Nl ZCBhcyBwYXJhbWV0ZXIuCj4gKy0qIAo+ICsrKgo+ICsgKiBAcGFyYW0gKnMgSW5pY2lhbCBTdHJp bmcgYW5kIG9wdGlvbmFsbHkgZm9ybWF0YXRpb24gcGFyYW1ldGVycyAoIGp1c3QgJXMgaXMgYWxs b3dlZCApCj4gKyAqIEByZXR1cm4gVGhlIG5ldyBTdHJpbmcKPiArICogXGNvZGUKPiArQEAgLTU5 OSw3ICs1OTksNyBAQCBjaGFyICptYWtlX3N0cmluZyhjaGFyICpzLCAuLi4pCj4gKyAJCQkJCWJy ZWFrOwo+ICsgCQkJfQo+ICsgCQl9Cj4gKy0JCQo+ICsrCj4gKyAJCXN0cisrOwo+ICsgCX0KPiAr IAo+ICtAQCAtNjI4LDEzICs2MjgsMTMgQEAgY2hhciAqc3RyY2F0X2V4KGNvbnN0IGNoYXIgKnN0 cjEsIGNvbnN0IGNoYXIgKnN0cjIpCj4gKyAJbGVuID0gc3RybGVuKHN0cjEpICsgc3RybGVuKHN0 cjIpOwo+ICsgCj4gKyAJbmV3X3N0ciA9IChjaGFyICopbWFsbG9jKChsZW4gKyAxKSAqIHNpemVv ZihjaGFyKikpOwo+ICstCWlmICghbmV3X3N0cikgCj4gKysJaWYgKCFuZXdfc3RyKQo+ICsgCQls aWJjZ2lfZXJyb3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXyk7 Cj4gKyAKPiArIAlzcHJpbnRmKG5ld19zdHIsICIlcyVzIiwgc3RyMSwgc3RyMik7Cj4gKyAKPiAr IAluZXdfc3RyW2xlbl0gPSAnXDAnOwo+ICstCQo+ICsrCj4gKyAJcmV0dXJuIG5ld19zdHI7Cj4g KyB9Cj4gKyAKPiBkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTItZnJlZS1tZW1v cnktYWxsb2NhdGVkLWJ5LXVuZXNjYXBlX3NwZWNpYWxfY2hhcnMtYWZ0ZS5wYXRjaCBiL3BhdGNo ZXMvbGliY2dpLTEuMC8wMDEyLWZyZWUtbWVtb3J5LWFsbG9jYXRlZC1ieS11bmVzY2FwZV9zcGVj aWFsX2NoYXJzLWFmdGUucGF0Y2gKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLjE4NDYwMWQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvcGF0Y2hlcy9saWJjZ2ktMS4wLzAw MTItZnJlZS1tZW1vcnktYWxsb2NhdGVkLWJ5LXVuZXNjYXBlX3NwZWNpYWxfY2hhcnMtYWZ0ZS5w YXRjaAo+IEBAIC0wLDAgKzEsNjQgQEAKPiArRnJvbTogQWxleGFuZGVyIERhaGwgPHBvc3RAbGVz cG9ja3kuZGU+Cj4gK0RhdGU6IFdlZCwgMjQgT2N0IDIwMTIgMTE6MzE6MTAgKzAyMDAKPiArU3Vi amVjdDogW1BBVENIXSBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdW5lc2NhcGVfc3BlY2lhbF9j aGFycygpIGFmdGVyIG5vdAo+ICsgbmVlZGVkIGFueW1vcmUsIHNob3VsZCBmaXggIzMKPiArCj4g Ky0tLQo+ICsgc3JjL2NnaS5jICAgIHwgICAgNiArKysrLS0KPiArIHNyYy9jb29raWUuYyB8ICAg IDcgKysrKystLQo+ICsgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pCj4gKwo+ICtkaWZmIC0tZ2l0IGEvc3JjL2NnaS5jIGIvc3JjL2NnaS5jCj4gK2luZGV4 IGU5ZDc2YWUuLjQ2MWViYTMgMTAwNjQ0Cj4gKy0tLSBhL3NyYy9jZ2kuYwo+ICsrKysgYi9zcmMv Y2dpLmMKPiArQEAgLTUxLDcgKzUxLDcgQEAgZXh0ZXJuIGZvcm12YXJzICpjb29raWVfZW5kOwo+ ICsgZm9ybXZhcnMgKnByb2Nlc3NfZGF0YShjaGFyICpxdWVyeSwgZm9ybXZhcnMgKipzdGFydCwg Zm9ybXZhcnMgKipsYXN0LCBjb25zdCBjaGFyIGRlbGltLCBjb25zdCBjaGFyIHNlcCkKPiArIHsK PiArIAlyZWdpc3RlciBzaXplX3QgcG9zaXRpb24gPSAwLCB0b3RhbF9sZW4gPSAwLCBpID0gMDsK PiArLQljaGFyICphdXg7Cj4gKysJY2hhciAqYXV4LCAqc3RyX3VuZXNjOwo+ICsgCWZvcm12YXJz ICpkYXRhOwo+ICsgCj4gKyAJaWYgKHF1ZXJ5ID09IE5VTEwpCj4gK0BAIC0xMTMsOCArMTEzLDEw IEBAIGZvcm12YXJzICpwcm9jZXNzX2RhdGEoY2hhciAqcXVlcnksIGZvcm12YXJzICoqc3RhcnQs IGZvcm12YXJzICoqbGFzdCwgY29uc3QgY2hhCj4gKyAJCWlmIChkYXRhLT52YWx1ZSA9PSBOVUxM KQo+ICsgCQkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiJXMsIGxpbmUgJXMiLCBfX0ZJTEVfXywg X19MSU5FX18pOwo+ICsgCj4gKy0JCXN0cm5jcHkoZGF0YS0+dmFsdWUsIGNnaV91bmVzY2FwZV9z cGVjaWFsX2NoYXJzKHF1ZXJ5KSwgcG9zaXRpb24pOwo+ICsrCQlzdHJfdW5lc2MgPSBjZ2lfdW5l c2NhcGVfc3BlY2lhbF9jaGFycyhxdWVyeSk7Cj4gKysJCXN0cm5jcHkoZGF0YS0+dmFsdWUsIHN0 cl91bmVzYywgcG9zaXRpb24pOwo+ICsgCQlkYXRhLT52YWx1ZVtwb3NpdGlvbl0gPSAnXDAnOwo+ ICsrCQlmcmVlKHN0cl91bmVzYyk7Cj4gKyAKPiArIAkJc2xpc3RfYWRkKGRhdGEsIHN0YXJ0LCBs YXN0KTsKPiArIAo+ICtkaWZmIC0tZ2l0IGEvc3JjL2Nvb2tpZS5jIGIvc3JjL2Nvb2tpZS5jCj4g K2luZGV4IGU5ZGVlOWUuLjZlODRjODEgMTAwNjQ0Cj4gKy0tLSBhL3NyYy9jb29raWUuYwo+ICsr KysgYi9zcmMvY29va2llLmMKPiArQEAgLTgzLDEyICs4MywxMyBAQCBmb3JtdmFycyAqY2dpX2dl dF9jb29raWVzKCkKPiArIHsKPiArIAlyZWdpc3RlciBmb3JtdmFycyAqZGF0YTsKPiArIAlyZWdp c3RlciBzaXplX3QgcG9zaXRpb247Cj4gKy0JY2hhciAqY29va2llcywgKmF1eDsKPiArKwljaGFy ICpjb29raWVzLCAqYXV4LCAqc3RyX3VuZXNjOwo+ICsgCj4gKyAJaWYgKChjb29raWVzID0gZ2V0 ZW52KCJIVFRQX0NPT0tJRSIpKSA9PSBOVUxMKQo+ICsgCQlyZXR1cm4gTlVMTDsKPiArIAo+ICst CWNvb2tpZXMgPSBjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFycyhjb29raWVzKTsKPiArKwlzdHJf dW5lc2MgPSBjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFycyhjb29raWVzKTsKPiArKwljb29raWVz ID0gc3RyX3VuZXNjOwo+ICsgCWF1eCA9IGNvb2tpZXM7Cj4gKyAKPiArIAl3aGlsZSAoY29va2ll cykgewo+ICtAQCAtMTM1LDYgKzEzNiw4IEBAIGZvcm12YXJzICpjZ2lfZ2V0X2Nvb2tpZXMoKQo+ ICsgCQljb29raWVzID0gYXV4Owo+ICsgCX0KPiArIAo+ICsrCWZyZWUoc3RyX3VuZXNjKTsKPiAr Kwo+ICsgCXJldHVybiBjb29raWVzX3N0YXJ0Owo+ICsgfQo+ICsgCj4gZGlmZiAtLWdpdCBhL3Bh dGNoZXMvbGliY2dpLTEuMC8wMDEzLWZyZWUtbWVtb3J5LWFsbG9jYXRlZC1mb3ItcmVhZGluZy1h bmQtcGFyc2luZy1QT1NULWQucGF0Y2ggYi9wYXRjaGVzL2xpYmNnaS0xLjAvMDAxMy1mcmVlLW1l bW9yeS1hbGxvY2F0ZWQtZm9yLXJlYWRpbmctYW5kLXBhcnNpbmctUE9TVC1kLnBhdGNoCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5iZjZkMWRhCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDEzLWZyZWUtbWVtb3J5LWFsbG9jYXRlZC1m b3ItcmVhZGluZy1hbmQtcGFyc2luZy1QT1NULWQucGF0Y2gKPiBAQCAtMCwwICsxLDMyIEBACj4g K0Zyb206IEFsZXhhbmRlciBEYWhsIDxwb3N0QGxlc3BvY2t5LmRlPgo+ICtEYXRlOiBXZWQsIDI0 IE9jdCAyMDEyIDEyOjQ4OjM2ICswMjAwCj4gK1N1YmplY3Q6IFtQQVRDSF0gZnJlZSBtZW1vcnkg YWxsb2NhdGVkIGZvciByZWFkaW5nIGFuZCBwYXJzaW5nIFBPU1QgZGF0YQo+ICsgYWZ0ZXIgY29w eWluZyB0byBzbGlzdCwgc2hvdWxkIGZpeCAjMgo+ICsKPiArLS0tCj4gKyBzcmMvY2dpLmMgfCAg ICA1ICsrKystCj4gKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCj4gKwo+ICtkaWZmIC0tZ2l0IGEvc3JjL2NnaS5jIGIvc3JjL2NnaS5jCj4gK2luZGV4IDQ2 MWViYTMuLjk5NTYzYWQgMTAwNjQ0Cj4gKy0tLSBhL3NyYy9jZ2kuYwo+ICsrKysgYi9zcmMvY2dp LmMKPiArQEAgLTE2MSw2ICsxNjEsNyBAQCBmb3JtdmFycyAqY2dpX3Byb2Nlc3NfZm9ybSgpCj4g KyAJCWNoYXIgKnBvc3RfZGF0YTsKPiArIAkJY2hhciAqdG1wX2RhdGE7Cj4gKyAJCWludCBjb250 ZW50X2xlbmd0aDsKPiArKwkJZm9ybXZhcnMgKnJldDsKPiArIAo+ICsgCQl0bXBfZGF0YSA9IGdl dGVudigiQ09OVEVOVF9MRU5HVEgiKTsKPiArIAkJaWYgKHRtcF9kYXRhID09IE5VTEwpCj4gK0BA IC0xNzUsNyArMTc2LDkgQEAgZm9ybXZhcnMgKmNnaV9wcm9jZXNzX2Zvcm0oKQo+ICsgCQlmcmVh ZChwb3N0X2RhdGEsIGNvbnRlbnRfbGVuZ3RoLCAxLCBzdGRpbik7Cj4gKyAJCXBvc3RfZGF0YVtj b250ZW50X2xlbmd0aF0gPSAnXDAnOwo+ICsgCj4gKy0JCXJldHVybiBwcm9jZXNzX2RhdGEocG9z dF9kYXRhLCAmZm9ybXZhcnNfc3RhcnQsICZmb3JtdmFyc19sYXN0LCAnPScsICcmJyk7Cj4gKysJ CXJldCA9IHByb2Nlc3NfZGF0YShwb3N0X2RhdGEsICZmb3JtdmFyc19zdGFydCwgJmZvcm12YXJz X2xhc3QsICc9JywgJyYnKTsKPiArKwkJZnJlZShwb3N0X2RhdGEpOwo+ICsrCQlyZXR1cm4gcmV0 Owo+ICsgCX0KPiArIAo+ICsgCXJldHVybiBOVUxMOwo+IGRpZmYgLS1naXQgYS9wYXRjaGVzL2xp YmNnaS0xLjAvMDAxNC1GSUxFLXJlcXVpcmVzLWluY2x1ZGluZy1zdGRpby5wYXRjaCBiL3BhdGNo ZXMvbGliY2dpLTEuMC8wMDE0LUZJTEUtcmVxdWlyZXMtaW5jbHVkaW5nLXN0ZGlvLnBhdGNoCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40NTg4YThmCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDE0LUZJTEUtcmVxdWlyZXMtaW5jbHVk aW5nLXN0ZGlvLnBhdGNoCj4gQEAgLTAsMCArMSwyMSBAQAo+ICtGcm9tOiBBbGV4YW5kZXIgRGFo bCA8cG9zdEBsZXNwb2NreS5kZT4KPiArRGF0ZTogVHVlLCA2IE5vdiAyMDEyIDE0OjIyOjU4ICsw MTAwCj4gK1N1YmplY3Q6IFtQQVRDSF0gRklMRSByZXF1aXJlcyBpbmNsdWRpbmcgc3RkaW8KPiAr Cj4gKy0tLQo+ICsgc3JjL2NnaS5oIHwgICAgMiArKwo+ICsgMSBmaWxlIGNoYW5nZWQsIDIgaW5z ZXJ0aW9ucygrKQo+ICsKPiArZGlmZiAtLWdpdCBhL3NyYy9jZ2kuaCBiL3NyYy9jZ2kuaAo+ICtp bmRleCA3MzE3MzVkLi43Y2Q1YTE3IDEwMDY0NAo+ICstLS0gYS9zcmMvY2dpLmgKPiArKysrIGIv c3JjL2NnaS5oCj4gK0BAIC0yMSw2ICsyMSw4IEBACj4gKyAjaWZuZGVmIF9DR0lfSAo+ICsgI2Rl ZmluZSBfQ0dJX0gJMQo+ICsgCj4gKysjaW5jbHVkZSA8c3RkaW8uaD4KPiArKwo+ICsgI2lmZGVm IF9fY3BsdXNwbHVzCj4gKyBleHRlcm4gIkMiIHsKPiArICNlbmRpZgo+IGRpZmYgLS1naXQgYS9w YXRjaGVzL2xpYmNnaS0xLjAvMDAxNS1maXgtdW5lc2NhcGUtYnktb3B0aW1pemluZy1oZXh0YWJs ZS1pbml0LWFuZC1hY2Nlc3MucGF0Y2ggYi9wYXRjaGVzL2xpYmNnaS0xLjAvMDAxNS1maXgtdW5l c2NhcGUtYnktb3B0aW1pemluZy1oZXh0YWJsZS1pbml0LWFuZC1hY2Nlc3MucGF0Y2gKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmY3YzFjNDAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTUtZml4LXVuZXNjYXBlLWJ5LW9wdGltaXpp bmctaGV4dGFibGUtaW5pdC1hbmQtYWNjZXNzLnBhdGNoCj4gQEAgLTAsMCArMSw5MyBAQAo+ICtG cm9tOiBBbGV4YW5kZXIgRGFobCA8cG9zdEBsZXNwb2NreS5kZT4KPiArRGF0ZTogVHVlLCAxOCBN YXIgMjAxNCAxMToyODo0OSArMDEwMAo+ICtTdWJqZWN0OiBbUEFUQ0hdIGZpeCB1bmVzY2FwZSBi eSBvcHRpbWl6aW5nIGhleHRhYmxlIGluaXQgYW5kIGFjY2Vzcwo+ICsKPiAraW50IHNpemUgaXMg cmVkdWNlZCB0byAxIGJ5dGUsIHRhYmxlIGxlbmd0aCBpcyB0cnVuY2F0ZWQgdG8gb25seQo+ICth Y2Nlc3NlZCBieXRlcywgYW5kIGFjY2VzcyBpcyBsaW1pdGVkIHRvIG9ubHkgdGhlIGhleCBkaWdp dCBjaGFyYWN0ZXJzCj4gK2J5IHJlcGxhY2luZyBpc2FsbnVtKCkgd2l0aCBpc3hkaWdpdCgpIGlu IGNnaV91bmVzY2FwZV9zcGVjaWFsX2NoYXJzKCkuCj4gK1RoaXMgYWN0dWFsbHkgZml4ZXMgYSBi dWcgaW4gZGVjb2RpbmcgaWYgb25lIG9mIHRoZSBoZXggZGlnaXRzIGFmdGVyIHRoZQo+ICsnJScg d2FzIGFub3RoZXIgY2hhcmFjdGVyIHRoYW4gYSB0byBmIQo+ICstLS0KPiArIHNyYy9jZ2kuYyB8 ICAgNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+ICsgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygt KQo+ICsKPiArZGlmZiAtLWdpdCBhL3NyYy9jZ2kuYyBiL3NyYy9jZ2kuYwo+ICtpbmRleCA5OTU2 M2FkLi41ZDlmZmMwIDEwMDY0NAo+ICstLS0gYS9zcmMvY2dpLmMKPiArKysrIGIvc3JjL2NnaS5j Cj4gK0BAIC0yNyw5ICsyNyw3IEBACj4gKyAjaW5jbHVkZSAiY2dpLmgiCj4gKyAjaW5jbHVkZSAi ZXJyb3IuaCIKPiArIAo+ICstLy8gV2hvdy4uLiBpZiBoZXh0YWJsZSBhcnJheSBoYXMgYSBsZW5n dGggbGVzcyB0aGFuIDI1NiwKPiArLS8vIHRoZSBjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFycyBm dW5jdGlvbiB3aWxsIGZhaWwuICBBbmQgSSBkb24ndCBrbm93IHdoeQo+ICstc3RhdGljIGludCBo ZXh0YWJsZVsyNTZdOwo+ICsrc3RhdGljIHVuc2lnbmVkIGNoYXIgaGV4dGFibGVbJ2YnKzFdOwo+ ICsgCj4gKyBpbnQgaGVhZGVyc19pbml0aWFsaXplZCA9IDA7Cj4gKyAKPiArQEAgLTMyNiwyOSAr MzI0LDMyIEBAIHZvaWQgY2dpX3JlZGlyZWN0KGNoYXIgKnVybCkKPiArIC8vIE9yaWdpbmFsIGlk ZWEgZnJvbSBjZ2ljIGxpYnJhcnkKPiArIHZvaWQgaW5pdF9oZXhfdGFibGUoKQo+ICsgewo+ICst CW1lbXNldChoZXh0YWJsZSwgMCwgMjU1KTsKPiArLQo+ICstCWhleHRhYmxlWycxJ10gPSAxOwo+ ICstCWhleHRhYmxlWycyJ10gPSAyOwo+ICstCWhleHRhYmxlWyczJ10gPSAzOwo+ICstCWhleHRh YmxlWyc0J10gPSA0Owo+ICstCWhleHRhYmxlWyc1J10gPSA1Owo+ICstCWhleHRhYmxlWyc2J10g PSA2Owo+ICstCWhleHRhYmxlWyc3J10gPSA3Owo+ICstCWhleHRhYmxlWyc4J10gPSA4Owo+ICst CWhleHRhYmxlWyc5J10gPSA5Owo+ICstCWhleHRhYmxlWydhJ10gPSAxMDsKPiArLQloZXh0YWJs ZVsnYiddID0gMTE7Cj4gKy0JaGV4dGFibGVbJ2MnXSA9IDEyOwo+ICstCWhleHRhYmxlWydkJ10g PSAxMzsKPiArLQloZXh0YWJsZVsnZSddID0gMTQ7Cj4gKy0JaGV4dGFibGVbJ2YnXSA9IDE1Owo+ ICstCWhleHRhYmxlWydBJ10gPSAxMDsKPiArLQloZXh0YWJsZVsnQiddID0gMTE7Cj4gKy0JaGV4 dGFibGVbJ0MnXSA9IDEyOwo+ICstCWhleHRhYmxlWydEJ10gPSAxMzsKPiArLQloZXh0YWJsZVsn RSddID0gMTQ7Cj4gKy0JaGV4dGFibGVbJ0YnXSA9IDE1Owo+ICsrCW1lbXNldChoZXh0YWJsZSwg MCwgJ2YnKzEpOwo+ICsrCj4gKysJaGV4dGFibGVbJzAnXSA9IDB4MDsJLyogNDggKi8KPiArKwlo ZXh0YWJsZVsnMSddID0gMHgxOwkvKiA0OSAqLwo+ICsrCWhleHRhYmxlWycyJ10gPSAweDI7CS8q IDUwICovCj4gKysJaGV4dGFibGVbJzMnXSA9IDB4MzsJLyogNTEgKi8KPiArKwloZXh0YWJsZVsn NCddID0gMHg0OwkvKiA1MiAqLwo+ICsrCWhleHRhYmxlWyc1J10gPSAweDU7CS8qIDUzICovCj4g KysJaGV4dGFibGVbJzYnXSA9IDB4NjsJLyogNTQgKi8KPiArKwloZXh0YWJsZVsnNyddID0gMHg3 OwkvKiA1NSAqLwo+ICsrCWhleHRhYmxlWyc4J10gPSAweDg7CS8qIDU2ICovCj4gKysJaGV4dGFi bGVbJzknXSA9IDB4OTsJLyogNTcgKi8KPiArKwo+ICsrCWhleHRhYmxlWydBJ10gPSAweEE7CS8q IDY1ICovCj4gKysJaGV4dGFibGVbJ0InXSA9IDB4QjsJLyogNjYgKi8KPiArKwloZXh0YWJsZVsn QyddID0gMHhDOwkvKiA2NyAqLwo+ICsrCWhleHRhYmxlWydEJ10gPSAweEQ7CS8qIDY4ICovCj4g KysJaGV4dGFibGVbJ0UnXSA9IDB4RTsJLyogNjkgKi8KPiArKwloZXh0YWJsZVsnRiddID0gMHhG OwkvKiA3MCAqLwo+ICsrCj4gKysJaGV4dGFibGVbJ2EnXSA9IDB4YTsJLyogOTcgKi8KPiArKwlo ZXh0YWJsZVsnYiddID0gMHhiOwkvKiA5OCAqLwo+ICsrCWhleHRhYmxlWydjJ10gPSAweGM7CS8q IDk5ICovCj4gKysJaGV4dGFibGVbJ2QnXSA9IDB4ZDsJLyogMTAwICovCj4gKysJaGV4dGFibGVb J2UnXSA9IDB4ZTsJLyogMTAxICovCj4gKysJaGV4dGFibGVbJ2YnXSA9IDB4ZjsJLyogMTAyICov Cj4gKyB9Cj4gKyAKPiArIC8qKgo+ICtAQCAtNDExLDcgKzQxMiw3IEBAIGNoYXIgKmNnaV91bmVz Y2FwZV9zcGVjaWFsX2NoYXJzKGNoYXIgKnN0cikKPiArIAkJLy8gaGV4YSBjb2RlLiBDb252ZXJ0 aW5nIGEgaGV4YWRlY2ltYWwgY29kZSB0byB0aGVpciBkZWNpbWFsIGlzIGVhc3k6Cj4gKyAJCS8v IFRoZSBmaXJzdCBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgbXVsdGlwbGllZCBieSAxNiAoIDw8IDQg KSwgYW5kIHRoZSBhbm90aGVyCj4gKyAJCS8vIG9uZSB3ZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJv bSBoZXh0YWJsZSB2YXJpYWJsZQo+ICstCQlpZiAoKHN0cltpXSA9PSAnJScpICYmIGlzYWxudW0o c3RyW2krMV0pICYmIGlzYWxudW0oc3RyW2krMl0pKSB7Cj4gKysJCWlmICgoc3RyW2ldID09ICcl JykgJiYgaXN4ZGlnaXQoc3RyW2krMV0pICYmIGlzeGRpZ2l0KHN0cltpKzJdKSkgewo+ICsgCQkJ dG1wW3Bvc10gPSAoaGV4dGFibGVbKHVuc2lnbmVkIGNoYXIpIHN0cltpKzFdXSA8PCA0KSArIGhl eHRhYmxlWyh1bnNpZ25lZCBjaGFyKSBzdHJbaSsyXV07Cj4gKyAJCQlpICs9IDI7Cj4gKyAJCX0K PiBkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9saWJjZ2ktMS4wL3NlcmllcyBiL3BhdGNoZXMvbGliY2dp LTEuMC9zZXJpZXMKPiBpbmRleCA1MjlmOWUxLi4zNmIzNWMzIDEwMDY0NAo+IC0tLSBhL3BhdGNo ZXMvbGliY2dpLTEuMC9zZXJpZXMKPiArKysgYi9wYXRjaGVzL2xpYmNnaS0xLjAvc2VyaWVzCj4g QEAgLTEwLDQgKzEwLDkgQEAKPiAgMDAwOC11c2UtaW5zdGFsbC1pbnN0ZWFkLW9mLWNwLnBhdGNo Cj4gIDAwMDktdXNlLXN0YW5kYXJkLWRpcmVjdG9yeS1uYW1lcy5wYXRjaAo+ICAwMDEwLW1ha2Ut dGhlLWxpYnJhcnktZmlsZW5hbWUtbWF0Y2gtaXRzLXNvbmFtZS5wYXRjaAo+IC0jIDQwYzhlNTBk ZjJhOGQ4ZGNjYjQxMThlNTMyMzMxMWQyICAtIGdpdC1wdHgtcGF0Y2hlcyBtYWdpYwo+ICswMDEx LXJlbW92ZS10cmFpbGluZy13aGl0ZXNwYWNlLW15LWVkaXRvci13b3VsZC1kby10aGlzLWEucGF0 Y2gKPiArMDAxMi1mcmVlLW1lbW9yeS1hbGxvY2F0ZWQtYnktdW5lc2NhcGVfc3BlY2lhbF9jaGFy cy1hZnRlLnBhdGNoCj4gKzAwMTMtZnJlZS1tZW1vcnktYWxsb2NhdGVkLWZvci1yZWFkaW5nLWFu ZC1wYXJzaW5nLVBPU1QtZC5wYXRjaAo+ICswMDE0LUZJTEUtcmVxdWlyZXMtaW5jbHVkaW5nLXN0 ZGlvLnBhdGNoCj4gKzAwMTUtZml4LXVuZXNjYXBlLWJ5LW9wdGltaXppbmctaGV4dGFibGUtaW5p dC1hbmQtYWNjZXNzLnBhdGNoCj4gKyMgYTQ1YWQyYmViMWU1ZTIwZDI3NGFkOWNjMmRiYTJjZDcg IC0gZ2l0LXB0eC1wYXRjaGVzIG1hZ2ljCj4gLS0gCj4gMS43LjEwLjQKPiAKPiAKPiAtLSAKPiBw dHhkaXN0IG1haWxpbmcgbGlzdAo+IHB0eGRpc3RAcGVuZ3V0cm9uaXguZGUKCi0tIApQZW5ndXRy b25peCBlLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfApJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAgICAgICAgICAgICAgICAgfCBo dHRwOi8vd3d3LnBlbmd1dHJvbml4LmRlLyAgfApQZWluZXIgU3RyLiA2LTgsIDMxMTM3IEhpbGRl c2hlaW0sIEdlcm1hbnkgfCBQaG9uZTogKzQ5LTUxMjEtMjA2OTE3LTAgICAgfApBbXRzZ2VyaWNo dCBIaWxkZXNoZWltLCBIUkEgMjY4NiAgICAgICAgICAgfCBGYXg6ICAgKzQ5LTUxMjEtMjA2OTE3 LTU1NTUgfAoKLS0gCnB0eGRpc3QgbWFpbGluZyBsaXN0CnB0eGRpc3RAcGVuZ3V0cm9uaXguZGUK