From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id ED3004C774 for ; Fri, 9 May 2025 10:21:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 67A1768C2F0; Fri, 9 May 2025 13:21:16 +0300 (EEST) Received: from sonic311-13.consmr.mail.bf2.yahoo.com (sonic311-13.consmr.mail.bf2.yahoo.com [74.6.131.123]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0BD9468BEC0 for ; Fri, 9 May 2025 13:21:08 +0300 (EEST) X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1746786067; bh=YV+StdN0XFF4tfIwrXqf+GnRGJKcgYIXihz2PD5pXda=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=hdNj9yclsVxZ8VO8oBLq6Cf6FEMeWiAhzhepub9V3rr6+cC+PByj5335r37o1cdGE/+8mP+wrYVshVtqaPz2odR1uEP7MRmBl4u358b96nTQeCrxfP8XlaUfBE6T2zDmT+S0tnuH01lIWI4W3SAycZ4zVWam7n1vueaLmVEnBNIudYJTGVzWMp1zuAfclDOgHJgYszrtw0dsH+U5WYpjV8ngbA5EPBnUUlTYQcMrBAI42vM2fsS3TvC6GrW7oDWEFMYctiOW+W2P03IZqEG4BpZT4bqfhLmwJgPenLAa3ZMYUbijEKxL6V296QtXFNAy2xejONpNdrmGZhddkjmnKQ== X-YMail-OSG: L0xg1kgVM1lR3D7LRNVFrSuc2jsv4VvbvxVi8_6cYeXBEjipYtk1aU5u2YXJ.uV Ffu5TPIkHCfHrWcFHXSuUluTe8_TLgkLRbu8YNgv2lKYyT5ffR7ZqVXMO7WFVIt6cXEB3HgbaV4U ywC1IiG2N9vjFYUi1fbhv0wTAbCXSWI_yGbJHXCGMbgU.lyJ6V428ZM7d2iunxpXitOqXXA5t3Xz mYVmCfAUXvJMsW6VGEL1W3wXh58vfPmT0ywUKSVzIeCelDucgNq2_FZzluCivMdVF2EyWVKKfelR 8N8ZVb34dZv55scofTP95wkMFl7Iutnbby85lg_IBpspDghKEU4n5pfVUJ7Ulf1HQHsAeAYYEf5R bXQNaG4ofelXo4pkkMunSJW3X0LTgjyfOk.FX0QV9XOT2bkwpJ9CGnOZ.Y43p.GkSM2wkW5N0SGy WHjuJzH63T75S0jHcaLpeG8J.huxLXXJv9gP36n_atudRIABE0ERqNtu3NYWhv5Rz9xqv2cv7ZHm dv0i7ZkVdJ_e6N2QVGLaX64ZJqrul4kU0d.j8wzWXBs0XFP78eoAUK2qIooXlcdNRWVqiQx5MbQD kdHhB.Rbp8Kem3fI194IVr6swtrWMiPIY4b5KtSolXTgWGj8ids7ZK5n6DT4elRqn3pE4q9GJy5R AkSTUGYT6qzZRBJA5C8O9V9u3owJV7HyFAP3mdH8uUSKltT5y0IrAQ6gHojM6_mrtx7uNJ.TOhGO lfCJnVDuLLC6ElRdvrkHsXhgI_v1.oio8Xiq4Anr6X9HI29YvGJRTOLAAL8rf17u2MCqF3wV2JYm xPTdxQGE3_2nTvG_I4zCUXpvvjGEnO6Z.d0JOqIeTqdM8Uj6dSF.H4FZQ0vHnD2.b77qRIjM0S1i 2yVedMhhmiEYeP.P.8cZvXpnccw4g_6949JPTyOXBsWq3bEoRt8RD_kml9W5XM84SGDnRpZ13AXk FAoQyhC8hf1TMmOO5b6Q9nau1U3v1Q_h0My8EEY1YCWvok9koVUF1TLls8LgFY5PeK8yw9Wqzr_j u66kDubiVPueA5nR8GkOY6M2s.baycjon4WhW44vB_yDn8cIbIA5BVZI3eiv4stugFxaU.Y4GqL5 1dzS8z6rcCdhrCyv1O5WdXmJhX5rbTpb2_94kB4ndgZHitE3TSb2xJZduniMy_0RAMpnJs48bDCS Fvop7HU8drecujBds7T4j_Y8tolizKgWoppOW5lwwprPwN5m0BarMdGq8MNcRVGYh8CXJ7H57Hp6 L57V6CZlY7SzsvaXmpKEpMH6h36N93Rix.yqgcSP2Sau92QFBvLnOszX9KB8l5FuGSseWBbbH.XN wH.vWcrH03hi7PlasktjzK7yEsTz8q7.eeKhURvo79bDLpORcbKeU9sksLA9FCLjyBc2r_IOtl6m zUowyrr8NpFnCPkISbPFsKK8hnPl9OzJf.n1i4k9Jkhcwn8Li8qRewZ_4Tx_e471RCqTh2frSeGc 2KnBA6bNexNBjLnnhWK9hzCyjeA4awmak5_laflN1wBk9JjwZZ7ltBGTdjDO1aUwL.5wtYuY3ikp JBQ35TQEde5pP3czp7ky9WIfCTTpRsLEMd6w2bnkEKVunJeO0iDmqHjYtT6Qe4rgtpPJZ34lGxCl zFX.Mr05kF4Zj8XNf3AIELHShsWvlio2KrdyOiVrueNVh0gEZiTDFWOX3Ek8JGuyA15XNN9o1ZtT Z2c3DrIXmy3B_H_TrAld1Excxj.90GQAJ4yegGO1t6mE0Tj_7LqqUhROu2WHAMjDqBjfar5hpdYZ TCzw93FfX.e3qdqqROQu5ia5kLSWhki4A_rtgC.FTezZ5QBsIm4tkA5Qi7e9LXCEW4Q__20pC7bx xVvnBom2i7yOm1yyD2UhIrs8D9srSx0DjFlyO302TiGlZV3_Zi7gnxakjWK94iuV_SXgRBMojUN5 vdZ1HS664N3TUGUCB1jhesMuViKH3JwV_elXQ86cIXN82FFJyazq42qdQjliFBmmiwr1WIJTeasG nhKknii42Cz5XKN46Ds3q3U6tEuMGORB4h9mgxWCxiOESjaNNX0ELy.QgFjNW6VjeuFS3VWrSWNQ 3yCCiokI4b0JMWIrEWGL_H7ozwNXwz.vV1Aj9s_Hez7kAPWnkuyLOBI037yAjuf4rSpQvqdCj_sV 0wLbNVIiRScriYYqrVMMlIAsxcmHkRbI854Z.4XNPQx8BzCabrQ2pgwyhe_SQiTWvnbJuBbhiFiM c X-Sonic-MF: X-Sonic-ID: f21bd541-f297-4acb-9012-55b780caaaa5 Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.bf2.yahoo.com with HTTP; Fri, 9 May 2025 10:21:07 +0000 Received: by hermes--production-ir2-858bd4ff7b-vm54s (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 3e75a4afd965bf577c648c4bc2e56167; Fri, 09 May 2025 10:21:03 +0000 (UTC) Date: Fri, 9 May 2025 13:20:53 +0300 To: FFmpeg development discussions and patches Message-ID: <1cb65fa8-50e7-49da-992b-ad20a95e3278@Spark> In-Reply-To: <20250501170711.60035-1-jendas1@yahoo.com> References: <20250501170711.60035-1-jendas1.ref@yahoo.com> <20250501170711.60035-1-jendas1@yahoo.com> X-Readdle-Message-ID: 1cb65fa8-50e7-49da-992b-ad20a95e3278@Spark MIME-Version: 1.0 X-Mailer: WebService/1.1.23772 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH v2] avfilter/vf_lut3d_opencl Initial support for OpenCL implementation of vf_lut3d. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: =?utf-8?q?Jan_Studen=C3=BD_via_ffmpeg-devel?= Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?Q?Jan_Studen=C3=BD?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: SGksClNpbmNlIHRoaXMgaXMgbXkgZmlyc3QgRkZtcGVnIHBhdGNoIEnigJltIG5vdCBzdXJlIGlm IEkgc2hvdWxkIGluY2x1ZGUgYW55dGhpbmcgZXh0cmEgdG8gbWFrZSB0aGUgcmV2aWV3IGVhc2ll ciwgbGlrZSBsb2dzLCB0ZXN0IHJlc3VsdHMsIG9yIG1vcmUgZXhwbGFuYXRpb24uCgpQbGVhc2Ug bGV0IG1lIGtub3cgaWYgdGhlcmXigJlzIGFueXRoaW5nIEkgY2FuIGFkZCBvciBkbyBkaWZmZXJl bnRseS4KCkJlc3QgcmVnYXJkcywKCkphbiBTdHVkZW7DvQpPbiBNYXkgMSwgMjAyNSBhdCAyMDox MyArMDMwMCwgSmFuIFN0dWRlbsO9IDxqZW5kYXMxQHlhaG9vLmNvbT4sIHdyb3RlOgoKPiBUaGUg Y29taWxlIGVycm9yIGlzIGZpeGVkIGJ5IGFkZGluZyBvcGVuY2wgZGVwZW5kZW5jeSB0byBjb25m aWd1cmUuCj4KPiAtLS0KPiBjb25maWd1cmUgfCAxICsKPiBsaWJhdmZpbHRlci9NYWtlZmlsZSB8 IDEgKwo+IGxpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyB8IDEgKwo+IGxpYmF2ZmlsdGVyL29wZW5j bC9sdXQzZC5jbCB8IDE3NyArKysrKysrKysrKysrCj4gbGliYXZmaWx0ZXIvb3BlbmNsX3NvdXJj ZS5oIHwgMiArCj4gbGliYXZmaWx0ZXIvdmZfbHV0M2Rfb3BlbmNsLmMgfCA0NjAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+IDYgZmlsZXMgY2hhbmdlZCwgNjQyIGluc2VydGlv bnMoKykKPiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvb3BlbmNsL2x1dDNkLmNsCj4g Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX2x1dDNkX29wZW5jbC5jCj4KPiBkaWZm IC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggZWUyNzBiNzcwYy4uOWI5ZWEz YjM5YiAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9jb25maWd1cmUKPiBAQCAtMzkz NCw2ICszOTM0LDcgQEAgbGFkc3BhX2ZpbHRlcl9kZXBzPSJsYWRzcGEgbGliZGwiCj4gbGNldmNf ZmlsdGVyX2RlcHM9ImxpYmxjZXZjX2RlYyIKPiBsZW5zZnVuX2ZpbHRlcl9kZXBzPSJsaWJsZW5z ZnVuIHZlcnNpb24zIgo+IGxpYnBsYWNlYm9fZmlsdGVyX2RlcHM9ImxpYnBsYWNlYm8gdnVsa2Fu Igo+ICtsdXQzZF9vcGVuY2xfZmlsdGVyX2RlcHM9Im9wZW5jbCIKPiBsdjJfZmlsdGVyX2RlcHM9 Imx2MiIKPiBtY2RlaW50X2ZpbHRlcl9kZXBzPSJhdmNvZGVjIGdwbCIKPiBtZXRhZGF0YV9maWx0 ZXJfZGVwcz0iYXZmb3JtYXQiCj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIv bGliYXZmaWx0ZXIvTWFrZWZpbGUKPiBpbmRleCA3YzBkODc5ZWM5Li42NTI0ZDBmOTFhIDEwMDY0 NAo+IC0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCj4gKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZp bGUKPiBAQCAtMzc4LDYgKzM3OCw3IEBAIE9CSlMtJChDT05GSUdfTFVUMURfRklMVEVSKSArPSB2 Zl9sdXQzZC5vCj4gT0JKUy0kKENPTkZJR19MVVRfRklMVEVSKSArPSB2Zl9sdXQubwo+IE9CSlMt JChDT05GSUdfTFVUMl9GSUxURVIpICs9IHZmX2x1dDIubyBmcmFtZXN5bmMubwo+IE9CSlMtJChD T05GSUdfTFVUM0RfRklMVEVSKSArPSB2Zl9sdXQzZC5vIGZyYW1lc3luYy5vCj4gK09CSlMtJChD T05GSUdfTFVUM0RfT1BFTkNMX0ZJTFRFUikgKz0gdmZfbHV0M2Rfb3BlbmNsLm8gb3BlbmNsLm8g b3BlbmNsL2x1dDNkLm8KPiBPQkpTLSQoQ09ORklHX0xVVFJHQl9GSUxURVIpICs9IHZmX2x1dC5v Cj4gT0JKUy0kKENPTkZJR19MVVRZVVZfRklMVEVSKSArPSB2Zl9sdXQubwo+IE9CSlMtJChDT05G SUdfTUFTS0VEQ0xBTVBfRklMVEVSKSArPSB2Zl9tYXNrZWRjbGFtcC5vIGZyYW1lc3luYy5vCj4g ZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZp bHRlcnMuYwo+IGluZGV4IDc0MGQ5YWIyNjUuLjcyYzJmNDhhYzQgMTAwNjQ0Cj4gLS0tIGEvbGli YXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4gKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4g QEAgLTM1Myw2ICszNTMsNyBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfbHV0Owo+IGV4 dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9sdXQxZDsKPiBleHRlcm4gY29uc3QgRkZGaWx0ZXIg ZmZfdmZfbHV0MjsKPiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfbHV0M2Q7Cj4gK2V4dGVy biBjb25zdCBGRkZpbHRlciBmZl92Zl9sdXQzZF9vcGVuY2w7Cj4gZXh0ZXJuIGNvbnN0IEZGRmls dGVyIGZmX3ZmX2x1dHJnYjsKPiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfbHV0eXV2Owo+ IGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9tYXNrZWRjbGFtcDsKPiBkaWZmIC0tZ2l0IGEv bGliYXZmaWx0ZXIvb3BlbmNsL2x1dDNkLmNsIGIvbGliYXZmaWx0ZXIvb3BlbmNsL2x1dDNkLmNs Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4xNmRmZWNkYzRlCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2ZmlsdGVyL29wZW5jbC9sdXQzZC5jbAo+IEBAIC0w LDAgKzEsMTc3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBKYW4gU3R1ZGVueQo+ ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp Ywo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl ZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCj4gKyAqLwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgcmdidmVjIHsKPiArIGZsb2F0IHIs IGcsIGIsIGE7Cj4gK30gcmdidmVjOwo+ICsKPiArI2RlZmluZSBNSU4oWCwgWSkgKCgoWCkgPCAo WSkpID8gKFgpIDogKFkpKQo+ICsKPiArI2RlZmluZSBORUFSKHgpICgoaW50KSgoeCkgKyAuNSkp Cj4gKyNkZWZpbmUgUFJFVih4KSAoKGludCkoeCkpCj4gKyNkZWZpbmUgTkVYVCh4KSAoTUlOKChp bnQpKHgpICsgMSwgbHV0X2VkZ2Vfc2l6ZSAtIDEpKQo+ICsKPiArLyoqCj4gKyAqIEdldCB0aGUg bmVhcmVzdCBkZWZpbmVkIHBvaW50Cj4gKyAqLwo+ICtzdGF0aWMgcmdidmVjIGludGVycF9uZWFy ZXN0KGZsb2F0NCBweCwgX19nbG9iYWwgY29uc3QgcmdidmVjICpsdXQsIGludCBsdXRfZWRnZV9z aXplKQo+ICt7Cj4gKyBpbnQgciA9IE5FQVIocHhbMF0pOwo+ICsgaW50IGcgPSBORUFSKHB4WzFd KTsKPiArIGludCBiID0gTkVBUihweFsyXSk7Cj4gKyBpbnQgaW5kZXggPSByICogbHV0X2VkZ2Vf c2l6ZSAqIGx1dF9lZGdlX3NpemUgKyBnICogbHV0X2VkZ2Vfc2l6ZSArIGI7Cj4gKyByZXR1cm4g bHV0W2luZGV4XTsKPiArfQo+ICsKPiArc3RhdGljIGZsb2F0IGxlcnBmKGZsb2F0IHYwLCBmbG9h dCB2MSwgZmxvYXQgZikKPiArewo+ICsgcmV0dXJuIHYwICsgKHYxIC0gdjApICogZjsKPiArfQo+ ICsKPiArc3RhdGljIHJnYnZlYyBsZXJwKGNvbnN0IHJnYnZlYyAqdjAsIGNvbnN0IHJnYnZlYyAq djEsIGZsb2F0IGYpCj4gK3sKPiArIHJnYnZlYyB2ID0gewo+ICsgbGVycGYodjAtPnIsIHYxLT5y LCBmKSwgbGVycGYodjAtPmcsIHYxLT5nLCBmKSwgbGVycGYodjAtPmIsIHYxLT5iLCBmKQo+ICsg fTsKPiArIHJldHVybiB2Owo+ICt9Cj4gKy8qKgo+ICsgKiBJbnRlcnBvbGF0ZSB1c2luZyB0aGUg OCB2ZXJ0aWNlcyBvZiBhIGN1YmUKPiArICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcv d2lraS9UcmlsaW5lYXJfaW50ZXJwb2xhdGlvbgo+ICsgKi8KPiArc3RhdGljIHJnYnZlYyBpbnRl cnBfdHJpbGluZWFyKGZsb2F0NCBweCwgX19nbG9iYWwgY29uc3QgcmdidmVjICpsdXQsIGludCBs dXRfZWRnZV9zaXplKQo+ICt7Cj4gKyBjb25zdCBpbnQgbHV0c2l6ZTIgPSBsdXRfZWRnZV9zaXpl ICogbHV0X2VkZ2Vfc2l6ZTsKPiArIGNvbnN0IGludCBsdXRzaXplID0gbHV0X2VkZ2Vfc2l6ZTsK PiArCj4gKyBjb25zdCBpbnQgcHJldltdID0geyBQUkVWKHB4WzBdKSwgUFJFVihweFsxXSksIFBS RVYocHhbMl0pIH07Cj4gKyBjb25zdCBpbnQgbmV4dFtdID0geyBORVhUKHB4WzBdKSwgTkVYVChw eFsxXSksIE5FWFQocHhbMl0pIH07Cj4gKwo+ICsgY29uc3QgcmdidmVjIGQgPSB7Cj4gKyBweFsw XSAtIHByZXZbMF0sCj4gKyBweFsxXSAtIHByZXZbMV0sCj4gKyBweFsyXSAtIHByZXZbMl0KPiAr IH07Cj4gKwo+ICsgY29uc3QgcmdidmVjIGMwMDAgPSBsdXRbcHJldlswXSAqIGx1dHNpemUyICsg cHJldlsxXSAqIGx1dHNpemUgKyBwcmV2WzJdXTsKPiArIGNvbnN0IHJnYnZlYyBjMDAxID0gbHV0 W3ByZXZbMF0gKiBsdXRzaXplMiArIHByZXZbMV0gKiBsdXRzaXplICsgbmV4dFsyXV07Cj4gKyBj b25zdCByZ2J2ZWMgYzAxMCA9IGx1dFtwcmV2WzBdICogbHV0c2l6ZTIgKyBuZXh0WzFdICogbHV0 c2l6ZSArIHByZXZbMl1dOwo+ICsgY29uc3QgcmdidmVjIGMwMTEgPSBsdXRbcHJldlswXSAqIGx1 dHNpemUyICsgbmV4dFsxXSAqIGx1dHNpemUgKyBuZXh0WzJdXTsKPiArIGNvbnN0IHJnYnZlYyBj MTAwID0gbHV0W25leHRbMF0gKiBsdXRzaXplMiArIHByZXZbMV0gKiBsdXRzaXplICsgcHJldlsy XV07Cj4gKyBjb25zdCByZ2J2ZWMgYzEwMSA9IGx1dFtuZXh0WzBdICogbHV0c2l6ZTIgKyBwcmV2 WzFdICogbHV0c2l6ZSArIG5leHRbMl1dOwo+ICsgY29uc3QgcmdidmVjIGMxMTAgPSBsdXRbbmV4 dFswXSAqIGx1dHNpemUyICsgbmV4dFsxXSAqIGx1dHNpemUgKyBwcmV2WzJdXTsKPiArIGNvbnN0 IHJnYnZlYyBjMTExID0gbHV0W25leHRbMF0gKiBsdXRzaXplMiArIG5leHRbMV0gKiBsdXRzaXpl ICsgbmV4dFsyXV07Cj4gKwo+ICsgY29uc3QgcmdidmVjIGMwMCA9IGxlcnAoJmMwMDAsICZjMTAw LCBkLnIpOwo+ICsgY29uc3QgcmdidmVjIGMxMCA9IGxlcnAoJmMwMTAsICZjMTEwLCBkLnIpOwo+ ICsgY29uc3QgcmdidmVjIGMwMSA9IGxlcnAoJmMwMDEsICZjMTAxLCBkLnIpOwo+ICsgY29uc3Qg cmdidmVjIGMxMSA9IGxlcnAoJmMwMTEsICZjMTExLCBkLnIpOwo+ICsKPiArIGNvbnN0IHJnYnZl YyBjMCA9IGxlcnAoJmMwMCwgJmMxMCwgZC5nKTsKPiArIGNvbnN0IHJnYnZlYyBjMSA9IGxlcnAo JmMwMSwgJmMxMSwgZC5nKTsKPiArCj4gKyByZXR1cm4gbGVycCgmYzAsICZjMSwgZC5iKTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIFRldHJhaGVkcmFsIGludGVycG9sYXRpb24uIEJhc2VkIG9uIGNv ZGUgZm91bmQgaW4gVHJ1ZWxpZ2h0IFNvZnR3YXJlIExpYnJhcnkgcGFwZXIuCj4gKyAqIEBzZWUg aHR0cDovL3d3dy5maWxtbGlnaHQubHRkLnVrL3BkZi93aGl0ZXBhcGVycy9GTC1UTC1UTi0wMDU3 LVNvZnR3YXJlTGliLnBkZgo+ICsgKi8KPiArCj4gK3N0YXRpYyByZ2J2ZWMgaW50ZXJwX3RldHJh aGVkcmFsKGZsb2F0NCBweCwgX19nbG9iYWwgY29uc3QgcmdidmVjICpsdXQsIGludCBsdXRfZWRn ZV9zaXplKQo+ICt7Cj4gKyBjb25zdCBpbnQgbHV0c2l6ZTIgPSBsdXRfZWRnZV9zaXplKmx1dF9l ZGdlX3NpemU7Cj4gKyBjb25zdCBpbnQgbHV0c2l6ZSA9IGx1dF9lZGdlX3NpemU7Cj4gKyBjb25z dCBpbnQgcHJldltdID0ge1BSRVYocHhbMF0pLCBQUkVWKHB4WzFdKSwgUFJFVihweFsyXSl9Owo+ ICsgY29uc3QgaW50IG5leHRbXSA9IHtORVhUKHB4WzBdKSwgTkVYVChweFsxXSksIE5FWFQocHhb Ml0pfTsKPiArIGNvbnN0IHJnYnZlYyBkID0ge3B4WzBdIC0gcHJldlswXSwgcHhbMV0gLSBwcmV2 WzFdLCBweFsyXSAtIHByZXZbMl19Owo+ICsgY29uc3QgcmdidmVjIGMwMDAgPSBsdXRbcHJldlsw XSAqIGx1dHNpemUyICsgcHJldlsxXSAqIGx1dHNpemUgKyBwcmV2WzJdXTsKPiArIGNvbnN0IHJn YnZlYyBjMTExID0gbHV0W25leHRbMF0gKiBsdXRzaXplMiArIG5leHRbMV0gKiBsdXRzaXplICsg bmV4dFsyXV07Cj4gKyByZ2J2ZWMgYzsKPiArIGlmIChkLnIgPiBkLmcpIHsKPiArIGlmIChkLmcg PiBkLmIpIHsKPiArIGNvbnN0IHJnYnZlYyBjMTAwID0gbHV0W25leHRbMF0gKiBsdXRzaXplMiAr IHByZXZbMV0gKiBsdXRzaXplICsgcHJldlsyXV07Cj4gKyBjb25zdCByZ2J2ZWMgYzExMCA9IGx1 dFtuZXh0WzBdICogbHV0c2l6ZTIgKyBuZXh0WzFdICogbHV0c2l6ZSArIHByZXZbMl1dOwo+ICsg Yy5yID0gKDEtZC5yKSAqIGMwMDAuciArIChkLnItZC5nKSAqIGMxMDAuciArIChkLmctZC5iKSAq IGMxMTAuciArIChkLmIpICogYzExMS5yOwo+ICsgYy5nID0gKDEtZC5yKSAqIGMwMDAuZyArIChk LnItZC5nKSAqIGMxMDAuZyArIChkLmctZC5iKSAqIGMxMTAuZyArIChkLmIpICogYzExMS5nOwo+ ICsgYy5iID0gKDEtZC5yKSAqIGMwMDAuYiArIChkLnItZC5nKSAqIGMxMDAuYiArIChkLmctZC5i KSAqIGMxMTAuYiArIChkLmIpICogYzExMS5iOwo+ICsgfSBlbHNlIGlmIChkLnIgPiBkLmIpIHsK PiArIGNvbnN0IHJnYnZlYyBjMTAwID0gbHV0W25leHRbMF0gKiBsdXRzaXplMiArIHByZXZbMV0g KiBsdXRzaXplICsgcHJldlsyXV07Cj4gKyBjb25zdCByZ2J2ZWMgYzEwMSA9IGx1dFtuZXh0WzBd ICogbHV0c2l6ZTIgKyBwcmV2WzFdICogbHV0c2l6ZSArIG5leHRbMl1dOwo+ICsgYy5yID0gKDEt ZC5yKSAqIGMwMDAuciArIChkLnItZC5iKSAqIGMxMDAuciArIChkLmItZC5nKSAqIGMxMDEuciAr IChkLmcpICogYzExMS5yOwo+ICsgYy5nID0gKDEtZC5yKSAqIGMwMDAuZyArIChkLnItZC5iKSAq IGMxMDAuZyArIChkLmItZC5nKSAqIGMxMDEuZyArIChkLmcpICogYzExMS5nOwo+ICsgYy5iID0g KDEtZC5yKSAqIGMwMDAuYiArIChkLnItZC5iKSAqIGMxMDAuYiArIChkLmItZC5nKSAqIGMxMDEu YiArIChkLmcpICogYzExMS5iOwo+ICsgfSBlbHNlIHsKPiArIGNvbnN0IHJnYnZlYyBjMDAxID0g bHV0W3ByZXZbMF0gKiBsdXRzaXplMiArIHByZXZbMV0gKiBsdXRzaXplICsgbmV4dFsyXV07Cj4g KyBjb25zdCByZ2J2ZWMgYzEwMSA9IGx1dFtuZXh0WzBdICogbHV0c2l6ZTIgKyBwcmV2WzFdICog bHV0c2l6ZSArIG5leHRbMl1dOwo+ICsgYy5yID0gKDEtZC5iKSAqIGMwMDAuciArIChkLmItZC5y KSAqIGMwMDEuciArIChkLnItZC5nKSAqIGMxMDEuciArIChkLmcpICogYzExMS5yOwo+ICsgYy5n ID0gKDEtZC5iKSAqIGMwMDAuZyArIChkLmItZC5yKSAqIGMwMDEuZyArIChkLnItZC5nKSAqIGMx MDEuZyArIChkLmcpICogYzExMS5nOwo+ICsgYy5iID0gKDEtZC5iKSAqIGMwMDAuYiArIChkLmIt ZC5yKSAqIGMwMDEuYiArIChkLnItZC5nKSAqIGMxMDEuYiArIChkLmcpICogYzExMS5iOwo+ICsg fQo+ICsgfSBlbHNlIHsKPiArIGlmIChkLmIgPiBkLmcpIHsKPiArIGNvbnN0IHJnYnZlYyBjMDAx ID0gbHV0W3ByZXZbMF0gKiBsdXRzaXplMiArIHByZXZbMV0gKiBsdXRzaXplICsgbmV4dFsyXV07 Cj4gKyBjb25zdCByZ2J2ZWMgYzAxMSA9IGx1dFtwcmV2WzBdICogbHV0c2l6ZTIgKyBuZXh0WzFd ICogbHV0c2l6ZSArIG5leHRbMl1dOwo+ICsgYy5yID0gKDEtZC5iKSAqIGMwMDAuciArIChkLmIt ZC5nKSAqIGMwMDEuciArIChkLmctZC5yKSAqIGMwMTEuciArIChkLnIpICogYzExMS5yOwo+ICsg Yy5nID0gKDEtZC5iKSAqIGMwMDAuZyArIChkLmItZC5nKSAqIGMwMDEuZyArIChkLmctZC5yKSAq IGMwMTEuZyArIChkLnIpICogYzExMS5nOwo+ICsgYy5iID0gKDEtZC5iKSAqIGMwMDAuYiArIChk LmItZC5nKSAqIGMwMDEuYiArIChkLmctZC5yKSAqIGMwMTEuYiArIChkLnIpICogYzExMS5iOwo+ ICsgfSBlbHNlIGlmIChkLmIgPiBkLnIpIHsKPiArIGNvbnN0IHJnYnZlYyBjMDEwID0gbHV0W3By ZXZbMF0gKiBsdXRzaXplMiArIG5leHRbMV0gKiBsdXRzaXplICsgcHJldlsyXV07Cj4gKyBjb25z dCByZ2J2ZWMgYzAxMSA9IGx1dFtwcmV2WzBdICogbHV0c2l6ZTIgKyBuZXh0WzFdICogbHV0c2l6 ZSArIG5leHRbMl1dOwo+ICsgYy5yID0gKDEtZC5nKSAqIGMwMDAuciArIChkLmctZC5iKSAqIGMw MTAuciArIChkLmItZC5yKSAqIGMwMTEuciArIChkLnIpICogYzExMS5yOwo+ICsgYy5nID0gKDEt ZC5nKSAqIGMwMDAuZyArIChkLmctZC5iKSAqIGMwMTAuZyArIChkLmItZC5yKSAqIGMwMTEuZyAr IChkLnIpICogYzExMS5nOwo+ICsgYy5iID0gKDEtZC5nKSAqIGMwMDAuYiArIChkLmctZC5iKSAq IGMwMTAuYiArIChkLmItZC5yKSAqIGMwMTEuYiArIChkLnIpICogYzExMS5iOwo+ICsgfSBlbHNl IHsKPiArIGNvbnN0IHJnYnZlYyBjMDEwID0gbHV0W3ByZXZbMF0gKiBsdXRzaXplMiArIG5leHRb MV0gKiBsdXRzaXplICsgcHJldlsyXV07Cj4gKyBjb25zdCByZ2J2ZWMgYzExMCA9IGx1dFtuZXh0 WzBdICogbHV0c2l6ZTIgKyBuZXh0WzFdICogbHV0c2l6ZSArIHByZXZbMl1dOwo+ICsgYy5yID0g KDEtZC5nKSAqIGMwMDAuciArIChkLmctZC5yKSAqIGMwMTAuciArIChkLnItZC5iKSAqIGMxMTAu ciArIChkLmIpICogYzExMS5yOwo+ICsgYy5nID0gKDEtZC5nKSAqIGMwMDAuZyArIChkLmctZC5y KSAqIGMwMTAuZyArIChkLnItZC5iKSAqIGMxMTAuZyArIChkLmIpICogYzExMS5nOwo+ICsgYy5i ID0gKDEtZC5nKSAqIGMwMDAuYiArIChkLmctZC5yKSAqIGMwMTAuYiArIChkLnItZC5iKSAqIGMx MTAuYiArIChkLmIpICogYzExMS5iOwo+ICsgfQo+ICsgfQo+ICsgcmV0dXJuIGM7Cj4gK30KPiAr Cj4gKyNkZWZpbmUgTFVUM0RfS0VSTkVMKElOVEVSUF9GVU5DKSBcCj4gK19fa2VybmVsIHZvaWQg bHV0M2RfIyNJTlRFUlBfRlVOQyggXAo+ICsgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNyYywgXAo+ ICsgX193cml0ZV9vbmx5IGltYWdlMmRfdCBkc3QsIFwKPiArIF9fZ2xvYmFsIGNvbnN0IHJnYnZl YyogbHV0LCBcCj4gKyBpbnQgbHV0X2VkZ2Vfc2l6ZSkgXAo+ICt7IFwKPiArIGNvbnN0IHNhbXBs ZXJfdCBzYW1wbGVyID0gKENMS19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IFwKPiArIENMS19B RERSRVNTX0NMQU1QX1RPX0VER0UgfCBcCj4gKyBDTEtfRklMVEVSX05FQVJFU1QpOyBcCj4gKyBc Cj4gKyBpbnQyIGxvYyA9IChpbnQyKShnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEp KTsgXAo+ICsgZmxvYXQ0IHB4ID0gcmVhZF9pbWFnZWYoc3JjLCBzYW1wbGVyLCBsb2MpOyBcCj4g KyBcCj4gKyBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeyBcCj4gKyBweFtpXSAqPSAobHV0 X2VkZ2Vfc2l6ZSAtIDEpOyBcCj4gKyB9IFwKPiArIFwKPiArIHJnYnZlYyBsdXRweCA9IElOVEVS UF9GVU5DKHB4LCBsdXQsIGx1dF9lZGdlX3NpemUpOyBcCj4gKyBcCj4gKyB3cml0ZV9pbWFnZWYo ZHN0LCBsb2MsIChmbG9hdDQpKGx1dHB4LnIsIGx1dHB4LmcsIGx1dHB4LmIsIDAuMGYpKTsgXAo+ ICt9Cj4gKwo+ICtMVVQzRF9LRVJORUwoaW50ZXJwX25lYXJlc3QpCj4gK0xVVDNEX0tFUk5FTChp bnRlcnBfdHJpbGluZWFyKQo+ICtMVVQzRF9LRVJORUwoaW50ZXJwX3RldHJhaGVkcmFsKQo+IGRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci9vcGVuY2xfc291cmNlLmggYi9saWJhdmZpbHRlci9vcGVu Y2xfc291cmNlLmgKPiBpbmRleCBiNjkzMGZiNjg2Li5kMTQzMjg2ZDIxIDEwMDY0NAo+IC0tLSBh L2xpYmF2ZmlsdGVyL29wZW5jbF9zb3VyY2UuaAo+ICsrKyBiL2xpYmF2ZmlsdGVyL29wZW5jbF9z b3VyY2UuaAo+IEBAIC0yNiw2ICsyNiw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2Vf Y29udm9sdXRpb25fY2w7Cj4gZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9kZXNoYWtlX2Ns Owo+IGV4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfbmVpZ2hib3JfY2w7Cj4gZXh0ZXJuIGNv bnN0IGNoYXIgKmZmX3NvdXJjZV9ubG1lYW5zX2NsOwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZf c291cmNlX2x1dDNkX2NsOwo+IGV4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2Vfb3ZlcmxheV9j bDsKPiBleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3BhZF9jbDsKPiBleHRlcm4gY29uc3Qg Y2hhciAqZmZfc291cmNlX3JlbWFwX2NsOwo+IEBAIC0zNCw0ICszNSw1IEBAIGV4dGVybiBjb25z dCBjaGFyICpmZl9zb3VyY2VfdHJhbnNwb3NlX2NsOwo+IGV4dGVybiBjb25zdCBjaGFyICpmZl9z b3VyY2VfdW5zaGFycF9jbDsKPiBleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3hmYWRlX2Ns Owo+Cj4gKwo+ICNlbmRpZiAvKiBBVkZJTFRFUl9PUEVOQ0xfU09VUkNFX0ggKi8KPiBkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvdmZfbHV0M2Rfb3BlbmNsLmMgYi9saWJhdmZpbHRlci92Zl9sdXQz ZF9vcGVuY2wuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uYmI3 ZDEwZWQzNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZpbHRlci92Zl9sdXQzZF9vcGVu Y2wuYwo+IEBAIC0wLDAgKzEsNDYwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBK YW4gU3R1ZGVueQo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAq Cj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImNvbmZpZ19jb21wb25l bnRzLmgiCj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXZzdHJpbmcuaCIKPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvZmlsZV9vcGVuLmgiCj4g Kwo+ICsjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKPiArI2luY2x1ZGUgImZpbHRlcnMuaCIKPiArI2lu Y2x1ZGUgIm9wZW5jbC5oIgo+ICsjaW5jbHVkZSAiZHJhd3V0aWxzLmgiCj4gKyNpbmNsdWRlICJv cGVuY2xfc291cmNlLmgiCj4gKyNpbmNsdWRlICJ2aWRlby5oIgo+ICsKPiArCj4gKyNkZWZpbmUg TUFYX0xJTkVfU0laRSA1MTIKPiArCj4gK2VudW0gaW50ZXJwX21vZGUgewo+ICsgSU5URVJQT0xB VEVfTkVBUkVTVCwKPiArIElOVEVSUE9MQVRFX1RSSUxJTkVBUiwKPiArIElOVEVSUE9MQVRFX1RF VFJBSEVEUkFMLAo+ICsgSU5URVJQT0xBVEVfUFlSQU1JRCwKPiArIElOVEVSUE9MQVRFX1BSSVNN LAo+ICsgTkJfSU5URVJQX01PREUKPiArfTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IHJnYnZlYyB7 Cj4gKyBjbF9mbG9hdCByLCBnLCBiLCBhOwo+ICt9IHJnYnZlYzsKPiArCj4gKyNkZWZpbmUgTUFY X0xFVkVMIDI1Ngo+ICsKPiArCj4gK3R5cGVkZWYgc3RydWN0IExVVDNET3BlbkNMQ29udGV4dCB7 Cj4gKyBPcGVuQ0xGaWx0ZXJDb250ZXh0IG9jZjsKPiArCj4gKyBpbnQgaW5pdGlhbGlzZWQ7Cj4g KyBjbF9rZXJuZWwga2VybmVsOwo+ICsgY2xfY29tbWFuZF9xdWV1ZSBjb21tYW5kX3F1ZXVlOwo+ ICsgY2xfbWVtIGx1dDNkX2J1ZjsKPiArCj4gKyBzdHJ1Y3QgcmdidmVjICpsdXQ7Cj4gKyBpbnQg bHV0c2l6ZTsKPiArIGludCBsdXRzaXplMjsKPiArIHN0cnVjdCByZ2J2ZWMgc2NhbGU7Cj4gKyBp bnQgaW50ZXJwb2xhdGlvbjsgLy8vPGludGVycF9tb2RlCj4gKyBjaGFyICpmaWxlOwo+ICt9IExV VDNET3BlbkNMQ29udGV4dDsKPiArCj4gK3N0YXRpYyBpbnQgYWxsb2NhdGVfM2RsdXQoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIGludCBsdXRzaXplKQo+ICt7Cj4gKyBMVVQzRE9wZW5DTENvbnRleHQg Kmx1dDNkID0gY3R4LT5wcml2Owo+ICsgaWYgKGx1dHNpemUgPCAyIHx8IGx1dHNpemUgPiBNQVhf TEVWRUwpIHsKPiArIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlRvbyBsYXJnZSBvciBpbnZh bGlkIDNEIExVVCBzaXplXG4iKTsKPiArIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyB9Cj4g Kwo+ICsgYXZfZnJlZXAoJmx1dDNkLT5sdXQpOwo+ICsgbHV0M2QtPmx1dCA9IGF2X21hbGxvY19h cnJheShsdXRzaXplICogbHV0c2l6ZSAqIGx1dHNpemUsIHNpemVvZigqbHV0M2QtPmx1dCkpOwo+ ICsgaWYgKCFsdXQzZC0+bHV0KQo+ICsgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyBs dXQzZC0+bHV0c2l6ZSA9IGx1dHNpemU7Cj4gKyBsdXQzZC0+bHV0c2l6ZTIgPSBsdXRzaXplICog bHV0c2l6ZTsKPiArIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNldF9pZGVudGl0 eV9tYXRyaXgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGludCBzaXplKQo+ICt7Cj4gKyBMVVQzRE9w ZW5DTENvbnRleHQgKmx1dDNkID0gY3R4LT5wcml2Owo+ICsgaW50IHJldCwgaSwgaiwgazsKPiAr IGNvbnN0IGludCBzaXplMiA9IHNpemUgKiBzaXplOwo+ICsgY29uc3QgZmxvYXQgYyA9IDEuIC8g KHNpemUgLSAxKTsKPiArCj4gKyByZXQgPSBhbGxvY2F0ZV8zZGx1dChjdHgsIHNpemUpOwo+ICsg aWYgKHJldCA8IDApCj4gKyByZXR1cm4gcmV0Owo+ICsKPiArIGZvciAoayA9IDA7IGsgPCBzaXpl OyBrKyspIHsKPiArIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKPiArIGZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKPiArIHN0cnVjdCByZ2J2ZWMgKnZlYyA9ICZsdXQzZC0+bHV0W2sg KiBzaXplMiArIGogKiBzaXplICsgaV07Cj4gKyB2ZWMtPnIgPSBrICogYzsKPiArIHZlYy0+ZyA9 IGogKiBjOwo+ICsgdmVjLT5iID0gaSAqIGM7Cj4gKyB9Cj4gKyB9Cj4gKyB9Cj4gKwo+ICsgcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2tpcF9saW5lKGNvbnN0IGNoYXIgKnApCj4g K3sKPiArIHdoaWxlICgqcCAmJiBhdl9pc3NwYWNlKCpwKSkKPiArIHArKzsKPiArIHJldHVybiAh KnAgfHwgKnAgPT0gJyMnOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIE5FWFRfTElORShsb29wX2NvbmQp IGRvIHsgXAo+ICsgaWYgKCFmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7IFwKPiArIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgRU9GXG4iKTsgXAo+ICsgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7IFwKPiArIH0gXAo+ICt9IHdoaWxlIChsb29wX2NvbmQpCj4g Kwo+ICtzdGF0aWMgaW50IHBhcnNlX2N1YmUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZJTEUgKmYp Cj4gK3sKPiArIExVVDNET3BlbkNMQ29udGV4dCAqbHV0M2QgPSBjdHgtPnByaXY7Cj4gKyBjaGFy IGxpbmVbTUFYX0xJTkVfU0laRV07Cj4gKwo+ICsgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihs aW5lKSwgZikpIHsKPiArIGlmICghc3RybmNtcChsaW5lLCAiTFVUXzNEX1NJWkUiLCAxMSkpIHsK PiArIGludCByZXQsIGksIGosIGs7Cj4gKyBjb25zdCBpbnQgc2l6ZSA9IHN0cnRvbChsaW5lICsg MTIsIE5VTEwsIDApOwo+ICsgY29uc3QgaW50IHNpemUyID0gc2l6ZSAqIHNpemU7Cj4gKwo+ICsg cmV0ID0gYWxsb2NhdGVfM2RsdXQoY3R4LCBzaXplKTsKPiArIGlmIChyZXQgPCAwKQo+ICsgcmV0 dXJuIHJldDsKPiArCj4gKyBmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Cj4gKyBmb3IgKGog PSAwOyBqIDwgc2l6ZTsgaisrKSB7Cj4gKyBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4g KyBzdHJ1Y3QgcmdidmVjICp2ZWMgPSAmbHV0M2QtPmx1dFtpICogc2l6ZTIgKyBqICogc2l6ZSAr IGtdOwo+ICsKPiArIGRvIHsKPiArdHJ5X2FnYWluOgo+ICsgTkVYVF9MSU5FKDApOwo+ICsgaWYg KCFzdHJuY21wKGxpbmUsICJET01BSU5fIiwgNykpIHsKPiArIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIk1pbi9tYXggbm90IHN1cHBvcnRlZCBpbiB0aGlzIGZvcm1hdFxuIik7Cj4gKyByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArIH0gZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgIlRJ VExFIiwgNSkpIHsKPiArIGdvdG8gdHJ5X2FnYWluOwo+ICsgfQo+ICsgfSB3aGlsZSAoc2tpcF9s aW5lKGxpbmUpKTsKPiArIGlmIChhdl9zc2NhbmYobGluZSwgIiVmICVmICVmIiwgJnZlYy0+ciwg JnZlYy0+ZywgJnZlYy0+YikgIT0gMykKPiArIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgfQo+ICsgfQo+ICsgfQo+ICsgYnJlYWs7Cj4gKyB9Cj4gKyB9Cj4gKwo+ICsgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbHV0M2Rfb3BlbmNsX2luaXRfZGV2aWNlKEFWRmlsdGVy Q29udGV4dCAqYXZjdHgpCj4gK3sKPiArIGludCBlcnI7Cj4gKyBMVVQzRE9wZW5DTENvbnRleHQg KmN0eCA9IGF2Y3R4LT5wcml2Owo+ICsgY2xfaW50IGNsZTsKPiArCj4gKwo+ICsgc2l6ZV90IG4g PSBjdHgtPmx1dHNpemU7Cj4gKyBzaXplX3QgdG90YWwgPSBuICogbiAqIG47Cj4gKwo+ICsKPiAr IGNsX21lbSBsdXQzZF9idWYgPSBjbENyZWF0ZUJ1ZmZlcihjdHgtPm9jZi5od2N0eC0+Y29udGV4 dCwKPiArIENMX01FTV9SRUFEX09OTFkgfAo+ICsgQ0xfTUVNX0NPUFlfSE9TVF9QVFIgfAo+ICsg Q0xfTUVNX0hPU1RfTk9fQUNDRVNTLAo+ICsgc2l6ZW9mKHJnYnZlYykgKiB0b3RhbCwKPiArIGN0 eC0+bHV0LCAmY2xlKTsKPiArCj4gKyBpZiAoIWx1dDNkX2J1Zikgewo+ICsgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlcjogIgo+ICsgIiVkLlxuIiwg Y2xlKTsKPiArIHJldHVybiBBVkVSUk9SKEVJTyk7Cj4gKyB9Cj4gKyBjdHgtPmx1dDNkX2J1ZiA9 IGx1dDNkX2J1ZjsKPiArCj4gKyBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkxVVDNEIGRh dGEgbG9hZGVkIG9udG8gaG9zdFxuIik7Cj4gKwo+ICsKPiArCj4gKwo+ICsgZXJyID0gZmZfb3Bl bmNsX2ZpbHRlcl9sb2FkX3Byb2dyYW0oYXZjdHgsICZmZl9zb3VyY2VfbHV0M2RfY2wsIDEpOwo+ ICsgaWYgKGVyciA8IDApCj4gKyByZXR1cm4gZXJyOwo+ICsKPiArIGN0eC0+Y29tbWFuZF9xdWV1 ZSA9IGNsQ3JlYXRlQ29tbWFuZFF1ZXVlKGN0eC0+b2NmLmh3Y3R4LT5jb250ZXh0LAo+ICsgY3R4 LT5vY2YuaHdjdHgtPmRldmljZV9pZCwKPiArIDAsICZjbGUpOwo+ICsgQ0xfRkFJTF9PTl9FUlJP UihBVkVSUk9SKEVJTyksICJGYWlsZWQgdG8gY3JlYXRlIE9wZW5DTCAiCj4gKyAiY29tbWFuZCBx dWV1ZSAlZC5cbiIsIGNsZSk7Cj4gKwo+ICsgY29uc3QgY2hhciAqa2VybmVsX25hbWU7Cj4gKyBz d2l0Y2ggKGN0eC0+aW50ZXJwb2xhdGlvbikgewo+ICsgY2FzZSBJTlRFUlBPTEFURV9ORUFSRVNU OiBrZXJuZWxfbmFtZSA9ICJsdXQzZF9pbnRlcnBfbmVhcmVzdCI7IGJyZWFrOwo+ICsgY2FzZSBJ TlRFUlBPTEFURV9UUklMSU5FQVI6IGtlcm5lbF9uYW1lID0gImx1dDNkX2ludGVycF90cmlsaW5l YXIiOyBicmVhazsKPiArIGNhc2UgSU5URVJQT0xBVEVfVEVUUkFIRURSQUw6IGtlcm5lbF9uYW1l ID0gImx1dDNkX2ludGVycF90ZXRyYWhlZHJhbCI7IGJyZWFrOwo+ICsgZGVmYXVsdDoKPiArIGF2 X2Fzc2VydDAoMCk7Cj4gKyB9Cj4gKyBjdHgtPmtlcm5lbCA9IGNsQ3JlYXRlS2VybmVsKGN0eC0+ b2NmLnByb2dyYW0sIGtlcm5lbF9uYW1lLCAmY2xlKTsKPiArIENMX0ZBSUxfT05fRVJST1IoQVZF UlJPUihFSU8pLCAiRmFpbGVkIHRvIGNyZWF0ZSAiCj4gKyAia2VybmVsICVkLlxuIiwgY2xlKTsK PiArCj4gKyBjdHgtPmluaXRpYWxpc2VkID0gMTsKPiArIHJldHVybiAwOwo+ICsgZmFpbDoKPiAr IGlmIChjdHgtPmNvbW1hbmRfcXVldWUpCj4gKyBjbFJlbGVhc2VDb21tYW5kUXVldWUoY3R4LT5j b21tYW5kX3F1ZXVlKTsKPiArIGlmIChjdHgtPmtlcm5lbCkKPiArIGNsUmVsZWFzZUtlcm5lbChj dHgtPmtlcm5lbCk7Cj4gKyByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGx1dDNk X29wZW5jbF9pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArCj4gKyBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIlN0YXJ0aW5nIGludGlhbGl6YXRpb24gb2YgTFVUM0QgT3Bl bkNMXG4iKTsKPiArIExVVDNET3BlbkNMQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7Cj4gKyBp bnQgZXJyID0gMDsKPiArCj4gKyBmZl9vcGVuY2xfZmlsdGVyX2luaXQoYXZjdHgpOwo+ICsKPiAr IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTFVUM0QgT3BlbkNMIGZpbHRlciBpbml0aWFs aXplZFxuIik7Cj4gKwo+ICsKPiArIEZJTEUgKmY7Cj4gKyBjb25zdCBjaGFyICpleHQ7Cj4gKwo+ ICsgaWYgKCFjdHgtPmZpbGUpIHsKPiArIHJldHVybiBzZXRfaWRlbnRpdHlfbWF0cml4KGF2Y3R4 LCAzMik7Cj4gKyB9Cj4gKyBlbHNlIHsKPiArIGV4dCA9IHN0cnJjaHIoY3R4LT5maWxlLCAnLicp Owo+ICsgaWYgKCFleHQpIHsKPiArIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxl IHRvIGd1ZXNzIHRoZSBmb3JtYXQgZnJvbSB0aGUgZXh0ZW5zaW9uXG4iKTsKPiArIGVyciA9IEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKyByZXR1cm4gZXJyOwo+ICsgfQo+ICsgZXh0Kys7Cj4gKyBp ZiAoIWF2X3N0cmNhc2VjbXAoZXh0LCAiY3ViZSIpKSB7Cj4gKyBmID0gYXZwcml2X2ZvcGVuX3V0 ZjgoY3R4LT5maWxlLCAiciIpOwo+ICsgaWYgKCFmKSB7Cj4gKyBlcnIgPSBBVkVSUk9SKGVycm5v KTsKPiArIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiJXM6ICVzXG4iLCBjdHgtPmZpbGUs IGF2X2VycjJzdHIoZXJyKSk7Cj4gKyByZXR1cm4gZXJyOwo+ICsgfQo+ICsgZXJyID0gcGFyc2Vf Y3ViZShhdmN0eCwgZik7Cj4gKyBmY2xvc2UoZik7Cj4gKyB9IGVsc2Ugewo+ICsgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJVbnJlY29nbml6ZWQgJy4lcycgZmlsZSB0eXBlXG4iLCBleHQp Owo+ICsgZXJyID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgcmV0dXJuIGVycjsKPiArIH0KPiArIGlm ICghZXJyICYmICFjdHgtPmx1dHNpemUpIHsKPiArIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiM0QgTFVUIGlzIGVtcHR5XG4iKTsKPiArIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyByZXR1cm4gZXJyOwo+ICsgfQo+ICsKPiArIH0KPiArIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiTFVUM0QgT3BlbkNMIGRhdGEgbG9hZGVkXG4iKTsKPiArIHJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgbHV0M2Rfb3BlbmNsX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsg KmlubGluaywgQVZGcmFtZSAqaW5wdXQpCj4gK3sKPiArIEFWRmlsdGVyQ29udGV4dCAqYXZjdHgg PSBpbmxpbmstPmRzdDsKPiArIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGF2Y3R4LT5vdXRwdXRz WzBdOwo+ICsgTFVUM0RPcGVuQ0xDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdjsKPiArIEFWRnJh bWUgKm91dHB1dCA9IE5VTEw7Cj4gKyBjbF9pbnQgY2xlOwo+ICsgc2l6ZV90IGdsb2JhbF93b3Jr WzJdOwo+ICsgY2xfbWVtIHNyYywgZHN0Owo+ICsgaW50IGVyciwgcDsKPiArCj4gKyBhdl9sb2co Y3R4LCBBVl9MT0dfREVCVUcsICJGaWx0ZXIgaW5wdXQ6ICVzLCAldXgldSAoJSJQUklkNjQiKS5c biIsCj4gKyBhdl9nZXRfcGl4X2ZtdF9uYW1lKGlucHV0LT5mb3JtYXQpLAo+ICsgaW5wdXQtPndp ZHRoLCBpbnB1dC0+aGVpZ2h0LCBpbnB1dC0+cHRzKTsKPiArCj4gKyBpZiAoIWlucHV0LT5od19m cmFtZXNfY3R4KQo+ICsgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4gKyBpZiAoIWN0eC0+ aW5pdGlhbGlzZWQpIHsKPiArIEFWSFdGcmFtZXNDb250ZXh0ICppbnB1dF9jdHggPQo+ICsgKEFW SFdGcmFtZXNDb250ZXh0KilpbnB1dC0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKPiArIGludCBmbXQg PSBpbnB1dF9jdHgtPnN3X2Zvcm1hdDsKPiArCj4gKyAvLyBNYWtlIHN1cmUgdGhlIGlucHV0IGlz IGEgZm9ybWF0IHdlIHN1cHBvcnQKPiArIGlmIChmbXQgIT0gQVZfUElYX0ZNVF9BUkdCICYmCj4g KyBmbXQgIT0gQVZfUElYX0ZNVF9SR0JBICYmCj4gKyBmbXQgIT0gQVZfUElYX0ZNVF9BQkdSICYm Cj4gKyBmbXQgIT0gQVZfUElYX0ZNVF9CR1JBCj4gKyApIHsKPiArIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAidW5zdXBwb3J0ZWQgKG5vbi1SR0IpIGZvcm1hdCBpbiBsdXQzZF9vcGVuY2wu XG4iKTsKPiArIGVyciA9IEFWRVJST1IoRU5PU1lTKTsKPiArIGdvdG8gZmFpbDsKPiArIH0KPiAr Cj4gKwo+ICsgZXJyID0gbHV0M2Rfb3BlbmNsX2luaXRfZGV2aWNlKGF2Y3R4KTsKPiArIGlmIChl cnIgPCAwKQo+ICsgZ290byBmYWlsOwo+ICsgfQo+ICsKPiArIG91dHB1dCA9IGZmX2dldF92aWRl b19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Cj4gKyBpZiAoIW91dHB1 dCkgewo+ICsgZXJyID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgZ290byBmYWlsOwo+ICsgfQo+ICsK PiArCj4gKyBmb3IgKHAgPSAwOyBwIDwgRkZfQVJSQVlfRUxFTVMob3V0cHV0LT5kYXRhKTsgcCsr KSB7Cj4gKyBzcmMgPSAoY2xfbWVtKSBpbnB1dC0+ZGF0YVtwXTsKPiArIGRzdCA9IChjbF9tZW0p b3V0cHV0LT5kYXRhW3BdOwo+ICsKPiArIGlmICghZHN0KQo+ICsgYnJlYWs7Cj4gKwo+ICsgQ0xf U0VUX0tFUk5FTF9BUkcoY3R4LT5rZXJuZWwsIDAsIGNsX21lbSwgJnNyYyk7Cj4gKyBDTF9TRVRf S0VSTkVMX0FSRyhjdHgtPmtlcm5lbCwgMSwgY2xfbWVtLCAmZHN0KTsKPiArIENMX1NFVF9LRVJO RUxfQVJHKGN0eC0+a2VybmVsLCAyLCBjbF9tZW0sICZjdHgtPmx1dDNkX2J1Zik7Cj4gKyBDTF9T RVRfS0VSTkVMX0FSRyhjdHgtPmtlcm5lbCwgMywgY2xfaW50LCAmY3R4LT5sdXRzaXplKTsKPiAr Cj4gKyBlcnIgPSBmZl9vcGVuY2xfZmlsdGVyX3dvcmtfc2l6ZV9mcm9tX2ltYWdlKGF2Y3R4LCBn bG9iYWxfd29yaywgb3V0cHV0LCBwLCAwKTsKPiArIGlmIChlcnIgPCAwKQo+ICsgZ290byBmYWls Owo+ICsKPiArIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiUnVuIGtlcm5lbCBvbiBwbGFu ZSAlZCAiCj4gKyAiKCUiU0laRV9TUEVDSUZJRVIieCUiU0laRV9TUEVDSUZJRVIiKS5cbiIsCj4g KyBwLCBnbG9iYWxfd29ya1swXSwgZ2xvYmFsX3dvcmtbMV0pOwo+ICsKPiArIGNsZSA9IGNsRW5x dWV1ZU5EUmFuZ2VLZXJuZWwoY3R4LT5jb21tYW5kX3F1ZXVlLCBjdHgtPmtlcm5lbCwgMiwgTlVM TCwKPiArIGdsb2JhbF93b3JrLCBOVUxMLAo+ICsgMCwgTlVMTCwgTlVMTCk7Cj4gKyBDTF9GQUlM X09OX0VSUk9SKEFWRVJST1IoRUlPKSwgIkZhaWxlZCB0byBlbnF1ZXVlICIKPiArICJrZXJuZWw6 ICVkLlxuIiwgY2xlKTsKPiArIH0KPiArCj4gKyBjbGUgPSBjbEZpbmlzaChjdHgtPmNvbW1hbmRf cXVldWUpOwo+ICsgQ0xfRkFJTF9PTl9FUlJPUihBVkVSUk9SKEVJTyksICJGYWlsZWQgdG8gZmlu aXNoIGNvbW1hbmQgcXVldWU6ICVkLlxuIiwgY2xlKTsKPiArCj4gKyBlcnIgPSBhdl9mcmFtZV9j b3B5X3Byb3BzKG91dHB1dCwgaW5wdXQpOwo+ICsgaWYgKGVyciA8IDApCj4gKyBnb3RvIGZhaWw7 Cj4gKwo+ICsgYXZfZnJhbWVfZnJlZSgmaW5wdXQpOwo+ICsKPiArIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIkZpbHRlciBvdXRwdXQ6ICVzLCAldXgldSAoJSJQUklkNjQiKS5cbiIsCj4gKyBh dl9nZXRfcGl4X2ZtdF9uYW1lKG91dHB1dC0+Zm9ybWF0KSwKPiArIG91dHB1dC0+d2lkdGgsIG91 dHB1dC0+aGVpZ2h0LCBvdXRwdXQtPnB0cyk7Cj4gKwo+ICsgcmV0dXJuIGZmX2ZpbHRlcl9mcmFt ZShvdXRsaW5rLCBvdXRwdXQpOwo+ICsKPiArZmFpbDoKPiArIGNsRmluaXNoKGN0eC0+Y29tbWFu ZF9xdWV1ZSk7Cj4gKyBhdl9mcmFtZV9mcmVlKCZpbnB1dCk7Cj4gKyBhdl9mcmFtZV9mcmVlKCZv dXRwdXQpOwo+ICsgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGF2X2NvbGQgdm9pZCBs dXQzZF9vcGVuY2xfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArIExVVDNE T3BlbkNMQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7Cj4gKyBjbF9pbnQgY2xlOwo+ICsKPiAr IGNsUmVsZWFzZU1lbU9iamVjdChjdHgtPmx1dDNkX2J1Zik7Cj4gKwo+ICsgaWYgKGN0eC0+a2Vy bmVsKSB7Cj4gKyBjbGUgPSBjbFJlbGVhc2VLZXJuZWwoY3R4LT5rZXJuZWwpOwo+ICsgaWYgKGNs ZSAhPSBDTF9TVUNDRVNTKQo+ICsgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gcmVsZWFzZSAiCj4gKyAia2VybmVsOiAlZC5cbiIsIGNsZSk7Cj4gKyB9Cj4gKwo+ICsgaWYg KGN0eC0+Y29tbWFuZF9xdWV1ZSkgewo+ICsgY2xlID0gY2xSZWxlYXNlQ29tbWFuZFF1ZXVlKGN0 eC0+Y29tbWFuZF9xdWV1ZSk7Cj4gKyBpZiAoY2xlICE9IENMX1NVQ0NFU1MpCj4gKyBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byByZWxlYXNlICIKPiArICJjb21tYW5kIHF1 ZXVlOiAlZC5cbiIsIGNsZSk7Cj4gKyB9Cj4gKwo+ICsgYXZfZnJlZXAoJmN0eC0+bHV0KTsKPiAr Cj4gKyBmZl9vcGVuY2xfZmlsdGVyX3VuaW5pdChhdmN0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBBVkZpbHRlclBhZCBsdXQzZF9vcGVuY2xfaW5wdXRzW10gPSB7Cj4gKyB7Cj4gKyAubmFt ZSA9ICJkZWZhdWx0IiwKPiArIC50eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ICsgLmZpbHRl cl9mcmFtZSA9ICZsdXQzZF9vcGVuY2xfZmlsdGVyX2ZyYW1lLAo+ICsgLmNvbmZpZ19wcm9wcyA9 ICZmZl9vcGVuY2xfZmlsdGVyX2NvbmZpZ19pbnB1dCwKPiArIH0sCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3QgQVZGaWx0ZXJQYWQgbHV0M2Rfb3BlbmNsX291dHB1dHNbXSA9IHsKPiArIHsKPiAr IC5uYW1lID0gImRlZmF1bHQiLAo+ICsgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gKyAu Y29uZmlnX3Byb3BzID0gJmZmX29wZW5jbF9maWx0ZXJfY29uZmlnX291dHB1dCwKPiArIH0sCj4g K307Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihMVVQzRE9wZW5DTENvbnRleHQs IHgpCj4gKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFWX09Q VF9GTEFHX1ZJREVPX1BBUkFNKQo+ICsjZGVmaW5lIFRGTEFHUyBBVl9PUFRfRkxBR19GSUxURVJJ TkdfUEFSQU18QVZfT1BUX0ZMQUdfVklERU9fUEFSQU18QVZfT1BUX0ZMQUdfUlVOVElNRV9QQVJB TQo+ICsKPiArCj4gKwo+ICsjaWYgQ09ORklHX0xVVDNEX09QRU5DTF9GSUxURVIKPiArCj4gKwo+ ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gbHV0M2Rfb3BlbmNsX29wdGlvbnNbXSA9IHsKPiArIHsg ImZpbGUiLCAic2V0IDNEIExVVCBmaWxlIG5hbWUiLCBPRkZTRVQoZmlsZSksIEFWX09QVF9UWVBF X1NUUklORywgey5zdHI9TlVMTH0sIC5mbGFncyA9IEZMQUdTIH0sCj4gKyB7ICJpbnRlcnAiLCAi c2VsZWN0IGludGVycG9sYXRpb24gbW9kZSIsIE9GRlNFVChpbnRlcnBvbGF0aW9uKSwgQVZfT1BU X1RZUEVfSU5ULCB7Lmk2ND1JTlRFUlBPTEFURV9URVRSQUhFRFJBTH0sIDAsIE5CX0lOVEVSUF9N T0RFLTEsIFRGTEFHUywgLnVuaXQgPSAiaW50ZXJwX21vZGUiIH0sCj4gKyB7ICJuZWFyZXN0Iiwg InVzZSB2YWx1ZXMgZnJvbSB0aGUgbmVhcmVzdCBkZWZpbmVkIHBvaW50cyIsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2ND1JTlRFUlBPTEFURV9ORUFSRVNUfSwgMCwgMCwgVEZMQUdTLCAudW5p dCA9ICJpbnRlcnBfbW9kZSIgfSwKPiArIHsgInRyaWxpbmVhciIsICJpbnRlcnBvbGF0ZSB2YWx1 ZXMgdXNpbmcgdGhlIDggcG9pbnRzIGRlZmluaW5nIGEgY3ViZSIsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2ND1JTlRFUlBPTEFURV9UUklMSU5FQVJ9LCAwLCAwLCBURkxBR1MsIC51bml0ID0g ImludGVycF9tb2RlIiB9LAo+ICsgeyAidGV0cmFoZWRyYWwiLCAiaW50ZXJwb2xhdGUgdmFsdWVz IHVzaW5nIGEgdGV0cmFoZWRyb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9SU5URVJQ T0xBVEVfVEVUUkFIRURSQUx9LCAwLCAwLCBURkxBR1MsIC51bml0ID0gImludGVycF9tb2RlIiB9 LCBcCj4gKyB7IE5VTEwgfQo+ICt9Owo+ICsKPiArQVZGSUxURVJfREVGSU5FX0NMQVNTKGx1dDNk X29wZW5jbCk7Cj4gKwo+ICtjb25zdCBGRkZpbHRlciBmZl92Zl9sdXQzZF9vcGVuY2wgPSB7Cj4g KyAucC5uYW1lID0gImx1dDNkX29wZW5jbCIsCj4gKyAucC5kZXNjcmlwdGlvbiA9IE5VTExfSUZf Q09ORklHX1NNQUxMKCJBZGp1c3QgY29sb3JzIHVzaW5nIGEgM0QgTFVULiIpLAo+ICsgLnAucHJp dl9jbGFzcyA9ICZsdXQzZF9vcGVuY2xfY2xhc3MsCj4gKyAucC5mbGFncyA9IEFWRklMVEVSX0ZM QUdfSFdERVZJQ0UsCj4gKyAucHJpdl9zaXplID0gc2l6ZW9mKExVVDNET3BlbkNMQ29udGV4dCks Cj4gKyAuaW5pdCA9ICZsdXQzZF9vcGVuY2xfaW5pdCwKPiArIC51bmluaXQgPSAmbHV0M2Rfb3Bl bmNsX3VuaW5pdCwKPiArIEZJTFRFUl9JTlBVVFMobHV0M2Rfb3BlbmNsX2lucHV0cyksCj4gKyBG SUxURVJfT1VUUFVUUyhsdXQzZF9vcGVuY2xfb3V0cHV0cyksCj4gKyBGSUxURVJfU0lOR0xFX1BJ WEZNVChBVl9QSVhfRk1UX09QRU5DTCksCj4gKyAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxURVJf RkxBR19IV0ZSQU1FX0FXQVJFLAo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIENPTkZJR19MVVQzRF9P UEVOQ0xfRklMVEVSICovCj4gLS0KPiAyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCj4KPgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==