From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changli Gao Subject: Re: [Patch 1/3] sysctl: refactor integer handling proc code Date: Fri, 9 Apr 2010 18:49:12 +0800 Message-ID: References: <20100409101442.5051.99812.sendpatchset@localhost.localdomain> <20100409101452.5051.74050.sendpatchset@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Cc: linux-kernel@vger.kernel.org, Octavian Purdila , Eric Dumazet , netdev@vger.kernel.org, Neil Horman , David Miller , ebiederm@xmission.com To: Amerigo Wang Return-path: In-Reply-To: <20100409101452.5051.74050.sendpatchset@localhost.localdomain> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org T24gRnJpLCBBcHIgOSwgMjAxMCBhdCA2OjExIFBNLCBBbWVyaWdvIFdhbmcgPGFtd2FuZ0ByZWRo YXQuY29tPiB3cm90ZToKPgo+IEZyb206IE9jdGF2aWFuIFB1cmRpbGEgPG9wdXJkaWxhQGl4aWFj b20uY29tPgo+Cj4gQXMgd2UgYXJlIGFib3V0IHRvIGFkZCBhbm90aGVyIGludGVnZXIgaGFuZGxp bmcgcHJvYyBmdW5jdGlvbiBhIGxpdHRsZQo+IGJpdCBvZiBjbGVhbnVwIGlzIGluIG9yZGVyOiBh ZGQgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvZGUKPiByZWFkYWJpbGl0eSBh bmQgZGVjcmVhc2UgY29kZSBkdXBsaWNhdGlvbi4KPgo+IEluIHRoZSBwcm9jZXNzIGEgYnVnIGlz IGFsc28gZml4ZWQ6IGlmIHRoZSB1c2VyIHNwZWNpZmllcyBhIG51bWJlcgo+IHdpdGggbW9yZSB0 aGVuIDIwIGRpZ2l0cyBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIHR3byBpbnRlZ2Vycwo+IChl LmcuIDEwMDAwLi4uMTMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyAxMDAuLi4uIGFuZCAxMykuCj4K PiBCZWhhdmlvciBmb3IgRUZBVUxUIGhhbmRsaW5nIHdhcyBjaGFuZ2VkIGFzIHdlbGwuIFByZXZp b3VzIHRvIHRoaXMKPiBwYXRjaCwgd2hlbiBhbiBFRkFVTFQgZXJyb3Igb2NjdXJyZWQgaW4gdGhl IG1pZGRsZSBvZiBhIHdyaXRlCj4gb3BlcmF0aW9uLCBhbHRob3VnaCBzb21lIG9mIHRoZSBlbGVt ZW50cyB3ZXJlIHNldCwgdGhhdCB3YXMgbm90Cj4gYWNrbm93bGVkZ2VkIHRvIHRoZSB1c2VyIChi eSBzaG9ydGluZyB0aGUgd3JpdGUgYW5kIHJldHVybmluZyB0aGUKPiBudW1iZXIgb2YgYnl0ZXMg YWNjZXB0ZWQpLiBFRkFVTFQgaXMgbm93IHRyZWF0ZWQganVzdCBsaWtlIGFueSBvdGhlcgo+IGVy cm9ycyBieSBhY2tub3dsZWRnaW5nIHRoZSBhbW91bnQgb2YgYnl0ZXMgYWNjZXB0ZWQuCj4KPiBT aWduZWQtb2ZmLWJ5OiBPY3RhdmlhbiBQdXJkaWxhIDxvcHVyZGlsYUBpeGlhY29tLmNvbT4KPiBT aWduZWQtb2ZmLWJ5OiBXQU5HIENvbmcgPGFtd2FuZ0ByZWRoYXQuY29tPgo+IENjOiBFcmljIFcu IEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29tPgo+IC0tLQo+Cj4gSW5kZXg6IGxpbnV4 LTIuNi9rZXJuZWwvc3lzY3RsLmMKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gLS0tIGxpbnV4LTIuNi5vcmlnL2tl cm5lbC9zeXNjdGwuYwo+ICsrKyBsaW51eC0yLjYva2VybmVsL3N5c2N0bC5jCj4gQEAgLTIwNDAs OCArMjA0MCwxNDggQEAgaW50IHByb2NfZG9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibAo+ IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJ1ZmZlciwgbGVu cCwgcHBvcyk7Cj4gwqB9Cj4KPiArc3RhdGljIGludCBwcm9jX3NraXBfd3NwYWNlKGNoYXIgX191 c2VyICoqYnVmLCBzaXplX3QgKnNpemUpCj4gK3sKPiArIMKgIMKgIMKgIGNoYXIgYzsKPiArCj4g KyDCoCDCoCDCoCB3aGlsZSAoKnNpemUpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChn ZXRfdXNlcihjLCAqYnVmKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJl dHVybiAtRUZBVUxUOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFpc3NwYWNlKGMpKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCAoKnNpemUpLS07Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoKmJ1ZikrKzsK PiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgaXNhbnlvZihjaGFyIGMsIGNvbnN0IGNoYXIgKnYsIHVuc2lnbmVkIGxlbikKPiAr ewo+ICsgwqAgwqAgwqAgaW50IGk7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFsZW4pCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgwqAgwqAgwqAgZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGMgPT0gdltpXSkK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAg aWYgKGkgPT0gbGVuKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIGZhbHNlOwo+ICsK PiArIMKgIMKgIMKgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFRNUEJVRkxFTiAy Mgo+ICsvKioKPiArICogcHJvY19nZXRfdWxvbmcgLSByZWFkcyBhbiBBU0NJSSBmb3JtYXRlZCBp bnRlZ2VyIGZyb20gYSB1c2VyIGJ1ZmZlcgo+ICsgKgo+ICsgKiBAYnVmIC0gdXNlciBidWZmZXIK PiArICogQHNpemUgLSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlcgo+ICsgKiBAdmFsIC0gdGhpcyBp cyB3aGVyZSB0aGUgbnVtYmVyIHdpbGwgYmUgc3RvcmVkCj4gKyAqIEBuZWcgLSBzZXQgdG8gJVRS VUUgaWYgbnVtYmVyIGlzIG5lZ2F0aXZlCj4gKyAqIEBwZXJtX3RyIC0gYSB2ZWN0b3Igd2hpY2gg Y29udGFpbnMgdGhlIGFsbG93ZWQgdHJhaWxlcnMKPiArICogQHBlcm1fdHJfbGVuIC0gc2l6ZSBv ZiB0aGUgcGVybV90ciB2ZWN0b3IKPiArICogQHRyIC0gcG9pbnRlciB0byBzdG9yZSB0aGUgdHJh aWxlciBjaGFyYWN0ZXIKPiArICoKPiArICogSW4gY2FzZSBvZiBzdWNjZXNzIDAgaXMgcmV0dXJu ZWQgYW5kIGJ1ZiBhbmQgc2l6ZSBhcmUgdXBkYXRlZCB3aXRoCj4gKyAqIHRoZSBhbW91bnQgb2Yg Ynl0ZXMgcmVhZC4gSWYgdHIgaXMgbm9uIE5VTEwgYW5kIGEgdHJhaWxpbmcKPiArICogY2hhcmFj dGVyIGV4aXN0IChzaXplIGlzIG5vbiB6ZXJvIGFmdGVyIHJldHVybmluZyBmcm9tIHRoaXMKPiAr ICogZnVuY3Rpb24pIHRyIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdHJhaWxpbmcgY2hhcmFjdGVyLgo+ ICsgKi8KPiArc3RhdGljIGludCBwcm9jX2dldF91bG9uZyhjaGFyIF9fdXNlciAqKmJ1Ziwgc2l6 ZV90ICpzaXplLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdW5zaWdu ZWQgbG9uZyAqdmFsLCBib29sICpuZWcsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBjb25zdCBjaGFyICpwZXJtX3RyLCB1bnNpZ25lZCBwZXJtX3RyX2xlbiwgY2hhciAq dHIpCj4gK3sKPiArIMKgIMKgIMKgIGludCBsZW47Cj4gKyDCoCDCoCDCoCBjaGFyICpwLCB0bXBb VE1QQlVGTEVOXTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoISpzaXplKQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgwqAgwqAgwqAgbGVuID0gKnNpemU7Cj4g KyDCoCDCoCDCoCBpZiAobGVuID4gVE1QQlVGTEVOLTEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBsZW4gPSBUTVBCVUZMRU4tMTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoY29weV9mcm9tX3VzZXIo dG1wLCAqYnVmLCBsZW4pKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7 Cj4gKwo+ICsgwqAgwqAgwqAgdG1wW2xlbl0gPSAwOwo+ICsgwqAgwqAgwqAgcCA9IHRtcDsKPiAr IMKgIMKgIMKgIGlmICgqcCA9PSAnLScgJiYgKnNpemUgPiAxKSB7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCAqbmVnID0gMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHArKzsKPiArIMKgIMKg IMKgIH0gZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKm5lZyA9IDA7Cgp0aGUgZnVuY3Rp b24gbmFtZSBpbXBsaWVzIHRoYXQgaXQgaXMgdXNlZCB0byBwYXJzZSB1bnNpZ25lZCBsb25nLCBz bwpuZWdhdGl2ZSB2YWx1ZSBzaG91bGQgbm90IGJlIHN1cHBvcnRlZC4KCj4gKyDCoCDCoCDCoCBp ZiAoIWlzZGlnaXQoKnApKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7 CgpJdCBzZWVtcyB0aGF0IGxlZGRpbmcgd2hpdGUgc3BhY2Ugc2hvdWxkIGJlIGFsbG93ZWQsIHNv IHRoaXMgY2hlY2sKaXNuJ3QgbmVlZGVkLCBhbmQgc2ltcGxlX3N0cnRvdWwgY2FuIGhhbmRsZSBp dC4KCj4gKwo+ICsgwqAgwqAgwqAgKnZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKPiAr Cj4gKyDCoCDCoCDCoCBsZW4gPSBwIC0gdG1wOwo+ICsKPiArIMKgIMKgIMKgIC8qIFdlIGRvbid0 IGtub3cgaWYgdGhlIG5leHQgY2hhciBpcyB3aGl0ZXNwYWNlIHRodXMgd2UgbWF5IGFjY2VwdAo+ ICsgwqAgwqAgwqAgwqAqIGludmFsaWQgaW50ZWdlcnMgKGUuZy4gMTIzNC4uLmEpIG9yIHR3byBp bnRlZ2VycyBpbnN0ZWFkIG9mIG9uZQo+ICsgwqAgwqAgwqAgwqAqIChlLmcuIDEyMy4uLjEpLiBT byBsZXRzIG5vdCBhbGxvdyBzdWNoIGxhcmdlIG51bWJlcnMuICovCj4gKyDCoCDCoCDCoCBpZiAo bGVuID09IFRNUEJVRkxFTiAtIDEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJ TlZBTDsKPiArCj4gKyDCoCDCoCDCoCBpZiAobGVuIDwgKnNpemUgJiYgcGVybV90cl9sZW4gJiYg IWlzYW55b2YoKnAsIHBlcm1fdHIsIHBlcm1fdHJfbGVuKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJldHVybiAtRUlOVkFMOwoKaXMgc3Ryc3BuKCkgYmV0dGVyPwoKPiArCj4gKyDCoCDCoCDC oCBpZiAodHIgJiYgKGxlbiA8ICpzaXplKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICp0ciA9 ICpwOwo+ICsKPiArIMKgIMKgIMKgICpidWYgKz0gbGVuOwo+ICsgwqAgwqAgwqAgKnNpemUgLT0g bGVuOwo+ICsKPiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogcHJv Y19wdXRfdWxvbmcgLSBjb3ZlcnRzIGFuIGludGVnZXIgdG8gYSBkZWNpbWFsIEFTQ0lJIGZvcm1h dGVkIHN0cmluZwo+ICsgKgo+ICsgKiBAYnVmIC0gdGhlIHVzZXIgYnVmZmVyCj4gKyAqIEBzaXpl IC0gdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyCj4gKyAqIEB2YWwgLSB0aGUgaW50ZWdlciB0 byBiZSBjb252ZXJ0ZWQKPiArICogQG5lZyAtIHNpZ24gb2YgdGhlIG51bWJlciwgJVRSVUUgZm9y IG5lZ2F0aXZlCj4gKyAqIEBmaXJzdCAtIGlmICVGQUxTRSB3aWxsIGluc2VydCBhIHNlcGFyYXRv ciBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBudW1iZXIKPiArICogQHNlcGFyYXRvciAtIHRoZSBzZXBh cmF0b3IgY2hhcmFjdGVyCj4gKyAqCj4gKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcyAwIGlzIHJldHVy bmVkIGFuZCBidWYgYW5kIHNpemUgYXJlIHVwZGF0ZWQgd2l0aAo+ICsgKiB0aGUgYW1vdW50IG9m IGJ5dGVzIHJlYWQuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHByb2NfcHV0X3Vsb25nKGNoYXIgX191 c2VyICoqYnVmLCBzaXplX3QgKnNpemUsIHVuc2lnbmVkIGxvbmcgdmFsLAo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYm9vbCBuZWcsIGJvb2wgZmlyc3QsIGNoYXIgc2Vw YXJhdG9yKQo+ICt7Cj4gKyDCoCDCoCDCoCBpbnQgbGVuOwo+ICsgwqAgwqAgwqAgY2hhciB0bXBb VE1QQlVGTEVOXSwgKnAgPSB0bXA7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFmaXJzdCkKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgICpwKysgPSBzZXBhcmF0b3I7Cj4gKyDCoCDCoCDCoCBzcHJpbnRm KHAsICIlcyVsdSIsIG5lZyA/ICItIiA6ICIiLCB2YWwpOwoKbmVnYXRpdmUgc2hvdWxkIG5vdCBi ZSBzdXBwb3J0ZWQgdG9vLgoKPiArIMKgIMKgIMKgIGxlbiA9IHN0cmxlbih0bXApOwo+ICsgwqAg wqAgwqAgaWYgKGxlbiA+ICpzaXplKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gKnNp emU7Cj4gKyDCoCDCoCDCoCBpZiAoY29weV90b191c2VyKCpidWYsIHRtcCwgbGVuKSkKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUZBVUxUOwo+ICsgwqAgwqAgwqAgKnNpemUgLT0g bGVuOwo+ICsgwqAgwqAgwqAgKmJ1ZiArPSBsZW47Cj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiAr fQo+ICsjdW5kZWYgVE1QQlVGTEVOCj4gKwo+ICtzdGF0aWMgaW50IHByb2NfcHV0X2NoYXIoY2hh ciBfX3VzZXIgKipidWYsIHNpemVfdCAqc2l6ZSwgY2hhciBjKQo+ICt7Cj4gKyDCoCDCoCDCoCBp ZiAoKnNpemUpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChwdXRfdXNlcihjLCAqYnVm KSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUZBVUxUOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKCpzaXplKS0tLCAoKmJ1ZikrKzsKPiArIMKgIMKgIMKg IH0KPiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4KPiAtc3RhdGljIGludCBkb19wcm9jX2Rv aW50dmVjX2NvbnYoaW50ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiArc3RhdGljIGlu dCBkb19wcm9jX2RvaW50dmVjX2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAs Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50ICp2 YWxwLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlu dCB3cml0ZSwgdm9pZCAqZGF0YSkKPiDCoHsKPiBAQCAtMjA1MCw3ICsyMTkwLDcgQEAgc3RhdGlj IGludCBkb19wcm9jX2RvaW50dmVjX2NvbnYoaW50ICpuZQo+IMKgIMKgIMKgIMKgfSBlbHNlIHsK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCB2YWwgPSAqdmFscDsKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGlmICh2YWwgPCAwKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAqbmVncCA9IC0xOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKm5l Z3AgPSAxOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKmx2YWxwID0gKHVu c2lnbmVkIGxvbmcpLXZhbDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqbmVncCA9IDA7Cj4gQEAgLTIwNjAsMjAg KzIyMDAsMTggQEAgc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX2NvbnYoaW50ICpuZQo+IMKg IMKgIMKgIMKgcmV0dXJuIDA7Cj4gwqB9Cj4KPiArc3RhdGljIGNvbnN0IGNoYXIgcHJvY193c3Bh Y2Vfc2VwW10gPSB7ICcgJywgJ1x0JywgJ1xuJywgMCB9Owo+ICsKPiDCoHN0YXRpYyBpbnQgX19k b19wcm9jX2RvaW50dmVjKHZvaWQgKnRibF9kYXRhLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCB3cml0ZSwgdm9pZCBfX3VzZXIgKmJ1ZmZl ciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCB3cml0ZSwgdm9pZCBfX3VzZXIgKl9i dWZmZXIsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzaXplX3QgKmxlbnAsIGxvZmZfdCAq cHBvcywKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCAoKmNvbnYpKGludCAqbmVncCwg dW5zaWduZWQgbG9uZyAqbHZhbHAsIGludCAqdmFscCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGludCAoKmNvbnYpKGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLCBpbnQgKnZh bHAsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgd3Jp dGUsIHZvaWQgKmRhdGEpLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdm9pZCAqZGF0YSkK PiDCoHsKPiAtI2RlZmluZSBUTVBCVUZMRU4gMjEKPiAtIMKgIMKgIMKgIGludCAqaSwgdmxlZnQs IGZpcnN0ID0gMSwgbmVnOwo+IC0gwqAgwqAgwqAgdW5zaWduZWQgbG9uZyBsdmFsOwo+IC0gwqAg wqAgwqAgc2l6ZV90IGxlZnQsIGxlbjsKPiAtCj4gLSDCoCDCoCDCoCBjaGFyIGJ1ZltUTVBCVUZM RU5dLCAqcDsKPiAtIMKgIMKgIMKgIGNoYXIgX191c2VyICpzID0gYnVmZmVyOwo+ICsgwqAgwqAg wqAgaW50ICppLCB2bGVmdCwgZmlyc3QgPSAxLCBlcnIgPSAwOwo+ICsgwqAgwqAgwqAgc2l6ZV90 IGxlZnQ7Cj4gKyDCoCDCoCDCoCBjaGFyIF9fdXNlciAqYnVmZmVyID0gKGNoYXIgX191c2VyICop IF9idWZmZXI7Cj4KPiDCoCDCoCDCoCDCoGlmICghdGJsX2RhdGEgfHwgIXRhYmxlLT5tYXhsZW4g fHwgISpsZW5wIHx8Cj4gwqAgwqAgwqAgwqAgwqAgwqAoKnBwb3MgJiYgIXdyaXRlKSkgewo+IEBA IC0yMDg5LDg4ICsyMjI3LDQ4IEBAIHN0YXRpYyBpbnQgX19kb19wcm9jX2RvaW50dmVjKHZvaWQg KnRibF8KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnYgPSBkb19wcm9jX2RvaW50dmVjX2Nv bnY7Cj4KPiDCoCDCoCDCoCDCoGZvciAoOyBsZWZ0ICYmIHZsZWZ0LS07IGkrKywgZmlyc3Q9MCkg ewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHdyaXRlKSB7Cj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAobGVmdCkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2hhciBjOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGdldF91c2VyKGMsIHMpKQo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJu IC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAoIWlzc3BhY2UoYykpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQtLTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHMrKzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIH0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghbGVmdCkK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbmVnID0gMDsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IGxlZnQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBpZiAobGVuID4gc2l6ZW9mKGJ1ZikgLSAxKQo+IC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gc2l6ZW9mKGJ1ZikgLSAx Owo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGNvcHlfZnJvbV91c2Vy KGJ1ZiwgcywgbGVuKSkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJldHVybiAtRUZBVUxUOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgYnVmW2xlbl0gPSAwOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcCA9 IGJ1ZjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgqcCA9PSAnLScg JiYgbGVmdCA+IDEpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIG5lZyA9IDE7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBwKys7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKnAgPCAnMCcgfHwgKnAgPiAnOScp Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsK PiAtCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsdmFsID0gc2ltcGxlX3N0 cnRvdWwocCwgJnAsIDApOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdW5zaWduZWQgbG9uZyBs dmFsOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYm9vbCBuZWc7Cj4KPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IHAtYnVmOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKChsZW4gPCBsZWZ0KSAmJiAqcCAmJiAhaXNzcGFjZSgqcCkpCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAod3JpdGUpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGVyciA9IHByb2Nfc2tpcF93c3BhY2UoJmJ1ZmZlciwgJmxlZnQpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGVycikKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBlcnI7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9jX2dldF91bG9uZygmYnVmZmVy LCAmbGVmdCwgJmx2YWwsICZuZWcsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHByb2Nfd3NwYWNlX3NlcCwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgc2l6ZW9mKHByb2Nfd3NwYWNlX3NlcCksIE5VTEwpOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKGVycikKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcyArPSBsZW47Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0 IC09IGxlbjsKPiAtCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoY29u digmbmVnLCAmbHZhbCwgaSwgMSwgZGF0YSkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAoY29udigmbmVnLCAmbHZhbCwgaSwgMSwgZGF0YSkpIHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9IC1FSU5WQUw7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oH0gZWxzZSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwID0gYnVmOwo+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFmaXJzdCkKPiAtIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICpwKysgPSAnXHQnOwo+IC0K PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChjb252KCZuZWcsICZsdmFs LCBpLCAwLCBkYXRhKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChj b252KCZuZWcsICZsdmFsLCBpLCAwLCBkYXRhKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gLUVJTlZBTDsKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+IC0KPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwcmludGYocCwgIiVzJWx1IiwgbmVnID8gIi0iIDogIiIs IGx2YWwpOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gc3RybGVu KGJ1Zik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobGVuID4gbGVm dCkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9 IGxlZnQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihjb3B5X3RvX3Vz ZXIocywgYnVmLCBsZW4pKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBsZWZ0IC09IGxlbjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHMg Kz0gbGVuOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IC0gwqAgwqAgwqAgfQo+IC0KPiAt IMKgIMKgIMKgIGlmICghd3JpdGUgJiYgIWZpcnN0ICYmIGxlZnQpIHsKPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGlmKHB1dF91c2VyKCdcbicsIHMpKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0 LS0sIHMrKzsKPiAtIMKgIMKgIMKgIH0KPiAtIMKgIMKgIMKgIGlmICh3cml0ZSkgewo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlZnQpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGNoYXIgYzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGlmIChnZXRfdXNlcihjLCBzKyspKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoIWlzc3BhY2UoYykpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9j X3B1dF91bG9uZygmYnVmZmVyLCAmbGVmdCwgbHZhbCwgbmVnLCBmaXJzdCwKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg J1x0Jyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZXJyKQo+IMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0LS07Cj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqB9Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCF3cml0ZSAmJiAh Zmlyc3QgJiYgbGVmdCAmJiAhZXJyKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gcHJv Y19wdXRfY2hhcigmYnVmZmVyLCAmbGVmdCwgJ1xuJyk7Cj4gKyDCoCDCoCDCoCBpZiAod3JpdGUg JiYgIWVycikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9IHByb2Nfc2tpcF93c3BhY2Uo JmJ1ZmZlciwgJmxlZnQpOwo+IMKgIMKgIMKgIMKgaWYgKHdyaXRlICYmIGZpcnN0KQo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCByZXR1cm4gZXJyID8gOiAtRUlOVkFMOwo+IMKgIMKgIMKgIMKgKmxlbnAgLT0gbGVmdDsKPiDC oCDCoCDCoCDCoCpwcG9zICs9ICpsZW5wOwo+IMKgIMKgIMKgIMKgcmV0dXJuIDA7Cj4gLSN1bmRl ZiBUTVBCVUZMRU4KPiDCoH0KPgo+IMKgc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjKHN0cnVj dCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcywKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCAoKmNvbnYpKGludCAqbmVncCwgdW5zaWduZWQgbG9u ZyAqbHZhbHAsIGludCAqdmFscCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCAoKmNv bnYpKGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLCBpbnQgKnZhbHAsCj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgd3JpdGUsIHZvaWQgKmRh dGEpLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdm9pZCAqZGF0YSkKPiDCoHsKPiBAQCAt MjIzOCw4ICsyMzM2LDggQEAgc3RydWN0IGRvX3Byb2NfZG9pbnR2ZWNfbWlubWF4X2NvbnZfcGFy YQo+IMKgIMKgIMKgIMKgaW50ICptYXg7Cj4gwqB9Owo+Cj4gLXN0YXRpYyBpbnQgZG9fcHJvY19k b2ludHZlY19taW5tYXhfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLAo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aW50ICp2YWxwLAo+ICtzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfbWlubWF4X2NvbnYoYm9v bCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgKnZhbHAsCj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgd3Jp dGUsIHZvaWQgKmRhdGEpCj4gwqB7Cj4gwqAgwqAgwqAgwqBzdHJ1Y3QgZG9fcHJvY19kb2ludHZl Y19taW5tYXhfY29udl9wYXJhbSAqcGFyYW0gPSBkYXRhOwo+IEBAIC0yMjUyLDcgKzIzNTAsNyBA QCBzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfbWlubWF4X2NvbnYoCj4gwqAgwqAgwqAgwqB9 IGVsc2Ugewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IHZhbCA9ICp2YWxwOwo+IMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKHZhbCA8IDApIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgICpuZWdwID0gLTE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAqbmVncCA9IDE7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqbHZh bHAgPSAodW5zaWduZWQgbG9uZyktdmFsOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNl IHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCpuZWdwID0gMDsKPiBAQCAt MjI5MCwxNyArMjM4OCwxNSBAQCBpbnQgcHJvY19kb2ludHZlY19taW5tYXgoc3RydWN0IGN0bF90 YWJsCj4gwqB9Cj4KPiDCoHN0YXRpYyBpbnQgX19kb19wcm9jX2RvdWxvbmd2ZWNfbWlubWF4KHZv aWQgKmRhdGEsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHZvaWQgX191c2Vy ICpidWZmZXIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHZvaWQgX191c2VyICpfYnVmZmVyLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9z LAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHVuc2lnbmVkIGxvbmcgY29udm11bCwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBsb25nIGNvbnZkaXYpCj4gwqB7Cj4gLSNk ZWZpbmUgVE1QQlVGTEVOIDIxCj4gLSDCoCDCoCDCoCB1bnNpZ25lZCBsb25nICppLCAqbWluLCAq bWF4LCB2YWw7Cj4gLSDCoCDCoCDCoCBpbnQgdmxlZnQsIGZpcnN0PTEsIG5lZzsKPiAtIMKgIMKg IMKgIHNpemVfdCBsZW4sIGxlZnQ7Cj4gLSDCoCDCoCDCoCBjaGFyIGJ1ZltUTVBCVUZMRU5dLCAq cDsKPiAtIMKgIMKgIMKgIGNoYXIgX191c2VyICpzID0gYnVmZmVyOwo+ICsgwqAgwqAgwqAgdW5z aWduZWQgbG9uZyAqaSwgKm1pbiwgKm1heDsKPiArIMKgIMKgIMKgIGludCB2bGVmdCwgZmlyc3Qg PSAxLCBlcnIgPSAwOwo+ICsgwqAgwqAgwqAgc2l6ZV90IGxlZnQ7Cj4gKyDCoCDCoCDCoCBjaGFy IF9fdXNlciAqYnVmZmVyID0gKGNoYXIgX191c2VyICopIF9idWZmZXI7Cj4KPiDCoCDCoCDCoCDC oGlmICghZGF0YSB8fCAhdGFibGUtPm1heGxlbiB8fCAhKmxlbnAgfHwKPiDCoCDCoCDCoCDCoCDC oCDCoCgqcHBvcyAmJiAhd3JpdGUpKSB7Cj4gQEAgLTIzMTUsODIgKzI0MTEsNDIgQEAgc3RhdGlj IGludCBfX2RvX3Byb2NfZG91bG9uZ3ZlY19taW5tYXgodgo+IMKgIMKgIMKgIMKgbGVmdCA9ICps ZW5wOwo+Cj4gwqAgwqAgwqAgwqBmb3IgKDsgbGVmdCAmJiB2bGVmdC0tOyBpKyssIG1pbisrLCBt YXgrKywgZmlyc3Q9MCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdW5zaWduZWQgbG9uZyB2 YWw7Cj4gKwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHdyaXRlKSB7Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAobGVmdCkgewo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2hhciBjOwo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGdldF91c2VyKGMsIHMpKQo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg cmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAoIWlzc3BhY2UoYykpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQtLTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHMrKzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgh bGVmdCkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJy ZWFrOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbmVnID0gMDsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IGxlZnQ7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobGVuID4gVE1QQlVGTEVOLTEpCj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZW4gPSBUTVBCVUZMRU4tMTsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChjb3B5X2Zyb21fdXNlcihi dWYsIHMsIGxlbikpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCByZXR1cm4gLUVGQVVMVDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJ1ZltsZW5dID0gMDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHAgPSBi dWY7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKnAgPT0gJy0nICYm IGxlZnQgPiAxKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBuZWcgPSAxOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcCsrOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCpwIDwgJzAnIHx8ICpwID4gJzknKQo+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2YWwgPSBzaW1wbGVfc3RydG91bChw LCAmcCwgMCkgKiBjb252bXVsIC8gY29udmRpdiA7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBsZW4gPSBwLWJ1ZjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGlmICgobGVuIDwgbGVmdCkgJiYgKnAgJiYgIWlzc3BhY2UoKnApKQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYm9vbCBuZWc7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gcHJvY19za2lwX3dzcGFjZSgmYnVmZmVyLCAmbGVmdCk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZXJyKQo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIGVycjsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9IHByb2NfZ2V0X3Vsb25nKCZidWZm ZXIsICZsZWZ0LCAmdmFsLCAmbmVnLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcm9jX3dzcGFjZV9zZXAsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHNpemVvZihwcm9jX3dzcGFjZV9zZXApLCBOVUxMKTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGlmIChlcnIpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoGlmIChuZWcpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB2YWwgPSAtdmFsOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg cyArPSBsZW47Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0IC09IGxl bjsKPiAtCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihuZWcpCj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb250aW51ZTsKPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICgobWluICYmIHZhbCA8ICptaW4p IHx8IChtYXggJiYgdmFsID4gKm1heCkpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBjb250aW51ZTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCppID0gdmFsOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNlIHsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHAgPSBidWY7Cj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWZpcnN0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKnArKyA9ICdcdCc7Cj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzcHJpbnRmKHAsICIlbHUiLCBjb252ZGl2ICogKCppKSAvIGNvbnZt dWwpOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gc3RybGVuKGJ1 Zik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobGVuID4gbGVmdCkK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IGxl ZnQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihjb3B5X3RvX3VzZXIo cywgYnVmLCBsZW4pKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBsZWZ0IC09IGxlbjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHMgKz0g bGVuOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IC0gwqAgwqAgwqAgfQo+IC0KPiAtIMKg IMKgIMKgIGlmICghd3JpdGUgJiYgIWZpcnN0ICYmIGxlZnQpIHsKPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGlmKHB1dF91c2VyKCdcbicsIHMpKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0LS0s IHMrKzsKPiAtIMKgIMKgIMKgIH0KPiAtIMKgIMKgIMKgIGlmICh3cml0ZSkgewo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlZnQpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGNoYXIgYzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm IChnZXRfdXNlcihjLCBzKyspKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAoIWlzc3BhY2UoYykpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB2YWwgPSBjb252ZGl2ICogKCppKSAvIGNvbnZtdWw7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9jX3B1dF91bG9uZygmYnVmZmVyLCAmbGVmdCwgdmFs LCAwLCBmaXJzdCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJ1x0Jyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoZXJyKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgYnJlYWs7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBs ZWZ0LS07Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqB9Cj4gKwo+ICsg wqAgwqAgwqAgaWYgKCF3cml0ZSAmJiAhZmlyc3QgJiYgbGVmdCAmJiAhZXJyKQo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgZXJyID0gcHJvY19wdXRfY2hhcigmYnVmZmVyLCAmbGVmdCwgJ1xuJyk7 Cj4gKyDCoCDCoCDCoCBpZiAod3JpdGUgJiYgIWVycikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGVyciA9IHByb2Nfc2tpcF93c3BhY2UoJmJ1ZmZlciwgJmxlZnQpOwo+IMKgIMKgIMKgIMKgaWYg KHdyaXRlICYmIGZpcnN0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gZXJyID8gOiAtRUlOVkFMOwo+IMKgIMKg IMKgIMKgKmxlbnAgLT0gbGVmdDsKPiDCoCDCoCDCoCDCoCpwcG9zICs9ICpsZW5wOwo+IMKgIMKg IMKgIMKgcmV0dXJuIDA7Cj4gLSN1bmRlZiBUTVBCVUZMRU4KPiDCoH0KPgo+IMKgc3RhdGljIGlu dCBkb19wcm9jX2RvdWxvbmd2ZWNfbWlubWF4KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQg d3JpdGUsCj4gQEAgLTI0NTEsNyArMjUwNyw3IEBAIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlm Zmllc19taW5tYXgoc3QKPiDCoH0KPgo+Cj4gLXN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19q aWZmaWVzX2NvbnYoaW50ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiArc3RhdGljIGlu dCBkb19wcm9jX2RvaW50dmVjX2ppZmZpZXNfY29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25n ICpsdmFscCwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpbnQgKnZhbHAsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50IHdyaXRlLCB2b2lkICpkYXRhKQo+IMKg ewo+IEBAIC0yNDYzLDcgKzI1MTksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfamlm Zmllc19jb252Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgdmFsID0gKnZhbHA7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqB1bnNpZ25lZCBsb25nIGx2YWw7Cj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBpZiAodmFsIDwgMCkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKm5lZ3AgPSAtMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICpuZWdw ID0gMTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGx2YWwgPSAodW5zaWdu ZWQgbG9uZyktdmFsOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNlIHsKPiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCpuZWdwID0gMDsKPiBAQCAtMjQ3NCw3ICsyNTMw LDcgQEAgc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX2ppZmZpZXNfY29udgo+IMKgIMKgIMKg IMKgcmV0dXJuIDA7Cj4gwqB9Cj4KPiAtc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX3VzZXJo el9qaWZmaWVzX2NvbnYoaW50ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiArc3RhdGlj IGludCBkb19wcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzX2NvbnYoYm9vbCAqbmVncCwgdW5z aWduZWQgbG9uZyAqbHZhbHAsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgKnZhbHAsCj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBpbnQgd3JpdGUsIHZvaWQgKmRhdGEpCj4gwqB7Cj4gQEAgLTI0ODYsNyArMjU0Miw3IEBA IHN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY191c2VyaHpfamlmZmkKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGludCB2YWwgPSAqdmFscDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVuc2ln bmVkIGxvbmcgbHZhbDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICh2YWwgPCAwKSB7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqbmVncCA9IC0xOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKm5lZ3AgPSAxOwo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgbHZhbCA9ICh1bnNpZ25lZCBsb25nKS12YWw7Cj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqB9IGVsc2Ugewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKm5lZ3AgPSAwOwo+IEBAIC0yNDk3LDcgKzI1NTMsNyBAQCBzdGF0aWMgaW50IGRvX3Byb2Nf ZG9pbnR2ZWNfdXNlcmh6X2ppZmZpCj4gwqAgwqAgwqAgwqByZXR1cm4gMDsKPiDCoH0KPgo+IC1z dGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19jb252KGludCAqbmVncCwgdW5z aWduZWQgbG9uZyAqbHZhbHAsCj4gK3N0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19tc19qaWZm aWVzX2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsCj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQg KnZhbHAsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBpbnQgd3JpdGUsIHZvaWQgKmRhdGEpCj4gwqB7Cj4gQEAgLTI1MDcs NyArMjU2Myw3IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19tc19qaWZmaWVzX2MKPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCB2YWwgPSAqdmFscDsKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHVuc2lnbmVkIGxvbmcgbHZhbDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICh2 YWwgPCAwKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqbmVncCA9IC0x Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKm5lZ3AgPSAxOwo+IMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbHZhbCA9ICh1bnNpZ25lZCBsb25nKS12YWw7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9IGVsc2Ugewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKm5lZ3AgPSAwOwoKVGhlc2UgZnVuY3Rpb25zIGhhdmUgc28gbXVjaCBs aW5lcyBvZiBjb2RlLiBJIHRoaW5rIHlvdSBjYW4gbWFrZSB0aGVtCmxlc3MuIFBsZWFzZSByZWZl ciB0byBzdHJzZXAoKS4KCi0tIApSZWdhcmRz77yMCkNoYW5nbGkgR2FvKHhpYW9zdW9AZ21haWwu Y29tKQo=