From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from fmmailgate02.web.de ([217.72.192.227]) by canuck.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1PUycO-0003sP-Gn for barebox@lists.infradead.org; Tue, 21 Dec 2010 09:35:02 +0000 Date: Tue, 21 Dec 2010 10:34:23 +0100 From: Sascha Hauer Message-ID: <20101221093423.GA6017@pengutronix.de> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: Re: [PATCH 1] Delete unused file common/dlmalloc.src. To: Krzysztof Halasa Cc: barebox@lists.infradead.org T24gTW9uLCBEZWMgMjAsIDIwMTAgYXQgMTE6NDA6NDRQTSArMDEwMCwgS3J6eXN6dG9mIEhhbGFz YSB3cm90ZToKPiBEZWxldGUgdW51c2VkIGZpbGUgY29tbW9uL2RsbWFsbG9jLnNyYy4KPiBPciBp cyB0aGVyZSBhbnkgcmVhc29uIHRvIGhhdmUgaXQgaGVyZT8KClRoZSByZWFzb24gcHJvYmFibHkg aXMgdG8ga2VlcCB0aGUgb3JpZ2luYWwgY29kZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKZGVyaXZl ZCBmcm9tIGFyb3VuZC4gSSBhZ3JlZSB0aGF0IHdlIGNhbiByZW1vdmUgaXQgdGhvdWdoLCB3ZSBo YXZlIG91cgpoaXN0b3J5IGluIGdpdCBhbmQgZXZlbiB0aGlzIGZpbGUgY2FuIGJlIHJlc3RvcmVk IGZyb20gdGhlIGhpc3RvcnkuCgpTYXNjaGEKCj4gCj4gU2lnbmVkLW9mZi1ieTogS3J6eXN6dG9m IEhhxYJhc2EgPGtoY0BwbS53YXcucGw+Cj4gCj4gZGlmZiAtLWdpdCBhL2NvbW1vbi9kbG1hbGxv Yy5zcmMgYi9jb21tb24vZGxtYWxsb2Muc3JjCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMzJhMzhiYy4uMDAwMDAwMAo+IC0tLSBhL2NvbW1vbi9kbG1hbGxvYy5zcmMKPiArKysg L2Rldi9udWxsCj4gQEAgLTEsMzI2NSArMCwwIEBACj4gLS8qIC0tLS0tLS0tLS0gVG8gbWFrZSBh IG1hbGxvYy5oLCBzdGFydCBjdXR0aW5nIGhlcmUgLS0tLS0tLS0tLS0tICovCj4gLQo+IC0vKgo+ IC0gIEEgdmVyc2lvbiBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkgRG91ZyBMZWEg YW5kIHJlbGVhc2VkIHRvIHRoZQo+IC0gIHB1YmxpYyBkb21haW4uICBTZW5kIHF1ZXN0aW9ucy9j b21tZW50cy9jb21wbGFpbnRzL3BlcmZvcm1hbmNlIGRhdGEKPiAtICB0byBkbEBjcy5vc3dlZ28u ZWR1Cj4gLQo+IC0qIFZFUlNJT04gMi42LjYgIFN1biBNYXIgIDUgMTk6MTA6MDMgMjAwMCAgRG91 ZyBMZWEgIChkbCBhdCBnZWUpCj4gLQo+IC0gICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRl ZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKPiAtCSAgIGZ0cDovL2cub3N3 ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYwo+IC0JIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQo+ IC0KPiAtKiBXaHkgdXNlIHRoaXMgbWFsbG9jPwo+IC0KPiAtICBUaGlzIGlzIG5vdCB0aGUgZmFz dGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgo+IC0gIG1vc3Qg dHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0 ZXN0Cj4gLSAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5n LCBwb3J0YWJsZSBhbmQgdHVuYWJsZS4KPiAtICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRo ZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QgZ2VuZXJhbC1wdXJwb3NlCj4gLSAgYWxsb2Nh dG9yLiBGb3IgYSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKPiAtICAgICBodHRwOi8vZy5v c3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKPiAtCj4gLSogU3lub3BzaXMgb2YgcHVibGlj IHJvdXRpbmVzCj4gLQo+IC0gIChNdWNoIGZ1bGxlciBkZXNjcmlwdGlvbnMgYXJlIGNvbnRhaW5l ZCBpbiB0aGUgcHJvZ3JhbSBkb2N1bWVudGF0aW9uIGJlbG93LikKPiAtCj4gLSAgbWFsbG9jKHNp emVfdCBuKTsKPiAtICAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNo dW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yIG51bGwKPiAtICAgICBpZiBubyBzcGFjZSBpcyBh dmFpbGFibGUuCj4gLSAgZnJlZShWb2lkX3QqIHApOwo+IC0gICAgIFJlbGVhc2UgdGhlIGNodW5r IG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIG9yIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuCj4g LSAgcmVhbGxvYyhWb2lkX3QqIHAsIHNpemVfdCBuKTsKPiAtICAgICBSZXR1cm4gYSBwb2ludGVy IHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQo+IC0gICAg IGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUpIGJ5dGVz LCBvciBudWxsCj4gLSAgICAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLiBUaGUgcmV0dXJuZWQg cG9pbnRlciBtYXkgb3IgbWF5IG5vdCBiZQo+IC0gICAgIHRoZSBzYW1lIGFzIHAuIElmIHAgaXMg bnVsbCwgZXF1aXZhbGVudCB0byBtYWxsb2MuICBVbmxlc3MgdGhlCj4gLSAgICAgI2RlZmluZSBS RUFMTE9DX1pFUk9fQllURVNfRlJFRVMgYmVsb3cgaXMgc2V0LCByZWFsbG9jIHdpdGggYQo+IC0g ICAgIHNpemUgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBj aHVuay4KPiAtICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7Cj4gLSAgICAg UmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBh bGlnbmVkCj4gLSAgICAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudCwgd2hp Y2ggbXVzdCBiZSBhIHBvd2VyIG9mCj4gLSAgICAgdHdvLgo+IC0gIHZhbGxvYyhzaXplX3Qgbik7 Cj4gLSAgICAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2Vz aXplIGlzIHRoZSBwYWdlCj4gLSAgICAgc2l6ZSBvZiB0aGUgc3lzdGVtIChvciBhcyBuZWFyIHRv IHRoaXMgYXMgY2FuIGJlIGZpZ3VyZWQgb3V0IGZyb20KPiAtICAgICBhbGwgdGhlIGluY2x1ZGVz L2RlZmluZXMgYmVsb3cuKQo+IC0gIHB2YWxsb2Moc2l6ZV90IG4pOwo+IC0gICAgIEVxdWl2YWxl bnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKPiAtICAg ICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCj4gLSAgY2FsbG9jKHNpemVfdCB1bml0 LCBzaXplX3QgcXVhbnRpdHkpOwo+IC0gICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHF1YW50aXR5 ICogdW5pdCBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCj4gLSAgICAgc2V0IHRvIHplcm8uCj4g LSAgY2ZyZWUoVm9pZF90KiBwKTsKPiAtICAgICBFcXVpdmFsZW50IHRvIGZyZWUocCkuCj4gLSAg bWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7Cj4gLSAgICAgUmVsZWFzZSBhbGwgYnV0IHBhZCBieXRl cyBvZiBmcmVlZCB0b3AtbW9zdCBtZW1vcnkgYmFjawo+IC0gICAgIHRvIHRoZSBzeXN0ZW0uIFJl dHVybiAxIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgMC4KPiAtICBtYWxsb2NfdXNhYmxlX3NpemUoVm9p ZF90KiBwKTsKPiAtICAgICBSZXBvcnQgdGhlIG51bWJlciB1c2FibGUgYWxsb2NhdGVkIGJ5dGVz IGFzc29jaWF0ZWQgd2l0aCBhbGxvY2F0ZWQKPiAtICAgICBjaHVuayBwLiBUaGlzIG1heSBvciBt YXkgbm90IHJlcG9ydCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSByZXF1ZXN0ZWQsCj4gLSAgICAgZHVl IHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzLgo+IC0gIG1hbGxvY19z dGF0cygpOwo+IC0gICAgIFByaW50cyBicmllZiBzdW1tYXJ5IHN0YXRpc3RpY3Mgb24gc3RkZXJy Lgo+IC0gIG1hbGxpbmZvKCkKPiAtICAgICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250 YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzLgo+IC0gIG1hbGxvcHQoaW50IHBhcmFt ZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCj4gLSAgICAgQ2hhbmdlcyBvbmUgb2Yg dGhlIHR1bmFibGUgcGFyYW1ldGVycyBkZXNjcmliZWQgYmVsb3cuIFJldHVybnMKPiAtICAgICAx IGlmIHN1Y2Nlc3NmdWwgaW4gY2hhbmdpbmcgdGhlIHBhcmFtZXRlciwgZWxzZSAwLgo+IC0KPiAt KiBWaXRhbCBzdGF0aXN0aWNzOgo+IC0KPiAtICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDgtYnl0ZQo+IC0gICAgICAgOCBieXRlIGFsaWdubWVudCBpcyBjdXJyZW50bHkg aGFyZHdpcmVkIGludG8gdGhlIGRlc2lnbi4gIFRoaXMKPiAtICAgICAgIHNlZW1zIHRvIHN1ZmZp Y2UgZm9yIGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KPiAtCj4gLSAgQXNz dW1lZCBwb2ludGVyIHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKPiAtICAgICAg IENvZGUgZm9yIDgtYnl0ZSBwb2ludGVycyBpcyB1bnRlc3RlZCBieSBtZSBidXQgaGFzIHdvcmtl ZAo+IC0gICAgICAgcmVsaWFibHkgYnkgV29sZnJhbSBHbG9nZXIsIHdobyBjb250cmlidXRlZCBt b3N0IG9mIHRoZQo+IC0gICAgICAgY2hhbmdlcyBzdXBwb3J0aW5nIHRoaXMuCj4gLQo+IC0gIEFz c3VtZWQgc2l6ZV90ICByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCj4gLSAgICAg ICBOb3RlIHRoYXQgc2l6ZV90IGlzIGFsbG93ZWQgdG8gYmUgNCBieXRlcyBldmVuIGlmIHBvaW50 ZXJzIGFyZSA4Lgo+IC0KPiAtICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6 IDQgb3IgOCBieXRlcwo+IC0gICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4g b3ZlcmhlYWQgb2YgNCBieXRlcyBob2xkaW5nIHNpemUKPiAtICAgICAgIGFuZCBzdGF0dXMgaW5m b3JtYXRpb24uCj4gLQo+IC0gIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAg MTYgYnl0ZXMgICAgKGluY2x1ZGluZyA0IG92ZXJoZWFkKQo+IC0JCQkgIDgtYnl0ZSBwdHJzOiAg MjQvMzIgYnl0ZXMgKGluY2x1ZGluZywgNC84IG92ZXJoZWFkKQo+IC0KPiAtICAgICAgIFdoZW4g YSBjaHVuayBpcyBmcmVlZCwgMTIgKGZvciA0Ynl0ZSBwdHJzKSBvciAyMCAoZm9yIDggYnl0ZQo+ IC0gICAgICAgcHRycyBidXQgNCBieXRlIHNpemUpIG9yIDI0IChmb3IgOC84KSBhZGRpdGlvbmFs IGJ5dGVzIGFyZQo+IC0gICAgICAgbmVlZGVkOyA0ICg4KSBmb3IgYSB0cmFpbGluZyBzaXplIGZp ZWxkCj4gLSAgICAgICBhbmQgOCAoMTYpIGJ5dGVzIGZvciBmcmVlIGxpc3QgcG9pbnRlcnMuIFRo dXMsIHRoZSBtaW5pbXVtCj4gLSAgICAgICBhbGxvY2F0YWJsZSBzaXplIGlzIDE2LzI0LzMyIGJ5 dGVzLgo+IC0KPiAtICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBt YWxsb2MoMCkpIHJldHVybnMgYQo+IC0gICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhl IG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KPiAtCj4gLSAgTWF4aW11bSBhbGxvY2F0ZWQgc2l6 ZTogNC1ieXRlIHNpemVfdDogMl4zMSAtICA4IGJ5dGVzCj4gLQkJCSAgOC1ieXRlIHNpemVfdDog Ml42MyAtIDE2IGJ5dGVzCj4gLQo+IC0gICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IChwb3NzaWJs eSBzaWduZWQpIHNpemVfdCBiaXQgdmFsdWVzIHN1ZmZpY2UgdG8KPiAtICAgICAgIHJlcHJlc2Vu dCBjaHVuayBzaXplcy4gYFBvc3NpYmx5IHNpZ25lZCcgaXMgZHVlIHRvIHRoZSBmYWN0Cj4gLSAg ICAgICB0aGF0IGBzaXplX3QnIG1heSBiZSBkZWZpbmVkIG9uIGEgc3lzdGVtIGFzIGVpdGhlciBh IHNpZ25lZCBvcgo+IC0gICAgICAgYW4gdW5zaWduZWQgdHlwZS4gVG8gYmUgY29uc2VydmF0aXZl LCB2YWx1ZXMgdGhhdCB3b3VsZCBhcHBlYXIKPiAtICAgICAgIGFzIG5lZ2F0aXZlIG51bWJlcnMg YXJlIGF2b2lkZWQuCj4gLSAgICAgICBSZXF1ZXN0cyBmb3Igc2l6ZXMgd2l0aCBhIG5lZ2F0aXZl IHNpZ24gYml0IHdoZW4gdGhlIHJlcXVlc3QKPiAtICAgICAgIHNpemUgaXMgdHJlYWRlZCBhcyBh IGxvbmcgd2lsbCByZXR1cm4gbnVsbC4KPiAtCj4gLSAgTWF4aW11bSBvdmVyaGVhZCB3YXN0YWdl IHBlciBhbGxvY2F0ZWQgY2h1bms6IG5vcm1hbGx5IDE1IGJ5dGVzCj4gLQo+IC0gICAgICAgQWxp Z25ubWVudCBkZW1hbmRzLCBwbHVzIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUgcmVzdHJp Y3Rpb24KPiAtICAgICAgIG1ha2UgdGhlIG5vcm1hbCB3b3JzdC1jYXNlIHdhc3RhZ2UgMTUgYnl0 ZXMgKGkuZS4sIHVwIHRvIDE1Cj4gLSAgICAgICBtb3JlIGJ5dGVzIHdpbGwgYmUgYWxsb2NhdGVk IHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSwgd2l0aAo+IC0gICAgICAgdHdvIGV4Y2Vw dGlvbnM6Cj4gLQkgMS4gQmVjYXVzZSByZXF1ZXN0cyBmb3IgemVybyBieXRlcyBhbGxvY2F0ZSBu b24temVybyBzcGFjZSwKPiAtCSAgICB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGZvciBhIHJlcXVl c3Qgb2YgemVybyBieXRlcyBpcyAyNCBieXRlcy4KPiAtCSAyLiBGb3IgcmVxdWVzdHMgPj0gbW1h cF90aHJlc2hvbGQgdGhhdCBhcmUgc2VydmljZWQgdmlhCj4gLQkgICAgbW1hcCgpLCB0aGUgd29y c3QgY2FzZSB3YXN0YWdlIGlzIDggYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyCj4gLQkgICAgZnJv bSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbCBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBi eXRlcy4KPiAtCj4gLSogTGltaXRhdGlvbnMKPiAtCj4gLSAgICBIZXJlIGFyZSBzb21lIGZlYXR1 cmVzIHRoYXQgYXJlIE5PVCBjdXJyZW50bHkgc3VwcG9ydGVkCj4gLQo+IC0gICAgKiBObyB1c2Vy LWRlZmluYWJsZSBob29rcyBmb3IgY2FsbGJhY2tzIGFuZCB0aGUgbGlrZS4KPiAtICAgICogTm8g YXV0b21hdGVkIG1lY2hhbmlzbSBmb3IgZnVsbHkgY2hlY2tpbmcgdGhhdCBhbGwgYWNjZXNzZXMK PiAtICAgICAgdG8gbWFsbG9jZWQgbWVtb3J5IHN0YXkgd2l0aGluIHRoZWlyIGJvdW5kcy4KPiAt ICAgICogTm8gc3VwcG9ydCBmb3IgY29tcGFjdGlvbi4KPiAtCj4gLSogU3lub3BzaXMgb2YgY29t cGlsZS10aW1lIG9wdGlvbnM6Cj4gLQo+IC0gICAgUGVvcGxlIGhhdmUgcmVwb3J0ZWQgdXNpbmcg cHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBtYWxsb2Mgb24gYWxsCj4gLSAgICB2ZXJzaW9ucyBv ZiBVbml4LCBzb21ldGltZXMgYnkgdHdlYWtpbmcgc29tZSBvZiB0aGUgZGVmaW5lcwo+IC0gICAg YmVsb3cuIEl0IGhhcyBiZWVuIHRlc3RlZCBtb3N0IGV4dGVuc2l2ZWx5IG9uIFNvbGFyaXMgYW5k Cj4gLSAgICBMaW51eC4gSXQgaXMgYWxzbyByZXBvcnRlZCB0byB3b3JrIG9uIFdJTjMyIHBsYXRm b3Jtcy4KPiAtICAgIFBlb3BsZSBoYXZlIGFsc28gcmVwb3J0ZWQgYWRhcHRpbmcgdGhpcyBtYWxs b2MgZm9yIHVzZSBpbgo+IC0gICAgc3RhbmQtYWxvbmUgZW1iZWRkZWQgc3lzdGVtcy4KPiAtCj4g LSAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW4gc3RyYWlnaHQsIGhhbmQtdHVuZWQgQU5TSSBD LiAgQW1vbmcgb3RoZXIKPiAtICAgIGNvbnNlcXVlbmNlcywgaXQgdXNlcyBhIGxvdCBvZiBtYWNy b3MuICBCZWNhdXNlIG9mIHRoaXMsIHRvIGJlIGF0Cj4gLSAgICBhbGwgdXNhYmxlLCB0aGlzIGNv ZGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIGFuIG9wdGltaXppbmcgY29tcGlsZXIKPiAtICAg IChmb3IgZXhhbXBsZSBnY2MgLU8yKSB0aGF0IGNhbiBzaW1wbGlmeSBleHByZXNzaW9ucyBhbmQg Y29udHJvbAo+IC0gICAgcGF0aHMuCj4gLQo+IC0gIF9fU1REX0MgICAgICAgICAgICAgICAgICAo ZGVmYXVsdDogZGVyaXZlZCBmcm9tIEMgY29tcGlsZXIgZGVmaW5lcykKPiAtICAgICBOb256ZXJv IGlmIHVzaW5nIEFOU0ktc3RhbmRhcmQgQyBjb21waWxlciwgYSBDKysgY29tcGlsZXIsIG9yCj4g LSAgICAgYSBDIGNvbXBpbGVyIHN1ZmZpY2llbnRseSBjbG9zZSB0byBBTlNJIHRvIGdldCBhd2F5 IHdpdGggaXQuCj4gLSAgREVCVUcgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBOT1QgZGVm aW5lZCkKPiAtICAgICBEZWZpbmUgdG8gZW5hYmxlIGRlYnVnZ2luZy4gQWRkcyBmYWlybHkgZXh0 ZW5zaXZlIGFzc2VydGlvbi1iYXNlZAo+IC0gICAgIGNoZWNraW5nIHRvIGhlbHAgdHJhY2sgZG93 biBtZW1vcnkgZXJyb3JzLCBidXQgbm90aWNlYWJseSBzbG93cyBkb3duCj4gLSAgICAgZXhlY3V0 aW9uLgo+IC0gIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAoZGVmYXVsdDogTk9UIGRlZmluZWQp Cj4gLSAgICAgRGVmaW5lIHRoaXMgaWYgeW91IHRoaW5rIHRoYXQgcmVhbGxvYyhwLCAwKSBzaG91 bGQgYmUgZXF1aXZhbGVudAo+IC0gICAgIHRvIGZyZWUocCkuIE90aGVyd2lzZSwgc2luY2UgbWFs bG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IKPiAtICAgICBtYWxsb2MoMCksIHNvIGRv ZXMgcmVhbGxvYyhwLCAwKS4KPiAtICBIQVZFX01FTUNQWSAgICAgICAgICAgICAgIChkZWZhdWx0 OiBkZWZpbmVkKQo+IC0gICAgIERlZmluZSBpZiB5b3UgYXJlIG5vdCBvdGhlcndpc2UgdXNpbmcg QU5TSSBTVEQgQywgYnV0IHN0aWxsCj4gLSAgICAgaGF2ZSBtZW1jcHkgYW5kIG1lbXNldCBpbiB5 b3VyIEMgbGlicmFyeSBhbmQgd2FudCB0byB1c2UgdGhlbS4KPiAtICAgICBPdGhlcndpc2UsIHNp bXBsZSBpbnRlcm5hbCB2ZXJzaW9ucyBhcmUgc3VwcGxpZWQuCj4gLSAgVVNFX01FTUNQWSAgICAg ICAgICAgICAgIChkZWZhdWx0OiAxIGlmIEhBVkVfTUVNQ1BZIGlzIGRlZmluZWQsIDAgb3RoZXJ3 aXNlKQo+IC0gICAgIERlZmluZSBhcyAxIGlmIHlvdSB3YW50IHRoZSBDIGxpYnJhcnkgdmVyc2lv bnMgb2YgbWVtc2V0IGFuZAo+IC0gICAgIG1lbWNweSBjYWxsZWQgaW4gcmVhbGxvYyBhbmQgY2Fs bG9jIChvdGhlcndpc2UgbWFjcm8gdmVyc2lvbnMgYXJlIHVzZWQpLgo+IC0gICAgIEF0IGxlYXN0 IG9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgc2ltcGxlIG1hY3JvIHZlcnNpb25zIHVzdWFsbHkKPiAt ICAgICBvdXRwZXJmb3JtIGxpYmMgdmVyc2lvbnMuCj4gLSAgSEFWRV9NTUFQICAgICAgICAgICAg ICAgICAoZGVmYXVsdDogZGVmaW5lZCBhcyAxKQo+IC0gICAgIERlZmluZSB0byBub24temVybyB0 byBvcHRpb25hbGx5IG1ha2UgbWFsbG9jKCkgdXNlIG1tYXAoKSB0bwo+IC0gICAgIGFsbG9jYXRl IHZlcnkgbGFyZ2UgYmxvY2tzLgo+IC0gIEhBVkVfTVJFTUFQICAgICAgICAgICAgICAgICAoZGVm YXVsdDogZGVmaW5lZCBhcyAwIHVubGVzcyBMaW51eCBsaWJjIHNldCkKPiAtICAgICBEZWZpbmUg dG8gbm9uLXplcm8gdG8gb3B0aW9uYWxseSBtYWtlIHJlYWxsb2MoKSB1c2UgbXJlbWFwKCkgdG8K PiAtICAgICByZWFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLgo+IC0gIG1hbGxvY19nZXRwYWdl c2l6ZSAgICAgICAgKGRlZmF1bHQ6IGRlcml2ZWQgZnJvbSBzeXN0ZW0gI2luY2x1ZGVzKQo+IC0g ICAgIEVpdGhlciBhIGNvbnN0YW50IG9yIHJvdXRpbmUgY2FsbCByZXR1cm5pbmcgdGhlIHN5c3Rl bSBwYWdlIHNpemUuCj4gLSAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAoZGVmYXVsdDogTk9U IGRlZmluZWQpCj4gLSAgICAgT3B0aW9uYWxseSBkZWZpbmUgaWYgeW91IGFyZSBvbiBhIHN5c3Rl bSB3aXRoIGEgL3Vzci9pbmNsdWRlL21hbGxvYy5oCj4gLSAgICAgdGhhdCBkZWNsYXJlcyBzdHJ1 Y3QgbWFsbGluZm8uIEl0IGlzIG5vdCBhdCBhbGwgbmVjZXNzYXJ5IHRvCj4gLSAgICAgZGVmaW5l IHRoaXMgZXZlbiBpZiB5b3UgZG8sIGJ1dCB3aWxsIGVuc3VyZSBjb25zaXN0ZW5jeS4KPiAtICBJ TlRFUk5BTF9TSVpFX1QgICAgICAgICAgIChkZWZhdWx0OiBzaXplX3QpCj4gLSAgICAgRGVmaW5l IHRvIGEgMzItYml0IHR5cGUgKHByb2JhYmx5IGB1bnNpZ25lZCBpbnQnKSBpZiB5b3UgYXJlIG9u IGEKPiAtICAgICA2NC1iaXQgbWFjaGluZSwgeWV0IGRvIG5vdCB3YW50IG9yIG5lZWQgdG8gYWxs b3cgbWFsbG9jIHJlcXVlc3RzIG9mCj4gLSAgICAgZ3JlYXRlciB0aGFuIDJeMzEgdG8gYmUgaGFu ZGxlZC4gVGhpcyBzYXZlcyBzcGFjZSwgZXNwZWNpYWxseSBmb3IKPiAtICAgICB2ZXJ5IHNtYWxs IGNodW5rcy4KPiAtICBJTlRFUk5BTF9MSU5VWF9DX0xJQiAgICAgIChkZWZhdWx0OiBOT1QgZGVm aW5lZCkKPiAtICAgICBEZWZpbmVkIG9ubHkgd2hlbiBjb21waWxlZCBhcyBwYXJ0IG9mIExpbnV4 IGxpYmMuCj4gLSAgICAgQWxzbyBub3RlIHRoYXQgdGhlcmUgaXMgc29tZSBvZGQgaW50ZXJuYWwg bmFtZS1tYW5nbGluZyB2aWEgZGVmaW5lcwo+IC0gICAgIChmb3IgZXhhbXBsZSwgaW50ZXJuYWxs eSwgYG1hbGxvYycgaXMgbmFtZWQgYG1BTExPYycpIG5lZWRlZAo+IC0gICAgIHdoZW4gY29tcGls aW5nIGluIHRoaXMgY2FzZS4gVGhlc2UgbG9vayBmdW5ueSBidXQgZG9uJ3Qgb3RoZXJ3aXNlCj4g LSAgICAgYWZmZWN0IGFueXRoaW5nLgo+IC0gIFdJTjMyICAgICAgICAgICAgICAgICAgICAgKGRl ZmF1bHQ6IHVuZGVmaW5lZCkKPiAtICAgICBEZWZpbmUgdGhpcyBvbiBNUyB3aW4gKDk1LCBudCkg cGxhdGZvcm1zIHRvIGNvbXBpbGUgaW4gc2JyayBlbXVsYXRpb24uCj4gLSAgTEFDS1NfVU5JU1RE X0ggICAgICAgICAgICAoZGVmYXVsdDogdW5kZWZpbmVkIGlmIG5vdCBXSU4zMikKPiAtICAgICBE ZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgPHVuaXN0ZC5oPi4KPiAt ICBMQUNLU19TWVNfUEFSQU1fSCAgICAgICAgIChkZWZhdWx0OiB1bmRlZmluZWQgaWYgbm90IFdJ TjMyKQo+IC0gICAgIERlZmluZSB0aGlzIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgYSA8 c3lzL3BhcmFtLmg+Lgo+IC0gIE1PUkVDT1JFICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IHNi cmspCj4gLSAgICAgVGhlIG5hbWUgb2YgdGhlIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9y ZSBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgo+IC0gIE1PUkVDT1JFX0ZBSUxVUkUgICAgICAgICAg KGRlZmF1bHQ6IC0xKQo+IC0gICAgIFRoZSB2YWx1ZSByZXR1cm5lZCB1cG9uIGZhaWx1cmUgb2Yg TU9SRUNPUkUuCj4gLSAgTU9SRUNPUkVfQ0xFQVJTICAgICAgICAgICAoZGVmYXVsdCAxKQo+IC0g ICAgIFRydWUgKDEpIGlmIHRoZSByb3V0aW5lIG1hcHBlZCB0byBNT1JFQ09SRSB6ZXJvZXMgb3V0 IG1lbW9yeSAod2hpY2gKPiAtICAgICBob2xkcyBmb3Igc2JyaykuCj4gLSAgREVGQVVMVF9UUklN X1RIUkVTSE9MRAo+IC0gIERFRkFVTFRfVE9QX1BBRAo+IC0gIERFRkFVTFRfTU1BUF9USFJFU0hP TEQKPiAtICBERUZBVUxUX01NQVBfTUFYCj4gLSAgICAgRGVmYXVsdCB2YWx1ZXMgb2YgdHVuYWJs ZSBwYXJhbWV0ZXJzIChkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93KQo+IC0gICAgIGNvbnRyb2xs aW5nIGludGVyYWN0aW9uIHdpdGggaG9zdCBzeXN0ZW0gcm91dGluZXMgKHNicmssIG1tYXAsIGV0 YykuCj4gLSAgICAgVGhlc2UgdmFsdWVzIG1heSBhbHNvIGJlIGNoYW5nZWQgZHluYW1pY2FsbHkg dmlhIG1hbGxvcHQoKS4gVGhlCj4gLSAgICAgcHJlc2V0IGRlZmF1bHRzIGFyZSB0aG9zZSB0aGF0 IGdpdmUgYmVzdCBwZXJmb3JtYW5jZSBmb3IgdHlwaWNhbAo+IC0gICAgIHByb2dyYW1zL3N5c3Rl bXMuCj4gLSAgVVNFX0RMX1BSRUZJWCAgICAgICAgICAgICAoZGVmYXVsdDogdW5kZWZpbmVkKQo+ IC0gICAgIFByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLiAg VXNlZnVsIHRvCj4gLSAgICAgcXVpY2tseSBhdm9pZCBwcm9jZWR1cmUgZGVjbGFyYXRpb24gY29u ZmxpY3RzIGFuZCBsaW5rZXIgc3ltYm9sCj4gLSAgICAgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcg bWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuCj4gLQo+IC0KPiAtKi8KPiAtCj4gLQwKPiAtCj4g LQo+IC0vKiBQcmVsaW1pbmFyaWVzICovCj4gLQo+IC0jaWZuZGVmIF9fU1REX0MKPiAtI2lmZGVm IF9fU1REQ19fCj4gLSNkZWZpbmUgX19TVERfQyAgICAgMQo+IC0jZWxzZQo+IC0jaWYgX19jcGx1 c3BsdXMKPiAtI2RlZmluZSBfX1NURF9DICAgICAxCj4gLSNlbHNlCj4gLSNkZWZpbmUgX19TVERf QyAgICAgMAo+IC0jZW5kaWYgLypfX2NwbHVzcGx1cyovCj4gLSNlbmRpZiAvKl9fU1REQ19fKi8K PiAtI2VuZGlmIC8qX19TVERfQyovCj4gLQo+IC0jaWZuZGVmIFZvaWRfdAo+IC0jaWYgKF9fU1RE X0MgfHwgZGVmaW5lZChXSU4zMikpCj4gLSNkZWZpbmUgVm9pZF90ICAgICAgdm9pZAo+IC0jZWxz ZQo+IC0jZGVmaW5lIFZvaWRfdCAgICAgIGNoYXIKPiAtI2VuZGlmCj4gLSNlbmRpZiAvKlZvaWRf dCovCj4gLQo+IC0jaWYgX19TVERfQwo+IC0jaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogZm9yIHNp emVfdCAqLwo+IC0jZWxzZQo+IC0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gLSNlbmRpZgo+IC0K PiAtI2lmZGVmIF9fY3BsdXNwbHVzCj4gLWV4dGVybiAiQyIgewo+IC0jZW5kaWYKPiAtCj4gLSNp bmNsdWRlIDxzdGRpby5oPiAgICAvKiBuZWVkZWQgZm9yIG1hbGxvY19zdGF0cyAqLwo+IC0KPiAt Cj4gLS8qCj4gLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMKPiAtKi8KPiAtCj4gLQo+IC0vKgo+IC0g ICAgRGVidWdnaW5nOgo+IC0KPiAtICAgIEJlY2F1c2UgZnJlZWQgY2h1bmtzIG1heSBiZSBvdmVy d3JpdHRlbiB3aXRoIGxpbmsgZmllbGRzLCB0aGlzCj4gLSAgICBtYWxsb2Mgd2lsbCBvZnRlbiBk aWUgd2hlbiBmcmVlZCBtZW1vcnkgaXMgb3ZlcndyaXR0ZW4gYnkgdXNlcgo+IC0gICAgcHJvZ3Jh bXMuICBUaGlzIGNhbiBiZSB2ZXJ5IGVmZmVjdGl2ZSAoYWxiZWl0IGluIGFuIGFubm95aW5nIHdh eSkKPiAtICAgIGluIGhlbHBpbmcgdHJhY2sgZG93biBkYW5nbGluZyBwb2ludGVycy4KPiAtCj4g LSAgICBJZiB5b3UgY29tcGlsZSB3aXRoIC1EREVCVUcsIGEgbnVtYmVyIG9mIGFzc2VydGlvbiBj aGVja3MgYXJlCj4gLSAgICBlbmFibGVkIHRoYXQgd2lsbCBjYXRjaCBtb3JlIG1lbW9yeSBlcnJv cnMuIFlvdSBwcm9iYWJseSB3b24ndCBiZQo+IC0gICAgYWJsZSB0byBtYWtlIG11Y2ggc2Vuc2Ug b2YgdGhlIGFjdHVhbCBhc3NlcnRpb24gZXJyb3JzLCBidXQgdGhleQo+IC0gICAgc2hvdWxkIGhl bHAgeW91IGxvY2F0ZSBpbmNvcnJlY3RseSBvdmVyd3JpdHRlbiBtZW1vcnkuICBUaGUKPiAtICAg IGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93biBleGVjdXRp b24KPiAtICAgIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdp dGggREVCVUcgc2V0IHdpbGwKPiAtICAgIGF0dGVtcHQgdG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBw ZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rIGluIHRoZQo+IC0gICAgY291cnNlIG9mIGNvbXB1 dGluZyB0aGUgc3VtbW1hcmllcy4gKEJ5IG5hdHVyZSwgbW1hcHBlZCByZWdpb25zCj4gLSAgICBj YW5ub3QgYmUgY2hlY2tlZCB2ZXJ5IG11Y2ggYXV0b21hdGljYWxseS4pCj4gLQo+IC0gICAgU2V0 dGluZyBERUJVRyBtYXkgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIG1vZGlm eQo+IC0gICAgdGhpcyBjb2RlLiBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMg c3BlbGwgb3V0IGluIG1vcmUKPiAtICAgIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFy aWFudHMgdW5kZXJseWluZyB0aGUgYWxnb3JpdGhtcy4KPiAtCj4gLSovCj4gLQo+IC0jaWYgREVC VUcKPiAtI2luY2x1ZGUgPGFzc2VydC5oPgo+IC0jZWxzZQo+IC0jZGVmaW5lIGFzc2VydCh4KSAo KHZvaWQpMCkKPiAtI2VuZGlmCj4gLQo+IC0KPiAtLyoKPiAtICBJTlRFUk5BTF9TSVpFX1QgaXMg dGhlIHdvcmQtc2l6ZSB1c2VkIGZvciBpbnRlcm5hbCBib29ra2VlcGluZwo+IC0gIG9mIGNodW5r IHNpemVzLiBPbiBhIDY0LWJpdCBtYWNoaW5lLCB5b3UgY2FuIHJlZHVjZSBtYWxsb2MKPiAtICBv dmVyaGVhZCBieSBkZWZpbmluZyBJTlRFUk5BTF9TSVpFX1QgdG8gYmUgYSAzMiBiaXQgYHVuc2ln bmVkIGludCcKPiAtICBhdCB0aGUgZXhwZW5zZSBvZiBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUg cmVxdWVzdHMgZ3JlYXRlciB0aGFuCj4gLSAgMl4zMS4gVGhpcyBsaW1pdGF0aW9uIGlzIGhhcmRs eSBldmVyIGEgY29uY2VybjsgeW91IGFyZSBlbmNvdXJhZ2VkCj4gLSAgdG8gc2V0IHRoaXMuIEhv d2V2ZXIsIHRoZSBkZWZhdWx0IHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgc2l6ZV90Lgo+IC0qLwo+ IC0KPiAtI2lmbmRlZiBJTlRFUk5BTF9TSVpFX1QKPiAtI2RlZmluZSBJTlRFUk5BTF9TSVpFX1Qg c2l6ZV90Cj4gLSNlbmRpZgo+IC0KPiAtLyoKPiAtICBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMg c2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8KPiAtICByZWFsbG9jIHdpdGggemVybyBieXRlcyBz aG91bGQgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuCj4gLSAgU29tZSBwZW9wbGUgdGhp bmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsIHNpbmNlIHRoaXMgbWFsbG9jCj4gLSAgcmV0dXJucyBh IHVuaXF1ZSBwb2ludGVyIGZvciBtYWxsb2MoMCksIHNvIGRvZXMgcmVhbGxvYyhwLCAwKS4KPiAt Ki8KPiAtCj4gLQo+IC0vKiAgICNkZWZpbmUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCj4g LQo+IC0KPiAtLyoKPiAtICBXSU4zMiBjYXVzZXMgYW4gZW11bGF0aW9uIG9mIHNicmsgdG8gYmUg Y29tcGlsZWQgaW4KPiAtICBtbWFwLWJhc2VkIG9wdGlvbnMgYXJlIG5vdCBjdXJyZW50bHkgc3Vw cG9ydGVkIGluIFdJTjMyLgo+IC0qLwo+IC0KPiAtLyogI2RlZmluZSBXSU4zMiAqLwo+IC0jaWZk ZWYgV0lOMzIKPiAtI2RlZmluZSBNT1JFQ09SRSB3c2Jyawo+IC0jZGVmaW5lIEhBVkVfTU1BUCAw Cj4gLQo+IC0jZGVmaW5lIExBQ0tTX1VOSVNURF9ICj4gLSNkZWZpbmUgTEFDS1NfU1lTX1BBUkFN X0gKPiAtCj4gLS8qCj4gLSAgSW5jbHVkZSAnd2luZG93cy5oJyB0byBnZXQgdGhlIG5lY2Vzc2Fy eSBkZWNsYXJhdGlvbnMgZm9yIHRoZQo+IC0gIE1pY3Jvc29mdCBWaXN1YWwgQysrIGRhdGEgc3Ry dWN0dXJlcyBhbmQgcm91dGluZXMgdXNlZCBpbiB0aGUgJ3NicmsnCj4gLSAgZW11bGF0aW9uLgo+ IC0KPiAtICBEZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiBzbyB0aGF0IG9ubHkgdGhlIGVzc2Vu dGlhbCBNaWNyb3NvZnQKPiAtICBWaXN1YWwgQysrIGhlYWRlciBmaWxlcyBhcmUgaW5jbHVkZWQu Cj4gLSovCj4gLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgo+IC0jaW5jbHVkZSA8d2luZG93 cy5oPgo+IC0jZW5kaWYKPiAtCj4gLQo+IC0vKgo+IC0gIEhBVkVfTUVNQ1BZIHNob3VsZCBiZSBk ZWZpbmVkIGlmIHlvdSBhcmUgbm90IG90aGVyd2lzZSB1c2luZwo+IC0gIEFOU0kgU1REIEMsIGJ1 dCBzdGlsbCBoYXZlIG1lbWNweSBhbmQgbWVtc2V0IGluIHlvdXIgQyBsaWJyYXJ5Cj4gLSAgYW5k IHdhbnQgdG8gdXNlIHRoZW0gaW4gY2FsbG9jIGFuZCByZWFsbG9jLiBPdGhlcndpc2Ugc2ltcGxl Cj4gLSAgbWFjcm8gdmVyc2lvbnMgYXJlIGRlZmluZWQgaGVyZS4KPiAtCj4gLSAgVVNFX01FTUNQ WSBzaG91bGQgYmUgZGVmaW5lZCBhcyAxIGlmIHlvdSBhY3R1YWxseSB3YW50IHRvCj4gLSAgaGF2 ZSBtZW1zZXQgYW5kIG1lbWNweSBjYWxsZWQuIFBlb3BsZSByZXBvcnQgdGhhdCB0aGUgbWFjcm8K PiAtICB2ZXJzaW9ucyBhcmUgb2Z0ZW4gZW5vdWdoIGZhc3RlciB0aGFuIGxpYmMgdmVyc2lvbnMg b24gbWFueQo+IC0gIHN5c3RlbXMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHRoZW0uCj4gLQo+ IC0qLwo+IC0KPiAtI2RlZmluZSBIQVZFX01FTUNQWQo+IC0KPiAtI2lmbmRlZiBVU0VfTUVNQ1BZ Cj4gLSNpZmRlZiBIQVZFX01FTUNQWQo+IC0jZGVmaW5lIFVTRV9NRU1DUFkgMQo+IC0jZWxzZQo+ IC0jZGVmaW5lIFVTRV9NRU1DUFkgMAo+IC0jZW5kaWYKPiAtI2VuZGlmCj4gLQo+IC0jaWYgKF9f U1REX0MgfHwgZGVmaW5lZChIQVZFX01FTUNQWSkpCj4gLQo+IC0jaWYgX19TVERfQwo+IC12b2lk KiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKPiAtdm9pZCogbWVtY3B5KHZvaWQqLCBjb25z dCB2b2lkKiwgc2l6ZV90KTsKPiAtI2Vsc2UKPiAtI2lmZGVmIFdJTjMyCj4gLS8qIE9uIFdpbjMy IHBsYXRmb3JtcywgJ21lbXNldCgpJyBhbmQgJ21lbWNweSgpJyBhcmUgYWxyZWFkeSBkZWNsYXJl ZCBpbiAqLwo+IC0vKiAnd2luZG93cy5oJyAqLwo+IC0jZWxzZQo+IC1Wb2lkX3QqIG1lbXNldCgp Owo+IC1Wb2lkX3QqIG1lbWNweSgpOwo+IC0jZW5kaWYKPiAtI2VuZGlmCj4gLSNlbmRpZgo+IC0K PiAtI2lmIFVTRV9NRU1DUFkKPiAtCj4gLS8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBvbmx5 IGludm9rZWQgd2l0aCAoMm4rMSktbXVsdGlwbGVzIG9mCj4gLSAgIElOVEVSTkFMX1NJWkVfVCB1 bml0cywgd2l0aCBhIHBvc2l0aXZlIGludGVnZXIgbi4gVGhpcyBpcyBleHBsb2l0ZWQKPiAtICAg Zm9yIGZhc3QgaW5saW5lIGV4ZWN1dGlvbiB3aGVuIG4gaXMgc21hbGwuICovCj4gLQo+IC0jZGVm aW5lIE1BTExPQ19aRVJPKGNoYXJwLCBuYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBJTlRFUk5B TF9TSVpFX1QgbXpzeiA9IChuYnl0ZXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gIGlmKG16c3ogPD0gOSpzaXplb2YobXpzeikpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBJTlRFUk5BTF9T SVpFX1QqIG16ID0gKElOVEVSTkFMX1NJWkVfVCopIChjaGFycCk7ICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiAtICAgIGlmKG16c3ogPj0gNSpzaXplb2YobXpzeikpIHsgICAgICpteisrID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0JCQkJICAgICAqbXorKyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgaWYobXpzeiA+PSA3KnNp emVvZihtenN6KSkgeyAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+IC0JCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiAtCWlmKG16c3ogPj0gOSpzaXplb2YobXpzeikpIHsgKm16KysgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLQkJCQkgICAgICpteisrID0gMDsgfX19ICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+IC0JCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiAtCQkJCSAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gLQkJCQkgICAgICpteiAgID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC0gIH0gZWxzZSBtZW1zZXQoKGNoYXJwKSwgMCwgbXpzeik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLX0gd2hpbGUoMCkKPiAtCj4g LSNkZWZpbmUgTUFMTE9DX0NPUFkoZGVzdCxzcmMsbmJ5dGVzKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gIElO VEVSTkFMX1NJWkVfVCBtY3N6ID0gKG5ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLSAgaWYobWNzeiA8PSA5KnNpemVvZihtY3N6KSkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIElOVEVS TkFMX1NJWkVfVCogbWNzcmMgPSAoSU5URVJOQUxfU0laRV9UKikgKHNyYyk7ICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gICAgSU5URVJOQUxfU0laRV9UKiBtY2RzdCA9IChJTlRFUk5BTF9T SVpFX1QqKSAoZGVzdCk7ICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBpZihtY3N6ID49 IDUqc2l6ZW9mKG1jc3opKSB7ICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAg ICAgICAgIFwKPiAtCQkJCSAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAg ICAgICBcCj4gLSAgICAgIGlmKG1jc3ogPj0gNypzaXplb2YobWNzeikpIHsgICAqbWNkc3QrKyA9 ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKPiAtCQkJCSAgICAgKm1jZHN0KysgPSAq bWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCj4gLQlpZihtY3N6ID49IDkqc2l6ZW9mKG1j c3opKSB7ICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAo+IC0JCQkJ ICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyB9fX0gICAgICAgICAgICAgICAgIFwKPiAtCQkJCSAg ICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCj4gLQkJCQkgICAg ICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAo+IC0JCQkJICAgICAq bWNkc3QgICA9ICptY3NyYyAgOyAgICAgICAgICAgICAgICAgICAgIFwKPiAtICB9IGVsc2UgbWVt Y3B5KGRlc3QsIHNyYywgbWNzeik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC19IHdoaWxlKDApCj4gLQo+IC0jZWxzZSAvKiAhVVNFX01FTUNQWSAqLwo+ IC0KPiAtLyogVXNlIER1ZmYncyBkZXZpY2UgZm9yIGdvb2QgemVyb2luZy9jb3B5aW5nIHBlcmZv cm1hbmNlLiAqLwo+IC0KPiAtI2RlZmluZSBNQUxMT0NfWkVSTyhjaGFycCwgbmJ5dGVzKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC1kbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gLSAgSU5URVJOQUxfU0laRV9UKiBtenAgPSAoSU5URVJOQUxfU0laRV9UKiko Y2hhcnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBsb25nIG1jdG1wID0gKG5i eXRlcykvc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCksIG1jbjsgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+IC0gIGlmIChtY3RtcCA8IDgpIG1jbiA9IDA7IGVsc2UgeyBtY24gPSAobWN0bXAtMSkv ODsgbWN0bXAgJT0gODsgfSAgICAgICAgICAgICBcCj4gLSAgc3dpdGNoIChtY3RtcCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiAtICAgIGNhc2UgMDogZm9yKDs7KSB7ICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY2FzZSA3OiAgICAgICAgICAgKm16cCsr ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAg ICBjYXNlIDY6ICAgICAgICAgICAqbXpwKysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIGNhc2UgNTogICAgICAgICAgICptenArKyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY2Fz ZSA0OiAgICAgICAgICAgKm16cCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gLSAgICBjYXNlIDM6ICAgICAgICAgICAqbXpwKysgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIGNhc2UgMjog ICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC0gICAgY2FzZSAxOiAgICAgICAgICAgKm16cCsrID0gMDsgaWYobWNuIDw9 IDApIGJyZWFrOyBtY24tLTsgfSAgICAgICAgICAgICAgICBcCj4gLSAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiAtfSB3aGlsZSgwKQo+IC0KPiAtI2RlZmluZSBNQUxMT0NfQ09QWShkZXN0LHNyYyxu Ynl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC1kbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLSAgSU5URVJOQUxfU0laRV9UKiBtY3NyYyA9IChJTlRFUk5B TF9TSVpFX1QqKSBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBJTlRFUk5B TF9TSVpFX1QqIG1jZHN0ID0gKElOVEVSTkFMX1NJWkVfVCopIGRlc3Q7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gIGxvbmcgbWN0bXAgPSAobmJ5dGVzKS9zaXplb2YoSU5URVJOQUxf U0laRV9UKSwgbWNuOyAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgaWYgKG1jdG1wIDwg OCkgbWNuID0gMDsgZWxzZSB7IG1jbiA9IChtY3RtcC0xKS84OyBtY3RtcCAlPSA4OyB9ICAgICAg ICAgICAgIFwKPiAtICBzd2l0Y2ggKG1jdG1wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY2FzZSAwOiBmb3IoOzsp IHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gLSAgICBjYXNlIDc6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIGNhc2UgNjogICAgICAgICAgICpt Y2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ IC0gICAgY2FzZSA1OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBjYXNlIDQ6ICAgICAgICAgICAqbWNkc3Qr KyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAg IGNhc2UgMzogICAgICAgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY2FzZSAyOiAgICAgICAgICAgKm1jZHN0KysgPSAq bWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBjYXNl IDE6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyBpZihtY24gPD0gMCkgYnJlYWs7IG1j bi0tOyB9ICAgICAgIFwKPiAtICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC19IHdoaWxlKDApCj4g LQo+IC0jZW5kaWYKPiAtCj4gLQo+IC0vKgo+IC0gIERlZmluZSBIQVZFX01NQVAgdG8gb3B0aW9u YWxseSBtYWtlIG1hbGxvYygpIHVzZSBtbWFwKCkgdG8KPiAtICBhbGxvY2F0ZSB2ZXJ5IGxhcmdl IGJsb2Nrcy4gIFRoZXNlIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlCj4gLSAgb3BlcmF0aW5nIHN5 c3RlbSBpbW1lZGlhdGVseSBhZnRlciBhIGZyZWUoKS4KPiAtKi8KPiAtCj4gLSNpZm5kZWYgSEFW RV9NTUFQCj4gLSNkZWZpbmUgSEFWRV9NTUFQIDEKPiAtI2VuZGlmCj4gLQo+IC0vKgo+IC0gIERl ZmluZSBIQVZFX01SRU1BUCB0byBtYWtlIHJlYWxsb2MoKSB1c2UgbXJlbWFwKCkgdG8gcmUtYWxs b2NhdGUKPiAtICBsYXJnZSBibG9ja3MuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHBvc3NpYmxl IG9uIExpbnV4IHdpdGgKPiAtICBrZXJuZWwgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxLjMuNzcuCj4g LSovCj4gLQo+IC0jaWZuZGVmIEhBVkVfTVJFTUFQCj4gLSNpZmRlZiBJTlRFUk5BTF9MSU5VWF9D X0xJQgo+IC0jZGVmaW5lIEhBVkVfTVJFTUFQIDEKPiAtI2Vsc2UKPiAtI2RlZmluZSBIQVZFX01S RU1BUCAwCj4gLSNlbmRpZgo+IC0jZW5kaWYKPiAtCj4gLSNpZiBIQVZFX01NQVAKPiAtCj4gLSNp bmNsdWRlIDx1bmlzdGQuaD4KPiAtI2luY2x1ZGUgPGZjbnRsLmg+Cj4gLSNpbmNsdWRlIDxzeXMv bW1hbi5oPgo+IC0KPiAtI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQ X0FOT04pCj4gLSNkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgo+IC0jZW5kaWYKPiAtCj4g LSNlbmRpZiAvKiBIQVZFX01NQVAgKi8KPiAtCj4gLS8qCj4gLSAgQWNjZXNzIHRvIHN5c3RlbSBw YWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jCj4gLSAgbWFuYWdl cyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4KPiAtCj4gLSAgVGhl IGZvbGxvd2luZyBtZWNoYW5pY3MgZm9yIGdldHBhZ2VzaXplIHdlcmUgYWRhcHRlZCBmcm9tCj4g LSAgYnNkL2dudSBnZXRwYWdlc2l6ZS5oCj4gLSovCj4gLQo+IC0jaWZuZGVmIExBQ0tTX1VOSVNU RF9ICj4gLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPgo+IC0jZW5kaWYKPiAtCj4gLSNpZm5kZWYgbWFs bG9jX2dldHBhZ2VzaXplCj4gLSMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUg U1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLwo+IC0jICAgIGlmbmRlZiBfU0NfUEFH RV9TSVpFCj4gLSMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKPiAtIyAg ICBlbmRpZgo+IC0jICBlbmRpZgo+IC0jICBpZmRlZiBfU0NfUEFHRV9TSVpFCj4gLSMgICAgZGVm aW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCj4gLSMgIGVsc2UK PiAtIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVf R0VUUEFHRVNJWkUpCj4gLSAgICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7Cj4gLSMg ICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKPiAtIyAgICBlbHNl Cj4gLSMgICAgICBpZmRlZiBXSU4zMgo+IC0jICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2Vz aXplICg0MDk2KSAvKiBUQkQ6IFVzZSAnR2V0U3lzdGVtSW5mbycgaW5zdGVhZCAqLwo+IC0jICAg ICAgZWxzZQo+IC0jICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKPiAtIyAgICAgICAg ICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KPiAtIyAgICAgICAgZW5kaWYKPiAtIyAgICAgICAgaWZk ZWYgRVhFQ19QQUdFU0laRQo+IC0jICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUg RVhFQ19QQUdFU0laRQo+IC0jICAgICAgICBlbHNlCj4gLSMgICAgICAgICAgaWZkZWYgTkJQRwo+ IC0jICAgICAgICAgICAgaWZuZGVmIENMU0laRQo+IC0jICAgICAgICAgICAgICBkZWZpbmUgbWFs bG9jX2dldHBhZ2VzaXplIE5CUEcKPiAtIyAgICAgICAgICAgIGVsc2UKPiAtIyAgICAgICAgICAg ICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKPiAtIyAgICAgICAg ICAgIGVuZGlmCj4gLSMgICAgICAgICAgZWxzZQo+IC0jICAgICAgICAgICAgaWZkZWYgTkJQQwo+ IC0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKPiAtIyAgICAg ICAgICAgIGVsc2UKPiAtIyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKPiAtIyAgICAgICAg ICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCj4gLSMgICAgICAgICAg ICAgIGVsc2UKPiAtIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICg0 MDk2KSAvKiBqdXN0IGd1ZXNzICovCj4gLSMgICAgICAgICAgICAgIGVuZGlmCj4gLSMgICAgICAg ICAgICBlbmRpZgo+IC0jICAgICAgICAgIGVuZGlmCj4gLSMgICAgICAgIGVuZGlmCj4gLSMgICAg ICBlbmRpZgo+IC0jICAgIGVuZGlmCj4gLSMgIGVuZGlmCj4gLSNlbmRpZgo+IC0KPiAtCj4gLS8q Cj4gLQo+IC0gIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNW SUQvWFBHIG1hbGxpbmZvCj4gLSAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFp bmluZyB0aGUgc2FtZSBraW5kIG9mCj4gLSAgaW5mb3JtYXRpb24geW91IGNhbiBnZXQgZnJvbSBt YWxsb2Nfc3RhdHMuIEl0IHNob3VsZCB3b3JrIG9uCj4gLSAgYW55IFNWSUQvWFBHIGNvbXBsaWFu dCBzeXN0ZW0gdGhhdCBoYXMgYSAvdXNyL2luY2x1ZGUvbWFsbG9jLmgKPiAtICBkZWZpbmluZyBz dHJ1Y3QgbWFsbGluZm8uIChJZiB5b3UnZCBsaWtlIHRvIGluc3RhbGwgc3VjaCBhIHRoaW5nCj4g LSAgeW91cnNlbGYsIGN1dCBvdXQgdGhlIHByZWxpbWluYXJ5IGRlY2xhcmF0aW9ucyBhcyBkZXNj cmliZWQgYWJvdmUKPiAtICBhbmQgYmVsb3cgYW5kIHNhdmUgdGhlbSBpbiBhIG1hbGxvYy5oIGZp bGUuIEJ1dCB0aGVyZSdzIG5vCj4gLSAgY29tcGVsbGluZyByZWFzb24gdG8gYm90aGVyIHRvIGRv IHRoaXMuKQo+IC0KPiAtICBUaGUgbWFpbiBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxp bmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkCj4gLSAgKGJ5LWNvcHkpIGJ5IG1hbGxpbmZvKCku ICBUaGUgU1ZJRC9YUEcgbWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhCj4gLSAgYnVuY2ggb2Yg ZmllbGRzLCBtb3N0IG9mIHdoaWNoIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMKPiAt ICB2ZXJzaW9uIG9mIG1hbGxvYy4gU29tZSBvZiB0aGVzZSBmaWVsZHMgYXJlIGFyZSBpbnN0ZWFk IGZpbGxlZCBieQo+IC0gIG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQg cG9zc2libHkgYmUgb2YgaW50ZXJlc3QuCj4gLQo+IC0gIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9D X0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCj4gLSAgL3Vzci9pbmNsdWRlL21hbGxvYy5o IGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAo+IC0gIG1hbGxpbmZv LiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGFuIFNWSUQyL1hQRzIgY29tcGxpYW50Cj4g LSAgdmVyc2lvbiBpcyBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRo ZSBzYW1lIGZvcgo+IC0gIG1hbGxpbmZvKCkgdG8gd29yay4KPiAtCj4gLSovCj4gLQo+IC0vKiAj ZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KPiAtCj4gLSNpZiBIQVZFX1VTUl9J TkNMVURFX01BTExPQ19ICj4gLSNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCj4gLSNl bHNlCj4gLQo+IC0vKiBTVklEMi9YUEcgbWFsbGluZm8gc3RydWN0dXJlICovCj4gLQo+IC1zdHJ1 Y3QgbWFsbGluZm8gewo+IC0gIGludCBhcmVuYTsgICAgLyogdG90YWwgc3BhY2UgYWxsb2NhdGVk IGZyb20gc3lzdGVtICovCj4gLSAgaW50IG9yZGJsa3M7ICAvKiBudW1iZXIgb2Ygbm9uLWludXNl IGNodW5rcyAqLwo+IC0gIGludCBzbWJsa3M7ICAgLyogdW51c2VkIC0tIGFsd2F5cyB6ZXJvICov Cj4gLSAgaW50IGhibGtzOyAgICAvKiBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zICovCj4gLSAg aW50IGhibGtoZDsgICAvKiB0b3RhbCBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KPiAtICBp bnQgdXNtYmxrczsgIC8qIHVudXNlZCAtLSBhbHdheXMgemVybyAqLwo+IC0gIGludCBmc21ibGtz OyAgLyogdW51c2VkIC0tIGFsd2F5cyB6ZXJvICovCj4gLSAgaW50IHVvcmRibGtzOyAvKiB0b3Rh bCBhbGxvY2F0ZWQgc3BhY2UgKi8KPiAtICBpbnQgZm9yZGJsa3M7IC8qIHRvdGFsIG5vbi1pbnVz ZSBzcGFjZSAqLwo+IC0gIGludCBrZWVwY29zdDsgLyogdG9wLW1vc3QsIHJlbGVhc2FibGUgKHZp YSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KPiAtfTsKPiAtCj4gLS8qIFNWSUQyL1hQRyBtYWxsb3B0 IG9wdGlvbnMgKi8KPiAtCj4gLSNkZWZpbmUgTV9NWEZBU1QgIDEgICAgLyogVU5VU0VEIGluIHRo aXMgbWFsbG9jICovCj4gLSNkZWZpbmUgTV9OTEJMS1MgIDIgICAgLyogVU5VU0VEIGluIHRoaXMg bWFsbG9jICovCj4gLSNkZWZpbmUgTV9HUkFJTiAgIDMgICAgLyogVU5VU0VEIGluIHRoaXMgbWFs bG9jICovCj4gLSNkZWZpbmUgTV9LRUVQICAgIDQgICAgLyogVU5VU0VEIGluIHRoaXMgbWFsbG9j ICovCj4gLQo+IC0jZW5kaWYKPiAtCj4gLS8qIG1hbGxvcHQgb3B0aW9ucyB0aGF0IGFjdHVhbGx5 IGRvIHNvbWV0aGluZyAqLwo+IC0KPiAtI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgIC0xCj4g LSNkZWZpbmUgTV9UT1BfUEFEICAgICAgICAgICAtMgo+IC0jZGVmaW5lIE1fTU1BUF9USFJFU0hP TEQgICAgLTMKPiAtI2RlZmluZSBNX01NQVBfTUFYICAgICAgICAgIC00Cj4gLQo+IC0KPiAtI2lm bmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECj4gLSNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVT SE9MRCAoMTI4ICogMTAyNCkKPiAtI2VuZGlmCj4gLQo+IC0vKgo+IC0gICAgTV9UUklNX1RIUkVT SE9MRCBpcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeQo+IC0g ICAgICB0byBrZWVwIGJlZm9yZSByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4K PiAtCj4gLSAgICAgIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkgdXNlZnVsIGluIGxvbmct bGl2ZWQgcHJvZ3JhbXMuCj4gLSAgICAgIEJlY2F1c2UgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJl IHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuCj4gLSAgICAgIHNvbWV0aW1lcyBiZSB3YXN0 ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkKPiAtICAgICAgYWZ0ZXJ3 YXJkIGFsbG9jYXRlIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2gK PiAtICAgICAgZW5vdWdoIHNvIHRoYXQgeW91ciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3 b3VsZCBpbXByb3ZlIGJ5Cj4gLSAgICAgIHJlbGVhc2luZy4KPiAtCj4gLSAgICAgIFRoZSB0cmlt IHRocmVzaG9sZCBhbmQgdGhlIG1tYXAgY29udHJvbCBwYXJhbWV0ZXJzIChzZWUgYmVsb3cpCj4g LSAgICAgIGNhbiBiZSB0cmFkZWQgb2ZmIHdpdGggb25lIGFub3RoZXIuIFRyaW1taW5nIGFuZCBt bWFwcGluZyBhcmUKPiAtICAgICAgdHdvIGRpZmZlcmVudCB3YXlzIG9mIHJlbGVhc2luZyB1bnVz ZWQgbWVtb3J5IGJhY2sgdG8gdGhlCj4gLSAgICAgIHN5c3RlbS4gQmV0d2VlbiB0aGVzZSB0d28s IGl0IGlzIG9mdGVuIHBvc3NpYmxlIHRvIGtlZXAKPiAtICAgICAgc3lzdGVtLWxldmVsIGRlbWFu ZHMgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gZG93biB0byBhIGJhcmUKPiAtICAgICAgbWluaW11 bS4gRm9yIGV4YW1wbGUsIGluIG9uZSB0ZXN0IHN1aXRlIG9mIHNlc3Npb25zIG1lYXN1cmluZwo+ IC0gICAgICB0aGUgWEY4NiBYIHNlcnZlciBvbiBMaW51eCwgdXNpbmcgYSB0cmltIHRocmVzaG9s ZCBvZiAxMjhLIGFuZCBhCj4gLSAgICAgIG1tYXAgdGhyZXNob2xkIG9mIDE5MksgbGVkIHRvIG5l YXItbWluaW1hbCBsb25nIHRlcm0gcmVzb3VyY2UKPiAtICAgICAgY29uc3VtcHRpb24uCj4gLQo+ IC0gICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoaXMgbWFsbG9jIGluIGEgbG9uZy1saXZlZCBwcm9n cmFtLCBpdCBzaG91bGQKPiAtICAgICAgcGF5IHRvIGV4cGVyaW1lbnQgd2l0aCB0aGVzZSB2YWx1 ZXMuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UKPiAtICAgICAgbWlnaHQgc2V0IHRvIGEgdmFsdWUg Y2xvc2UgdG8gdGhlIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MKPiAtICAgICAgKHByb2dyYW0p IHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeQo+IC0g ICAgICB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4gbWVtb3J5LiAgR2VuZXJh bGx5LCBpdCdzCj4gLSAgICAgIHdvcnRoIGl0IHRvIHR1bmUgZm9yIHRyaW1taW5nIHJhdGhlciB0 aGFtIG1lbW9yeSBtYXBwaW5nIHdoZW4gYQo+IC0gICAgICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFz ZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlCj4gLSAgICAgIGFsbG9jYXRlZCBhbmQg cmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3MKPiAtICAgICAgc3Rv cmFnZSwgcGVyaGFwcyBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaAo+ IC0gICAgICBjaHVua3MgYXQgYWxsLiAgQW5kIGluIHdlbGwtYmVoYXZlZCBsb25nLWxpdmVkIHBy b2dyYW1zLAo+IC0gICAgICBjb250cm9sbGluZyByZWxlYXNlIG9mIGxhcmdlIGJsb2NrcyB2aWEg dHJpbW1pbmcgdmVyc3VzIG1hcHBpbmcKPiAtICAgICAgaXMgdXN1YWxseSBmYXN0ZXIuCj4gLQo+ IC0gICAgICBIb3dldmVyLCBpbiBtb3N0IHByb2dyYW1zLCB0aGVzZSBwYXJhbWV0ZXJzIHNlcnZl IG1haW5seSBhcwo+IC0gICAgICBwcm90ZWN0aW9uIGFnYWluc3QgdGhlIHN5c3RlbS1sZXZlbCBl ZmZlY3RzIG9mIGNhcnJ5aW5nIGFyb3VuZAo+IC0gICAgICBtYXNzaXZlIGFtb3VudHMgb2YgdW5u ZWVkZWQgbWVtb3J5LiBTaW5jZSBmcmVxdWVudCBjYWxscyB0bwo+IC0gICAgICBzYnJrLCBtbWFw LCBhbmQgbXVubWFwIG90aGVyd2lzZSBkZWdyYWRlIHBlcmZvcm1hbmNlLCB0aGUgZGVmYXVsdAo+ IC0gICAgICBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gcmVsYXRpdmVseSBoaWdoIHZhbHVlcyB0aGF0 IHNlcnZlIG9ubHkgYXMKPiAtICAgICAgc2FmZWd1YXJkcy4KPiAtCj4gLSAgICAgIFRoZSBkZWZh dWx0IHRyaW0gdmFsdWUgaXMgaGlnaCBlbm91Z2ggdG8gY2F1c2UgdHJpbW1pbmcgb25seSBpbgo+ IC0gICAgICBmYWlybHkgZXh0cmVtZSAoYnkgY3VycmVudCBtZW1vcnkgY29uc3VtcHRpb24gc3Rh bmRhcmRzKSBjYXNlcy4KPiAtICAgICAgSXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXpl IHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbwo+IC0gICAgICBkaXNhYmxlIHRyaW1taW5n IGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvICh1bnNpZ25lZCBsb25nKSgtMSk7Cj4gLQo+IC0K PiAtKi8KPiAtCj4gLQo+IC0jaWZuZGVmIERFRkFVTFRfVE9QX1BBRAo+IC0jZGVmaW5lIERFRkFV TFRfVE9QX1BBRCAgICAgICAgKDApCj4gLSNlbmRpZgo+IC0KPiAtLyoKPiAtICAgIE1fVE9QX1BB RCBpcyB0aGUgYW1vdW50IG9mIGV4dHJhIGBwYWRkaW5nJyBzcGFjZSB0byBhbGxvY2F0ZSBvcgo+ IC0gICAgICByZXRhaW4gd2hlbmV2ZXIgc2JyayBpcyBjYWxsZWQuIEl0IGlzIHVzZWQgaW4gdHdv IHdheXMgaW50ZXJuYWxseToKPiAtCj4gLSAgICAgICogV2hlbiBzYnJrIGlzIGNhbGxlZCB0byBl eHRlbmQgdGhlIHRvcCBvZiB0aGUgYXJlbmEgdG8gc2F0aXNmeQo+IC0JYSBuZXcgbWFsbG9jIHJl cXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBzYnJrCj4gLQlyZXF1ZXN0 Lgo+IC0KPiAtICAgICAgKiBXaGVuIG1hbGxvY190cmltIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5 IGZyb20gZnJlZSgpLAo+IC0JaXQgaXMgdXNlZCBhcyB0aGUgYHBhZCcgYXJndW1lbnQuCj4gLQo+ IC0gICAgICBJbiBib3RoIGNhc2VzLCB0aGUgYWN0dWFsIGFtb3VudCBvZiBwYWRkaW5nIGlzIHJv dW5kZWQKPiAtICAgICAgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBhcmVuYSBpcyBhbHdheXMgYSBz eXN0ZW0gcGFnZSBib3VuZGFyeS4KPiAtCj4gLSAgICAgIFRoZSBtYWluIHJlYXNvbiBmb3IgdXNp bmcgcGFkZGluZyBpcyB0byBhdm9pZCBjYWxsaW5nIHNicmsgc28KPiAtICAgICAgb2Z0ZW4uIEhh dmluZyBldmVuIGEgc21hbGwgcGFkIGdyZWF0bHkgcmVkdWNlcyB0aGUgbGlrZWxpaG9vZAo+IC0g ICAgICB0aGF0IG5lYXJseSBldmVyeSBtYWxsb2MgcmVxdWVzdCBkdXJpbmcgcHJvZ3JhbSBzdGFy dC11cCAob3IKPiAtICAgICAgYWZ0ZXIgdHJpbW1pbmcpIHdpbGwgaW52b2tlIHNicmssIHdoaWNo IG5lZWRsZXNzbHkgd2FzdGVzCj4gLSAgICAgIHRpbWUuCj4gLQo+IC0gICAgICBBdXRvbWF0aWMg cm91bmRpbmctdXAgdG8gcGFnZS1zaXplIHVuaXRzIGlzIG5vcm1hbGx5IHN1ZmZpY2llbnQKPiAt ICAgICAgdG8gYXZvaWQgbWVhc3VyYWJsZSBvdmVyaGVhZCwgc28gdGhlIGRlZmF1bHQgaXMgMC4g IEhvd2V2ZXIsIGluCj4gLSAgICAgIHN5c3RlbXMgd2hlcmUgc2JyayBpcyByZWxhdGl2ZWx5IHNs b3csIGl0IGNhbiBwYXkgdG8gaW5jcmVhc2UKPiAtICAgICAgdGhpcyB2YWx1ZSwgYXQgdGhlIGV4 cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5IHRoYW4KPiAtICAgICAgdGhlIHBy b2dyYW0gbmVlZHMuCj4gLQo+IC0qLwo+IC0KPiAtCj4gLSNpZm5kZWYgREVGQVVMVF9NTUFQX1RI UkVTSE9MRAo+IC0jZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKDEyOCAqIDEwMjQpCj4g LSNlbmRpZgo+IC0KPiAtLyoKPiAtCj4gLSAgICBNX01NQVBfVEhSRVNIT0xEIGlzIHRoZSByZXF1 ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBtbWFwKCkKPiAtICAgICAgdG8gc2VydmljZSBh IHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdAo+IC0g ICAgICBiZSBhbGxvY2F0ZWQgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNl cnZpY2VkIHZpYSBtbWFwLgo+IC0gICAgICAoSWYgZW5vdWdoIG5vcm1hbCBmcmVlZCBzcGFjZSBh bHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKQo+IC0KPiAtICAgICAgVXNpbmcgbW1h cCBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0Cj4g LSAgICAgIHRoZXkgY2FuIGJlIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJv bSB0aGUgaG9zdAo+IC0gICAgICBzeXN0ZW0uIEEgcmVxdWVzdCBzZXJ2aWNlZCB0aHJvdWdoIG1t YXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueQo+IC0gICAgICBvdGhlciByZXF1ZXN0IChhdCBsZWFz dCBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28KPiAtICAgICAgaGFwcGVuIHRv IHJlbWFwIHN1Y2Nlc3NpdmUgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4KPiAtCj4g LSAgICAgIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcyB0aGUgYmVuZWZpdCB0aGF0 IG1tYXBwZWQgc3BhY2UKPiAtICAgICAgY2FuIEFMV0FZUyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFz ZWQgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaAo+IC0gICAgICBoZWxwcyBrZWVwIHRoZSBzeXN0 ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMgb2YgYSBsb25nLWxpdmVkCj4gLSAgICAgIHByb2dyYW0g bG93LiBNYXBwZWQgbWVtb3J5IGNhbiBuZXZlciBiZWNvbWUgYGxvY2tlZCcgYmV0d2Vlbgo+IC0g ICAgICBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQg Y2h1bmtzLCB3aGljaAo+IC0gICAgICBtZW5hcyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxv Y190cmltIHdvdWxkIG5vdCByZWxlYXNlIHRoZW0uCj4gLQo+IC0gICAgICBIb3dldmVyLCBpdCBo YXMgdGhlIGRpc2FkdmFudGFnZXMgdGhhdDoKPiAtCj4gLQkgMS4gVGhlIHNwYWNlIGNhbm5vdCBi ZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4KPiAtCSAgICB1c2VkIHRvIHNlcnZp Y2UgbGF0ZXIgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLgo+IC0JIDIu IEl0IGNhbiBsZWFkIHRvIG1vcmUgd2FzdGFnZSBiZWNhdXNlIG9mIG1tYXAgcGFnZSBhbGlnbm1l bnQKPiAtCSAgICByZXF1aXJlbWVudHMKPiAtCSAzLiBJdCBjYXVzZXMgbWFsbG9jIHBlcmZvcm1h bmNlIHRvIGJlIG1vcmUgZGVwZW5kZW50IG9uIGhvc3QKPiAtCSAgICBzeXN0ZW0gbWVtb3J5IG1h bmFnZW1lbnQgc3VwcG9ydCByb3V0aW5lcyB3aGljaCBtYXkgdmFyeSBpbgo+IC0JICAgIGltcGxl bWVudGF0aW9uIHF1YWxpdHkgYW5kIG1heSBpbXBvc2UgYXJiaXRyYXJ5Cj4gLQkgICAgbGltaXRh dGlvbnMuIEdlbmVyYWxseSwgc2VydmljaW5nIGEgcmVxdWVzdCB2aWEgbm9ybWFsCj4gLQkgICAg bWFsbG9jIHN0ZXBzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2ggYSBzeXN0ZW0ncyBtbWFw Lgo+IC0KPiAtICAgICAgQWxsIHRvZ2V0aGVyLCB0aGVzZSBjb25zaWRlcmF0aW9ucyBzaG91bGQg bGVhZCB5b3UgdG8gdXNlIG1tYXAKPiAtICAgICAgb25seSBmb3IgcmVsYXRpdmVseSBsYXJnZSBy ZXF1ZXN0cy4KPiAtCj4gLQo+IC0qLwo+IC0KPiAtCj4gLSNpZm5kZWYgREVGQVVMVF9NTUFQX01B WAo+IC0jaWYgSEFWRV9NTUFQCj4gLSNkZWZpbmUgREVGQVVMVF9NTUFQX01BWCAgICAgICAoNjQp Cj4gLSNlbHNlCj4gLSNkZWZpbmUgREVGQVVMVF9NTUFQX01BWCAgICAgICAoMCkKPiAtI2VuZGlm Cj4gLSNlbmRpZgo+IC0KPiAtLyoKPiAtICAgIE1fTU1BUF9NQVggaXMgdGhlIG1heGltdW0gbnVt YmVyIG9mIHJlcXVlc3RzIHRvIHNpbXVsdGFuZW91c2x5Cj4gLSAgICAgIHNlcnZpY2UgdXNpbmcg bW1hcC4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIGJlY2F1c2U6Cj4gLQo+IC0JIDEuIFNvbWUgc3lz dGVtcyBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJuYWwgdGFibGVzIGZvcgo+IC0JICAg IHVzZSBieSBtbWFwLgo+IC0JIDIuIEluIG1vc3Qgc3lzdGVtcywgb3ZlcnJlbGlhbmNlIG9uIG1t YXAgY2FuIGRlZ3JhZGUgb3ZlcmFsbAo+IC0JICAgIHBlcmZvcm1hbmNlLgo+IC0JIDMuIElmIGEg cHJvZ3JhbSBhbGxvY2F0ZXMgbWFueSBsYXJnZSByZWdpb25zLCBpdCBpcyBwcm9iYWJseQo+IC0J ICAgIGJldHRlciBvZmYgdXNpbmcgbm9ybWFsIHNicmstYmFzZWQgYWxsb2NhdGlvbiByb3V0aW5l cyB0aGF0Cj4gLQkgICAgY2FuIHJlY2xhaW0gYW5kIHJlYWxsb2NhdGUgbm9ybWFsIGhlYXAgbWVt b3J5LiBVc2luZyBhCj4gLQkgICAgc21hbGwgdmFsdWUgYWxsb3dzIHRyYW5zaXRpb24gaW50byB0 aGlzIG1vZGUgYWZ0ZXIgdGhlCj4gLQkgICAgZmlyc3QgZmV3IGFsbG9jYXRpb25zLgo+IC0KPiAt ICAgICAgU2V0dGluZyB0byAwIGRpc2FibGVzIGFsbCB1c2Ugb2YgbW1hcC4gIElmIEhBVkVfTU1B UCBpcyBub3Qgc2V0LAo+IC0gICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAwLCBhbmQgYXR0ZW1w dHMgdG8gc2V0IGl0IHRvIG5vbi16ZXJvIHZhbHVlcwo+IC0gICAgICBpbiBtYWxsb3B0IHdpbGwg ZmFpbC4KPiAtKi8KPiAtCj4gLQo+IC0vKgo+IC0gICAgVVNFX0RMX1BSRUZJWCB3aWxsIHByZWZp eCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgo+IC0gICAgICBVc2Vm dWwgdG8gcXVpY2tseSBhdm9pZCBwcm9jZWR1cmUgZGVjbGFyYXRpb24gY29uZmxpY3RzIGFuZCBs aW5rZXIKPiAtICAgICAgc3ltYm9sIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIG1lbW9yeSBhbGxv Y2F0aW9uIHJvdXRpbmVzLgo+IC0KPiAtKi8KPiAtCj4gLS8qICNkZWZpbmUgVVNFX0RMX1BSRUZJ WCAqLwo+IC0KPiAtCj4gLS8qCj4gLQo+IC0gIFNwZWNpYWwgZGVmaW5lcyBmb3IgbGludXggbGli Ywo+IC0KPiAtICBFeGNlcHQgd2hlbiBjb21waWxlZCB1c2luZyB0aGVzZSBzcGVjaWFsIGRlZmlu ZXMgZm9yIExpbnV4IGxpYmMKPiAtICB1c2luZyB3ZWFrIGFsaWFzZXMsIHRoaXMgbWFsbG9jIGlz IE5PVCBkZXNpZ25lZCB0byB3b3JrIGluCj4gLSAgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMu ICBObyBzZW1hcGhvcmVzIG9yIG90aGVyIGNvbmN1cnJlbmN5Cj4gLSAgY29udHJvbCBhcmUgcHJv dmlkZWQgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGUgbWFsbG9jIG9yIGZyZWUgY2FsbHMKPiAtICBk b24ndCBydW4gYXQgdGhlIHNhbWUgdGltZSwgd2hpY2ggY291bGQgYmUgZGlzYXN0ZXJvdXMuIEEg c2luZ2xlCj4gLSAgc2VtYXBob3JlIGNvdWxkIGJlIHVzZWQgYWNyb3NzIG1hbGxvYywgcmVhbGxv YywgYW5kIGZyZWUgKHdoaWNoIGlzCj4gLSAgZXNzZW50aWFsbHkgdGhlIGVmZmVjdCBvZiB0aGUg bGludXggd2VhayBhbGlhcyBhcHByb2FjaCkuIEl0IHdvdWxkCj4gLSAgYmUgaGFyZCB0byBvYnRh aW4gZmluZXIgZ3JhbnVsYXJpdHkuCj4gLQo+IC0qLwo+IC0KPiAtCj4gLSNpZmRlZiBJTlRFUk5B TF9MSU5VWF9DX0xJQgo+IC0KPiAtI2lmIF9fU1REX0MKPiAtCj4gLVZvaWRfdCAqIF9fZGVmYXVs dF9tb3JlY29yZV9pbml0IChwdHJkaWZmX3QpOwo+IC1Wb2lkX3QgKigqX19tb3JlY29yZSkocHRy ZGlmZl90KSA9IF9fZGVmYXVsdF9tb3JlY29yZV9pbml0Owo+IC0KPiAtI2Vsc2UKPiAtCj4gLVZv aWRfdCAqIF9fZGVmYXVsdF9tb3JlY29yZV9pbml0ICgpOwo+IC1Wb2lkX3QgKigqX19tb3JlY29y ZSkoKSA9IF9fZGVmYXVsdF9tb3JlY29yZV9pbml0Owo+IC0KPiAtI2VuZGlmCj4gLQo+IC0jZGVm aW5lIE1PUkVDT1JFICgqX19tb3JlY29yZSkKPiAtI2RlZmluZSBNT1JFQ09SRV9GQUlMVVJFIDAK PiAtI2RlZmluZSBNT1JFQ09SRV9DTEVBUlMgMQo+IC0KPiAtI2Vsc2UgLyogSU5URVJOQUxfTElO VVhfQ19MSUIgKi8KPiAtCj4gLSNpZiBfX1NURF9DCj4gLWV4dGVybiBWb2lkX3QqICAgICBzYnJr KHB0cmRpZmZfdCk7Cj4gLSNlbHNlCj4gLWV4dGVybiBWb2lkX3QqICAgICBzYnJrKCk7Cj4gLSNl bmRpZgo+IC0KPiAtI2lmbmRlZiBNT1JFQ09SRQo+IC0jZGVmaW5lIE1PUkVDT1JFIHNicmsKPiAt I2VuZGlmCj4gLQo+IC0jaWZuZGVmIE1PUkVDT1JFX0ZBSUxVUkUKPiAtI2RlZmluZSBNT1JFQ09S RV9GQUlMVVJFIC0xCj4gLSNlbmRpZgo+IC0KPiAtI2lmbmRlZiBNT1JFQ09SRV9DTEVBUlMKPiAt I2RlZmluZSBNT1JFQ09SRV9DTEVBUlMgMQo+IC0jZW5kaWYKPiAtCj4gLSNlbmRpZiAvKiBJTlRF Uk5BTF9MSU5VWF9DX0xJQiAqLwo+IC0KPiAtI2lmIGRlZmluZWQoSU5URVJOQUxfTElOVVhfQ19M SUIpICYmIGRlZmluZWQoX19FTEZfXykKPiAtCj4gLSNkZWZpbmUgY0FMTE9jCQlfX2xpYmNfY2Fs bG9jCj4gLSNkZWZpbmUgZlJFZQkJX19saWJjX2ZyZWUKPiAtI2RlZmluZSBtQUxMT2MJCV9fbGli Y19tYWxsb2MKPiAtI2RlZmluZSBtRU1BTElHbglfX2xpYmNfbWVtYWxpZ24KPiAtI2RlZmluZSBy RUFMTE9jCQlfX2xpYmNfcmVhbGxvYwo+IC0jZGVmaW5lIHZBTExPYwkJX19saWJjX3ZhbGxvYwo+ IC0jZGVmaW5lIHB2QUxMT2MJCV9fbGliY19wdmFsbG9jCj4gLSNkZWZpbmUgbUFMTElORm8JX19s aWJjX21hbGxpbmZvCj4gLSNkZWZpbmUgbUFMTE9QdAkJX19saWJjX21hbGxvcHQKPiAtCj4gLSNw cmFnbWEgd2VhayBjYWxsb2MgPSBfX2xpYmNfY2FsbG9jCj4gLSNwcmFnbWEgd2VhayBmcmVlID0g X19saWJjX2ZyZWUKPiAtI3ByYWdtYSB3ZWFrIGNmcmVlID0gX19saWJjX2ZyZWUKPiAtI3ByYWdt YSB3ZWFrIG1hbGxvYyA9IF9fbGliY19tYWxsb2MKPiAtI3ByYWdtYSB3ZWFrIG1lbWFsaWduID0g X19saWJjX21lbWFsaWduCj4gLSNwcmFnbWEgd2VhayByZWFsbG9jID0gX19saWJjX3JlYWxsb2MK PiAtI3ByYWdtYSB3ZWFrIHZhbGxvYyA9IF9fbGliY192YWxsb2MKPiAtI3ByYWdtYSB3ZWFrIHB2 YWxsb2MgPSBfX2xpYmNfcHZhbGxvYwo+IC0jcHJhZ21hIHdlYWsgbWFsbGluZm8gPSBfX2xpYmNf bWFsbGluZm8KPiAtI3ByYWdtYSB3ZWFrIG1hbGxvcHQgPSBfX2xpYmNfbWFsbG9wdAo+IC0KPiAt I2Vsc2UKPiAtCj4gLSNpZmRlZiBVU0VfRExfUFJFRklYCj4gLSNkZWZpbmUgY0FMTE9jCQlkbGNh bGxvYwo+IC0jZGVmaW5lIGZSRWUJCWRsZnJlZQo+IC0jZGVmaW5lIG1BTExPYwkJZGxtYWxsb2MK PiAtI2RlZmluZSBtRU1BTElHbglkbG1lbWFsaWduCj4gLSNkZWZpbmUgckVBTExPYwkJZGxyZWFs bG9jCj4gLSNkZWZpbmUgdkFMTE9jCQlkbHZhbGxvYwo+IC0jZGVmaW5lIHB2QUxMT2MJCWRscHZh bGxvYwo+IC0jZGVmaW5lIG1BTExJTkZvCWRsbWFsbGluZm8KPiAtI2RlZmluZSBtQUxMT1B0CQlk bG1hbGxvcHQKPiAtI2Vsc2UgLyogVVNFX0RMX1BSRUZJWCAqLwo+IC0jZGVmaW5lIGNBTExPYwkJ Y2FsbG9jCj4gLSNkZWZpbmUgZlJFZQkJZnJlZQo+IC0jZGVmaW5lIG1BTExPYwkJbWFsbG9jCj4g LSNkZWZpbmUgbUVNQUxJR24JbWVtYWxpZ24KPiAtI2RlZmluZSByRUFMTE9jCQlyZWFsbG9jCj4g LSNkZWZpbmUgdkFMTE9jCQl2YWxsb2MKPiAtI2RlZmluZSBwdkFMTE9jCQlwdmFsbG9jCj4gLSNk ZWZpbmUgbUFMTElORm8JbWFsbGluZm8KPiAtI2RlZmluZSBtQUxMT1B0CQltYWxsb3B0Cj4gLSNl bmRpZiAvKiBVU0VfRExfUFJFRklYICovCj4gLQo+IC0jZW5kaWYKPiAtCj4gLS8qIFB1YmxpYyBy b3V0aW5lcyAqLwo+IC0KPiAtI2lmIF9fU1REX0MKPiAtCj4gLVZvaWRfdCogbUFMTE9jKHNpemVf dCk7Cj4gLXZvaWQgICAgZlJFZShWb2lkX3QqKTsKPiAtVm9pZF90KiByRUFMTE9jKFZvaWRfdCos IHNpemVfdCk7Cj4gLVZvaWRfdCogbUVNQUxJR24oc2l6ZV90LCBzaXplX3QpOwo+IC1Wb2lkX3Qq IHZBTExPYyhzaXplX3QpOwo+IC1Wb2lkX3QqIHB2QUxMT2Moc2l6ZV90KTsKPiAtVm9pZF90KiBj QUxMT2Moc2l6ZV90LCBzaXplX3QpOwo+IC12b2lkICAgIGNmcmVlKFZvaWRfdCopOwo+IC1pbnQg ICAgIG1hbGxvY190cmltKHNpemVfdCk7Cj4gLXNpemVfdCAgbWFsbG9jX3VzYWJsZV9zaXplKFZv aWRfdCopOwo+IC12b2lkICAgIG1hbGxvY19zdGF0cygpOwo+IC1pbnQgICAgIG1BTExPUHQoaW50 LCBpbnQpOwo+IC1zdHJ1Y3QgbWFsbGluZm8gbUFMTElORm8odm9pZCk7Cj4gLSNlbHNlCj4gLVZv aWRfdCogbUFMTE9jKCk7Cj4gLXZvaWQgICAgZlJFZSgpOwo+IC1Wb2lkX3QqIHJFQUxMT2MoKTsK PiAtVm9pZF90KiBtRU1BTElHbigpOwo+IC1Wb2lkX3QqIHZBTExPYygpOwo+IC1Wb2lkX3QqIHB2 QUxMT2MoKTsKPiAtVm9pZF90KiBjQUxMT2MoKTsKPiAtdm9pZCAgICBjZnJlZSgpOwo+IC1pbnQg ICAgIG1hbGxvY190cmltKCk7Cj4gLXNpemVfdCAgbWFsbG9jX3VzYWJsZV9zaXplKCk7Cj4gLXZv aWQgICAgbWFsbG9jX3N0YXRzKCk7Cj4gLWludCAgICAgbUFMTE9QdCgpOwo+IC1zdHJ1Y3QgbWFs bGluZm8gbUFMTElORm8oKTsKPiAtI2VuZGlmCj4gLQo+IC0KPiAtI2lmZGVmIF9fY3BsdXNwbHVz Cj4gLX07ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLwo+IC0jZW5kaWYKPiAtCj4gLS8qIC0tLS0t LS0tLS0gVG8gbWFrZSBhIG1hbGxvYy5oLCBlbmQgY3V0dGluZyBoZXJlIC0tLS0tLS0tLS0tLSAq Lwo+IC0KPiAtCj4gLS8qCj4gLSAgRW11bGF0aW9uIG9mIHNicmsgZm9yIFdJTjMyCj4gLSAgQWxs IGNvZGUgd2l0aGluIHRoZSBpZmRlZiBXSU4zMiBpcyB1bnRlc3RlZCBieSBtZS4KPiAtCj4gLSAg VGhhbmtzIHRvIE1hcnRpbiBGb25nIGFuZCBvdGhlcnMgZm9yIHN1cHBseWluZyB0aGlzLgo+IC0q Lwo+IC0KPiAtCj4gLSNpZmRlZiBXSU4zMgo+IC0KPiAtI2RlZmluZSBBbGlnblBhZ2UoYWRkKSAo KChhZGQpICsgKG1hbGxvY19nZXRwYWdlc2l6ZS0xKSkgJiBcCj4gLX4obWFsbG9jX2dldHBhZ2Vz aXplLTEpKQo+IC0jZGVmaW5lIEFsaWduUGFnZTY0SyhhZGQpICgoKGFkZCkgKyAoMHgxMDAwMCAt IDEpKSAmIH4oMHgxMDAwMCAtIDEpKQo+IC0KPiAtLyogcmVzcnZlIDY0TUIgdG8gaW5zdXJlIGxh cmdlIGNvbnRpZ3VvdXMgc3BhY2UgKi8KPiAtI2RlZmluZSBSRVNFUlZFRF9TSVpFICgxMDI0KjEw MjQqNjQpCj4gLSNkZWZpbmUgTkVYVF9TSVpFICgyMDQ4KjEwMjQpCj4gLSNkZWZpbmUgVE9QX01F TU9SWSAoKHVuc2lnbmVkIGxvbmcpMioxMDI0KjEwMjQqMTAyNCkKPiAtCj4gLXN0cnVjdCBHbUxp c3RFbGVtZW50Owo+IC10eXBlZGVmIHN0cnVjdCBHbUxpc3RFbGVtZW50IEdtTGlzdEVsZW1lbnQ7 Cj4gLQo+IC1zdHJ1Y3QgR21MaXN0RWxlbWVudAo+IC17Cj4gLQlHbUxpc3RFbGVtZW50KiBuZXh0 Owo+IC0Jdm9pZCogYmFzZTsKPiAtfTsKPiAtCj4gLXN0YXRpYyBHbUxpc3RFbGVtZW50KiBoZWFk ID0gMDsKPiAtc3RhdGljIHVuc2lnbmVkIGludCBnTmV4dEFkZHJlc3MgPSAwOwo+IC1zdGF0aWMg dW5zaWduZWQgaW50IGdBZGRyZXNzQmFzZSA9IDA7Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ0Fs bG9jYXRlZFNpemUgPSAwOwo+IC0KPiAtc3RhdGljCj4gLUdtTGlzdEVsZW1lbnQqIG1ha2VHbUxp c3RFbGVtZW50ICh2b2lkKiBiYXMpCj4gLXsKPiAtCUdtTGlzdEVsZW1lbnQqIHRoaXM7Cj4gLQl0 aGlzID0gKEdtTGlzdEVsZW1lbnQqKSh2b2lkKilMb2NhbEFsbG9jICgwLCBzaXplb2YgKEdtTGlz dEVsZW1lbnQpKTsKPiAtCWFzc2VydCAodGhpcyk7Cj4gLQlpZiAodGhpcykKPiAtCXsKPiAtCQl0 aGlzLT5iYXNlID0gYmFzOwo+IC0JCXRoaXMtPm5leHQgPSBoZWFkOwo+IC0JCWhlYWQgPSB0aGlz Owo+IC0JfQo+IC0JcmV0dXJuIHRoaXM7Cj4gLX0KPiAtCj4gLXZvaWQgZ2NsZWFudXAgKCkKPiAt ewo+IC0JQk9PTCBydmFsOwo+IC0JYXNzZXJ0ICggKGhlYWQgPT0gTlVMTCkgfHwgKGhlYWQtPmJh c2UgPT0gKHZvaWQqKWdBZGRyZXNzQmFzZSkpOwo+IC0JaWYgKGdBZGRyZXNzQmFzZSAmJiAoZ05l eHRBZGRyZXNzIC0gZ0FkZHJlc3NCYXNlKSkKPiAtCXsKPiAtCQlydmFsID0gVmlydHVhbEZyZWUg KCh2b2lkKilnQWRkcmVzc0Jhc2UsCj4gLQkJCQkJCQlnTmV4dEFkZHJlc3MgLSBnQWRkcmVzc0Jh c2UsCj4gLQkJCQkJCQlNRU1fREVDT01NSVQpOwo+IC0JYXNzZXJ0IChydmFsKTsKPiAtCX0KPiAt CXdoaWxlIChoZWFkKQo+IC0Jewo+IC0JCUdtTGlzdEVsZW1lbnQqIG5leHQgPSBoZWFkLT5uZXh0 Owo+IC0JCXJ2YWwgPSBWaXJ0dWFsRnJlZSAoaGVhZC0+YmFzZSwgMCwgTUVNX1JFTEVBU0UpOwo+ IC0JCWFzc2VydCAocnZhbCk7Cj4gLQkJTG9jYWxGcmVlIChoZWFkKTsKPiAtCQloZWFkID0gbmV4 dDsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljCj4gLXZvaWQqIGZpbmRSZWdpb24gKHZvaWQqIHN0 YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAtewo+IC0JTUVNT1JZX0JBU0lDX0lO Rk9STUFUSU9OIGluZm87Cj4gLQlpZiAoc2l6ZSA+PSBUT1BfTUVNT1JZKSByZXR1cm4gTlVMTDsK PiAtCj4gLQl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpc3RhcnRfYWRkcmVzcyArIHNpemUgPCBUT1Bf TUVNT1JZKQo+IC0Jewo+IC0JCVZpcnR1YWxRdWVyeSAoc3RhcnRfYWRkcmVzcywgJmluZm8sIHNp emVvZiAoaW5mbykpOwo+IC0JCWlmICgoaW5mby5TdGF0ZSA9PSBNRU1fRlJFRSkgJiYgKGluZm8u UmVnaW9uU2l6ZSA+PSBzaXplKSkKPiAtCQkJcmV0dXJuIHN0YXJ0X2FkZHJlc3M7Cj4gLQkJZWxz ZQo+IC0JCXsKPiAtCQkJLyogUmVxdWVzdGVkIHJlZ2lvbiBpcyBub3QgYXZhaWxhYmxlIHNvIHNl ZSBpZiB0aGUgKi8KPiAtCQkJLyogbmV4dCByZWdpb24gaXMgYXZhaWxhYmxlLiAgU2V0ICdzdGFy dF9hZGRyZXNzJyAqLwo+IC0JCQkvKiB0byB0aGUgbmV4dCByZWdpb24gYW5kIGNhbGwgJ1ZpcnR1 YWxRdWVyeSgpJyAqLwo+IC0JCQkvKiBhZ2Fpbi4gKi8KPiAtCj4gLQkJCXN0YXJ0X2FkZHJlc3Mg PSAoY2hhciopaW5mby5CYXNlQWRkcmVzcyArIGluZm8uUmVnaW9uU2l6ZTsKPiAtCj4gLQkJCS8q IE1ha2Ugc3VyZSB3ZSBzdGFydCBsb29raW5nIGZvciB0aGUgbmV4dCByZWdpb24gKi8KPiAtCQkJ Lyogb24gdGhlICpuZXh0KiA2NEsgYm91bmRhcnkuICBPdGhlcndpc2UsIGV2ZW4gaWYgKi8KPiAt CQkJLyogdGhlIG5ldyByZWdpb24gaXMgZnJlZSBhY2NvcmRpbmcgdG8gKi8KPiAtCQkJLyogJ1Zp cnR1YWxRdWVyeSgpJywgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byAqLwo+IC0JCQkvKiAnVmlydHVh bEFsbG9jKCknICh3aGljaCBmb2xsb3dzIHRoZSBjYWxsIHRvICovCj4gLQkJCS8qIHRoaXMgcm91 dGluZSBpbiAnd3NicmsoKScpIHdpbGwgcm91bmQgKmRvd24qICovCj4gLQkJCS8qIHRoZSByZXF1 ZXN0ZWQgYWRkcmVzcyB0byBhIDY0SyBib3VuZGFyeSB3aGljaCAqLwo+IC0JCQkvKiB3ZSBhbHJl YWR5IGtub3cgaXMgYW4gYWRkcmVzcyBpbiB0aGUgKi8KPiAtCQkJLyogdW5hdmFpbGFibGUgcmVn aW9uLiAgVGh1cywgdGhlIHN1YnNlcXVlbnQgY2FsbCAqLwo+IC0JCQkvKiB0byAnVmlydHVhbEFs bG9jKCknIHdpbGwgZmFpbCBhbmQgYnJpbmcgdXMgYmFjayAqLwo+IC0JCQkvKiBoZXJlLCBjYXVz aW5nIHVzIHRvIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4gKi8KPiAtCj4gLQkJCXN0YXJ0X2Fk ZHJlc3MgPQo+IC0JCQkJKHZvaWQgKikgQWxpZ25QYWdlNjRLKCh1bnNpZ25lZCBsb25nKSBzdGFy dF9hZGRyZXNzKTsKPiAtCQl9Cj4gLQl9Cj4gLQlyZXR1cm4gTlVMTDsKPiAtCj4gLX0KPiAtCj4g LQo+IC12b2lkKiB3c2JyayAobG9uZyBzaXplKQo+IC17Cj4gLQl2b2lkKiB0bXA7Cj4gLQlpZiAo c2l6ZSA+IDApCj4gLQl7Cj4gLQkJaWYgKGdBZGRyZXNzQmFzZSA9PSAwKQo+IC0JCXsKPiAtCQkJ Z0FsbG9jYXRlZFNpemUgPSBtYXggKFJFU0VSVkVEX1NJWkUsIEFsaWduUGFnZSAoc2l6ZSkpOwo+ IC0JCQlnTmV4dEFkZHJlc3MgPSBnQWRkcmVzc0Jhc2UgPQo+IC0JCQkJKHVuc2lnbmVkIGludClW aXJ0dWFsQWxsb2MgKE5VTEwsIGdBbGxvY2F0ZWRTaXplLAo+IC0JCQkJCQkJCQkJCU1FTV9SRVNF UlZFLCBQQUdFX05PQUNDRVNTKTsKPiAtCQl9IGVsc2UgaWYgKEFsaWduUGFnZSAoZ05leHRBZGRy ZXNzICsgc2l6ZSkgPiAoZ0FkZHJlc3NCYXNlICsKPiAtZ0FsbG9jYXRlZFNpemUpKQo+IC0JCXsK PiAtCQkJbG9uZyBuZXdfc2l6ZSA9IG1heCAoTkVYVF9TSVpFLCBBbGlnblBhZ2UgKHNpemUpKTsK PiAtCQkJdm9pZCogbmV3X2FkZHJlc3MgPSAodm9pZCopKGdBZGRyZXNzQmFzZStnQWxsb2NhdGVk U2l6ZSk7Cj4gLQkJCWRvCj4gLQkJCXsKPiAtCQkJCW5ld19hZGRyZXNzID0gZmluZFJlZ2lvbiAo bmV3X2FkZHJlc3MsIG5ld19zaXplKTsKPiAtCj4gLQkJCQlpZiAobmV3X2FkZHJlc3MgPT0gMCkK PiAtCQkJCQlyZXR1cm4gKHZvaWQqKS0xOwo+IC0KPiAtCQkJCWdBZGRyZXNzQmFzZSA9IGdOZXh0 QWRkcmVzcyA9Cj4gLQkJCQkJKHVuc2lnbmVkIGludClWaXJ0dWFsQWxsb2MgKG5ld19hZGRyZXNz LCBuZXdfc2l6ZSwKPiAtCQkJCQkJCQkJCQkJTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOwo+ IC0JCQkJLyogcmVwZWF0IGluIGNhc2Ugb2YgcmFjZSBjb25kaXRpb24gKi8KPiAtCQkJCS8qIFRo ZSByZWdpb24gdGhhdCB3ZSBmb3VuZCBoYXMgYmVlbiBzbmFnZ2VkICovCj4gLQkJCQkvKiBieSBh bm90aGVyIHRocmVhZCAqLwo+IC0JCQl9Cj4gLQkJCXdoaWxlIChnQWRkcmVzc0Jhc2UgPT0gMCk7 Cj4gLQo+IC0JCQlhc3NlcnQgKG5ld19hZGRyZXNzID09ICh2b2lkKilnQWRkcmVzc0Jhc2UpOwo+ IC0KPiAtCQkJZ0FsbG9jYXRlZFNpemUgPSBuZXdfc2l6ZTsKPiAtCj4gLQkJCWlmICghbWFrZUdt TGlzdEVsZW1lbnQgKCh2b2lkKilnQWRkcmVzc0Jhc2UpKQo+IC0JCQkJcmV0dXJuICh2b2lkKikt MTsKPiAtCQl9Cj4gLQkJaWYgKChzaXplICsgZ05leHRBZGRyZXNzKSA+IEFsaWduUGFnZSAoZ05l eHRBZGRyZXNzKSkKPiAtCQl7Cj4gLQkJCXZvaWQqIHJlczsKPiAtCQkJcmVzID0gVmlydHVhbEFs bG9jICgodm9pZCopQWxpZ25QYWdlIChnTmV4dEFkZHJlc3MpLAo+IC0JCQkJCQkJCShzaXplICsg Z05leHRBZGRyZXNzIC0KPiAtCQkJCQkJCQkgQWxpZ25QYWdlIChnTmV4dEFkZHJlc3MpKSwKPiAt CQkJCQkJCQlNRU1fQ09NTUlULCBQQUdFX1JFQURXUklURSk7Cj4gLQkJCWlmIChyZXMgPT0gMCkK PiAtCQkJCXJldHVybiAodm9pZCopLTE7Cj4gLQkJfQo+IC0JCXRtcCA9ICh2b2lkKilnTmV4dEFk ZHJlc3M7Cj4gLQkJZ05leHRBZGRyZXNzID0gKHVuc2lnbmVkIGludCl0bXAgKyBzaXplOwo+IC0J CXJldHVybiB0bXA7Cj4gLQl9Cj4gLQllbHNlIGlmIChzaXplIDwgMCkKPiAtCXsKPiAtCQl1bnNp Z25lZCBpbnQgYWxpZ25lZEdvYWwgPSBBbGlnblBhZ2UgKGdOZXh0QWRkcmVzcyArIHNpemUpOwo+ IC0JCS8qIFRyaW0gYnkgcmVsZWFzaW5nIHRoZSB2aXJ0dWFsIG1lbW9yeSAqLwo+IC0JCWlmIChh bGlnbmVkR29hbCA+PSBnQWRkcmVzc0Jhc2UpCj4gLQkJewo+IC0JCQlWaXJ0dWFsRnJlZSAoKHZv aWQqKWFsaWduZWRHb2FsLCBnTmV4dEFkZHJlc3MgLSBhbGlnbmVkR29hbCwKPiAtCQkJCQkJIE1F TV9ERUNPTU1JVCk7Cj4gLQkJCWdOZXh0QWRkcmVzcyA9IGdOZXh0QWRkcmVzcyArIHNpemU7Cj4g LQkJCXJldHVybiAodm9pZCopZ05leHRBZGRyZXNzOwo+IC0JCX0KPiAtCQllbHNlCj4gLQkJewo+ IC0JCQlWaXJ0dWFsRnJlZSAoKHZvaWQqKWdBZGRyZXNzQmFzZSwgZ05leHRBZGRyZXNzIC0gZ0Fk ZHJlc3NCYXNlLAo+IC0JCQkJCQkgTUVNX0RFQ09NTUlUKTsKPiAtCQkJZ05leHRBZGRyZXNzID0g Z0FkZHJlc3NCYXNlOwo+IC0JCQlyZXR1cm4gKHZvaWQqKS0xOwo+IC0JCX0KPiAtCX0KPiAtCWVs c2UKPiAtCXsKPiAtCQlyZXR1cm4gKHZvaWQqKWdOZXh0QWRkcmVzczsKPiAtCX0KPiAtfQo+IC0K PiAtI2VuZGlmCj4gLQo+IC0MCj4gLQo+IC0vKgo+IC0gIFR5cGUgZGVjbGFyYXRpb25zCj4gLSov Cj4gLQo+IC0KPiAtc3RydWN0IG1hbGxvY19jaHVuawo+IC17Cj4gLSAgSU5URVJOQUxfU0laRV9U IHByZXZfc2l6ZTsgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICovCj4gLSAg SU5URVJOQUxfU0laRV9UIHNpemU7ICAgICAgLyogU2l6ZSBpbiBieXRlcywgaW5jbHVkaW5nIG92 ZXJoZWFkLiAqLwo+IC0gIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGZkOyAgIC8qIGRvdWJsZSBsaW5r cyAtLSB1c2VkIG9ubHkgaWYgZnJlZS4gKi8KPiAtICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsK PiAtfTsKPiAtCj4gLXR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWNodW5rcHRyOwo+IC0K PiAtLyoKPiAtCj4gLSAgIG1hbGxvY19jaHVuayBkZXRhaWxzOgo+IC0KPiAtICAgIChUaGUgZm9s bG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVt Yi4pCj4gLQo+IC0gICAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBi b3VuZGFyeSB0YWcnIG1ldGhvZCBhcwo+IC0gICAgZGVzY3JpYmVkIGluIGUuZy4sIEtudXRoIG9y IFN0YW5kaXNoLiAgKFNlZSB0aGUgcGFwZXIgYnkgUGF1bAo+IC0gICAgV2lsc29uIGZ0cDovL2Z0 cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhCj4gLSAgICBzdXJ2 ZXkgb2Ygc3VjaCB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQg Ym90aAo+IC0gICAgaW4gdGhlIGZyb250IG9mIGVhY2ggY2h1bmsgYW5kIGF0IHRoZSBlbmQuICBU aGlzIG1ha2VzCj4gLSAgICBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQgY2h1bmtzIGludG8gYmln Z2VyIGNodW5rcyB2ZXJ5IGZhc3QuICBUaGUKPiAtICAgIHNpemUgZmllbGRzIGFsc28gaG9sZCBi aXRzIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvcgo+IC0gICAgaW4gdXNl Lgo+IC0KPiAtICAgIEFuIGFsbG9jYXRlZCBjaHVuayBsb29rcyBsaWtlIHRoaXM6Cj4gLQo+IC0K PiAtICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKy0rLSsKPiAtCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJl dmlvdXMgY2h1bmssIGlmIGFsbG9jYXRlZCAgICAgICAgICAgIHwgfAo+IC0JICAgICstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r Cj4gLQkgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAg ICAgICAgICAgICAgICB8UHwKPiAtICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiAtCSAgICB8ICAgICAg ICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg Lgo+IC0JICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuCj4gLQkgICAgLiAgICAgICAgICAgICAobWFsbG9jX3VzYWJsZV9z cGFjZSgpIGJ5dGVzKSAgICAgICAgICAgICAgICAgICAgIC4KPiAtCSAgICAuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+IC1u ZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKwo+IC0JICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuayAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gLQkgICAgKy0rLSstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiAt Cj4gLQo+IC0gICAgV2hlcmUgImNodW5rIiBpcyB0aGUgZnJvbnQgb2YgdGhlIGNodW5rIGZvciB0 aGUgcHVycG9zZSBvZiBtb3N0IG9mCj4gLSAgICB0aGUgbWFsbG9jIGNvZGUsIGJ1dCAibWVtIiBp cyB0aGUgcG9pbnRlciB0aGF0IGlzIHJldHVybmVkIHRvIHRoZQo+IC0gICAgdXNlci4gICJOZXh0 Y2h1bmsiIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udGlndW91cyBjaHVuay4KPiAt Cj4gLSAgICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZHJpZXMsIHNvIHRo ZSBtZW0gcG9ydGlvbgo+IC0gICAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBh bHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCj4gLSAgICB0aHVzIGRvdWJsZS13b3Jk IGFsaWduZWQuCj4gLQo+IC0gICAgRnJlZSBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBk b3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vayBsaWtlIHRoaXM6Cj4gLQo+IC0gICAgY2h1bmst PiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r LSstKy0rLSstKwo+IC0JICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gLQkgICAgKy0rLSstKy0rLSstKy0rLSstKy0r LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiAtICAgIGBoZWFk OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAg ICAgICAgICB8UHwKPiAtICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiAtCSAgICB8ICAgICAgICAgICAg IEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAo+IC0J ICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r LSstKy0rLSstKy0rCj4gLQkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlv dXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKPiAtCSAgICArLSstKy0rLSstKy0rLSstKy0r LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwo+IC0JICAgIHwg ICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAg ICAgICAuCj4gLQkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC4KPiAtCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+IC1uZXh0Y2h1bmstPiAr LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst Ky0rLSstKwo+IC0gICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5 dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+IC0JICAgICstKy0rLSstKy0rLSstKy0r LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCj4gLQo+IC0g ICAgVGhlIFAgKFBSRVZfSU5VU0UpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVy IGJpdCBvZiB0aGUKPiAtICAgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxl IG9mIHR3byB3b3JkcyksIGlzIGFuIGluLXVzZQo+IC0gICAgYml0IGZvciB0aGUgKnByZXZpb3Vz KiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCj4gLSAgICB3b3JkIGJl Zm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuawo+ IC0gICAgc2l6ZSwgYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2 aW91cyBjaHVuay4KPiAtICAgIChUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlz IGhhcyB0aGlzIGJpdCBzZXQsCj4gLSAgICBwcmV2ZW50aW5nIGFjY2VzcyB0byBub24tZXhpc3Rl bnQgKG9yIG5vbi1vd25lZCkgbWVtb3J5LikKPiAtCj4gLSAgICBOb3RlIHRoYXQgdGhlIGBmb290 JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAo+IC0gICAgYXMg dGhlIHByZXZfc2l6ZSBvZiB0aGUgTkVYVCBjaHVuay4gKFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRv Cj4gLSAgICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMpLgo+IC0KPiAtICAgIFRoZSB0d28gZXhj ZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKPiAtCj4gLSAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsg YHRvcCcsIHdoaWNoIGRvZXNuJ3QgYm90aGVyIHVzaW5nIHRoZQo+IC0JdHJhaWxpbmcgc2l6ZSBm aWVsZCBzaW5jZSB0aGVyZSBpcyBubwo+IC0JbmV4dCBjb250aWd1b3VzIGNodW5rIHRoYXQgd291 bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIChBZnRlcgo+IC0JaW5pdGlhbGl6YXRpb24sIGB0b3An IGlzIGZvcmNlZCB0byBhbHdheXMgZXhpc3QuICBJZiBpdCB3b3VsZAo+IC0JYmVjb21lIGxlc3Mg dGhhbiBNSU5TSVpFIGJ5dGVzIGxvbmcsIGl0IGlzIHJlcGxlbmlzaGVkIHZpYQo+IC0JbWFsbG9j X2V4dGVuZF90b3AuKQo+IC0KPiAtICAgICAyLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFwLCB3 aGljaCBoYXZlIHRoZSBzZWNvbmQtbG93ZXN0LW9yZGVyCj4gLQliaXQgKElTX01NQVBQRUQpIHNl dCBpbiB0aGVpciBzaXplIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUKPiAtCW5ldmVyIG1lcmdl ZCBvciB0cmF2ZXJzZWQgZnJvbSBhbnkgb3RoZXIgY2h1bmssIHRoZXkgaGF2ZSBubwo+IC0JZm9v dCBzaXplIG9yIGludXNlIGluZm9ybWF0aW9uLgo+IC0KPiAtICAgIEF2YWlsYWJsZSBjaHVua3Mg YXJlIGtlcHQgaW4gYW55IG9mIHNldmVyYWwgcGxhY2VzIChhbGwgZGVjbGFyZWQgYmVsb3cpOgo+ IC0KPiAtICAgICogYGF2JzogQW4gYXJyYXkgb2YgY2h1bmtzIHNlcnZpbmcgYXMgYmluIGhlYWRl cnMgZm9yIGNvbnNvbGlkYXRlZAo+IC0gICAgICAgY2h1bmtzLiBFYWNoIGJpbiBpcyBkb3VibHkg bGlua2VkLiAgVGhlIGJpbnMgYXJlIGFwcHJveGltYXRlbHkKPiAtICAgICAgIHByb3BvcnRpb25h bGx5IChsb2cpIHNwYWNlZC4gIFRoZXJlIGFyZSBhIGxvdCBvZiB0aGVzZSBiaW5zCj4gLSAgICAg ICAoMTI4KS4gVGhpcyBtYXkgbG9vayBleGNlc3NpdmUsIGJ1dCB3b3JrcyB2ZXJ5IHdlbGwgaW4K PiAtICAgICAgIHByYWN0aWNlLiAgQWxsIHByb2NlZHVyZXMgbWFpbnRhaW4gdGhlIGludmFyaWFu dCB0aGF0IG5vCj4gLSAgICAgICBjb25zb2xpZGF0ZWQgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJz IGFub3RoZXIgb25lLiBDaHVua3MgaW4KPiAtICAgICAgIGJpbnMgYXJlIGtlcHQgaW4gc2l6ZSBv cmRlciwgd2l0aCB0aWVzIGdvaW5nIHRvIHRoZQo+IC0gICAgICAgYXBwcm94aW1hdGVseSBsZWFz dCByZWNlbnRseSB1c2VkIGNodW5rLgo+IC0KPiAtICAgICAgIFRoZSBjaHVua3MgaW4gZWFjaCBi aW4gYXJlIG1haW50YWluZWQgaW4gZGVjcmVhc2luZyBzb3J0ZWQgb3JkZXIgYnkKPiAtICAgICAg IHNpemUuICBUaGlzIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBzbWFsbCBiaW5zLCB3aGljaCBhbGwg Y29udGFpbgo+IC0gICAgICAgdGhlIHNhbWUtc2l6ZWQgY2h1bmtzLCBidXQgZmFjaWxpdGF0ZXMg YmVzdC1maXQgYWxsb2NhdGlvbiBmb3IKPiAtICAgICAgIGxhcmdlciBjaHVua3MuIChUaGVzZSBs aXN0cyBhcmUganVzdCBzZXF1ZW50aWFsLiBLZWVwaW5nIHRoZW0gaW4KPiAtICAgICAgIG9yZGVy IGFsbW9zdCBuZXZlciByZXF1aXJlcyBlbm91Z2ggdHJhdmVyc2FsIHRvIHdhcnJhbnQgdXNpbmcK PiAtICAgICAgIGZhbmNpZXIgb3JkZXJlZCBkYXRhIHN0cnVjdHVyZXMuKSAgQ2h1bmtzIG9mIHRo ZSBzYW1lIHNpemUgYXJlCj4gLSAgICAgICBsaW5rZWQgd2l0aCB0aGUgbW9zdCByZWNlbnRseSBm cmVlZCBhdCB0aGUgZnJvbnQsIGFuZCBhbGxvY2F0aW9ucwo+IC0gICAgICAgYXJlIHRha2VuIGZy b20gdGhlIGJhY2suICBUaGlzIHJlc3VsdHMgaW4gTFJVIG9yIEZJRk8gYWxsb2NhdGlvbgo+IC0g ICAgICAgb3JkZXIsIHdoaWNoIHRlbmRzIHRvIGdpdmUgZWFjaCBjaHVuayBhbiBlcXVhbCBvcHBv cnR1bml0eSB0byBiZQo+IC0gICAgICAgY29uc29saWRhdGVkIHdpdGggYWRqYWNlbnQgZnJlZWQg Y2h1bmtzLCByZXN1bHRpbmcgaW4gbGFyZ2VyIGZyZWUKPiAtICAgICAgIGNodW5rcyBhbmQgbGVz cyBmcmFnbWVudGF0aW9uLgo+IC0KPiAtICAgICogYHRvcCc6IFRoZSB0b3AtbW9zdCBhdmFpbGFi bGUgY2h1bmsgKGkuZS4sIHRoZSBvbmUgYm9yZGVyaW5nIHRoZQo+IC0gICAgICAgZW5kIG9mIGF2 YWlsYWJsZSBtZW1vcnkpIGlzIHRyZWF0ZWQgc3BlY2lhbGx5LiBJdCBpcyBuZXZlcgo+IC0gICAg ICAgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmIG5vIG90aGVyIGNodW5rIGlz Cj4gLSAgICAgICBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZSBzeXN0ZW0g aWYgaXQgaXMgdmVyeQo+IC0gICAgICAgbGFyZ2UgKHNlZSBNX1RSSU1fVEhSRVNIT0xEKS4KPiAt Cj4gLSAgICAqIGBsYXN0X3JlbWFpbmRlcic6IEEgYmluIGhvbGRpbmcgb25seSB0aGUgcmVtYWlu ZGVyIG9mIHRoZQo+IC0gICAgICAgbW9zdCByZWNlbnRseSBzcGxpdCAobm9uLXRvcCkgY2h1bmsu IFRoaXMgYmluIGlzIGNoZWNrZWQKPiAtICAgICAgIGJlZm9yZSBvdGhlciBub24tZml0dGluZyBj aHVua3MsIHNvIGFzIHRvIHByb3ZpZGUgYmV0dGVyCj4gLSAgICAgICBsb2NhbGl0eSBmb3IgcnVu cyBvZiBzZXF1ZW50aWFsbHkgYWxsb2NhdGVkIGNodW5rcy4KPiAtCj4gLSAgICAqICBJbXBsaWNp dGx5LCB0aHJvdWdoIHRoZSBob3N0IHN5c3RlbSdzIG1lbW9yeSBtYXBwaW5nIHRhYmxlcy4KPiAt ICAgICAgIElmIHN1cHBvcnRlZCwgcmVxdWVzdHMgZ3JlYXRlciB0aGFuIGEgdGhyZXNob2xkIGFy ZSB1c3VhbGx5Cj4gLSAgICAgICBzZXJ2aWNlZCB2aWEgY2FsbHMgdG8gbW1hcCwgYW5kIHRoZW4g bGF0ZXIgcmVsZWFzZWQgdmlhIG11bm1hcC4KPiAtCj4gLSovCj4gLQo+IC0KPiAtDAo+IC0KPiAt Cj4gLS8qICBzaXplcywgYWxpZ25tZW50cyAqLwo+IC0KPiAtI2RlZmluZSBTSVpFX1NaICAgICAg ICAgICAgICAgIChzaXplb2YoSU5URVJOQUxfU0laRV9UKSkKPiAtI2RlZmluZSBNQUxMT0NfQUxJ R05NRU5UICAgICAgIChTSVpFX1NaICsgU0laRV9TWikKPiAtI2RlZmluZSBNQUxMT0NfQUxJR05f TUFTSyAgICAgIChNQUxMT0NfQUxJR05NRU5UIC0gMSkKPiAtI2RlZmluZSBNSU5TSVpFICAgICAg ICAgICAgICAgIChzaXplb2Yoc3RydWN0IG1hbGxvY19jaHVuaykpCj4gLQo+IC0vKiBjb252ZXJz aW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KPiAt Cj4gLSNkZWZpbmUgY2h1bmsybWVtKHApICAgKChWb2lkX3QqKSgoY2hhciopKHApICsgMipTSVpF X1NaKSkKPiAtI2RlZmluZSBtZW0yY2h1bmsobWVtKSAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0p IC0gMipTSVpFX1NaKSkKPiAtCj4gLS8qIHBhZCByZXF1ZXN0IGJ5dGVzIGludG8gYSB1c2FibGUg c2l6ZSAqLwo+IC0KPiAtI2RlZmluZSByZXF1ZXN0MnNpemUocmVxKSBcCj4gLSAoKChsb25nKSgo cmVxKSArIChTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01BU0spKSA8IFwKPiAtICAobG9uZykoTUlO U0laRSArIE1BTExPQ19BTElHTl9NQVNLKSkgPyBNSU5TSVpFIDogXAo+IC0gICAoKChyZXEpICsg KFNJWkVfU1ogKyBNQUxMT0NfQUxJR05fTUFTSykpICYgfihNQUxMT0NfQUxJR05fTUFTSykpKQo+ IC0KPiAtLyogQ2hlY2sgaWYgbSBoYXMgYWNjZXB0YWJsZSBhbGlnbm1lbnQgKi8KPiAtCj4gLSNk ZWZpbmUgYWxpZ25lZF9PSyhtKSAgICAoKCh1bnNpZ25lZCBsb25nKSgobSkpICYgKE1BTExPQ19B TElHTl9NQVNLKSkgPT0gMCkKPiAtCj4gLQo+IC0MCj4gLQo+IC0vKgo+IC0gIFBoeXNpY2FsIGNo dW5rIG9wZXJhdGlvbnMKPiAtKi8KPiAtCj4gLQo+IC0vKiBzaXplIGZpZWxkIGlzIG9yJ2VkIHdp dGggUFJFVl9JTlVTRSB3aGVuIHByZXZpb3VzIGFkamFjZW50IGNodW5rIGluIHVzZSAqLwo+IC0K PiAtI2RlZmluZSBQUkVWX0lOVVNFIDB4MQo+IC0KPiAtLyogc2l6ZSBmaWVsZCBpcyBvcidlZCB3 aXRoIElTX01NQVBQRUQgaWYgdGhlIGNodW5rIHdhcyBvYnRhaW5lZCB3aXRoIG1tYXAoKSAqLwo+ IC0KPiAtI2RlZmluZSBJU19NTUFQUEVEIDB4Mgo+IC0KPiAtLyogQml0cyB0byBtYXNrIG9mZiB3 aGVuIGV4dHJhY3Rpbmcgc2l6ZSAqLwo+IC0KPiAtI2RlZmluZSBTSVpFX0JJVFMgKFBSRVZfSU5V U0V8SVNfTU1BUFBFRCkKPiAtCj4gLQo+IC0vKiBQdHIgdG8gbmV4dCBwaHlzaWNhbCBtYWxsb2Nf Y2h1bmsuICovCj4gLQo+IC0jZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNo YXIqKShwKSkgKyAoKHApLT5zaXplICYgflBSRVZfSU5VU0UpICkpCj4gLQo+IC0vKiBQdHIgdG8g cHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rICovCj4gLQo+IC0jZGVmaW5lIHByZXZfY2h1 bmsocClcCj4gLSAgICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJldl9zaXpl KSApKQo+IC0KPiAtCj4gLS8qIFRyZWF0IHNwYWNlIGF0IHB0ciArIG9mZnNldCBhcyBhIGNodW5r ICovCj4gLQo+IC0jZGVmaW5lIGNodW5rX2F0X29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgo Y2hhciopKHApKSArIChzKSkpCj4gLQo+IC0KPiAtDAo+IC0KPiAtLyoKPiAtICBEZWFsaW5nIHdp dGggdXNlIGJpdHMKPiAtKi8KPiAtCj4gLS8qIGV4dHJhY3QgcCdzIGludXNlIGJpdCAqLwo+IC0K PiAtI2RlZmluZSBpbnVzZShwKVwKPiAtKCgoKG1jaHVua3B0cikoKChjaGFyKikocCkpKygocCkt PnNpemUgJiB+UFJFVl9JTlVTRSkpKS0+c2l6ZSkgJiBQUkVWX0lOVVNFKQo+IC0KPiAtLyogZXh0 cmFjdCBpbnVzZSBiaXQgb2YgcHJldmlvdXMgY2h1bmsgKi8KPiAtCj4gLSNkZWZpbmUgcHJldl9p bnVzZShwKSAgKChwKS0+c2l6ZSAmIFBSRVZfSU5VU0UpCj4gLQo+IC0vKiBjaGVjayBmb3IgbW1h cCgpJ2VkIGNodW5rICovCj4gLQo+IC0jZGVmaW5lIGNodW5rX2lzX21tYXBwZWQocCkgKChwKS0+ c2l6ZSAmIElTX01NQVBQRUQpCj4gLQo+IC0vKiBzZXQvY2xlYXIgY2h1bmsgYXMgaW4gdXNlIHdp dGhvdXQgb3RoZXJ3aXNlIGRpc3R1cmJpbmcgKi8KPiAtCj4gLSNkZWZpbmUgc2V0X2ludXNlKHAp XAo+IC0oKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKChwKS0+c2l6ZSAmIH5QUkVWX0lOVVNF KSkpLT5zaXplIHw9IFBSRVZfSU5VU0UKPiAtCj4gLSNkZWZpbmUgY2xlYXJfaW51c2UocClcCj4g LSgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAoKHApLT5zaXplICYgflBSRVZfSU5VU0UpKSkt PnNpemUgJj0gfihQUkVWX0lOVVNFKQo+IC0KPiAtLyogY2hlY2svc2V0L2NsZWFyIGludXNlIGJp dHMgaW4ga25vd24gcGxhY2VzICovCj4gLQo+IC0jZGVmaW5lIGludXNlX2JpdF9hdF9vZmZzZXQo cCwgcylcCj4gLSAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5zaXplICYgUFJF Vl9JTlVTRSkKPiAtCj4gLSNkZWZpbmUgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCj4g LSAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5zaXplIHw9IFBSRVZfSU5VU0Up Cj4gLQo+IC0jZGVmaW5lIGNsZWFyX2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCj4gLSAoKCht Y2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5zaXplICY9IH4oUFJFVl9JTlVTRSkpCj4g LQo+IC0KPiAtDAo+IC0KPiAtLyoKPiAtICBEZWFsaW5nIHdpdGggc2l6ZSBmaWVsZHMKPiAtKi8K PiAtCj4gLS8qIEdldCBzaXplLCBpZ25vcmluZyB1c2UgYml0cyAqLwo+IC0KPiAtI2RlZmluZSBj aHVua3NpemUocCkgICAgICAgICAgKChwKS0+c2l6ZSAmIH4oU0laRV9CSVRTKSkKPiAtCj4gLS8q IFNldCBzaXplIGF0IGhlYWQsIHdpdGhvdXQgZGlzdHVyYmluZyBpdHMgdXNlIGJpdCAqLwo+IC0K PiAtI2RlZmluZSBzZXRfaGVhZF9zaXplKHAsIHMpICAgKChwKS0+c2l6ZSA9ICgoKHApLT5zaXpl ICYgUFJFVl9JTlVTRSkgfCAocykpKQo+IC0KPiAtLyogU2V0IHNpemUvdXNlIGlnbm9yaW5nIHBy ZXZpb3VzIGJpdHMgaW4gaGVhZGVyICovCj4gLQo+IC0jZGVmaW5lIHNldF9oZWFkKHAsIHMpICAg ICAgICAoKHApLT5zaXplID0gKHMpKQo+IC0KPiAtLyogU2V0IHNpemUgYXQgZm9vdGVyIChvbmx5 IHdoZW4gY2h1bmsgaXMgbm90IGluIHVzZSkgKi8KPiAtCj4gLSNkZWZpbmUgc2V0X2Zvb3QocCwg cykgICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9zaXplID0gKHMpKQo+ IC0KPiAtCj4gLQwKPiAtCj4gLQo+IC0vKgo+IC0gICBCaW5zCj4gLQo+IC0gICAgVGhlIGJpbnMs IGBhdl8nIGFyZSBhbiBhcnJheSBvZiBwYWlycyBvZiBwb2ludGVycyBzZXJ2aW5nIGFzIHRoZQo+ IC0gICAgaGVhZHMgb2YgKGluaXRpYWxseSBlbXB0eSkgZG91Ymx5LWxpbmtlZCBsaXN0cyBvZiBj aHVua3MsIGxhaWQgb3V0Cj4gLSAgICBpbiBhIHdheSBzbyB0aGF0IGVhY2ggcGFpciBjYW4gYmUg dHJlYXRlZCBhcyBpZiBpdCB3ZXJlIGluIGEKPiAtICAgIG1hbGxvY19jaHVuay4gKFRoaXMgd2F5 LCB0aGUgZmQvYmsgb2Zmc2V0cyBmb3IgbGlua2luZyBiaW4gaGVhZHMKPiAtICAgIGFuZCBjaHVu a3MgYXJlIHRoZSBzYW1lKS4KPiAtCj4gLSAgICBCaW5zIGZvciBzaXplcyA8IDUxMiBieXRlcyBj b250YWluIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkCj4gLSAgICA4IGJ5dGVz IGFwYXJ0LiBMYXJnZXIgYmlucyBhcmUgYXBwcm94aW1hdGVseSBsb2dhcml0aG1pY2FsbHkKPiAt ICAgIHNwYWNlZC4gKFNlZSB0aGUgdGFibGUgYmVsb3cuKSBUaGUgYGF2XycgYXJyYXkgaXMgbmV2 ZXIgbWVudGlvbmVkCj4gLSAgICBkaXJlY3RseSBpbiB0aGUgY29kZSwgYnV0IGluc3RlYWQgdmlh IGJpbiBhY2Nlc3MgbWFjcm9zLgo+IC0KPiAtICAgIEJpbiBsYXlvdXQ6Cj4gLQo+IC0gICAgNjQg YmlucyBvZiBzaXplICAgICAgIDgKPiAtICAgIDMyIGJpbnMgb2Ygc2l6ZSAgICAgIDY0Cj4gLSAg ICAxNiBiaW5zIG9mIHNpemUgICAgIDUxMgo+IC0gICAgIDggYmlucyBvZiBzaXplICAgIDQwOTYK PiAtICAgICA0IGJpbnMgb2Ygc2l6ZSAgIDMyNzY4Cj4gLSAgICAgMiBiaW5zIG9mIHNpemUgIDI2 MjE0NAo+IC0gICAgIDEgYmluICBvZiBzaXplIHdoYXQncyBsZWZ0Cj4gLQo+IC0gICAgVGhlcmUg aXMgYWN0dWFsbHkgYSBsaXR0bGUgYml0IG9mIHNsb3AgaW4gdGhlIG51bWJlcnMgaW4gYmluX2lu ZGV4Cj4gLSAgICBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQuIFRoaXMgbWFrZXMgbm8gZGlmZmVyZW5j ZSBlbHNld2hlcmUuCj4gLQo+IC0gICAgVGhlIHNwZWNpYWwgY2h1bmtzIGB0b3AnIGFuZCBgbGFz dF9yZW1haW5kZXInIGdldCB0aGVpciBvd24gYmlucywKPiAtICAgICh0aGlzIGlzIGltcGxlbWVu dGVkIHZpYSB5ZXQgbW9yZSB0cmlja2VyeSB3aXRoIHRoZSBhdl8gYXJyYXkpLAo+IC0gICAgYWx0 aG91Z2ggYHRvcCcgaXMgbmV2ZXIgcHJvcGVybHkgbGlua2VkIHRvIGl0cyBiaW4gc2luY2UgaXQg aXMKPiAtICAgIGFsd2F5cyBoYW5kbGVkIHNwZWNpYWxseS4KPiAtCj4gLSovCj4gLQo+IC0jZGVm aW5lIE5BViAgICAgICAgICAgICAxMjggICAvKiBudW1iZXIgb2YgYmlucyAqLwo+IC0KPiAtdHlw ZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtYmlucHRyOwo+IC0KPiAtLyogYWNjZXNzIG1hY3Jv cyAqLwo+IC0KPiAtI2RlZmluZSBiaW5fYXQoaSkgICAgICAoKG1iaW5wdHIpKChjaGFyKikmKGF2 X1syKihpKSArIDJdKSAtIDIqU0laRV9TWikpCj4gLSNkZWZpbmUgbmV4dF9iaW4oYikgICAgKCht YmlucHRyKSgoY2hhciopKGIpICsgMiAqIHNpemVvZihtYmlucHRyKSkpCj4gLSNkZWZpbmUgcHJl dl9iaW4oYikgICAgKChtYmlucHRyKSgoY2hhciopKGIpIC0gMiAqIHNpemVvZihtYmlucHRyKSkp Cj4gLQo+IC0vKgo+IC0gICBUaGUgZmlyc3QgMiBiaW5zIGFyZSBuZXZlciBpbmRleGVkLiBUaGUg Y29ycmVzcG9uZGluZyBhdl8gY2VsbHMgYXJlIGluc3RlYWQKPiAtICAgdXNlZCBmb3IgYm9va2tl ZXBpbmcuIFRoaXMgaXMgbm90IHRvIHNhdmUgc3BhY2UsIGJ1dCB0byBzaW1wbGlmeQo+IC0gICBp bmRleGluZywgbWFpbnRhaW4gbG9jYWxpdHksIGFuZCBhdm9pZCBzb21lIGluaXRpYWxpemF0aW9u IHRlc3RzLgo+IC0qLwo+IC0KPiAtI2RlZmluZSB0b3AgICAgICAgICAgICAoYmluX2F0KDApLT5m ZCkgICAvKiBUaGUgdG9wbW9zdCBjaHVuayAqLwo+IC0jZGVmaW5lIGxhc3RfcmVtYWluZGVyIChi aW5fYXQoMSkpICAgICAgIC8qIHJlbWFpbmRlciBmcm9tIGxhc3Qgc3BsaXQgKi8KPiAtCj4gLQo+ IC0vKgo+IC0gICBCZWNhdXNlIHRvcCBpbml0aWFsbHkgcG9pbnRzIHRvIGl0cyBvd24gYmluIHdp dGggaW5pdGlhbAo+IC0gICB6ZXJvIHNpemUsIHRodXMgZm9yY2luZyBleHRlbnNpb24gb24gdGhl IGZpcnN0IG1hbGxvYyByZXF1ZXN0LAo+IC0gICB3ZSBhdm9pZCBoYXZpbmcgYW55IHNwZWNpYWwg Y29kZSBpbiBtYWxsb2MgdG8gY2hlY2sgd2hldGhlcgo+IC0gICBpdCBldmVuIGV4aXN0cyB5ZXQu IEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGluIG1hbGxvY19leHRlbmRfdG9wLgo+IC0qLwo+IC0KPiAt I2RlZmluZSBpbml0aWFsX3RvcCAgICAoKG1jaHVua3B0cikoYmluX2F0KDApKSkKPiAtCj4gLS8q IEhlbHBlciBtYWNybyB0byBpbml0aWFsaXplIGJpbnMgKi8KPiAtCj4gLSNkZWZpbmUgSUFWKGkp ICBiaW5fYXQoaSksIGJpbl9hdChpKQo+IC0KPiAtc3RhdGljIG1iaW5wdHIgYXZfW05BViAqIDIg KyAyXSA9IHsKPiAtIDAsIDAsCj4gLSBJQVYoMCksICAgSUFWKDEpLCAgIElBVigyKSwgICBJQVYo MyksICAgSUFWKDQpLCAgIElBVig1KSwgICBJQVYoNiksICAgSUFWKDcpLAo+IC0gSUFWKDgpLCAg IElBVig5KSwgICBJQVYoMTApLCAgSUFWKDExKSwgIElBVigxMiksICBJQVYoMTMpLCAgSUFWKDE0 KSwgIElBVigxNSksCj4gLSBJQVYoMTYpLCAgSUFWKDE3KSwgIElBVigxOCksICBJQVYoMTkpLCAg SUFWKDIwKSwgIElBVigyMSksICBJQVYoMjIpLCAgSUFWKDIzKSwKPiAtIElBVigyNCksICBJQVYo MjUpLCAgSUFWKDI2KSwgIElBVigyNyksICBJQVYoMjgpLCAgSUFWKDI5KSwgIElBVigzMCksICBJ QVYoMzEpLAo+IC0gSUFWKDMyKSwgIElBVigzMyksICBJQVYoMzQpLCAgSUFWKDM1KSwgIElBVigz NiksICBJQVYoMzcpLCAgSUFWKDM4KSwgIElBVigzOSksCj4gLSBJQVYoNDApLCAgSUFWKDQxKSwg IElBVig0MiksICBJQVYoNDMpLCAgSUFWKDQ0KSwgIElBVig0NSksICBJQVYoNDYpLCAgSUFWKDQ3 KSwKPiAtIElBVig0OCksICBJQVYoNDkpLCAgSUFWKDUwKSwgIElBVig1MSksICBJQVYoNTIpLCAg SUFWKDUzKSwgIElBVig1NCksICBJQVYoNTUpLAo+IC0gSUFWKDU2KSwgIElBVig1NyksICBJQVYo NTgpLCAgSUFWKDU5KSwgIElBVig2MCksICBJQVYoNjEpLCAgSUFWKDYyKSwgIElBVig2MyksCj4g LSBJQVYoNjQpLCAgSUFWKDY1KSwgIElBVig2NiksICBJQVYoNjcpLCAgSUFWKDY4KSwgIElBVig2 OSksICBJQVYoNzApLCAgSUFWKDcxKSwKPiAtIElBVig3MiksICBJQVYoNzMpLCAgSUFWKDc0KSwg IElBVig3NSksICBJQVYoNzYpLCAgSUFWKDc3KSwgIElBVig3OCksICBJQVYoNzkpLAo+IC0gSUFW KDgwKSwgIElBVig4MSksICBJQVYoODIpLCAgSUFWKDgzKSwgIElBVig4NCksICBJQVYoODUpLCAg SUFWKDg2KSwgIElBVig4NyksCj4gLSBJQVYoODgpLCAgSUFWKDg5KSwgIElBVig5MCksICBJQVYo OTEpLCAgSUFWKDkyKSwgIElBVig5MyksICBJQVYoOTQpLCAgSUFWKDk1KSwKPiAtIElBVig5Niks ICBJQVYoOTcpLCAgSUFWKDk4KSwgIElBVig5OSksICBJQVYoMTAwKSwgSUFWKDEwMSksIElBVigx MDIpLCBJQVYoMTAzKSwKPiAtIElBVigxMDQpLCBJQVYoMTA1KSwgSUFWKDEwNiksIElBVigxMDcp LCBJQVYoMTA4KSwgSUFWKDEwOSksIElBVigxMTApLCBJQVYoMTExKSwKPiAtIElBVigxMTIpLCBJ QVYoMTEzKSwgSUFWKDExNCksIElBVigxMTUpLCBJQVYoMTE2KSwgSUFWKDExNyksIElBVigxMTgp LCBJQVYoMTE5KSwKPiAtIElBVigxMjApLCBJQVYoMTIxKSwgSUFWKDEyMiksIElBVigxMjMpLCBJ QVYoMTI0KSwgSUFWKDEyNSksIElBVigxMjYpLCBJQVYoMTI3KQo+IC19Owo+IC0KPiAtDAo+IC0K PiAtLyogZmllbGQtZXh0cmFjdGlvbiBtYWNyb3MgKi8KPiAtCj4gLSNkZWZpbmUgZmlyc3QoYikg KChiKS0+ZmQpCj4gLSNkZWZpbmUgbGFzdChiKSAgKChiKS0+YmspCj4gLQo+IC0vKgo+IC0gIElu ZGV4aW5nIGludG8gYmlucwo+IC0qLwo+IC0KPiAtI2RlZmluZSBiaW5faW5kZXgoc3opICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAt KCgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpID09ICAgIDApID8gICAgICAgKCgodW5zaWdu ZWQgbG9uZykoc3opKSA+PiAgMyk6IFwKPiAtICgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkp IDw9ICAgIDQpID8gIDU2ICsgKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAgNik6IFwKPiAtICgo KCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9ICAgMjApID8gIDkxICsgKCgodW5zaWduZWQg bG9uZykoc3opKSA+PiAgOSk6IFwKPiAtICgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9 ICAgODQpID8gMTEwICsgKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAxMik6IFwKPiAtICgoKCh1 bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9ICAzNDApID8gMTE5ICsgKCgodW5zaWduZWQgbG9u Zykoc3opKSA+PiAxNSk6IFwKPiAtICgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9IDEz NjQpID8gMTI0ICsgKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAxOCk6IFwKPiAtCQkJCQkgIDEy NikKPiAtLyoKPiAtICBiaW5zIGZvciBjaHVua3MgPCA1MTIgYXJlIGFsbCBzcGFjZWQgOCBieXRl cyBhcGFydCwgYW5kIGhvbGQKPiAtICBpZGVudGljYWxseSBzaXplZCBjaHVua3MuIFRoaXMgaXMg ZXhwbG9pdGVkIGluIG1hbGxvYy4KPiAtKi8KPiAtCj4gLSNkZWZpbmUgTUFYX1NNQUxMQklOICAg ICAgICAgNjMKPiAtI2RlZmluZSBNQVhfU01BTExCSU5fU0laRSAgIDUxMgo+IC0jZGVmaW5lIFNN QUxMQklOX1dJRFRIICAgICAgICA4Cj4gLQo+IC0jZGVmaW5lIHNtYWxsYmluX2luZGV4KHN6KSAg KCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAzKQo+IC0KPiAtLyoKPiAtICAgUmVxdWVzdHMgYXJl IGBzbWFsbCcgaWYgYm90aCB0aGUgY29ycmVzcG9uZGluZyBhbmQgdGhlIG5leHQgYmluIGFyZSBz bWFsbAo+IC0qLwo+IC0KPiAtI2RlZmluZSBpc19zbWFsbF9yZXF1ZXN0KG5iKSAobmIgPCBNQVhf U01BTExCSU5fU0laRSAtIFNNQUxMQklOX1dJRFRIKQo+IC0KPiAtDAo+IC0KPiAtLyoKPiAtICAg IFRvIGhlbHAgY29tcGVuc2F0ZSBmb3IgdGhlIGxhcmdlIG51bWJlciBvZiBiaW5zLCBhIG9uZS1s ZXZlbCBpbmRleAo+IC0gICAgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGJpbi1ieS1iaW4gc2VhcmNo aW5nLiAgYGJpbmJsb2NrcycgaXMgYQo+IC0gICAgb25lLXdvcmQgYml0dmVjdG9yIHJlY29yZGlu ZyB3aGV0aGVyIGdyb3VwcyBvZiBCSU5CTE9DS1dJRFRIIGJpbnMKPiAtICAgIGhhdmUgYW55IChw b3NzaWJseSkgbm9uLWVtcHR5IGJpbnMsIHNvIHRoZXkgY2FuIGJlIHNraXBwZWQgb3Zlcgo+IC0g ICAgYWxsIGF0IG9uY2UgZHVyaW5nIGR1cmluZyB0cmF2ZXJzYWxzLiBUaGUgYml0cyBhcmUgTk9U IGFsd2F5cwo+IC0gICAgY2xlYXJlZCBhcyBzb29uIGFzIGFsbCBiaW5zIGluIGEgYmxvY2sgYXJl IGVtcHR5LCBidXQgaW5zdGVhZCBvbmx5Cj4gLSAgICB3aGVuIGFsbCBhcmUgbm90aWNlZCB0byBi ZSBlbXB0eSBkdXJpbmcgdHJhdmVyc2FsIGluIG1hbGxvYy4KPiAtKi8KPiAtCj4gLSNkZWZpbmUg QklOQkxPQ0tXSURUSCAgICAgNCAgIC8qIGJpbnMgcGVyIGJsb2NrICovCj4gLQo+IC0jZGVmaW5l IGJpbmJsb2NrcyAgICAgIChiaW5fYXQoMCktPnNpemUpIC8qIGJpdHZlY3RvciBvZiBub25lbXB0 eSBibG9ja3MgKi8KPiAtCj4gLS8qIGJpbjwtPmJsb2NrIG1hY3JvcyAqLwo+IC0KPiAtI2RlZmlu ZSBpZHgyYmluYmxvY2soaXgpICAgICgodW5zaWduZWQpMSA8PCAoaXggLyBCSU5CTE9DS1dJRFRI KSkKPiAtI2RlZmluZSBtYXJrX2JpbmJsb2NrKGlpKSAgIChiaW5ibG9ja3MgfD0gaWR4MmJpbmJs b2NrKGlpKSkKPiAtI2RlZmluZSBjbGVhcl9iaW5ibG9jayhpaSkgIChiaW5ibG9ja3MgJj0gfihp ZHgyYmluYmxvY2soaWkpKSkKPiAtCj4gLQo+IC0MCj4gLQo+IC0KPiAtLyogIE90aGVyIHN0YXRp YyBib29ra2VlcGluZyBkYXRhICovCj4gLQo+IC0vKiB2YXJpYWJsZXMgaG9sZGluZyB0dW5hYmxl IHZhbHVlcyAqLwo+IC0KPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJpbV90aHJlc2hvbGQgICA9 IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7Cj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvcF9wYWQg ICAgICAgICAgPSBERUZBVUxUX1RPUF9QQUQ7Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgIG5fbW1h cHNfbWF4ICAgICAgPSBERUZBVUxUX01NQVBfTUFYOwo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBt bWFwX3RocmVzaG9sZCAgID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKPiAtCj4gLS8qIFRoZSBm aXJzdCB2YWx1ZSByZXR1cm5lZCBmcm9tIHNicmsgKi8KPiAtc3RhdGljIGNoYXIqIHNicmtfYmFz ZSA9IChjaGFyKikoLTEpOwo+IC0KPiAtLyogVGhlIG1heGltdW0gbWVtb3J5IG9idGFpbmVkIGZy b20gc3lzdGVtIHZpYSBzYnJrICovCj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9zYnJrZWRf bWVtID0gMDsKPiAtCj4gLS8qIFRoZSBtYXhpbXVtIHZpYSBlaXRoZXIgc2JyayBvciBtbWFwICov Cj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF90b3RhbF9tZW0gPSAwOwo+IC0KPiAtLyogaW50 ZXJuYWwgd29ya2luZyBjb3B5IG9mIG1hbGxpbmZvICovCj4gLXN0YXRpYyBzdHJ1Y3QgbWFsbGlu Zm8gY3VycmVudF9tYWxsaW5mbyA9IHsgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsK PiAtCj4gLS8qIFRoZSB0b3RhbCBtZW1vcnkgb2J0YWluZWQgZnJvbSBzeXN0ZW0gdmlhIHNicmsg Ki8KPiAtI2RlZmluZSBzYnJrZWRfbWVtICAoY3VycmVudF9tYWxsaW5mby5hcmVuYSkKPiAtCj4g LS8qIFRyYWNraW5nIG1tYXBzICovCj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgaW50IG5fbW1hcHMg PSAwOwo+IC1zdGF0aWMgdW5zaWduZWQgaW50IG1heF9uX21tYXBzID0gMDsKPiAtc3RhdGljIHVu c2lnbmVkIGxvbmcgbW1hcHBlZF9tZW0gPSAwOwo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhf bW1hcHBlZF9tZW0gPSAwOwo+IC0KPiAtDAo+IC0KPiAtLyoKPiAtICBEZWJ1Z2dpbmcgc3VwcG9y dAo+IC0qLwo+IC0KPiAtI2lmIERFQlVHCj4gLQo+IC0KPiAtLyoKPiAtICBUaGVzZSByb3V0aW5l cyBtYWtlIGEgbnVtYmVyIG9mIGFzc2VydGlvbnMgYWJvdXQgdGhlIHN0YXRlcwo+IC0gIG9mIGRh dGEgc3RydWN0dXJlcyB0aGF0IHNob3VsZCBiZSB0cnVlIGF0IGFsbCB0aW1lcy4gSWYgYW55Cj4g LSAgYXJlIG5vdCB0cnVlLCBpdCdzIHZlcnkgbGlrZWx5IHRoYXQgYSB1c2VyIHByb2dyYW0gaGFz IHNvbWVob3cKPiAtICB0cmFzaGVkIG1lbW9yeS4gKEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRo ZXJlIGlzIGEgY29kaW5nIGVycm9yCj4gLSAgaW4gbWFsbG9jLiBJbiB3aGljaCBjYXNlLCBwbGVh c2UgcmVwb3J0IGl0ISkKPiAtKi8KPiAtCj4gLSNpZiBfX1NURF9DCj4gLXN0YXRpYyB2b2lkIGRv X2NoZWNrX2NodW5rKG1jaHVua3B0ciBwKQo+IC0jZWxzZQo+IC1zdGF0aWMgdm9pZCBkb19jaGVj a19jaHVuayhwKSBtY2h1bmtwdHIgcDsKPiAtI2VuZGlmCj4gLXsKPiAtICBJTlRFUk5BTF9TSVpF X1Qgc3ogPSBwLT5zaXplICYgflBSRVZfSU5VU0U7Cj4gLQo+IC0gIC8qIE5vIGNoZWNrYWJsZSBj aHVuayBpcyBtbWFwcGVkICovCj4gLSAgYXNzZXJ0KCFjaHVua19pc19tbWFwcGVkKHApKTsKPiAt Cj4gLSAgLyogQ2hlY2sgZm9yIGxlZ2FsIGFkZHJlc3MgLi4uICovCj4gLSAgYXNzZXJ0KChjaGFy KilwID49IHNicmtfYmFzZSk7Cj4gLSAgaWYgKHAgIT0gdG9wKQo+IC0gICAgYXNzZXJ0KChjaGFy KilwICsgc3ogPD0gKGNoYXIqKXRvcCk7Cj4gLSAgZWxzZQo+IC0gICAgYXNzZXJ0KChjaGFyKilw ICsgc3ogPD0gc2Jya19iYXNlICsgc2Jya2VkX21lbSk7Cj4gLQo+IC19Cj4gLQo+IC0KPiAtI2lm IF9fU1REX0MKPiAtc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtY2h1bmtwdHIgcCkK PiAtI2Vsc2UKPiAtc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhwKSBtY2h1bmtwdHIg cDsKPiAtI2VuZGlmCj4gLXsKPiAtICBJTlRFUk5BTF9TSVpFX1Qgc3ogPSBwLT5zaXplICYgflBS RVZfSU5VU0U7Cj4gLSAgbWNodW5rcHRyIG5leHQgPSBjaHVua19hdF9vZmZzZXQocCwgc3opOwo+ IC0KPiAtICBkb19jaGVja19jaHVuayhwKTsKPiAtCj4gLSAgLyogQ2hlY2sgd2hldGhlciBpdCBj bGFpbXMgdG8gYmUgZnJlZSAuLi4gKi8KPiAtICBhc3NlcnQoIWludXNlKHApKTsKPiAtCj4gLSAg LyogVW5sZXNzIGEgc3BlY2lhbCBtYXJrZXIsIG11c3QgaGF2ZSBPSyBmaWVsZHMgKi8KPiAtICBp ZiAoKGxvbmcpc3ogPj0gKGxvbmcpTUlOU0laRSkKPiAtICB7Cj4gLSAgICBhc3NlcnQoKHN6ICYg TUFMTE9DX0FMSUdOX01BU0spID09IDApOwo+IC0gICAgYXNzZXJ0KGFsaWduZWRfT0soY2h1bmsy bWVtKHApKSk7Cj4gLSAgICAvKiAuLi4gbWF0Y2hpbmcgZm9vdGVyIGZpZWxkICovCj4gLSAgICBh c3NlcnQobmV4dC0+cHJldl9zaXplID09IHN6KTsKPiAtICAgIC8qIC4uLiBhbmQgaXMgZnVsbHkg Y29uc29saWRhdGVkICovCj4gLSAgICBhc3NlcnQocHJldl9pbnVzZShwKSk7Cj4gLSAgICBhc3Nl cnQgKG5leHQgPT0gdG9wIHx8IGludXNlKG5leHQpKTsKPiAtCj4gLSAgICAvKiAuLi4gYW5kIGhh cyBtaW5pbWFsbHkgc2FuZSBsaW5rcyAqLwo+IC0gICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsK PiAtICAgIGFzc2VydChwLT5iay0+ZmQgPT0gcCk7Cj4gLSAgfQo+IC0gIGVsc2UgLyogbWFya2Vy cyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9TWiAqLwo+IC0gICAgYXNzZXJ0KHN6ID09IFNJWkVf U1opOwo+IC19Cj4gLQo+IC0jaWYgX19TVERfQwo+IC1zdGF0aWMgdm9pZCBkb19jaGVja19pbnVz ZV9jaHVuayhtY2h1bmtwdHIgcCkKPiAtI2Vsc2UKPiAtc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51 c2VfY2h1bmsocCkgbWNodW5rcHRyIHA7Cj4gLSNlbmRpZgo+IC17Cj4gLSAgbWNodW5rcHRyIG5l eHQgPSBuZXh0X2NodW5rKHApOwo+IC0gIGRvX2NoZWNrX2NodW5rKHApOwo+IC0KPiAtICAvKiBD aGVjayB3aGV0aGVyIGl0IGNsYWltcyB0byBiZSBpbiB1c2UgLi4uICovCj4gLSAgYXNzZXJ0KGlu dXNlKHApKTsKPiAtCj4gLSAgLyogLi4uIGFuZCBpcyBzdXJyb3VuZGVkIGJ5IE9LIGNodW5rcy4K PiAtICAgIFNpbmNlIG1vcmUgdGhpbmdzIGNhbiBiZSBjaGVja2VkIHdpdGggZnJlZSBjaHVua3Mg dGhhbiBpbnVzZSBvbmVzLAo+IC0gICAgaWYgYW4gaW51c2UgY2h1bmsgYm9yZGVycyB0aGVtIGFu ZCBkZWJ1ZyBpcyBvbiwgaXQncyB3b3J0aCBkb2luZyB0aGVtLgo+IC0gICovCj4gLSAgaWYgKCFw cmV2X2ludXNlKHApKQo+IC0gIHsKPiAtICAgIG1jaHVua3B0ciBwcnYgPSBwcmV2X2NodW5rKHAp Owo+IC0gICAgYXNzZXJ0KG5leHRfY2h1bmsocHJ2KSA9PSBwKTsKPiAtICAgIGRvX2NoZWNrX2Zy ZWVfY2h1bmsocHJ2KTsKPiAtICB9Cj4gLSAgaWYgKG5leHQgPT0gdG9wKQo+IC0gIHsKPiAtICAg IGFzc2VydChwcmV2X2ludXNlKG5leHQpKTsKPiAtICAgIGFzc2VydChjaHVua3NpemUobmV4dCkg Pj0gTUlOU0laRSk7Cj4gLSAgfQo+IC0gIGVsc2UgaWYgKCFpbnVzZShuZXh0KSkKPiAtICAgIGRv X2NoZWNrX2ZyZWVfY2h1bmsobmV4dCk7Cj4gLQo+IC19Cj4gLQo+IC0jaWYgX19TVERfQwo+IC1z dGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtY2h1bmtwdHIgcCwgSU5URVJOQUxf U0laRV9UIHMpCj4gLSNlbHNlCj4gLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5r KHAsIHMpIG1jaHVua3B0ciBwOyBJTlRFUk5BTF9TSVpFX1QgczsKPiAtI2VuZGlmCj4gLXsKPiAt ICBJTlRFUk5BTF9TSVpFX1Qgc3ogPSBwLT5zaXplICYgflBSRVZfSU5VU0U7Cj4gLSAgbG9uZyBy b29tID0gc3ogLSBzOwo+IC0KPiAtICBkb19jaGVja19pbnVzZV9jaHVuayhwKTsKPiAtCj4gLSAg LyogTGVnYWwgc2l6ZSAuLi4gKi8KPiAtICBhc3NlcnQoKGxvbmcpc3ogPj0gKGxvbmcpTUlOU0la RSk7Cj4gLSAgYXNzZXJ0KChzeiAmIE1BTExPQ19BTElHTl9NQVNLKSA9PSAwKTsKPiAtICBhc3Nl cnQocm9vbSA+PSAwKTsKPiAtICBhc3NlcnQocm9vbSA8IChsb25nKU1JTlNJWkUpOwo+IC0KPiAt ICAvKiAuLi4gYW5kIGFsaWdubWVudCAqLwo+IC0gIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1l bShwKSkpOwo+IC0KPiAtCj4gLSAgLyogLi4uIGFuZCB3YXMgYWxsb2NhdGVkIGF0IGZyb250IG9m IGFuIGF2YWlsYWJsZSBjaHVuayAqLwo+IC0gIGFzc2VydChwcmV2X2ludXNlKHApKTsKPiAtCj4g LX0KPiAtCj4gLQo+IC0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkgIGRvX2NoZWNrX2ZyZWVf Y2h1bmsoUCkKPiAtI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhQKSBkb19jaGVja19pbnVzZV9j aHVuayhQKQo+IC0jZGVmaW5lIGNoZWNrX2NodW5rKFApIGRvX2NoZWNrX2NodW5rKFApCj4gLSNk ZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhQ LE4pCj4gLSNlbHNlCj4gLSNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhQKQo+IC0jZGVmaW5lIGNo ZWNrX2ludXNlX2NodW5rKFApCj4gLSNkZWZpbmUgY2hlY2tfY2h1bmsoUCkKPiAtI2RlZmluZSBj aGVja19tYWxsb2NlZF9jaHVuayhQLE4pCj4gLSNlbmRpZgo+IC0KPiAtDAo+IC0KPiAtLyoKPiAt ICBNYWNyby1iYXNlZCBpbnRlcm5hbCB1dGlsaXRpZXMKPiAtKi8KPiAtCj4gLQo+IC0vKgo+IC0g IExpbmtpbmcgY2h1bmtzIGluIGJpbiBsaXN0cy4KPiAtICBDYWxsIHRoZXNlIG9ubHkgd2l0aCB2 YXJpYWJsZXMsIG5vdCBhcmJpdHJhcnkgZXhwcmVzc2lvbnMsIGFzIGFyZ3VtZW50cy4KPiAtKi8K PiAtCj4gLS8qCj4gLSAgUGxhY2UgY2h1bmsgcCBvZiBzaXplIHMgaW4gaXRzIGJpbiwgaW4gc2l6 ZSBvcmRlciwKPiAtICBwdXR0aW5nIGl0IGFoZWFkIG9mIG90aGVycyBvZiBzYW1lIHNpemUuCj4g LSovCj4gLQo+IC0KPiAtI2RlZmluZSBmcm9udGxpbmsoUCwgUywgSURYLCBCSywgRkQpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC17ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gLSAgaWYgKFMgPCBNQVhfU01BTExCSU5fU0laRSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+IC0gICAgSURYID0gc21hbGxiaW5faW5kZXgoUyk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBtYXJrX2JpbmJsb2NrKElEWCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAt ICAgIEJLID0gYmluX2F0KElEWCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgRkQgPSBCSy0+ZmQ7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBQ LT5iayA9IEJLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiAtICAgIFAtPmZkID0gRkQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgRkQtPmJr ID0gQkstPmZkID0gUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+IC0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBJRFggPSBiaW5faW5kZXgo Uyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiAtICAgIEJLID0gYmluX2F0KElEWCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgRkQgPSBCSy0+ZmQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g LSAgICBpZiAoRkQgPT0gQkspIG1hcmtfYmluYmxvY2soSURYKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLSAgICAgIHdoaWxlIChGRCAhPSBCSyAmJiBTIDwgY2h1bmtz aXplKEZEKSkgRkQgPSBGRC0+ZmQ7ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgQksg PSBGRC0+Yms7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBQLT5iayA9IEJL OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPiAtICAgIFAtPmZkID0gRkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgRkQtPmJrID0gQkstPmZk ID0gUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtfQo+IC0KPiAtCj4gLS8qIHRha2UgYSBj aHVuayBvZmYgYSBsaXN0ICovCj4gLQo+IC0jZGVmaW5lIHVubGluayhQLCBCSywgRkQpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLXsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiAtICBCSyA9IFAtPmJrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gIEZEID0gUC0+ ZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gLSAgRkQtPmJrID0gQks7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBCSy0+ZmQgPSBGRDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+IC19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLQo+IC0vKiBQbGFjZSBwIGFzIHRo ZSBsYXN0IHJlbWFpbmRlciAqLwo+IC0KPiAtI2RlZmluZSBsaW5rX2xhc3RfcmVtYWluZGVyKFAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC17ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLSAgbGFzdF9yZW1haW5kZXItPmZkID0gbGFzdF9yZW1haW5k ZXItPmJrID0gIFA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICBQLT5mZCA9 IFAtPmJrID0gbGFzdF9yZW1haW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC19Cj4gLQo+IC0vKiBDbGVhciB0aGUgbGFzdF9yZW1haW5kZXIgYmlu ICovCj4gLQo+IC0jZGVmaW5lIGNsZWFyX2xhc3RfcmVtYWluZGVyIFwKPiAtICAobGFzdF9yZW1h aW5kZXItPmZkID0gbGFzdF9yZW1haW5kZXItPmJrID0gbGFzdF9yZW1haW5kZXIpCj4gLQo+IC0K PiAtDAo+IC0KPiAtCj4gLS8qIFJvdXRpbmVzIGRlYWxpbmcgd2l0aCBtbWFwKCkuICovCj4gLQo+ IC0jaWYgSEFWRV9NTUFQCj4gLQo+IC0jaWYgX19TVERfQwo+IC1zdGF0aWMgbWNodW5rcHRyIG1t YXBfY2h1bmsoc2l6ZV90IHNpemUpCj4gLSNlbHNlCj4gLXN0YXRpYyBtY2h1bmtwdHIgbW1hcF9j aHVuayhzaXplKSBzaXplX3Qgc2l6ZTsKPiAtI2VuZGlmCj4gLXsKPiAtICBzaXplX3QgcGFnZV9t YXNrID0gbWFsbG9jX2dldHBhZ2VzaXplIC0gMTsKPiAtICBtY2h1bmtwdHIgcDsKPiAtCj4gLSNp Zm5kZWYgTUFQX0FOT05ZTU9VUwo+IC0gIHN0YXRpYyBpbnQgZmQgPSAtMTsKPiAtI2VuZGlmCj4g LQo+IC0gIGlmKG5fbW1hcHMgPj0gbl9tbWFwc19tYXgpIHJldHVybiAwOyAvKiB0b28gbWFueSBy ZWdpb25zICovCj4gLQo+IC0gIC8qIEZvciBtbWFwcGVkIGNodW5rcywgdGhlIG92ZXJoZWFkIGlz IG9uZSBTSVpFX1NaIHVuaXQgbGFyZ2VyLCBiZWNhdXNlCj4gLSAgICogdGhlcmUgaXMgbm8gZm9s bG93aW5nIGNodW5rIHdob3NlIHByZXZfc2l6ZSBmaWVsZCBjb3VsZCBiZSB1c2VkLgo+IC0gICAq Lwo+IC0gIHNpemUgPSAoc2l6ZSArIFNJWkVfU1ogKyBwYWdlX21hc2spICYgfnBhZ2VfbWFzazsK PiAtCj4gLSNpZmRlZiBNQVBfQU5PTllNT1VTCj4gLSAgcCA9IChtY2h1bmtwdHIpbW1hcCgwLCBz aXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKPiAtCQkgICAgICBNQVBfUFJJVkFURXxNQVBfQU5P TllNT1VTLCAtMSwgMCk7Cj4gLSNlbHNlIC8qICFNQVBfQU5PTllNT1VTICovCj4gLSAgaWYgKGZk IDwgMCkKPiAtICB7Cj4gLSAgICBmZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7Cj4gLSAg ICBpZihmZCA8IDApIHJldHVybiAwOwo+IC0gIH0KPiAtICBwID0gKG1jaHVua3B0ciltbWFwKDAs IHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApOwo+IC0jZW5k aWYKPiAtCj4gLSAgaWYocCA9PSAobWNodW5rcHRyKS0xKSByZXR1cm4gMDsKPiAtCj4gLSAgbl9t bWFwcysrOwo+IC0gIGlmIChuX21tYXBzID4gbWF4X25fbW1hcHMpIG1heF9uX21tYXBzID0gbl9t bWFwczsKPiAtCj4gLSAgLyogV2UgZGVtYW5kIHRoYXQgZWlnaHQgYnl0ZXMgaW50byBhIHBhZ2Ug bXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4gKi8KPiAtICBhc3NlcnQoYWxpZ25lZF9PSyhjaHVuazJt ZW0ocCkpKTsKPiAtCj4gLSAgLyogVGhlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIG1tYXBw ZWQgcmVnaW9uIGlzIHN0b3JlZAo+IC0gICAqIGluIHRoZSBwcmV2X3NpemUgZmllbGQgb2YgdGhl IGNodW5rOyBub3JtYWxseSBpdCBpcyB6ZXJvLAo+IC0gICAqIGJ1dCB0aGF0IGNhbiBiZSBjaGFu Z2VkIGluIG1lbWFsaWduKCkuCj4gLSAgICovCj4gLSAgcC0+cHJldl9zaXplID0gMDsKPiAtICBz ZXRfaGVhZChwLCBzaXplfElTX01NQVBQRUQpOwo+IC0KPiAtICBtbWFwcGVkX21lbSArPSBzaXpl Owo+IC0gIGlmICgodW5zaWduZWQgbG9uZyltbWFwcGVkX21lbSA+ICh1bnNpZ25lZCBsb25nKW1h eF9tbWFwcGVkX21lbSkKPiAtICAgIG1heF9tbWFwcGVkX21lbSA9IG1tYXBwZWRfbWVtOwo+IC0g IGlmICgodW5zaWduZWQgbG9uZykobW1hcHBlZF9tZW0gKyBzYnJrZWRfbWVtKSA+ICh1bnNpZ25l ZCBsb25nKW1heF90b3RhbF9tZW0pCj4gLSAgICBtYXhfdG90YWxfbWVtID0gbW1hcHBlZF9tZW0g KyBzYnJrZWRfbWVtOwo+IC0gIHJldHVybiBwOwo+IC19Cj4gLQo+IC0jaWYgX19TVERfQwo+IC1z dGF0aWMgdm9pZCBtdW5tYXBfY2h1bmsobWNodW5rcHRyIHApCj4gLSNlbHNlCj4gLXN0YXRpYyB2 b2lkIG11bm1hcF9jaHVuayhwKSBtY2h1bmtwdHIgcDsKPiAtI2VuZGlmCj4gLXsKPiAtICBJTlRF Uk5BTF9TSVpFX1Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKPiAtICBpbnQgcmV0Owo+IC0KPiAtICBh c3NlcnQgKGNodW5rX2lzX21tYXBwZWQocCkpOwo+IC0gIGFzc2VydCghICgoY2hhciopcCA+PSBz YnJrX2Jhc2UgJiYgKGNoYXIqKXAgPCBzYnJrX2Jhc2UgKyBzYnJrZWRfbWVtKSk7Cj4gLSAgYXNz ZXJ0KChuX21tYXBzID4gMCkpOwo+IC0gIGFzc2VydCgoKHAtPnByZXZfc2l6ZSArIHNpemUpICYg KG1hbGxvY19nZXRwYWdlc2l6ZS0xKSkgPT0gMCk7Cj4gLQo+IC0gIG5fbW1hcHMtLTsKPiAtICBt bWFwcGVkX21lbSAtPSAoc2l6ZSArIHAtPnByZXZfc2l6ZSk7Cj4gLQo+IC0gIHJldCA9IG11bm1h cCgoY2hhciAqKXAgLSBwLT5wcmV2X3NpemUsIHNpemUgKyBwLT5wcmV2X3NpemUpOwo+IC0KPiAt ICAvKiBtdW5tYXAgcmV0dXJucyBub24temVybyBvbiBmYWlsdXJlICovCj4gLSAgYXNzZXJ0KHJl dCA9PSAwKTsKPiAtfQo+IC0KPiAtI2lmIEhBVkVfTVJFTUFQCj4gLQo+IC0jaWYgX19TVERfQwo+ IC1zdGF0aWMgbWNodW5rcHRyIG1yZW1hcF9jaHVuayhtY2h1bmtwdHIgcCwgc2l6ZV90IG5ld19z aXplKQo+IC0jZWxzZQo+IC1zdGF0aWMgbWNodW5rcHRyIG1yZW1hcF9jaHVuayhwLCBuZXdfc2l6 ZSkgbWNodW5rcHRyIHA7IHNpemVfdCBuZXdfc2l6ZTsKPiAtI2VuZGlmCj4gLXsKPiAtICBzaXpl X3QgcGFnZV9tYXNrID0gbWFsbG9jX2dldHBhZ2VzaXplIC0gMTsKPiAtICBJTlRFUk5BTF9TSVpF X1Qgb2Zmc2V0ID0gcC0+cHJldl9zaXplOwo+IC0gIElOVEVSTkFMX1NJWkVfVCBzaXplID0gY2h1 bmtzaXplKHApOwo+IC0gIGNoYXIgKmNwOwo+IC0KPiAtICBhc3NlcnQgKGNodW5rX2lzX21tYXBw ZWQocCkpOwo+IC0gIGFzc2VydCghICgoY2hhciopcCA+PSBzYnJrX2Jhc2UgJiYgKGNoYXIqKXAg PCBzYnJrX2Jhc2UgKyBzYnJrZWRfbWVtKSk7Cj4gLSAgYXNzZXJ0KChuX21tYXBzID4gMCkpOwo+ IC0gIGFzc2VydCgoKHNpemUgKyBvZmZzZXQpICYgKG1hbGxvY19nZXRwYWdlc2l6ZS0xKSkgPT0g MCk7Cj4gLQo+IC0gIC8qIE5vdGUgdGhlIGV4dHJhIFNJWkVfU1ogb3ZlcmhlYWQgYXMgaW4gbW1h cF9jaHVuaygpLiAqLwo+IC0gIG5ld19zaXplID0gKG5ld19zaXplICsgb2Zmc2V0ICsgU0laRV9T WiArIHBhZ2VfbWFzaykgJiB+cGFnZV9tYXNrOwo+IC0KPiAtICBjcCA9IChjaGFyICopbXJlbWFw KChjaGFyICopcCAtIG9mZnNldCwgc2l6ZSArIG9mZnNldCwgbmV3X3NpemUsIDEpOwo+IC0KPiAt ICBpZiAoY3AgPT0gKGNoYXIgKiktMSkgcmV0dXJuIDA7Cj4gLQo+IC0gIHAgPSAobWNodW5rcHRy KShjcCArIG9mZnNldCk7Cj4gLQo+IC0gIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkp Owo+IC0KPiAtICBhc3NlcnQoKHAtPnByZXZfc2l6ZSA9PSBvZmZzZXQpKTsKPiAtICBzZXRfaGVh ZChwLCAobmV3X3NpemUgLSBvZmZzZXQpfElTX01NQVBQRUQpOwo+IC0KPiAtICBtbWFwcGVkX21l bSAtPSBzaXplICsgb2Zmc2V0Owo+IC0gIG1tYXBwZWRfbWVtICs9IG5ld19zaXplOwo+IC0gIGlm ICgodW5zaWduZWQgbG9uZyltbWFwcGVkX21lbSA+ICh1bnNpZ25lZCBsb25nKW1heF9tbWFwcGVk X21lbSkKPiAtICAgIG1heF9tbWFwcGVkX21lbSA9IG1tYXBwZWRfbWVtOwo+IC0gIGlmICgodW5z aWduZWQgbG9uZykobW1hcHBlZF9tZW0gKyBzYnJrZWRfbWVtKSA+ICh1bnNpZ25lZCBsb25nKW1h eF90b3RhbF9tZW0pCj4gLSAgICBtYXhfdG90YWxfbWVtID0gbW1hcHBlZF9tZW0gKyBzYnJrZWRf bWVtOwo+IC0gIHJldHVybiBwOwo+IC19Cj4gLQo+IC0jZW5kaWYgLyogSEFWRV9NUkVNQVAgKi8K PiAtCj4gLSNlbmRpZiAvKiBIQVZFX01NQVAgKi8KPiAtCj4gLQo+IC0MCj4gLQo+IC0vKgo+IC0g IEV4dGVuZCB0aGUgdG9wLW1vc3QgY2h1bmsgYnkgb2J0YWluaW5nIG1lbW9yeSBmcm9tIHN5c3Rl bS4KPiAtICBNYWluIGludGVyZmFjZSB0byBzYnJrIChidXQgc2VlIGFsc28gbWFsbG9jX3RyaW0p Lgo+IC0qLwo+IC0KPiAtI2lmIF9fU1REX0MKPiAtc3RhdGljIHZvaWQgbWFsbG9jX2V4dGVuZF90 b3AoSU5URVJOQUxfU0laRV9UIG5iKQo+IC0jZWxzZQo+IC1zdGF0aWMgdm9pZCBtYWxsb2NfZXh0 ZW5kX3RvcChuYikgSU5URVJOQUxfU0laRV9UIG5iOwo+IC0jZW5kaWYKPiAtewo+IC0gIGNoYXIq ICAgICBicms7ICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHZhbHVlIGZyb20gc2JyayAqLwo+ IC0gIElOVEVSTkFMX1NJWkVfVCBmcm9udF9taXNhbGlnbjsgLyogdW51c2FibGUgYnl0ZXMgYXQg ZnJvbnQgb2Ygc2Jya2VkIHNwYWNlICovCj4gLSAgSU5URVJOQUxfU0laRV9UIGNvcnJlY3Rpb247 ICAgICAvKiBieXRlcyBmb3IgMm5kIHNicmsgY2FsbCAqLwo+IC0gIGNoYXIqICAgICBuZXdfYnJr OyAgICAgICAgICAgICAgLyogcmV0dXJuIG9mIDJuZCBzYnJrIGNhbGwgKi8KPiAtICBJTlRFUk5B TF9TSVpFX1QgdG9wX3NpemU7ICAgICAgIC8qIG5ldyBzaXplIG9mIHRvcCBjaHVuayAqLwo+IC0K PiAtICBtY2h1bmtwdHIgb2xkX3RvcCAgICAgPSB0b3A7ICAvKiBSZWNvcmQgc3RhdGUgb2Ygb2xk IHRvcCAqLwo+IC0gIElOVEVSTkFMX1NJWkVfVCBvbGRfdG9wX3NpemUgPSBjaHVua3NpemUob2xk X3RvcCk7Cj4gLSAgY2hhciogICAgIG9sZF9lbmQgICAgICA9IChjaGFyKikoY2h1bmtfYXRfb2Zm c2V0KG9sZF90b3AsIG9sZF90b3Bfc2l6ZSkpOwo+IC0KPiAtICAvKiBQYWQgcmVxdWVzdCB3aXRo IHRvcF9wYWQgcGx1cyBtaW5pbWFsIG92ZXJoZWFkICovCj4gLQo+IC0gIElOVEVSTkFMX1NJWkVf VCAgICBzYnJrX3NpemUgICAgID0gbmIgKyB0b3BfcGFkICsgTUlOU0laRTsKPiAtICB1bnNpZ25l ZCBsb25nIHBhZ2VzeiAgICA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKPiAtCj4gLSAgLyogSWYgbm90 IHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHJvdW5kIHRvIHByZXNlcnZlIHBhZ2UgYm91bmRhcnkg Ki8KPiAtICAvKiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gY29ycmVjdCB0byBhIHBhZ2Ugc2l6ZSBi ZWxvdyBhbnl3YXkuICovCj4gLSAgLyogKFdlIGFsc28gY29ycmVjdCBiZWxvdyBpZiBhbiBpbnRl cnZlbmluZyBmb3JlaWduIHNicmsgY2FsbC4pICovCj4gLQo+IC0gIGlmIChzYnJrX2Jhc2UgIT0g KGNoYXIqKSgtMSkpCj4gLSAgICBzYnJrX3NpemUgPSAoc2Jya19zaXplICsgKHBhZ2VzeiAtIDEp KSAmIH4ocGFnZXN6IC0gMSk7Cj4gLQo+IC0gIGJyayA9IChjaGFyKikoTU9SRUNPUkUgKHNicmtf c2l6ZSkpOwo+IC0KPiAtICAvKiBGYWlsIGlmIHNicmsgZmFpbGVkIG9yIGlmIGEgZm9yZWlnbiBz YnJrIGNhbGwga2lsbGVkIG91ciBzcGFjZSAqLwo+IC0gIGlmIChicmsgPT0gKGNoYXIqKShNT1JF Q09SRV9GQUlMVVJFKSB8fAo+IC0gICAgICAoYnJrIDwgb2xkX2VuZCAmJiBvbGRfdG9wICE9IGlu aXRpYWxfdG9wKSkKPiAtICAgIHJldHVybjsKPiAtCj4gLSAgc2Jya2VkX21lbSArPSBzYnJrX3Np emU7Cj4gLQo+IC0gIGlmIChicmsgPT0gb2xkX2VuZCkgLyogY2FuIGp1c3QgYWRkIGJ5dGVzIHRv IGN1cnJlbnQgdG9wICovCj4gLSAgewo+IC0gICAgdG9wX3NpemUgPSBzYnJrX3NpemUgKyBvbGRf dG9wX3NpemU7Cj4gLSAgICBzZXRfaGVhZCh0b3AsIHRvcF9zaXplIHwgUFJFVl9JTlVTRSk7Cj4g LSAgfQo+IC0gIGVsc2UKPiAtICB7Cj4gLSAgICBpZiAoc2Jya19iYXNlID09IChjaGFyKikoLTEp KSAgLyogRmlyc3QgdGltZSB0aHJvdWdoLiBSZWNvcmQgYmFzZSAqLwo+IC0gICAgICBzYnJrX2Jh c2UgPSBicms7Cj4gLSAgICBlbHNlICAvKiBTb21lb25lIGVsc2UgY2FsbGVkIHNicmsoKS4gIENv dW50IHRob3NlIGJ5dGVzIGFzIHNicmtlZF9tZW0uICovCj4gLSAgICAgIHNicmtlZF9tZW0gKz0g YnJrIC0gKGNoYXIqKW9sZF9lbmQ7Cj4gLQo+IC0gICAgLyogR3VhcmFudGVlIGFsaWdubWVudCBv ZiBmaXJzdCBuZXcgY2h1bmsgbWFkZSBmcm9tIHRoaXMgc3BhY2UgKi8KPiAtICAgIGZyb250X21p c2FsaWduID0gKHVuc2lnbmVkIGxvbmcpY2h1bmsybWVtKGJyaykgJiBNQUxMT0NfQUxJR05fTUFT SzsKPiAtICAgIGlmIChmcm9udF9taXNhbGlnbiA+IDApCj4gLSAgICB7Cj4gLSAgICAgIGNvcnJl Y3Rpb24gPSAoTUFMTE9DX0FMSUdOTUVOVCkgLSBmcm9udF9taXNhbGlnbjsKPiAtICAgICAgYnJr ICs9IGNvcnJlY3Rpb247Cj4gLSAgICB9Cj4gLSAgICBlbHNlCj4gLSAgICAgIGNvcnJlY3Rpb24g PSAwOwo+IC0KPiAtICAgIC8qIEd1YXJhbnRlZSB0aGUgbmV4dCBicmsgd2lsbCBiZSBhdCBhIHBh Z2UgYm91bmRhcnkgKi8KPiAtCj4gLSAgICBjb3JyZWN0aW9uICs9ICgoKCh1bnNpZ25lZCBsb25n KShicmsgKyBzYnJrX3NpemUpKSsocGFnZXN6LTEpKSAmCj4gLQkJICAgfihwYWdlc3ogLSAxKSkg LSAoKHVuc2lnbmVkIGxvbmcpKGJyayArIHNicmtfc2l6ZSkpOwo+IC0KPiAtICAgIC8qIEFsbG9j YXRlIGNvcnJlY3Rpb24gKi8KPiAtICAgIG5ld19icmsgPSAoY2hhciopKE1PUkVDT1JFIChjb3Jy ZWN0aW9uKSk7Cj4gLSAgICBpZiAobmV3X2JyayA9PSAoY2hhciopKE1PUkVDT1JFX0ZBSUxVUkUp KSByZXR1cm47Cj4gLQo+IC0gICAgc2Jya2VkX21lbSArPSBjb3JyZWN0aW9uOwo+IC0KPiAtICAg IHRvcCA9IChtY2h1bmtwdHIpYnJrOwo+IC0gICAgdG9wX3NpemUgPSBuZXdfYnJrIC0gYnJrICsg Y29ycmVjdGlvbjsKPiAtICAgIHNldF9oZWFkKHRvcCwgdG9wX3NpemUgfCBQUkVWX0lOVVNFKTsK PiAtCj4gLSAgICBpZiAob2xkX3RvcCAhPSBpbml0aWFsX3RvcCkKPiAtICAgIHsKPiAtCj4gLSAg ICAgIC8qIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGFuIGludGVydmVuaW5nIGZvcmVpZ24gc2JyayBj YWxsLiAqLwo+IC0gICAgICAvKiBBIGRvdWJsZSBmZW5jZXBvc3QgaXMgbmVjZXNzYXJ5IHRvIHBy ZXZlbnQgY29uc29saWRhdGlvbiAqLwo+IC0KPiAtICAgICAgLyogSWYgbm90IGVub3VnaCBzcGFj ZSB0byBkbyB0aGlzLCB0aGVuIHVzZXIgZGlkIHNvbWV0aGluZyB2ZXJ5IHdyb25nICovCj4gLSAg ICAgIGlmIChvbGRfdG9wX3NpemUgPCBNSU5TSVpFKQo+IC0gICAgICB7Cj4gLQlzZXRfaGVhZCh0 b3AsIFBSRVZfSU5VU0UpOyAvKiB3aWxsIGZvcmNlIG51bGwgcmV0dXJuIGZyb20gbWFsbG9jICov Cj4gLQlyZXR1cm47Cj4gLSAgICAgIH0KPiAtCj4gLSAgICAgIC8qIEFsc28ga2VlcCBzaXplIGEg bXVsdGlwbGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAqLwo+IC0gICAgICBvbGRfdG9wX3NpemUgPSAo b2xkX3RvcF9zaXplIC0gMypTSVpFX1NaKSAmIH5NQUxMT0NfQUxJR05fTUFTSzsKPiAtICAgICAg c2V0X2hlYWRfc2l6ZShvbGRfdG9wLCBvbGRfdG9wX3NpemUpOwo+IC0gICAgICBjaHVua19hdF9v ZmZzZXQob2xkX3RvcCwgb2xkX3RvcF9zaXplICAgICAgICAgICktPnNpemUgPQo+IC0JU0laRV9T WnxQUkVWX0lOVVNFOwo+IC0gICAgICBjaHVua19hdF9vZmZzZXQob2xkX3RvcCwgb2xkX3RvcF9z aXplICsgU0laRV9TWiktPnNpemUgPQo+IC0JU0laRV9TWnxQUkVWX0lOVVNFOwo+IC0gICAgICAv KiBJZiBwb3NzaWJsZSwgcmVsZWFzZSB0aGUgcmVzdC4gKi8KPiAtICAgICAgaWYgKG9sZF90b3Bf c2l6ZSA+PSBNSU5TSVpFKQo+IC0JZlJFZShjaHVuazJtZW0ob2xkX3RvcCkpOwo+IC0gICAgfQo+ IC0gIH0KPiAtCj4gLSAgaWYgKCh1bnNpZ25lZCBsb25nKXNicmtlZF9tZW0gPiAodW5zaWduZWQg bG9uZyltYXhfc2Jya2VkX21lbSkKPiAtICAgIG1heF9zYnJrZWRfbWVtID0gc2Jya2VkX21lbTsK PiAtICBpZiAoKHVuc2lnbmVkIGxvbmcpKG1tYXBwZWRfbWVtICsgc2Jya2VkX21lbSkgPiAodW5z aWduZWQgbG9uZyltYXhfdG90YWxfbWVtKQo+IC0gICAgbWF4X3RvdGFsX21lbSA9IG1tYXBwZWRf bWVtICsgc2Jya2VkX21lbTsKPiAtCj4gLSAgLyogV2UgYWx3YXlzIGxhbmQgb24gYSBwYWdlIGJv dW5kYXJ5ICovCj4gLSAgYXNzZXJ0KCgodW5zaWduZWQgbG9uZykoKGNoYXIqKXRvcCArIHRvcF9z aXplKSAmIChwYWdlc3ogLSAxKSkgPT0gMCk7Cj4gLX0KPiAtCj4gLQo+IC0MCj4gLQo+IC0vKiBN YWluIHB1YmxpYyByb3V0aW5lcyAqLwo+IC0KPiAtCj4gLS8qCj4gLSAgTWFsbG9jIEFsZ29ydGhp bToKPiAtCj4gLSAgICBUaGUgcmVxdWVzdGVkIHNpemUgaXMgZmlyc3QgY29udmVydGVkIGludG8g YSB1c2FibGUgZm9ybSwgYG5iJy4KPiAtICAgIFRoaXMgY3VycmVudGx5IG1lYW5zIHRvIGFkZCA0 IGJ5dGVzIG92ZXJoZWFkIHBsdXMgcG9zc2libHkgbW9yZSB0bwo+IC0gICAgb2J0YWluIDgtYnl0 ZSBhbGlnbm1lbnQgYW5kL29yIHRvIG9idGFpbiBhIHNpemUgb2YgYXQgbGVhc3QKPiAtICAgIE1J TlNJWkUgKGN1cnJlbnRseSAxNiBieXRlcyksIHRoZSBzbWFsbGVzdCBhbGxvY2F0YWJsZSBzaXpl Lgo+IC0gICAgKEFsbCBmaXRzIGFyZSBjb25zaWRlcmVkIGBleGFjdCcgaWYgdGhleSBhcmUgd2l0 aGluIE1JTlNJWkUgYnl0ZXMuKQo+IC0KPiAtICAgIEZyb20gdGhlcmUsIHRoZSBmaXJzdCBzdWNj ZXNzZnVsIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHMgaXMgdGFrZW46Cj4gLQo+IC0gICAgICAxLiBU aGUgYmluIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3Qgc2l6ZSBpcyBzY2FubmVkLCBhbmQg aWYKPiAtCSBhIGNodW5rIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IHNpemUgaXMgZm91bmQsIGl0IGlz IHRha2VuLgo+IC0KPiAtICAgICAgMi4gVGhlIG1vc3QgcmVjZW50bHkgcmVtYWluZGVyZWQgY2h1 bmsgaXMgdXNlZCBpZiBpdCBpcyBiaWcKPiAtCSBlbm91Z2guICBUaGlzIGlzIGEgZm9ybSBvZiAo cm92aW5nKSBmaXJzdCBmaXQsIHVzZWQgb25seSBpbgo+IC0JIHRoZSBhYnNlbmNlIG9mIGV4YWN0 IGZpdHMuIFJ1bnMgb2YgY29uc2VjdXRpdmUgcmVxdWVzdHMgdXNlCj4gLQkgdGhlIHJlbWFpbmRl ciBvZiB0aGUgY2h1bmsgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHN1Y2ggcmVxdWVzdAo+IC0JIHdo ZW5ldmVyIHBvc3NpYmxlLiBUaGlzIGxpbWl0ZWQgdXNlIG9mIGEgZmlyc3QtZml0IHN0eWxlCj4g LQkgYWxsb2NhdGlvbiBzdHJhdGVneSB0ZW5kcyB0byBnaXZlIGNvbnRpZ3VvdXMgY2h1bmtzCj4g LQkgY29leHRlbnNpdmUgbGlmZXRpbWVzLCB3aGljaCBpbXByb3ZlcyBsb2NhbGl0eSBhbmQgY2Fu IHJlZHVjZQo+IC0JIGZyYWdtZW50YXRpb24gaW4gdGhlIGxvbmcgcnVuLgo+IC0KPiAtICAgICAg My4gT3RoZXIgYmlucyBhcmUgc2Nhbm5lZCBpbiBpbmNyZWFzaW5nIHNpemUgb3JkZXIsIHVzaW5n IGEKPiAtCSBjaHVuayBiaWcgZW5vdWdoIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QsIGFuZCBzcGxp dHRpbmcgb2ZmCj4gLQkgYW55IHJlbWFpbmRlci4gIFRoaXMgc2VhcmNoIGlzIHN0cmljdGx5IGJ5 IGJlc3QtZml0OyBpLmUuLAo+IC0JIHRoZSBzbWFsbGVzdCAod2l0aCB0aWVzIGdvaW5nIHRvIGFw cHJveGltYXRlbHkgdGhlIGxlYXN0Cj4gLQkgcmVjZW50bHkgdXNlZCkgY2h1bmsgdGhhdCBmaXRz IGlzIHNlbGVjdGVkLgo+IC0KPiAtICAgICAgNC4gSWYgbGFyZ2UgZW5vdWdoLCB0aGUgY2h1bmsg Ym9yZGVyaW5nIHRoZSBlbmQgb2YgbWVtb3J5Cj4gLQkgKGB0b3AnKSBpcyBzcGxpdCBvZmYuIChU aGlzIHVzZSBvZiBgdG9wJyBpcyBpbiBhY2NvcmQgd2l0aAo+IC0JIHRoZSBiZXN0LWZpdCBzZWFy Y2ggcnVsZS4gIEluIGVmZmVjdCwgYHRvcCcgaXMgdHJlYXRlZCBhcwo+IC0JIGxhcmdlciAoYW5k IHRodXMgbGVzcyB3ZWxsIGZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZQo+IC0JIGNo dW5rIHNpbmNlIGl0IGNhbiBiZSBleHRlbmRlZCB0byBiZSBhcyBsYXJnZSBhcyBuZWNlc3NhcnkK PiAtCSAodXAgdG8gc3lzdGVtIGxpbWl0YXRpb25zKS4KPiAtCj4gLSAgICAgIDUuIElmIHRoZSBy ZXF1ZXN0IHNpemUgbWVldHMgdGhlIG1tYXAgdGhyZXNob2xkIGFuZCB0aGUKPiAtCSBzeXN0ZW0g c3VwcG9ydHMgbW1hcCwgYW5kIHRoZXJlIGFyZSBmZXcgZW5vdWdoIGN1cnJlbnRseQo+IC0JIGFs bG9jYXRlZCBtbWFwcGVkIHJlZ2lvbnMsIGFuZCBhIGNhbGwgdG8gbW1hcCBzdWNjZWVkcywKPiAt CSB0aGUgcmVxdWVzdCBpcyBhbGxvY2F0ZWQgdmlhIGRpcmVjdCBtZW1vcnkgbWFwcGluZy4KPiAt Cj4gLSAgICAgIDYuIE90aGVyd2lzZSwgdGhlIHRvcCBvZiBtZW1vcnkgaXMgZXh0ZW5kZWQgYnkK PiAtCSBvYnRhaW5pbmcgbW9yZSBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0gKG5vcm1hbGx5IHVzaW5n IHNicmssCj4gLQkgYnV0IGRlZmluYWJsZSB0byBhbnl0aGluZyBlbHNlIHZpYSB0aGUgTU9SRUNP UkUgbWFjcm8pLgo+IC0JIE1lbW9yeSBpcyBnYXRoZXJlZCBmcm9tIHRoZSBzeXN0ZW0gKGluIHN5 c3RlbSBwYWdlLXNpemVkCj4gLQkgdW5pdHMpIGluIGEgd2F5IHRoYXQgYWxsb3dzIGNodW5rcyBv YnRhaW5lZCBhY3Jvc3MgZGlmZmVyZW50Cj4gLQkgc2JyayBjYWxscyB0byBiZSBjb25zb2xpZGF0 ZWQsIGJ1dCBkb2VzIG5vdCByZXF1aXJlCj4gLQkgY29udGlndW91cyBtZW1vcnkuIFRodXMsIGl0 IHNob3VsZCBiZSBzYWZlIHRvIGludGVyc3BlcnNlCj4gLQkgbWFsbG9jcyB3aXRoIG90aGVyIHNi cmsgY2FsbHMuCj4gLQo+IC0KPiAtICAgICAgQWxsIGFsbG9jYXRpb25zIGFyZSBtYWRlIGZyb20g dGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueSBmb3VuZAo+IC0gICAgICBjaHVuay4gKFRoZSBp bXBsZW1lbnRhdGlvbiBpbnZhcmlhbnQgaXMgdGhhdCBwcmV2X2ludXNlIGlzCj4gLSAgICAgIGFs d2F5cyB0cnVlIG9mIGFueSBhbGxvY2F0ZWQgY2h1bms7IGkuZS4sIHRoYXQgZWFjaCBhbGxvY2F0 ZWQKPiAtICAgICAgY2h1bmsgYm9yZGVycyBlaXRoZXIgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBh bmQgc3RpbGwgaW4tdXNlIGNodW5rLAo+IC0gICAgICBvciB0aGUgYmFzZSBvZiBpdHMgbWVtb3J5 IGFyZW5hLikKPiAtCj4gLSovCj4gLQo+IC0jaWYgX19TVERfQwo+IC1Wb2lkX3QqIG1BTExPYyhz aXplX3QgYnl0ZXMpCj4gLSNlbHNlCj4gLVZvaWRfdCogbUFMTE9jKGJ5dGVzKSBzaXplX3QgYnl0 ZXM7Cj4gLSNlbmRpZgo+IC17Cj4gLSAgbWNodW5rcHRyIHZpY3RpbTsgICAgICAgICAgICAgICAg ICAvKiBpbnNwZWN0ZWQvc2VsZWN0ZWQgY2h1bmsgKi8KPiAtICBJTlRFUk5BTF9TSVpFX1Qgdmlj dGltX3NpemU7ICAgICAgIC8qIGl0cyBzaXplICovCj4gLSAgaW50ICAgICAgIGlkeDsgICAgICAg ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgYmluIHRyYXZlcnNhbCAqLwo+IC0gIG1iaW5wdHIg ICBiaW47ICAgICAgICAgICAgICAgICAgICAgLyogYXNzb2NpYXRlZCBiaW4gKi8KPiAtICBtY2h1 bmtwdHIgcmVtYWluZGVyOyAgICAgICAgICAgICAgIC8qIHJlbWFpbmRlciBmcm9tIGEgc3BsaXQg Ki8KPiAtICBsb25nICAgICAgcmVtYWluZGVyX3NpemU7ICAgICAgICAgIC8qIGl0cyBzaXplICov Cj4gLSAgaW50ICAgICAgIHJlbWFpbmRlcl9pbmRleDsgICAgICAgICAvKiBpdHMgYmluIGluZGV4 ICovCj4gLSAgdW5zaWduZWQgbG9uZyBibG9jazsgICAgICAgICAgICAgICAvKiBibG9jayB0cmF2 ZXJzZXIgYml0ICovCj4gLSAgaW50ICAgICAgIHN0YXJ0aWR4OyAgICAgICAgICAgICAgICAvKiBm aXJzdCBiaW4gb2YgYSB0cmF2ZXJzZWQgYmxvY2sgKi8KPiAtICBtY2h1bmtwdHIgZndkOyAgICAg ICAgICAgICAgICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwo+IC0gIG1jaHVua3B0 ciBiY2s7ICAgICAgICAgICAgICAgICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCj4g LSAgbWJpbnB0ciBxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAgKi8KPiAt Cj4gLSAgSU5URVJOQUxfU0laRV9UIG5iOwo+IC0KPiAtICBpZiAoKGxvbmcpYnl0ZXMgPCAwKSBy ZXR1cm4gMDsKPiAtCj4gLSAgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOyAgLyogcGFkZGVkIHJl cXVlc3Qgc2l6ZTsgKi8KPiAtCj4gLSAgLyogQ2hlY2sgZm9yIGV4YWN0IG1hdGNoIGluIGEgYmlu ICovCj4gLQo+IC0gIGlmIChpc19zbWFsbF9yZXF1ZXN0KG5iKSkgIC8qIEZhc3RlciB2ZXJzaW9u IGZvciBzbWFsbCByZXF1ZXN0cyAqLwo+IC0gIHsKPiAtICAgIGlkeCA9IHNtYWxsYmluX2luZGV4 KG5iKTsKPiAtCj4gLSAgICAvKiBObyB0cmF2ZXJzYWwgb3Igc2l6ZSBjaGVjayBuZWNlc3Nhcnkg Zm9yIHNtYWxsIGJpbnMuICAqLwo+IC0KPiAtICAgIHEgPSBiaW5fYXQoaWR4KTsKPiAtICAgIHZp Y3RpbSA9IGxhc3QocSk7Cj4gLQo+IC0gICAgLyogQWxzbyBzY2FuIHRoZSBuZXh0IG9uZSwgc2lu Y2UgaXQgd291bGQgaGF2ZSBhIHJlbWFpbmRlciA8IE1JTlNJWkUgKi8KPiAtICAgIGlmICh2aWN0 aW0gPT0gcSkKPiAtICAgIHsKPiAtICAgICAgcSA9IG5leHRfYmluKHEpOwo+IC0gICAgICB2aWN0 aW0gPSBsYXN0KHEpOwo+IC0gICAgfQo+IC0gICAgaWYgKHZpY3RpbSAhPSBxKQo+IC0gICAgewo+ IC0gICAgICB2aWN0aW1fc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwo+IC0gICAgICB1bmxpbmso dmljdGltLCBiY2ssIGZ3ZCk7Cj4gLSAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3Rp bSwgdmljdGltX3NpemUpOwo+IC0gICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5i KTsKPiAtICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwo+IC0gICAgfQo+IC0KPiAtICAg IGlkeCArPSAyOyAvKiBTZXQgZm9yIGJpbiBzY2FuIGJlbG93LiBXZSd2ZSBhbHJlYWR5IHNjYW5u ZWQgMiBiaW5zLiAqLwo+IC0KPiAtICB9Cj4gLSAgZWxzZQo+IC0gIHsKPiAtICAgIGlkeCA9IGJp bl9pbmRleChuYik7Cj4gLSAgICBiaW4gPSBiaW5fYXQoaWR4KTsKPiAtCj4gLSAgICBmb3IgKHZp Y3RpbSA9IGxhc3QoYmluKTsgdmljdGltICE9IGJpbjsgdmljdGltID0gdmljdGltLT5iaykKPiAt ICAgIHsKPiAtICAgICAgdmljdGltX3NpemUgPSBjaHVua3NpemUodmljdGltKTsKPiAtICAgICAg cmVtYWluZGVyX3NpemUgPSB2aWN0aW1fc2l6ZSAtIG5iOwo+IC0KPiAtICAgICAgaWYgKHJlbWFp bmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIHRvbyBiaWcgKi8KPiAtICAgICAgewo+IC0J LS1pZHg7IC8qIGFkanVzdCB0byByZXNjYW4gYmVsb3cgYWZ0ZXIgY2hlY2tpbmcgbGFzdCByZW1h aW5kZXIgKi8KPiAtCWJyZWFrOwo+IC0gICAgICB9Cj4gLQo+IC0gICAgICBlbHNlIGlmIChyZW1h aW5kZXJfc2l6ZSA+PSAwKSAvKiBleGFjdCBmaXQgKi8KPiAtICAgICAgewo+IC0JdW5saW5rKHZp Y3RpbSwgYmNrLCBmd2QpOwo+IC0Jc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCB2aWN0 aW1fc2l6ZSk7Cj4gLQljaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKPiAtCXJldHVy biBjaHVuazJtZW0odmljdGltKTsKPiAtICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgICsraWR4 Owo+IC0KPiAtICB9Cj4gLQo+IC0gIC8qIFRyeSB0byB1c2UgdGhlIGxhc3Qgc3BsaXQtb2ZmIHJl bWFpbmRlciAqLwo+IC0KPiAtICBpZiAoICh2aWN0aW0gPSBsYXN0X3JlbWFpbmRlci0+ZmQpICE9 IGxhc3RfcmVtYWluZGVyKQo+IC0gIHsKPiAtICAgIHZpY3RpbV9zaXplID0gY2h1bmtzaXplKHZp Y3RpbSk7Cj4gLSAgICByZW1haW5kZXJfc2l6ZSA9IHZpY3RpbV9zaXplIC0gbmI7Cj4gLQo+IC0g ICAgaWYgKHJlbWFpbmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIHJlLXNwbGl0ICovCj4g LSAgICB7Cj4gLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5iKTsK PiAtICAgICAgc2V0X2hlYWQodmljdGltLCBuYiB8IFBSRVZfSU5VU0UpOwo+IC0gICAgICBsaW5r X2xhc3RfcmVtYWluZGVyKHJlbWFpbmRlcik7Cj4gLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwg cmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKPiAtICAgICAgc2V0X2Zvb3QocmVtYWluZGVy LCByZW1haW5kZXJfc2l6ZSk7Cj4gLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwg bmIpOwo+IC0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Cj4gLSAgICB9Cj4gLQo+IC0g ICAgY2xlYXJfbGFzdF9yZW1haW5kZXI7Cj4gLQo+IC0gICAgaWYgKHJlbWFpbmRlcl9zaXplID49 IDApICAvKiBleGhhdXN0ICovCj4gLSAgICB7Cj4gLSAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zm c2V0KHZpY3RpbSwgdmljdGltX3NpemUpOwo+IC0gICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2 aWN0aW0sIG5iKTsKPiAtICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwo+IC0gICAgfQo+ IC0KPiAtICAgIC8qIEVsc2UgcGxhY2UgaW4gYmluICovCj4gLQo+IC0gICAgZnJvbnRsaW5rKHZp Y3RpbSwgdmljdGltX3NpemUsIHJlbWFpbmRlcl9pbmRleCwgYmNrLCBmd2QpOwo+IC0gIH0KPiAt Cj4gLSAgLyoKPiAtICAgICBJZiB0aGVyZSBhcmUgYW55IHBvc3NpYmx5IG5vbmVtcHR5IGJpZy1l bm91Z2ggYmxvY2tzLAo+IC0gICAgIHNlYXJjaCBmb3IgYmVzdCBmaXR0aW5nIGNodW5rIGJ5IHNj YW5uaW5nIGJpbnMgaW4gYmxvY2t3aWR0aCB1bml0cy4KPiAtICAqLwo+IC0KPiAtICBpZiAoIChi bG9jayA9IGlkeDJiaW5ibG9jayhpZHgpKSA8PSBiaW5ibG9ja3MpCj4gLSAgewo+IC0KPiAtICAg IC8qIEdldCB0byB0aGUgZmlyc3QgbWFya2VkIGJsb2NrICovCj4gLQo+IC0gICAgaWYgKCAoYmxv Y2sgJiBiaW5ibG9ja3MpID09IDApCj4gLSAgICB7Cj4gLSAgICAgIC8qIGZvcmNlIHRvIGFuIGV2 ZW4gYmxvY2sgYm91bmRhcnkgKi8KPiAtICAgICAgaWR4ID0gKGlkeCAmIH4oQklOQkxPQ0tXSURU SCAtIDEpKSArIEJJTkJMT0NLV0lEVEg7Cj4gLSAgICAgIGJsb2NrIDw8PSAxOwo+IC0gICAgICB3 aGlsZSAoKGJsb2NrICYgYmluYmxvY2tzKSA9PSAwKQo+IC0gICAgICB7Cj4gLQlpZHggKz0gQklO QkxPQ0tXSURUSDsKPiAtCWJsb2NrIDw8PSAxOwo+IC0gICAgICB9Cj4gLSAgICB9Cj4gLQo+IC0g ICAgLyogRm9yIGVhY2ggcG9zc2libHkgbm9uZW1wdHkgYmxvY2sgLi4uICovCj4gLSAgICBmb3Ig KDs7KQo+IC0gICAgewo+IC0gICAgICBzdGFydGlkeCA9IGlkeDsgICAgICAgICAgLyogKHRyYWNr IGluY29tcGxldGUgYmxvY2tzKSAqLwo+IC0gICAgICBxID0gYmluID0gYmluX2F0KGlkeCk7Cj4g LQo+IC0gICAgICAvKiBGb3IgZWFjaCBiaW4gaW4gdGhpcyBibG9jayAuLi4gKi8KPiAtICAgICAg ZG8KPiAtICAgICAgewo+IC0JLyogRmluZCBhbmQgdXNlIGZpcnN0IGJpZyBlbm91Z2ggY2h1bmsg Li4uICovCj4gLQo+IC0JZm9yICh2aWN0aW0gPSBsYXN0KGJpbik7IHZpY3RpbSAhPSBiaW47IHZp Y3RpbSA9IHZpY3RpbS0+YmspCj4gLQl7Cj4gLQkgIHZpY3RpbV9zaXplID0gY2h1bmtzaXplKHZp Y3RpbSk7Cj4gLQkgIHJlbWFpbmRlcl9zaXplID0gdmljdGltX3NpemUgLSBuYjsKPiAtCj4gLQkg IGlmIChyZW1haW5kZXJfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiBzcGxpdCAqLwo+IC0JICB7 Cj4gLQkgICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwo+IC0JICAg IHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKPiAtCSAgICB1bmxpbmsodmljdGlt LCBiY2ssIGZ3ZCk7Cj4gLQkgICAgbGlua19sYXN0X3JlbWFpbmRlcihyZW1haW5kZXIpOwo+IC0J ICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKPiAt CSAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKPiAtCSAgICBjaGVja19t YWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKPiAtCSAgICByZXR1cm4gY2h1bmsybWVtKHZpY3Rp bSk7Cj4gLQkgIH0KPiAtCj4gLQkgIGVsc2UgaWYgKHJlbWFpbmRlcl9zaXplID49IDApICAvKiB0 YWtlICovCj4gLQkgIHsKPiAtCSAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldCh2aWN0aW0sIHZp Y3RpbV9zaXplKTsKPiAtCSAgICB1bmxpbmsodmljdGltLCBiY2ssIGZ3ZCk7Cj4gLQkgICAgY2hl Y2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Cj4gLQkgICAgcmV0dXJuIGNodW5rMm1lbSh2 aWN0aW0pOwo+IC0JICB9Cj4gLQo+IC0JfQo+IC0KPiAtICAgICAgIGJpbiA9IG5leHRfYmluKGJp bik7Cj4gLQo+IC0gICAgICB9IHdoaWxlICgoKytpZHggJiAoQklOQkxPQ0tXSURUSCAtIDEpKSAh PSAwKTsKPiAtCj4gLSAgICAgIC8qIENsZWFyIG91dCB0aGUgYmxvY2sgYml0LiAqLwo+IC0KPiAt ICAgICAgZG8gICAvKiBQb3NzaWJseSBiYWNrdHJhY2sgdG8gdHJ5IHRvIGNsZWFyIGEgcGFydGlh bCBibG9jayAqLwo+IC0gICAgICB7Cj4gLQlpZiAoKHN0YXJ0aWR4ICYgKEJJTkJMT0NLV0lEVEgg LSAxKSkgPT0gMCkKPiAtCXsKPiAtCSAgYmluYmxvY2tzICY9IH5ibG9jazsKPiAtCSAgYnJlYWs7 Cj4gLQl9Cj4gLQktLXN0YXJ0aWR4Owo+IC0gICAgICAgcSA9IHByZXZfYmluKHEpOwo+IC0gICAg ICB9IHdoaWxlIChmaXJzdChxKSA9PSBxKTsKPiAtCj4gLSAgICAgIC8qIEdldCB0byB0aGUgbmV4 dCBwb3NzaWJseSBub25lbXB0eSBibG9jayAqLwo+IC0KPiAtICAgICAgaWYgKCAoYmxvY2sgPDw9 IDEpIDw9IGJpbmJsb2NrcyAmJiAoYmxvY2sgIT0gMCkgKQo+IC0gICAgICB7Cj4gLQl3aGlsZSAo KGJsb2NrICYgYmluYmxvY2tzKSA9PSAwKQo+IC0Jewo+IC0JICBpZHggKz0gQklOQkxPQ0tXSURU SDsKPiAtCSAgYmxvY2sgPDw9IDE7Cj4gLQl9Cj4gLSAgICAgIH0KPiAtICAgICAgZWxzZQo+IC0J YnJlYWs7Cj4gLSAgICB9Cj4gLSAgfQo+IC0KPiAtCj4gLSAgLyogVHJ5IHRvIHVzZSB0b3AgY2h1 bmsgKi8KPiAtCj4gLSAgLyogUmVxdWlyZSB0aGF0IHRoZXJlIGJlIGEgcmVtYWluZGVyLCBlbnN1 cmluZyB0b3AgYWx3YXlzIGV4aXN0cyAgKi8KPiAtICBpZiAoIChyZW1haW5kZXJfc2l6ZSA9IGNo dW5rc2l6ZSh0b3ApIC0gbmIpIDwgKGxvbmcpTUlOU0laRSkKPiAtICB7Cj4gLQo+IC0jaWYgSEFW RV9NTUFQCj4gLSAgICAvKiBJZiBiaWcgYW5kIHdvdWxkIG90aGVyd2lzZSBuZWVkIHRvIGV4dGVu ZCwgdHJ5IHRvIHVzZSBtbWFwIGluc3RlYWQgKi8KPiAtICAgIGlmICgodW5zaWduZWQgbG9uZylu YiA+PSAodW5zaWduZWQgbG9uZyltbWFwX3RocmVzaG9sZCAmJgo+IC0JKHZpY3RpbSA9IG1tYXBf Y2h1bmsobmIpKSAhPSAwKQo+IC0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Cj4gLSNl bmRpZgo+IC0KPiAtICAgIC8qIFRyeSB0byBleHRlbmQgKi8KPiAtICAgIG1hbGxvY19leHRlbmRf dG9wKG5iKTsKPiAtICAgIGlmICggKHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHRvcCkgLSBu YikgPCAobG9uZylNSU5TSVpFKQo+IC0gICAgICByZXR1cm4gMDsgLyogcHJvcGFnYXRlIGZhaWx1 cmUgKi8KPiAtICB9Cj4gLQo+IC0gIHZpY3RpbSA9IHRvcDsKPiAtICBzZXRfaGVhZCh2aWN0aW0s IG5iIHwgUFJFVl9JTlVTRSk7Cj4gLSAgdG9wID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIp Owo+IC0gIHNldF9oZWFkKHRvcCwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKPiAtICBj aGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKPiAtICByZXR1cm4gY2h1bmsybWVtKHZp Y3RpbSk7Cj4gLQo+IC19Cj4gLQo+IC0KPiAtDAo+IC0KPiAtLyoKPiAtCj4gLSAgZnJlZSgpIGFs Z29yaXRobSA6Cj4gLQo+IC0gICAgY2FzZXM6Cj4gLQo+IC0gICAgICAgMS4gZnJlZSgwKSBoYXMg bm8gZWZmZWN0Lgo+IC0KPiAtICAgICAgIDIuIElmIHRoZSBjaHVuayB3YXMgYWxsb2NhdGVkIHZp YSBtbWFwLCBpdCBpcyByZWxlYXNlIHZpYSBtdW5tYXAoKS4KPiAtCj4gLSAgICAgICAzLiBJZiBh IHJldHVybmVkIGNodW5rIGJvcmRlcnMgdGhlIGN1cnJlbnQgaGlnaCBlbmQgb2YgbWVtb3J5LAo+ IC0JICBpdCBpcyBjb25zb2xpZGF0ZWQgaW50byB0aGUgdG9wLCBhbmQgaWYgdGhlIHRvdGFsIHVu dXNlZAo+IC0JICB0b3Btb3N0IG1lbW9yeSBleGNlZWRzIHRoZSB0cmltIHRocmVzaG9sZCwgbWFs bG9jX3RyaW0gaXMKPiAtCSAgY2FsbGVkLgo+IC0KPiAtICAgICAgIDQuIE90aGVyIGNodW5rcyBh cmUgY29uc29saWRhdGVkIGFzIHRoZXkgYXJyaXZlLCBhbmQKPiAtCSAgcGxhY2VkIGluIGNvcnJl c3BvbmRpbmcgYmlucy4gKFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YKPiAtCSAgY29uc29saWRh dGluZyB3aXRoIHRoZSBjdXJyZW50IGBsYXN0X3JlbWFpbmRlcicpLgo+IC0KPiAtKi8KPiAtCj4g LQo+IC0jaWYgX19TVERfQwo+IC12b2lkIGZSRWUoVm9pZF90KiBtZW0pCj4gLSNlbHNlCj4gLXZv aWQgZlJFZShtZW0pIFZvaWRfdCogbWVtOwo+IC0jZW5kaWYKPiAtewo+IC0gIG1jaHVua3B0ciBw OyAgICAgICAgIC8qIGNodW5rIGNvcnJlc3BvbmRpbmcgdG8gbWVtICovCj4gLSAgSU5URVJOQUxf U0laRV9UIGhkOyAgLyogaXRzIGhlYWQgZmllbGQgKi8KPiAtICBJTlRFUk5BTF9TSVpFX1Qgc3o7 ICAvKiBpdHMgc2l6ZSAqLwo+IC0gIGludCAgICAgICBpZHg7ICAgICAgIC8qIGl0cyBiaW4gaW5k ZXggKi8KPiAtICBtY2h1bmtwdHIgbmV4dDsgICAgICAvKiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsg Ki8KPiAtICBJTlRFUk5BTF9TSVpFX1QgbmV4dHN6OyAvKiBpdHMgc2l6ZSAqLwo+IC0gIElOVEVS TkFMX1NJWkVfVCBwcmV2c3o7IC8qIHNpemUgb2YgcHJldmlvdXMgY29udGlndW91cyBjaHVuayAq Lwo+IC0gIG1jaHVua3B0ciBiY2s7ICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwo+ IC0gIG1jaHVua3B0ciBmd2Q7ICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwo+IC0g IGludCAgICAgICBpc2xyOyAgICAgIC8qIHRyYWNrIHdoZXRoZXIgbWVyZ2luZyB3aXRoIGxhc3Rf cmVtYWluZGVyICovCj4gLQo+IC0gIGlmIChtZW0gPT0gMCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBmcmVlKDApIGhhcyBubyBlZmZlY3QgKi8KPiAtICAgIHJldHVybjsKPiAtCj4g LSAgcCA9IG1lbTJjaHVuayhtZW0pOwo+IC0gIGhkID0gcC0+c2l6ZTsKPiAtCj4gLSNpZiBIQVZF X01NQVAKPiAtICBpZiAoaGQgJiBJU19NTUFQUEVEKSAgICAgICAgICAgICAgICAgICAgICAgLyog cmVsZWFzZSBtbWFwcGVkIG1lbW9yeS4gKi8KPiAtICB7Cj4gLSAgICBtdW5tYXBfY2h1bmsocCk7 Cj4gLSAgICByZXR1cm47Cj4gLSAgfQo+IC0jZW5kaWYKPiAtCj4gLSAgY2hlY2tfaW51c2VfY2h1 bmsocCk7Cj4gLQo+IC0gIHN6ID0gaGQgJiB+UFJFVl9JTlVTRTsKPiAtICBuZXh0ID0gY2h1bmtf YXRfb2Zmc2V0KHAsIHN6KTsKPiAtICBuZXh0c3ogPSBjaHVua3NpemUobmV4dCk7Cj4gLQo+IC0g IGlmIChuZXh0ID09IHRvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugd2l0 aCB0b3AgKi8KPiAtICB7Cj4gLSAgICBzeiArPSBuZXh0c3o7Cj4gLQo+IC0gICAgaWYgKCEoaGQg JiBQUkVWX0lOVVNFKSkgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJk ICovCj4gLSAgICB7Cj4gLSAgICAgIHByZXZzeiA9IHAtPnByZXZfc2l6ZTsKPiAtICAgICAgcCA9 IGNodW5rX2F0X29mZnNldChwLCAtKChsb25nKSBwcmV2c3opKTsKPiAtICAgICAgc3ogKz0gcHJl dnN6Owo+IC0gICAgICB1bmxpbmsocCwgYmNrLCBmd2QpOwo+IC0gICAgfQo+IC0KPiAtICAgIHNl dF9oZWFkKHAsIHN6IHwgUFJFVl9JTlVTRSk7Cj4gLSAgICB0b3AgPSBwOwo+IC0gICAgaWYgKCh1 bnNpZ25lZCBsb25nKShzeikgPj0gKHVuc2lnbmVkIGxvbmcpdHJpbV90aHJlc2hvbGQpCj4gLSAg ICAgIG1hbGxvY190cmltKHRvcF9wYWQpOwo+IC0gICAgcmV0dXJuOwo+IC0gIH0KPiAtCj4gLSAg c2V0X2hlYWQobmV4dCwgbmV4dHN6KTsgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIGludXNl IGJpdCAqLwo+IC0KPiAtICBpc2xyID0gMDsKPiAtCj4gLSAgaWYgKCEoaGQgJiBQUkVWX0lOVVNF KSkgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCj4gLSAgewo+ IC0gICAgcHJldnN6ID0gcC0+cHJldl9zaXplOwo+IC0gICAgcCA9IGNodW5rX2F0X29mZnNldChw LCAtKChsb25nKSBwcmV2c3opKTsKPiAtICAgIHN6ICs9IHByZXZzejsKPiAtCj4gLSAgICBpZiAo cC0+ZmQgPT0gbGFzdF9yZW1haW5kZXIpICAgICAgICAgICAgIC8qIGtlZXAgYXMgbGFzdF9yZW1h aW5kZXIgKi8KPiAtICAgICAgaXNsciA9IDE7Cj4gLSAgICBlbHNlCj4gLSAgICAgIHVubGluayhw LCBiY2ssIGZ3ZCk7Cj4gLSAgfQo+IC0KPiAtICBpZiAoIShpbnVzZV9iaXRfYXRfb2Zmc2V0KG5l eHQsIG5leHRzeikpKSAgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KPiAtICB7Cj4gLSAgICBz eiArPSBuZXh0c3o7Cj4gLQo+IC0gICAgaWYgKCFpc2xyICYmIG5leHQtPmZkID09IGxhc3RfcmVt YWluZGVyKSAgLyogcmUtaW5zZXJ0IGxhc3RfcmVtYWluZGVyICovCj4gLSAgICB7Cj4gLSAgICAg IGlzbHIgPSAxOwo+IC0gICAgICBsaW5rX2xhc3RfcmVtYWluZGVyKHApOwo+IC0gICAgfQo+IC0g ICAgZWxzZQo+IC0gICAgICB1bmxpbmsobmV4dCwgYmNrLCBmd2QpOwo+IC0gIH0KPiAtCj4gLQo+ IC0gIHNldF9oZWFkKHAsIHN6IHwgUFJFVl9JTlVTRSk7Cj4gLSAgc2V0X2Zvb3QocCwgc3opOwo+ IC0gIGlmICghaXNscikKPiAtICAgIGZyb250bGluayhwLCBzeiwgaWR4LCBiY2ssIGZ3ZCk7Cj4g LX0KPiAtCj4gLQo+IC0MCj4gLQo+IC0KPiAtLyoKPiAtCj4gLSAgUmVhbGxvYyBhbGdvcml0aG06 Cj4gLQo+IC0gICAgQ2h1bmtzIHRoYXQgd2VyZSBvYnRhaW5lZCB2aWEgbW1hcCBjYW5ub3QgYmUg ZXh0ZW5kZWQgb3Igc2hydW5rCj4gLSAgICB1bmxlc3MgSEFWRV9NUkVNQVAgaXMgZGVmaW5lZCwg aW4gd2hpY2ggY2FzZSBtcmVtYXAgaXMgdXNlZC4KPiAtICAgIE90aGVyd2lzZSwgaWYgdGhlaXIg cmVhbGxvY2F0aW9uIGlzIGZvciBhZGRpdGlvbmFsIHNwYWNlLCB0aGV5IGFyZQo+IC0gICAgY29w aWVkLiAgSWYgZm9yIGxlc3MsIHRoZXkgYXJlIGp1c3QgbGVmdCBhbG9uZS4KPiAtCj4gLSAgICBP dGhlcndpc2UsIGlmIHRoZSByZWFsbG9jYXRpb24gaXMgZm9yIGFkZGl0aW9uYWwgc3BhY2UsIGFu ZCB0aGUKPiAtICAgIGNodW5rIGNhbiBiZSBleHRlbmRlZCwgaXQgaXMsIGVsc2UgYSBtYWxsb2Mt Y29weS1mcmVlIHNlcXVlbmNlIGlzCj4gLSAgICB0YWtlbi4gIFRoZXJlIGFyZSBzZXZlcmFsIGRp ZmZlcmVudCB3YXlzIHRoYXQgYSBjaHVuayBjb3VsZCBiZQo+IC0gICAgZXh0ZW5kZWQuIEFsbCBh cmUgdHJpZWQ6Cj4gLQo+IC0gICAgICAgKiBFeHRlbmRpbmcgZm9yd2FyZCBpbnRvIGZvbGxvd2lu ZyBhZGphY2VudCBmcmVlIGNodW5rLgo+IC0gICAgICAgKiBTaGlmdGluZyBiYWNrd2FyZHMsIGpv aW5pbmcgcHJlY2VkaW5nIGFkamFjZW50IHNwYWNlCj4gLSAgICAgICAqIEJvdGggc2hpZnRpbmcg YmFja3dhcmRzIGFuZCBleHRlbmRpbmcgZm9yd2FyZC4KPiAtICAgICAgICogRXh0ZW5kaW5nIGlu dG8gbmV3bHkgc2Jya2VkIHNwYWNlCj4gLQo+IC0gICAgVW5sZXNzIHRoZSAjZGVmaW5lIFJFQUxM T0NfWkVST19CWVRFU19GUkVFUyBpcyBzZXQsIHJlYWxsb2Mgd2l0aCBhCj4gLSAgICBzaXplIGFy Z3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCj4gLQo+ IC0gICAgSWYgdGhlIHJlYWxsb2NhdGlvbiBpcyBmb3IgbGVzcyBzcGFjZSwgYW5kIHRoZSBuZXcg cmVxdWVzdCBpcyBmb3IKPiAtICAgIGEgYHNtYWxsJyAoPDUxMiBieXRlcykgc2l6ZSwgdGhlbiB0 aGUgbmV3bHkgdW51c2VkIHNwYWNlIGlzIGxvcHBlZAo+IC0gICAgb2ZmIGFuZCBmcmVlZC4KPiAt Cj4gLSAgICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBs YXN0LWZyZWUnZCBjaHVuawo+IC0gICAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFs bG9jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCj4gLSAgICBJIGRvbid0IGtub3cgb2YgYW55IHBy b2dyYW1zIHN0aWxsIHJlbHlpbmcgb24gdGhpcyBmZWF0dXJlLAo+IC0gICAgYW5kIGFsbG93aW5n IGl0IHdvdWxkIGFsc28gYWxsb3cgdG9vIG1hbnkgb3RoZXIgaW5jb3JyZWN0Cj4gLSAgICB1c2Fn ZXMgb2YgcmVhbGxvYyB0byBiZSBzZW5zaWJsZS4KPiAtCj4gLQo+IC0qLwo+IC0KPiAtCj4gLSNp ZiBfX1NURF9DCj4gLVZvaWRfdCogckVBTExPYyhWb2lkX3QqIG9sZG1lbSwgc2l6ZV90IGJ5dGVz KQo+IC0jZWxzZQo+IC1Wb2lkX3QqIHJFQUxMT2Mob2xkbWVtLCBieXRlcykgVm9pZF90KiBvbGRt ZW07IHNpemVfdCBieXRlczsKPiAtI2VuZGlmCj4gLXsKPiAtICBJTlRFUk5BTF9TSVpFX1QgICAg bmI7ICAgICAgLyogcGFkZGVkIHJlcXVlc3Qgc2l6ZSAqLwo+IC0KPiAtICBtY2h1bmtwdHIgb2xk cDsgICAgICAgICAgICAgLyogY2h1bmsgY29ycmVzcG9uZGluZyB0byBvbGRtZW0gKi8KPiAtICBJ TlRFUk5BTF9TSVpFX1QgICAgb2xkc2l6ZTsgLyogaXRzIHNpemUgKi8KPiAtCj4gLSAgbWNodW5r cHRyIG5ld3A7ICAgICAgICAgICAgIC8qIGNodW5rIHRvIHJldHVybiAqLwo+IC0gIElOVEVSTkFM X1NJWkVfVCAgICBuZXdzaXplOyAvKiBpdHMgc2l6ZSAqLwo+IC0gIFZvaWRfdCogICBuZXdtZW07 ICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIHVzZXIgbWVtICovCj4gLQo+IC0gIG1jaHVua3B0 ciBuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgYWZ0ZXIgb2xkcCAq Lwo+IC0gIElOVEVSTkFMX1NJWkVfVCAgbmV4dHNpemU7ICAvKiBpdHMgc2l6ZSAqLwo+IC0KPiAt ICBtY2h1bmtwdHIgcHJldjsgICAgICAgICAgICAgLyogcHJldmlvdXMgY29udGlndW91cyBjaHVu ayBiZWZvcmUgb2xkcCAqLwo+IC0gIElOVEVSTkFMX1NJWkVfVCAgcHJldnNpemU7ICAvKiBpdHMg c2l6ZSAqLwo+IC0KPiAtICBtY2h1bmtwdHIgcmVtYWluZGVyOyAgICAgICAgLyogaG9sZHMgc3Bs aXQgb2ZmIGV4dHJhIHNwYWNlIGZyb20gbmV3cCAqLwo+IC0gIElOVEVSTkFMX1NJWkVfVCAgcmVt YWluZGVyX3NpemU7ICAgLyogaXRzIHNpemUgKi8KPiAtCj4gLSAgbWNodW5rcHRyIGJjazsgICAg ICAgICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwo+IC0gIG1jaHVua3B0ciBmd2Q7 ICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KPiAtCj4gLSNpZmRlZiBS RUFMTE9DX1pFUk9fQllURVNfRlJFRVMKPiAtICBpZiAoYnl0ZXMgPT0gMCkgeyBmUkVlKG9sZG1l bSk7IHJldHVybiAwOyB9Cj4gLSNlbmRpZgo+IC0KPiAtICBpZiAoKGxvbmcpYnl0ZXMgPCAwKSBy ZXR1cm4gMDsKPiAtCj4gLSAgLyogcmVhbGxvYyBvZiBudWxsIGlzIHN1cHBvc2VkIHRvIGJlIHNh bWUgYXMgbWFsbG9jICovCj4gLSAgaWYgKG9sZG1lbSA9PSAwKSByZXR1cm4gbUFMTE9jKGJ5dGVz KTsKPiAtCj4gLSAgbmV3cCAgICA9IG9sZHAgICAgPSBtZW0yY2h1bmsob2xkbWVtKTsKPiAtICBu ZXdzaXplID0gb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKPiAtCj4gLQo+IC0gIG5iID0gcmVx dWVzdDJzaXplKGJ5dGVzKTsKPiAtCj4gLSNpZiBIQVZFX01NQVAKPiAtICBpZiAoY2h1bmtfaXNf bW1hcHBlZChvbGRwKSkKPiAtICB7Cj4gLSNpZiBIQVZFX01SRU1BUAo+IC0gICAgbmV3cCA9IG1y ZW1hcF9jaHVuayhvbGRwLCBuYik7Cj4gLSAgICBpZihuZXdwKSByZXR1cm4gY2h1bmsybWVtKG5l d3ApOwo+IC0jZW5kaWYKPiAtICAgIC8qIE5vdGUgdGhlIGV4dHJhIFNJWkVfU1ogb3ZlcmhlYWQu ICovCj4gLSAgICBpZihvbGRzaXplIC0gU0laRV9TWiA+PSBuYikgcmV0dXJuIG9sZG1lbTsgLyog ZG8gbm90aGluZyAqLwo+IC0gICAgLyogTXVzdCBhbGxvYywgY29weSwgZnJlZS4gKi8KPiAtICAg IG5ld21lbSA9IG1BTExPYyhieXRlcyk7Cj4gLSAgICBpZiAobmV3bWVtID09IDApIHJldHVybiAw OyAvKiBwcm9wYWdhdGUgZmFpbHVyZSAqLwo+IC0gICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRt ZW0sIG9sZHNpemUgLSAyKlNJWkVfU1opOwo+IC0gICAgbXVubWFwX2NodW5rKG9sZHApOwo+IC0g ICAgcmV0dXJuIG5ld21lbTsKPiAtICB9Cj4gLSNlbmRpZgo+IC0KPiAtICBjaGVja19pbnVzZV9j aHVuayhvbGRwKTsKPiAtCj4gLSAgaWYgKChsb25nKShvbGRzaXplKSA8IChsb25nKShuYikpCj4g LSAgewo+IC0KPiAtICAgIC8qIFRyeSBleHBhbmRpbmcgZm9yd2FyZCAqLwo+IC0KPiAtICAgIG5l eHQgPSBjaHVua19hdF9vZmZzZXQob2xkcCwgb2xkc2l6ZSk7Cj4gLSAgICBpZiAobmV4dCA9PSB0 b3AgfHwgIWludXNlKG5leHQpKQo+IC0gICAgewo+IC0gICAgICBuZXh0c2l6ZSA9IGNodW5rc2l6 ZShuZXh0KTsKPiAtCj4gLSAgICAgIC8qIEZvcndhcmQgaW50byB0b3Agb25seSBpZiBhIHJlbWFp bmRlciAqLwo+IC0gICAgICBpZiAobmV4dCA9PSB0b3ApCj4gLSAgICAgIHsKPiAtCWlmICgobG9u ZykobmV4dHNpemUgKyBuZXdzaXplKSA+PSAobG9uZykobmIgKyBNSU5TSVpFKSkKPiAtCXsKPiAt CSAgbmV3c2l6ZSArPSBuZXh0c2l6ZTsKPiAtCSAgdG9wID0gY2h1bmtfYXRfb2Zmc2V0KG9sZHAs IG5iKTsKPiAtCSAgc2V0X2hlYWQodG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOwo+ IC0JICBzZXRfaGVhZF9zaXplKG9sZHAsIG5iKTsKPiAtCSAgcmV0dXJuIGNodW5rMm1lbShvbGRw KTsKPiAtCX0KPiAtICAgICAgfQo+IC0KPiAtICAgICAgLyogRm9yd2FyZCBpbnRvIG5leHQgY2h1 bmsgKi8KPiAtICAgICAgZWxzZSBpZiAoKChsb25nKShuZXh0c2l6ZSArIG5ld3NpemUpID49IChs b25nKShuYikpKQo+IC0gICAgICB7Cj4gLQl1bmxpbmsobmV4dCwgYmNrLCBmd2QpOwo+IC0JbmV3 c2l6ZSAgKz0gbmV4dHNpemU7Cj4gLQlnb3RvIHNwbGl0Owo+IC0gICAgICB9Cj4gLSAgICB9Cj4g LSAgICBlbHNlCj4gLSAgICB7Cj4gLSAgICAgIG5leHQgPSAwOwo+IC0gICAgICBuZXh0c2l6ZSA9 IDA7Cj4gLSAgICB9Cj4gLQo+IC0gICAgLyogVHJ5IHNoaWZ0aW5nIGJhY2t3YXJkcy4gKi8KPiAt Cj4gLSAgICBpZiAoIXByZXZfaW51c2Uob2xkcCkpCj4gLSAgICB7Cj4gLSAgICAgIHByZXYgPSBw cmV2X2NodW5rKG9sZHApOwo+IC0gICAgICBwcmV2c2l6ZSA9IGNodW5rc2l6ZShwcmV2KTsKPiAt Cj4gLSAgICAgIC8qIHRyeSBmb3J3YXJkICsgYmFja3dhcmQgZmlyc3QgdG8gc2F2ZSBhIGxhdGVy IGNvbnNvbGlkYXRpb24gKi8KPiAtCj4gLSAgICAgIGlmIChuZXh0ICE9IDApCj4gLSAgICAgIHsK PiAtCS8qIGludG8gdG9wICovCj4gLQlpZiAobmV4dCA9PSB0b3ApCj4gLQl7Cj4gLQkgIGlmICgo bG9uZykobmV4dHNpemUgKyBwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYiArIE1JTlNJ WkUpKQo+IC0JICB7Cj4gLQkgICAgdW5saW5rKHByZXYsIGJjaywgZndkKTsKPiAtCSAgICBuZXdw ID0gcHJldjsKPiAtCSAgICBuZXdzaXplICs9IHByZXZzaXplICsgbmV4dHNpemU7Cj4gLQkgICAg bmV3bWVtID0gY2h1bmsybWVtKG5ld3ApOwo+IC0JICAgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xk bWVtLCBvbGRzaXplIC0gU0laRV9TWik7Cj4gLQkgICAgdG9wID0gY2h1bmtfYXRfb2Zmc2V0KG5l d3AsIG5iKTsKPiAtCSAgICBzZXRfaGVhZCh0b3AsIChuZXdzaXplIC0gbmIpIHwgUFJFVl9JTlVT RSk7Cj4gLQkgICAgc2V0X2hlYWRfc2l6ZShuZXdwLCBuYik7Cj4gLQkgICAgcmV0dXJuIG5ld21l bTsKPiAtCSAgfQo+IC0JfQo+IC0KPiAtCS8qIGludG8gbmV4dCBjaHVuayAqLwo+IC0JZWxzZSBp ZiAoKChsb25nKShuZXh0c2l6ZSArIHByZXZzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iKSkp Cj4gLQl7Cj4gLQkgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7Cj4gLQkgIHVubGluayhwcmV2LCBi Y2ssIGZ3ZCk7Cj4gLQkgIG5ld3AgPSBwcmV2Owo+IC0JICBuZXdzaXplICs9IG5leHRzaXplICsg cHJldnNpemU7Cj4gLQkgIG5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKPiAtCSAgTUFMTE9DX0NP UFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKPiAtCSAgZ290byBzcGxpdDsK PiAtCX0KPiAtICAgICAgfQo+IC0KPiAtICAgICAgLyogYmFja3dhcmQgb25seSAqLwo+IC0gICAg ICBpZiAocHJldiAhPSAwICYmIChsb25nKShwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKW5i KQo+IC0gICAgICB7Cj4gLQl1bmxpbmsocHJldiwgYmNrLCBmd2QpOwo+IC0JbmV3cCA9IHByZXY7 Cj4gLQluZXdzaXplICs9IHByZXZzaXplOwo+IC0JbmV3bWVtID0gY2h1bmsybWVtKG5ld3ApOwo+ IC0JTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKPiAtCWdv dG8gc3BsaXQ7Cj4gLSAgICAgIH0KPiAtICAgIH0KPiAtCj4gLSAgICAvKiBNdXN0IGFsbG9jYXRl ICovCj4gLQo+IC0gICAgbmV3bWVtID0gbUFMTE9jIChieXRlcyk7Cj4gLQo+IC0gICAgaWYgKG5l d21lbSA9PSAwKSAgLyogcHJvcGFnYXRlIGZhaWx1cmUgKi8KPiAtICAgICAgcmV0dXJuIDA7Cj4g LQo+IC0gICAgLyogQXZvaWQgY29weSBpZiBuZXdwIGlzIG5leHQgY2h1bmsgYWZ0ZXIgb2xkcC4g Ki8KPiAtICAgIC8qIChUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIG5ldyBjaHVuayBpcyBzYnJr J2VkLikgKi8KPiAtCj4gLSAgICBpZiAoIChuZXdwID0gbWVtMmNodW5rKG5ld21lbSkpID09IG5l eHRfY2h1bmsob2xkcCkpCj4gLSAgICB7Cj4gLSAgICAgIG5ld3NpemUgKz0gY2h1bmtzaXplKG5l d3ApOwo+IC0gICAgICBuZXdwID0gb2xkcDsKPiAtICAgICAgZ290byBzcGxpdDsKPiAtICAgIH0K PiAtCj4gLSAgICAvKiBPdGhlcndpc2UgY29weSwgZnJlZSwgYW5kIGV4aXQgKi8KPiAtICAgIE1B TExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7Cj4gLSAgICBmUkVl KG9sZG1lbSk7Cj4gLSAgICByZXR1cm4gbmV3bWVtOwo+IC0gIH0KPiAtCj4gLQo+IC0gc3BsaXQ6 ICAvKiBzcGxpdCBvZmYgZXh0cmEgcm9vbSBpbiBvbGQgb3IgZXhwYW5kZWQgY2h1bmsgKi8KPiAt Cj4gLSAgaWYgKG5ld3NpemUgLSBuYiA+PSBNSU5TSVpFKSAvKiBzcGxpdCBvZmYgcmVtYWluZGVy ICovCj4gLSAgewo+IC0gICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KG5ld3AsIG5iKTsK PiAtICAgIHJlbWFpbmRlcl9zaXplID0gbmV3c2l6ZSAtIG5iOwo+IC0gICAgc2V0X2hlYWRfc2l6 ZShuZXdwLCBuYik7Cj4gLSAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwg UFJFVl9JTlVTRSk7Cj4gLSAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldChyZW1haW5kZXIsIHJl bWFpbmRlcl9zaXplKTsKPiAtICAgIGZSRWUoY2h1bmsybWVtKHJlbWFpbmRlcikpOyAvKiBsZXQg ZnJlZSgpIGRlYWwgd2l0aCBpdCAqLwo+IC0gIH0KPiAtICBlbHNlCj4gLSAgewo+IC0gICAgc2V0 X2hlYWRfc2l6ZShuZXdwLCBuZXdzaXplKTsKPiAtICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0 KG5ld3AsIG5ld3NpemUpOwo+IC0gIH0KPiAtCj4gLSAgY2hlY2tfaW51c2VfY2h1bmsobmV3cCk7 Cj4gLSAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKPiAtfQo+IC0KPiAtCj4gLQwKPiAtCj4gLS8q Cj4gLQo+IC0gIG1lbWFsaWduIGFsZ29yaXRobToKPiAtCj4gLSAgICBtZW1hbGlnbiByZXF1ZXN0 cyBtb3JlIHRoYW4gZW5vdWdoIHNwYWNlIGZyb20gbWFsbG9jLCBmaW5kcyBhIHNwb3QKPiAtICAg IHdpdGhpbiB0aGF0IGNodW5rIHRoYXQgbWVldHMgdGhlIGFsaWdubWVudCByZXF1ZXN0LCBhbmQg dGhlbgo+IC0gICAgcG9zc2libHkgZnJlZXMgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNl Lgo+IC0KPiAtICAgIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3 by4gVGhpcyBwcm9wZXJ0eSBpcyBub3QKPiAtICAgIGNoZWNrZWQgYnkgbWVtYWxpZ24sIHNvIG1p c3VzZSBtYXkgcmVzdWx0IGluIHJhbmRvbSBydW50aW1lIGVycm9ycy4KPiAtCj4gLSAgICA4LWJ5 dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9u J3QKPiAtICAgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBv ciBsZXNzLgo+IC0KPiAtICAgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5 IHRvIGZyYWdtZW50IHNwYWNlLgo+IC0KPiAtKi8KPiAtCj4gLQo+IC0jaWYgX19TVERfQwo+IC1W b2lkX3QqIG1FTUFMSUduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykKPiAtI2Vsc2UK PiAtVm9pZF90KiBtRU1BTElHbihhbGlnbm1lbnQsIGJ5dGVzKSBzaXplX3QgYWxpZ25tZW50OyBz aXplX3QgYnl0ZXM7Cj4gLSNlbmRpZgo+IC17Cj4gLSAgSU5URVJOQUxfU0laRV9UICAgIG5iOyAg ICAgIC8qIHBhZGRlZCAgcmVxdWVzdCBzaXplICovCj4gLSAgY2hhciogICAgIG07ICAgICAgICAg ICAgICAgIC8qIG1lbW9yeSByZXR1cm5lZCBieSBtYWxsb2MgY2FsbCAqLwo+IC0gIG1jaHVua3B0 ciBwOyAgICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCj4gLSAgY2hhciog ICAgIGJyazsgICAgICAgICAgICAgIC8qIGFsaWdubWVudCBwb2ludCB3aXRoaW4gcCAqLwo+IC0g IG1jaHVua3B0ciBuZXdwOyAgICAgICAgICAgICAvKiBjaHVuayB0byByZXR1cm4gKi8KPiAtICBJ TlRFUk5BTF9TSVpFX1QgIG5ld3NpemU7ICAgLyogaXRzIHNpemUgKi8KPiAtICBJTlRFUk5BTF9T SVpFX1QgIGxlYWRzaXplOyAgLyogbGVhZGluZyBzcGFjZSBiZWZvciBhbGlnbm1lbnQgcG9pbnQg Ki8KPiAtICBtY2h1bmtwdHIgcmVtYWluZGVyOyAgICAgICAgLyogc3BhcmUgcm9vbSBhdCBlbmQg dG8gc3BsaXQgb2ZmICovCj4gLSAgbG9uZyAgICAgIHJlbWFpbmRlcl9zaXplOyAgIC8qIGl0cyBz aXplICovCj4gLQo+IC0gIGlmICgobG9uZylieXRlcyA8IDApIHJldHVybiAwOwo+IC0KPiAtICAv KiBJZiBuZWVkIGxlc3MgYWxpZ25tZW50IHRoYW4gd2UgZ2l2ZSBhbnl3YXksIGp1c3QgcmVsYXkg dG8gbWFsbG9jICovCj4gLQo+IC0gIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkg cmV0dXJuIG1BTExPYyhieXRlcyk7Cj4gLQo+IC0gIC8qIE90aGVyd2lzZSwgZW5zdXJlIHRoYXQg aXQgaXMgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNpemUgKi8KPiAtCj4gLSAgaWYgKGFsaWdu bWVudCA8ICBNSU5TSVpFKSBhbGlnbm1lbnQgPSBNSU5TSVpFOwo+IC0KPiAtICAvKiBDYWxsIG1h bGxvYyB3aXRoIHdvcnN0IGNhc2UgcGFkZGluZyB0byBoaXQgYWxpZ25tZW50LiAqLwo+IC0KPiAt ICBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7Cj4gLSAgbSAgPSAoY2hhciopKG1BTExPYyhuYiAr IGFsaWdubWVudCArIE1JTlNJWkUpKTsKPiAtCj4gLSAgaWYgKG0gPT0gMCkgcmV0dXJuIDA7IC8q IHByb3BhZ2F0ZSBmYWlsdXJlICovCj4gLQo+IC0gIHAgPSBtZW0yY2h1bmsobSk7Cj4gLQo+IC0g IGlmICgoKCh1bnNpZ25lZCBsb25nKShtKSkgJSBhbGlnbm1lbnQpID09IDApIC8qIGFsaWduZWQg Ki8KPiAtICB7Cj4gLSNpZiBIQVZFX01NQVAKPiAtICAgIGlmKGNodW5rX2lzX21tYXBwZWQocCkp Cj4gLSAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7IC8qIG5vdGhpbmcgbW9yZSB0byBkbyAqLwo+ IC0jZW5kaWYKPiAtICB9Cj4gLSAgZWxzZSAvKiBtaXNhbGlnbmVkICovCj4gLSAgewo+IC0gICAg LyoKPiAtICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLgo+IC0gICAgICBT aW5jZSB3ZSBuZWVkIHRvIGdpdmUgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQK PiAtICAgICAgbGVhc3QgTUlOU0laRSwgaWYgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1 cyBhdAo+IC0gICAgICBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4gTUlOU0laRSBsZWFkZXIsIHdlIGNh biBtb3ZlIHRvIHRoZQo+IC0gICAgICBuZXh0IGFsaWduZWQgc3BvdCAtLSB3ZSd2ZSBhbGxvY2F0 ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdAo+IC0gICAgICB0aGlzIGlzIGFsd2F5cyBwb3Nz aWJsZS4KPiAtICAgICovCj4gLQo+IC0gICAgYnJrID0gKGNoYXIqKW1lbTJjaHVuaygoKHVuc2ln bmVkIGxvbmcpKG0gKyBhbGlnbm1lbnQgLSAxKSkgJiAtKChzaWduZWQpIGFsaWdubWVudCkpOwo+ IC0gICAgaWYgKChsb25nKShicmsgLSAoY2hhciopKHApKSA8IE1JTlNJWkUpIGJyayA9IGJyayAr IGFsaWdubWVudDsKPiAtCj4gLSAgICBuZXdwID0gKG1jaHVua3B0cilicms7Cj4gLSAgICBsZWFk c2l6ZSA9IGJyayAtIChjaGFyKikocCk7Cj4gLSAgICBuZXdzaXplID0gY2h1bmtzaXplKHApIC0g bGVhZHNpemU7Cj4gLQo+IC0jaWYgSEFWRV9NTUFQCj4gLSAgICBpZihjaHVua19pc19tbWFwcGVk KHApKQo+IC0gICAgewo+IC0gICAgICBuZXdwLT5wcmV2X3NpemUgPSBwLT5wcmV2X3NpemUgKyBs ZWFkc2l6ZTsKPiAtICAgICAgc2V0X2hlYWQobmV3cCwgbmV3c2l6ZXxJU19NTUFQUEVEKTsKPiAt ICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKPiAtICAgIH0KPiAtI2VuZGlmCj4gLQo+IC0g ICAgLyogZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCj4gLQo+IC0gICAgc2V0X2hl YWQobmV3cCwgbmV3c2l6ZSB8IFBSRVZfSU5VU0UpOwo+IC0gICAgc2V0X2ludXNlX2JpdF9hdF9v ZmZzZXQobmV3cCwgbmV3c2l6ZSk7Cj4gLSAgICBzZXRfaGVhZF9zaXplKHAsIGxlYWRzaXplKTsK PiAtICAgIGZSRWUoY2h1bmsybWVtKHApKTsKPiAtICAgIHAgPSBuZXdwOwo+IC0KPiAtICAgIGFz c2VydCAobmV3c2l6ZSA+PSBuYiAmJiAoKCh1bnNpZ25lZCBsb25nKShjaHVuazJtZW0ocCkpKSAl IGFsaWdubWVudCkgPT0gMCk7Cj4gLSAgfQo+IC0KPiAtICAvKiBBbHNvIGdpdmUgYmFjayBzcGFy ZSByb29tIGF0IHRoZSBlbmQgKi8KPiAtCj4gLSAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUo cCkgLSBuYjsKPiAtCj4gLSAgaWYgKHJlbWFpbmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpCj4g LSAgewo+IC0gICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHAsIG5iKTsKPiAtICAgIHNl dF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKPiAtICAgIHNl dF9oZWFkX3NpemUocCwgbmIpOwo+IC0gICAgZlJFZShjaHVuazJtZW0ocmVtYWluZGVyKSk7Cj4g LSAgfQo+IC0KPiAtICBjaGVja19pbnVzZV9jaHVuayhwKTsKPiAtICByZXR1cm4gY2h1bmsybWVt KHApOwo+IC0KPiAtfQo+IC0KPiAtDAo+IC0KPiAtCj4gLS8qCj4gLSAgICB2YWxsb2MganVzdCBp bnZva2VzIG1lbWFsaWduIHdpdGggYWxpZ25tZW50IGFyZ3VtZW50IGVxdWFsCj4gLSAgICB0byB0 aGUgcGFnZSBzaXplIG9mIHRoZSBzeXN0ZW0gKG9yIGFzIG5lYXIgdG8gdGhpcyBhcyBjYW4KPiAt ICAgIGJlIGZpZ3VyZWQgb3V0IGZyb20gYWxsIHRoZSBpbmNsdWRlcy9kZWZpbmVzIGFib3ZlLikK PiAtKi8KPiAtCj4gLSNpZiBfX1NURF9DCj4gLVZvaWRfdCogdkFMTE9jKHNpemVfdCBieXRlcykK PiAtI2Vsc2UKPiAtVm9pZF90KiB2QUxMT2MoYnl0ZXMpIHNpemVfdCBieXRlczsKPiAtI2VuZGlm Cj4gLXsKPiAtICByZXR1cm4gbUVNQUxJR24gKG1hbGxvY19nZXRwYWdlc2l6ZSwgYnl0ZXMpOwo+ IC19Cj4gLQo+IC0vKgo+IC0gIHB2YWxsb2MganVzdCBpbnZva2VzIHZhbGxvYyBmb3IgdGhlIG5l YXJlc3QgcGFnZXNpemUKPiAtICB0aGF0IHdpbGwgYWNjb21tb2RhdGUgcmVxdWVzdAo+IC0qLwo+ IC0KPiAtCj4gLSNpZiBfX1NURF9DCj4gLVZvaWRfdCogcHZBTExPYyhzaXplX3QgYnl0ZXMpCj4g LSNlbHNlCj4gLVZvaWRfdCogcHZBTExPYyhieXRlcykgc2l6ZV90IGJ5dGVzOwo+IC0jZW5kaWYK PiAtewo+IC0gIHNpemVfdCBwYWdlc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKPiAtICByZXR1 cm4gbUVNQUxJR24gKHBhZ2VzaXplLCAoYnl0ZXMgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6 ZSAtIDEpKTsKPiAtfQo+IC0KPiAtLyoKPiAtCj4gLSAgY2FsbG9jIGNhbGxzIG1hbGxvYywgdGhl biB6ZXJvZXMgb3V0IHRoZSBhbGxvY2F0ZWQgY2h1bmsuCj4gLQo+IC0qLwo+IC0KPiAtI2lmIF9f U1REX0MKPiAtVm9pZF90KiBjQUxMT2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCj4gLSNl bHNlCj4gLVZvaWRfdCogY0FMTE9jKG4sIGVsZW1fc2l6ZSkgc2l6ZV90IG47IHNpemVfdCBlbGVt X3NpemU7Cj4gLSNlbmRpZgo+IC17Cj4gLSAgbWNodW5rcHRyIHA7Cj4gLSAgSU5URVJOQUxfU0la RV9UIGNzejsKPiAtCj4gLSAgSU5URVJOQUxfU0laRV9UIHN6ID0gbiAqIGVsZW1fc2l6ZTsKPiAt Cj4gLQo+IC0gIC8qIGNoZWNrIGlmIGV4cGFuZF90b3AgY2FsbGVkLCBpbiB3aGljaCBjYXNlIGRv bid0IG5lZWQgdG8gY2xlYXIgKi8KPiAtI2lmIE1PUkVDT1JFX0NMRUFSUwo+IC0gIG1jaHVua3B0 ciBvbGR0b3AgPSB0b3A7Cj4gLSAgSU5URVJOQUxfU0laRV9UIG9sZHRvcHNpemUgPSBjaHVua3Np emUodG9wKTsKPiAtI2VuZGlmCj4gLSAgVm9pZF90KiBtZW0gPSBtQUxMT2MgKHN6KTsKPiAtCj4g LSAgaWYgKChsb25nKW4gPCAwKSByZXR1cm4gMDsKPiAtCj4gLSAgaWYgKG1lbSA9PSAwKQo+IC0g ICAgcmV0dXJuIDA7Cj4gLSAgZWxzZQo+IC0gIHsKPiAtICAgIHAgPSBtZW0yY2h1bmsobWVtKTsK PiAtCj4gLSAgICAvKiBUd28gb3B0aW9uYWwgY2FzZXMgaW4gd2hpY2ggY2xlYXJpbmcgbm90IG5l Y2Vzc2FyeSAqLwo+IC0KPiAtCj4gLSNpZiBIQVZFX01NQVAKPiAtICAgIGlmIChjaHVua19pc19t bWFwcGVkKHApKSByZXR1cm4gbWVtOwo+IC0jZW5kaWYKPiAtCj4gLSAgICBjc3ogPSBjaHVua3Np emUocCk7Cj4gLQo+IC0jaWYgTU9SRUNPUkVfQ0xFQVJTCj4gLSAgICBpZiAocCA9PSBvbGR0b3Ag JiYgY3N6ID4gb2xkdG9wc2l6ZSkKPiAtICAgIHsKPiAtICAgICAgLyogY2xlYXIgb25seSB0aGUg Ynl0ZXMgZnJvbSBub24tZnJlc2hseS1zYnJrZWQgbWVtb3J5ICovCj4gLSAgICAgIGNzeiA9IG9s ZHRvcHNpemU7Cj4gLSAgICB9Cj4gLSNlbmRpZgo+IC0KPiAtICAgIE1BTExPQ19aRVJPKG1lbSwg Y3N6IC0gU0laRV9TWik7Cj4gLSAgICByZXR1cm4gbWVtOwo+IC0gIH0KPiAtfQo+IC0KPiAtLyoK PiAtCj4gLSAgY2ZyZWUganVzdCBjYWxscyBmcmVlLiBJdCBpcyBuZWVkZWQvZGVmaW5lZCBvbiBz b21lIHN5c3RlbXMKPiAtICB0aGF0IHBhaXIgaXQgd2l0aCBjYWxsb2MsIHByZXN1bWFibHkgZm9y IG9kZCBoaXN0b3JpY2FsIHJlYXNvbnMuCj4gLQo+IC0qLwo+IC0KPiAtI2lmICFkZWZpbmVkKElO VEVSTkFMX0xJTlVYX0NfTElCKSB8fCAhZGVmaW5lZChfX0VMRl9fKQo+IC0jaWYgX19TVERfQwo+ IC12b2lkIGNmcmVlKFZvaWRfdCAqbWVtKQo+IC0jZWxzZQo+IC12b2lkIGNmcmVlKG1lbSkgVm9p ZF90ICptZW07Cj4gLSNlbmRpZgo+IC17Cj4gLSAgZlJFZShtZW0pOwo+IC19Cj4gLSNlbmRpZgo+ IC0KPiAtDAo+IC0KPiAtLyoKPiAtCj4gLSAgICBNYWxsb2NfdHJpbSBnaXZlcyBtZW1vcnkgYmFj ayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUKPiAtICAgIGFyZ3VtZW50cyB0byBzYnJrKSBp ZiB0aGVyZSBpcyB1bnVzZWQgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mCj4gLSAgICB0aGUg bWFsbG9jIHBvb2wuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcgbGFyZ2UgYmxvY2tz IG9mCj4gLSAgICBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwg bWVtb3J5IHJlcXVpcmVtZW50cwo+IC0gICAgb2YgYSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5u b3QgZ3VhcmFudGVlIHRvIHJlZHVjZSBtZW1vcnkuIFVuZGVyCj4gLSAgICBzb21lIGFsbG9jYXRp b24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHdpbGwgYmUKPiAt ICAgIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUgZ2l2 ZW4gYmFjayB0bwo+IC0gICAgdGhlIHN5c3RlbS4KPiAtCj4gLSAgICBUaGUgYHBhZCcgYXJndW1l bnQgdG8gbWFsbG9jX3RyaW0gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGZyZWUKPiAtICAgIHRy YWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJv LAo+IC0gICAgb25seSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGlu dGVybmFsIGRhdGEKPiAtICAgIHN0cnVjdHVyZXMgd2lsbCBiZSBsZWZ0IChvbmUgcGFnZSBvciBs ZXNzKS4gTm9uLXplcm8gYXJndW1lbnRzCj4gLSAgICBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRh aW4gZW5vdWdoIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UKPiAtICAgIGZ1dHVyZSBleHBlY3Rl ZCBhbGxvY2F0aW9ucyB3aXRob3V0IGhhdmluZyB0byByZS1vYnRhaW4gbWVtb3J5Cj4gLSAgICBm cm9tIHRoZSBzeXN0ZW0uCj4gLQo+IC0gICAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFj dHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KPiAtCj4gLSovCj4gLQo+IC0jaWYg X19TVERfQwo+IC1pbnQgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkKPiAtI2Vsc2UKPiAtaW50IG1h bGxvY190cmltKHBhZCkgc2l6ZV90IHBhZDsKPiAtI2VuZGlmCj4gLXsKPiAtICBsb25nICB0b3Bf c2l6ZTsgICAgICAgIC8qIEFtb3VudCBvZiB0b3AtbW9zdCBtZW1vcnkgKi8KPiAtICBsb25nICBl eHRyYTsgICAgICAgICAgIC8qIEFtb3VudCB0byByZWxlYXNlICovCj4gLSAgY2hhciogY3VycmVu dF9icms7ICAgICAvKiBhZGRyZXNzIHJldHVybmVkIGJ5IHByZS1jaGVjayBzYnJrIGNhbGwgKi8K PiAtICBjaGFyKiBuZXdfYnJrOyAgICAgICAgIC8qIGFkZHJlc3MgcmV0dXJuZWQgYnkgbmVnYXRp dmUgc2JyayBjYWxsICovCj4gLQo+IC0gIHVuc2lnbmVkIGxvbmcgcGFnZXN6ID0gbWFsbG9jX2dl dHBhZ2VzaXplOwo+IC0KPiAtICB0b3Bfc2l6ZSA9IGNodW5rc2l6ZSh0b3ApOwo+IC0gIGV4dHJh ID0gKCh0b3Bfc2l6ZSAtIHBhZCAtIE1JTlNJWkUgKyAocGFnZXN6LTEpKSAvIHBhZ2VzeiAtIDEp ICogcGFnZXN6Owo+IC0KPiAtICBpZiAoZXh0cmEgPCAobG9uZylwYWdlc3opICAvKiBOb3QgZW5v dWdoIG1lbW9yeSB0byByZWxlYXNlICovCj4gLSAgICByZXR1cm4gMDsKPiAtCj4gLSAgZWxzZQo+ IC0gIHsKPiAtICAgIC8qIFRlc3QgdG8gbWFrZSBzdXJlIG5vIG9uZSBlbHNlIGNhbGxlZCBzYnJr ICovCj4gLSAgICBjdXJyZW50X2JyayA9IChjaGFyKikoTU9SRUNPUkUgKDApKTsKPiAtICAgIGlm IChjdXJyZW50X2JyayAhPSAoY2hhciopKHRvcCkgKyB0b3Bfc2l6ZSkKPiAtICAgICAgcmV0dXJu IDA7ICAgICAvKiBBcHBhcmVudGx5IHdlIGRvbid0IG93biBtZW1vcnk7IG11c3QgZmFpbCAqLwo+ IC0KPiAtICAgIGVsc2UKPiAtICAgIHsKPiAtICAgICAgbmV3X2JyayA9IChjaGFyKikoTU9SRUNP UkUgKC1leHRyYSkpOwo+IC0KPiAtICAgICAgaWYgKG5ld19icmsgPT0gKGNoYXIqKShNT1JFQ09S RV9GQUlMVVJFKSkgLyogc2JyayBmYWlsZWQ/ICovCj4gLSAgICAgIHsKPiAtCS8qIFRyeSB0byBm aWd1cmUgb3V0IHdoYXQgd2UgaGF2ZSAqLwo+IC0JY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVD T1JFICgwKSk7Cj4gLQl0b3Bfc2l6ZSA9IGN1cnJlbnRfYnJrIC0gKGNoYXIqKXRvcDsKPiAtCWlm ICh0b3Bfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiBpZiBub3QsIHdlIGFyZSB2ZXJ5IHZlcnkg ZGVhZCEgKi8KPiAtCXsKPiAtCSAgc2Jya2VkX21lbSA9IGN1cnJlbnRfYnJrIC0gc2Jya19iYXNl Owo+IC0JICBzZXRfaGVhZCh0b3AsIHRvcF9zaXplIHwgUFJFVl9JTlVTRSk7Cj4gLQl9Cj4gLQlj aGVja19jaHVuayh0b3ApOwo+IC0JcmV0dXJuIDA7Cj4gLSAgICAgIH0KPiAtCj4gLSAgICAgIGVs c2UKPiAtICAgICAgewo+IC0JLyogU3VjY2Vzcy4gQWRqdXN0IHRvcCBhY2NvcmRpbmdseS4gKi8K PiAtCXNldF9oZWFkKHRvcCwgKHRvcF9zaXplIC0gZXh0cmEpIHwgUFJFVl9JTlVTRSk7Cj4gLQlz YnJrZWRfbWVtIC09IGV4dHJhOwo+IC0JY2hlY2tfY2h1bmsodG9wKTsKPiAtCXJldHVybiAxOwo+ IC0gICAgICB9Cj4gLSAgICB9Cj4gLSAgfQo+IC19Cj4gLQo+IC0MCj4gLQo+IC0vKgo+IC0gIG1h bGxvY191c2FibGVfc2l6ZToKPiAtCj4gLSAgICBUaGlzIHJvdXRpbmUgdGVsbHMgeW91IGhvdyBt YW55IGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluIGFuCj4gLSAgICBhbGxvY2F0ZWQgY2h1 bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKPiAtICAg IG9mdGVuIG5vdCkuIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5n IGFib3V0Cj4gLSAgICBvdmVyd3JpdGluZyBvdGhlciBhbGxvY2F0ZWQgb2JqZWN0cy4gTm90IGEg cGFydGljdWxhcmx5IGdyZWF0Cj4gLSAgICBwcm9ncmFtbWluZyBwcmFjdGljZSwgYnV0IHN0aWxs IHNvbWV0aW1lcyB1c2VmdWwuCj4gLQo+IC0qLwo+IC0KPiAtI2lmIF9fU1REX0MKPiAtc2l6ZV90 IG1hbGxvY191c2FibGVfc2l6ZShWb2lkX3QqIG1lbSkKPiAtI2Vsc2UKPiAtc2l6ZV90IG1hbGxv Y191c2FibGVfc2l6ZShtZW0pIFZvaWRfdCogbWVtOwo+IC0jZW5kaWYKPiAtewo+IC0gIG1jaHVu a3B0ciBwOwo+IC0gIGlmIChtZW0gPT0gMCkKPiAtICAgIHJldHVybiAwOwo+IC0gIGVsc2UKPiAt ICB7Cj4gLSAgICBwID0gbWVtMmNodW5rKG1lbSk7Cj4gLSAgICBpZighY2h1bmtfaXNfbW1hcHBl ZChwKSkKPiAtICAgIHsKPiAtICAgICAgaWYgKCFpbnVzZShwKSkgcmV0dXJuIDA7Cj4gLSAgICAg IGNoZWNrX2ludXNlX2NodW5rKHApOwo+IC0gICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gU0la RV9TWjsKPiAtICAgIH0KPiAtICAgIHJldHVybiBjaHVua3NpemUocCkgLSAyKlNJWkVfU1o7Cj4g LSAgfQo+IC19Cj4gLQo+IC0KPiAtDAo+IC0KPiAtLyogVXRpbGl0eSB0byB1cGRhdGUgY3VycmVu dF9tYWxsaW5mbyBmb3IgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbygpICovCj4gLQo+IC1zdGF0 aWMgdm9pZCBtYWxsb2NfdXBkYXRlX21hbGxpbmZvKCkKPiAtewo+IC0gIGludCBpOwo+IC0gIG1i aW5wdHIgYjsKPiAtICBtY2h1bmtwdHIgcDsKPiAtI2lmIERFQlVHCj4gLSAgbWNodW5rcHRyIHE7 Cj4gLSNlbmRpZgo+IC0KPiAtICBJTlRFUk5BTF9TSVpFX1QgYXZhaWwgPSBjaHVua3NpemUodG9w KTsKPiAtICBpbnQgICBuYXZhaWwgPSAoKGxvbmcpKGF2YWlsKSA+PSAobG9uZylNSU5TSVpFKT8g MSA6IDA7Cj4gLQo+IC0gIGZvciAoaSA9IDE7IGkgPCBOQVY7ICsraSkKPiAtICB7Cj4gLSAgICBi ID0gYmluX2F0KGkpOwo+IC0gICAgZm9yIChwID0gbGFzdChiKTsgcCAhPSBiOyBwID0gcC0+Ymsp Cj4gLSAgICB7Cj4gLSNpZiBERUJVRwo+IC0gICAgICBjaGVja19mcmVlX2NodW5rKHApOwo+IC0g ICAgICBmb3IgKHEgPSBuZXh0X2NodW5rKHApOwo+IC0JICAgcSA8IHRvcCAmJiBpbnVzZShxKSAm JiAobG9uZykoY2h1bmtzaXplKHEpKSA+PSAobG9uZylNSU5TSVpFOwo+IC0JICAgcSA9IG5leHRf Y2h1bmsocSkpCj4gLQljaGVja19pbnVzZV9jaHVuayhxKTsKPiAtI2VuZGlmCj4gLSAgICAgIGF2 YWlsICs9IGNodW5rc2l6ZShwKTsKPiAtICAgICAgbmF2YWlsKys7Cj4gLSAgICB9Cj4gLSAgfQo+ IC0KPiAtICBjdXJyZW50X21hbGxpbmZvLm9yZGJsa3MgPSBuYXZhaWw7Cj4gLSAgY3VycmVudF9t YWxsaW5mby51b3JkYmxrcyA9IHNicmtlZF9tZW0gLSBhdmFpbDsKPiAtICBjdXJyZW50X21hbGxp bmZvLmZvcmRibGtzID0gYXZhaWw7Cj4gLSAgY3VycmVudF9tYWxsaW5mby5oYmxrcyA9IG5fbW1h cHM7Cj4gLSAgY3VycmVudF9tYWxsaW5mby5oYmxraGQgPSBtbWFwcGVkX21lbTsKPiAtICBjdXJy ZW50X21hbGxpbmZvLmtlZXBjb3N0ID0gY2h1bmtzaXplKHRvcCk7Cj4gLQo+IC19Cj4gLQo+IC0M Cj4gLQo+IC0vKgo+IC0KPiAtICBtYWxsb2Nfc3RhdHM6Cj4gLQo+IC0gICAgUHJpbnRzIG9uIHN0 ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0gKGJvdGgKPiAt ICAgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUg bW9yZSB0aGFuCj4gLSAgICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290 IGNhbGxlZCksIHRoZSBtYXhpbXVtCj4gLSAgICBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIG1tYXAg cmVnaW9ucyB1c2VkLCBhbmQgdGhlIGN1cnJlbnQgbnVtYmVyCj4gLSAgICBvZiBieXRlcyBhbGxv Y2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAo+IC0gICAgZnJl ZWQuIChOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgbm90 IHRoZQo+IC0gICAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUg bnVtYmVyIHJlcXVlc3RlZAo+IC0gICAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVw aW5nIG92ZXJoZWFkLikKPiAtCj4gLSovCj4gLQo+IC12b2lkIG1hbGxvY19zdGF0cygpCj4gLXsK PiAtICBtYWxsb2NfdXBkYXRlX21hbGxpbmZvKCk7Cj4gLSAgZnByaW50ZihzdGRlcnIsICJtYXgg c3lzdGVtIGJ5dGVzID0gJTEwdVxuIiwKPiAtCSAgKHVuc2lnbmVkIGludCkobWF4X3RvdGFsX21l bSkpOwo+IC0gIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMHVcbiIsCj4g LQkgICh1bnNpZ25lZCBpbnQpKHNicmtlZF9tZW0gKyBtbWFwcGVkX21lbSkpOwo+IC0gIGZwcmlu dGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMHVcbiIsCj4gLQkgICh1bnNpZ25lZCBp bnQpKGN1cnJlbnRfbWFsbGluZm8udW9yZGJsa3MgKyBtbWFwcGVkX21lbSkpOwo+IC0jaWYgSEFW RV9NTUFQCj4gLSAgZnByaW50ZihzdGRlcnIsICJtYXggbW1hcCByZWdpb25zID0gJTEwdVxuIiwK PiAtCSAgKHVuc2lnbmVkIGludCltYXhfbl9tbWFwcyk7Cj4gLSNlbmRpZgo+IC19Cj4gLQo+IC0v Kgo+IC0gIG1hbGxpbmZvIHJldHVybnMgYSBjb3B5IG9mIHVwZGF0ZWQgY3VycmVudCBtYWxsaW5m by4KPiAtKi8KPiAtCj4gLXN0cnVjdCBtYWxsaW5mbyBtQUxMSU5GbygpCj4gLXsKPiAtICBtYWxs b2NfdXBkYXRlX21hbGxpbmZvKCk7Cj4gLSAgcmV0dXJuIGN1cnJlbnRfbWFsbGluZm87Cj4gLX0K PiAtCj4gLQo+IC0MCj4gLQo+IC0vKgo+IC0gIG1hbGxvcHQ6Cj4gLQo+IC0gICAgbWFsbG9wdCBp cyB0aGUgZ2VuZXJhbCBTVklEL1hQRyBpbnRlcmZhY2UgdG8gdHVuYWJsZSBwYXJhbWV0ZXJzLgo+ IC0gICAgVGhlIGZvcm1hdCBpcyB0byBwcm92aWRlIGEgKHBhcmFtZXRlci1udW1iZXIsIHBhcmFt ZXRlci12YWx1ZSkgcGFpci4KPiAtICAgIG1hbGxvcHQgdGhlbiBzZXRzIHRoZSBjb3JyZXNwb25k aW5nIHBhcmFtZXRlciB0byB0aGUgYXJndW1lbnQKPiAtICAgIHZhbHVlIGlmIGl0IGNhbiAoaS5l Liwgc28gbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksCj4gLSAgICBhbmQgcmV0dXJu cyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZSAwLgo+IC0KPiAtICAgIFNlZSBkZXNjcmlwdGlvbnMgb2Yg dHVuYWJsZSBwYXJhbWV0ZXJzIGFib3ZlLgo+IC0KPiAtKi8KPiAtCj4gLSNpZiBfX1NURF9DCj4g LWludCBtQUxMT1B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkKPiAtI2Vsc2UKPiAtaW50 IG1BTExPUHQocGFyYW1fbnVtYmVyLCB2YWx1ZSkgaW50IHBhcmFtX251bWJlcjsgaW50IHZhbHVl Owo+IC0jZW5kaWYKPiAtewo+IC0gIHN3aXRjaChwYXJhbV9udW1iZXIpCj4gLSAgewo+IC0gICAg Y2FzZSBNX1RSSU1fVEhSRVNIT0xEOgo+IC0gICAgICB0cmltX3RocmVzaG9sZCA9IHZhbHVlOyBy ZXR1cm4gMTsKPiAtICAgIGNhc2UgTV9UT1BfUEFEOgo+IC0gICAgICB0b3BfcGFkID0gdmFsdWU7 IHJldHVybiAxOwo+IC0gICAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOgo+IC0gICAgICBtbWFwX3Ro cmVzaG9sZCA9IHZhbHVlOyByZXR1cm4gMTsKPiAtICAgIGNhc2UgTV9NTUFQX01BWDoKPiAtI2lm IEhBVkVfTU1BUAo+IC0gICAgICBuX21tYXBzX21heCA9IHZhbHVlOyByZXR1cm4gMTsKPiAtI2Vs c2UKPiAtICAgICAgaWYgKHZhbHVlICE9IDApIHJldHVybiAwOyBlbHNlICBuX21tYXBzX21heCA9 IHZhbHVlOyByZXR1cm4gMTsKPiAtI2VuZGlmCj4gLQo+IC0gICAgZGVmYXVsdDoKPiAtICAgICAg cmV0dXJuIDA7Cj4gLSAgfQo+IC19Cj4gLQo+IC0vKgo+IC0KPiAtSGlzdG9yeToKPiAtCj4gLSAg ICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkK PiAtICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCj4gLSAgICAgICog QWRkZWQgU2V2ZXJhbCBXSU4zMiBjbGVhbnVwcyBmcm9tIE1hcnRpbiBDLiBGb25nIDxtY2ZvbmdA eWFob28uY29tPgo+IC0JICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3Rl bXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCj4gLQkgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKPiAt CSAqIENsZWFudXAgdXAgaGVhZGVyIGZpbGUgaW5jbHVzaW9uIGZvciBXSU4zMiBwbGF0Zm9ybXMK PiAtCSAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxl ciBjb21wbGFpbnRzCj4gLQkgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cg Y28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKPiAtCSAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRp bmVzCj4gLQkgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAo bmVlZHMgbW9yZSB3b3JrKQo+IC0JICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQn IGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bwo+IC0JICAgdXNhZ2Ugb2YgJ2Fzc2VydCcgaW4g bm9uLVdJTjMyIGNvZGUKPiAtCSAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3Mg J2ZpbmRSZWdpb24oKScgcm91dGluZSB0bwo+IC0JICAgYXZvaWQgaW5maW5pdGUgbG9vcAo+IC0g ICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCj4gLQo+IC0g ICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUp Cj4gLSAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5n Cj4gLQo+IC0gICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChk bCBhdCBnZWUpCj4gLSAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5K LiBMaXUKPiAtICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20g V29sZnJhbSBHbG9nZXIKPiAtICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMy IHNicmsgZW11bGF0aW9uCj4gLSAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBh ZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3Nlbgo+IC0gICAgICAqIG1hbGxvY19l eHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyCj4gLQlm b3JlaWduIHNicmtzCj4gLSAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJv bSBISiBMaXUKPiAtCj4gLSAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3Vn IExlYSAgKGRsIGF0IGdlZSkKPiAtICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlv biB3aXRoIHRoZSBjb2RlLgo+IC0gICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhl bHAgZnJvbQo+IC0JV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4K PiAtICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KPiAtICAgICAgKiBQ YWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKPiAtICAgICAg KiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAo+IC0gICAg ICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBk ZWJ1Z2dpbmcuCj4gLSAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEg bW92ZSBpbnRvIHRvcAo+IC0gICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwg c2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCj4gLSAgICAgICogUmVseSBvbiBwYWdlIHNpemUg Zm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCj4gLQlhdm9pZCBzdXJwcmlzZXMgYWJv dXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCj4gLSAgICAgICogQWRkIG1hbGxpbmZvLCBt YWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCj4gLQkocmF5bW9uZEBlcy5lbGUudHVl Lm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCj4gLSAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRv IG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLgo+IC0gICAgICAqIE1v cmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywK PiAtCWNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5k ZSkuCj4gLSAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBs aWJjIGZyb20KPiAtCUguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKPiAtICAgICAgKiBJbnZl cnRlZCB0aGlzIGhpc3RvcnkgbGlzdAo+IC0KPiAtICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEw OjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQo+IC0gICAgICAqIFJlLXR1bmVkIGFuZCBm aXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KPiAtICAgICAg KiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hl bWUKPiAtCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2Vl ZHMKPiAtCXRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFt cy4KPiAtICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVk IGJpbnMgc2luY2UKPiAtCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJm b3JtcyB0aG9zZSB0aGF0IGRvbid0Cj4gLQlnaXZlbiBhYm92ZSBjaGFuZ2VzLgo+IC0gICAgICAq IFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0 LWNhc2VzLgo+IC0gICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCj4gLQo+ IC0gICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBn ZWUpCj4gLSAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRo YW5rcyB0bwo+IC0JUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3Vn Z2VzdGlvbi4KPiAtCj4gLSAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3Vn IExlYSAgKGRsIGF0IGdlZSkKPiAtICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxw IGZyb20gV29sZnJhbSBHbG9nZXIKPiAtCSh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUp Lgo+IC0KPiAtICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAo ZGwgYXQgZykKPiAtCj4gLSAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3Vn IExlYSAgKGRsIGF0IGcpCj4gLSAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3Ro IGRpcmVjdGlvbnMKPiAtICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0 cmF0ZWd5Owo+IC0gICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFj a3dhcmRzCj4gLSAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKPiAtICAgICAg KiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24KPiAtICAgICAgKiBP Y2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCj4gLSAgICAg ICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKPiAt Cj4gLSAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0 IGcpCj4gLSAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVu dCBiaW5uaW5nCj4gLSAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFy dCBvZiBtYWxsb2MgcHJvcGVyCj4gLQkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFj ZSAmIG1hbGxvY19jbGVhbl9iaW4pCj4gLSAgICAgICogU2NhbiAyIHJldHVybnMgY2h1bmtzIChu b3QganVzdCAxKQo+IC0gICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFs bG9jIHJldHVybnMgMAo+IC0gICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBv biBub24tQU5TSSBjb21waWxlcnMKPiAtCSAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQo+IC0K PiAtICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcu b3N3ZWdvLmVkdSkKPiAtICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3Mg YWNjZXNzIGluIHByZXZfY2h1bmsKPiAtICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0 cGFnZXNpemUuaAo+IC0gICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVy bmFsIGRvY3VtZW50YXRpb24KPiAtICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVz IGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcwo+IC0gICAgICAqIHRlc3Rl ZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCj4gLQkgIHdpdGggZ2NjICYgbmF0 aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCj4gLQkgIERldGxlZnMgJiBab3JuIGNvbXBh cmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCj4gLQo+IC0gICAgVHJpYWwgdmVyc2lv biBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1 KQo+IC0gICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0 YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCj4gLQkgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAg YnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQo+IC0KPiAtKi8KPiAKPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGJhcmVib3ggbWFpbGluZyBsaXN0Cj4g YmFyZWJveEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9iYXJlYm94CgotLSAKUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKSW5kdXN0cmlh bCBMaW51eCBTb2x1dGlvbnMgICAgICAgICAgICAgICAgIHwgaHR0cDovL3d3dy5wZW5ndXRyb25p eC5kZS8gIHwKUGVpbmVyIFN0ci4gNi04LCAzMTEzNyBIaWxkZXNoZWltLCBHZXJtYW55IHwgUGhv bmU6ICs0OS01MTIxLTIwNjkxNy0wICAgIHwKQW10c2dlcmljaHQgSGlsZGVzaGVpbSwgSFJBIDI2 ODYgICAgICAgICAgIHwgRmF4OiAgICs0OS01MTIxLTIwNjkxNy01NTU1IHwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmJhcmVib3ggbWFpbGluZyBsaXN0 CmJhcmVib3hAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2JhcmVib3gK