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 ESMTP id 45662435E3 for ; Sat, 18 Jun 2022 12:08:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3D67A68B59D; Sat, 18 Jun 2022 15:08:19 +0300 (EEST) Received: from sonic311-30.consmr.mail.ir2.yahoo.com (sonic311-30.consmr.mail.ir2.yahoo.com [77.238.176.162]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 71A9E68B1A5 for ; Sat, 18 Jun 2022 15:08:12 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.it; s=s2048; t=1655554091; bh=XpwOAojGDY6yntYbccT3P2LCYN8MndJKA/kZxR2DpWM=; h=Date:From:To:Subject:References:From:Subject:Reply-To; b=souF+Y0e09z/f0lqMOcyTbmd19FV0pYQzPYWH8LIk6IS3B+jLg+jXz2xqm+l6S8bsz/BCVapZrxNfvRgoqZZ79uigYYyIxEPcqGwvME5Zc8xewN4UMCUJnm0ywIhDHFtH0YLXmW5KZHZHCiR0J0npGdKkY7+qv7ujkZwYedej4QAS/7mFWEeCkB31O7Cgl8QNeZWNGS2ZtxGPvdFEZFK5I6uUQR87NrRq1hRUAWNnGuI48Fcz5xTEsYU6I5vNYFzcX+aG+q2Vxc32qWKw4WzlxC9Tfc9/yXwvj2d+VtdYZwkeBwhqrkG+b2I2j7UujoD7rcR/ZRwFLPGheaapJoU6w== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1655554091; bh=VbjmoWwbj8RK3GU7aFeJApn7FkCJIvLBpIHLDKNtl6l=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=qvGwsDem80yCk/6wC36e7a160SHsHUy/VCrcNj4ibn3HRB/4JqK09PFU8jfYOHoCe0XNltBj4ISwBF+5/GUOgSh2RL3viHVg+3U0kE4DogceBTm1SEYsSPU7YNZ/Q/w5/M0tr0tbZp+kKLwaT5cszUCJYnO1jAgd/Lq4FeL6zBGkrivIKeG74wZwUY3TWHntV5xQOWM6j/Up6YhJvUN7xWtl+MMumOQ3QumPCwCgFneAP4iRfHHyKR27Kw9GnlBoeOhlRx+31T4/ZarOPlHthBoTjsBQ/Dip7lXMq2hz4HKaZucam89zmUBQLsGzHu+/qtcfLWjplO4Osu3CYKTvpA== X-YMail-OSG: G7eqx9wVM1lmkqgzmPnCbtzZb83p55Qg6X5QnGsed.durSEVbUhgBcOx3b.FT1M cyMOqnyxtTy0fQZchrQXPNxfhTG.f3pwQaQinsJu_xntjZunsxk3WPeyWbjVHoesIycDS20g3uBS QVP154fJhQOomEA7zWCW88S9NmPKTBiJFrFWQxcBhN08ltBNj89vwziZHGh7WvD4_QNIMZMmYS7B olv.jVRhlffOz8z1EbZTEnL3dD7029tivSqZATYQ8EXug6jyuLN3x3wbWebH4qi2ONUgmqQoSATn c0Qpsk3cyHG0pVy6lVLX0QKVHlpAeSBugW6dVQXXSThxR1J_QDzaCupyeGyXQb9KT...0SsM8sz. PLjdEGptjgcia.Xz0HWF0kPO969OrjaK1sU1_RdpB5pEt18UPWnepyjSVlKfOSy9nywSxoF9kUE6 cRHrIm26RZT.HreAO6tfRtnW4ES0kILcPQSsv5Dn8H.94r2cR395lYGHxh03lniZxabGqlsZdcIC zDpbEawkfdPBS.qoQxHZFtsJiczm9hD9vo8jx4ypRkJUQAz_oYdzPv6Cnzrk3pAQLkyQVD0fzirV QuTT3OkTdJOJJDYS0UT0SVsVXVD8zVKB7Mc4W7sNa5ufXkYtIMJNmcttXbvg.CpGBujJ3KWKrICm XGJujd287gs4oTXhp9031Fy56dDjYhXqFf6SUcoDRGSD872TftXt5zsR3MFM.RMxeS0n4_Am.NZk CIQQQT8LQysjAEGtl4I8UA4iLZrEwmoSC5SWFo5iZNRBeFLvOY45_WtR66fgEHZijFuHsb77pytk EShHUPi2Za.6RGwlsTwnKAuSwoxMP9pXYQWUahklUkAt71itZkdJQcaonzskfT_icJHtgfd4xgaJ RcFr9Ig6Ikb0C5bBgDpWdf9_fc4omTNyMKeMGZBQh7IEXJkbUXWBdj.SZownrhi_qnfEi80x3Da_ mRLCND82vrYp3kD1TvI3jRIq0bb835kTyXlO.c7SSu0_ImZ1DM28wIQ2_8MbNU0utN4Ke3kUsHq3 kYMChlV7qLJxdPnvlkWEfFyJKDSD5z4xFw556ER.1yeQ0BQEDSguBXaskqRs9xFZEsgx.X1pTZ0w XwjJq41ShWHBJhVhy_mYYol4EuOwIioXM6nmyrLq9DnSWzL3PLgLCG3RKg9YlTq3JDXRLwVfH8AA I4SdEdaX1ars1g5Ekde8IJhB1WXAbRN1YP_pCie.pi27soZlIpErrkfIU5TYtDhyIla93FKxR0ke XaaypVpitOiGSs6mcScOYP5TM64ohbuNRFmOnOGBYEktsE4jgnMZ8Epy5fYGLVsjL7aI6iN7axSB 6NrFkYDgatZXBPsRvv.d2ehZqH.RFtRnko024DhQAMcztvgZuTkwcX21azh32nYV0oN2Qtrgtbir B_zy9zJYPrOI3P0U19Mb1okgzMCinLPl0AUUQwT4fI9.mFCZ3dCUVncWnTRANA0zc4l.Cch.XliZ EtNlWrRG0myryCAclb0teUuWhivGBJlTvlqOK2BmVF1ssJlAhyAxY9fVuGZPvWBk3.GpOBGqjbQM vzrXhjPmdfmAZ491FpnsTyZl.60tH7fLK1Ngjj6FjqmPmxeQMm04.cTCbwRK50.PiIPKfKlRdo55 ovPLcVi95N5ZNYBepjNa6iRFUjbzBgG3_SpzZIADhaF7n2qlAckTvJn50MvZMjGYyzx7qtVFsZAp S7Y8wtSVdkmZCZipMa9s2eoZPKx9AebiM4hjwn8qlnSzBLgPXFCLQHKrCYOLLlTqjsJRpo_lD3xD Ytf69Z7si6nC1bPlSoNqtoMgSUhaB8izSxCJTg5qgGasLV7YsqO6BT57mNlRidmo8J_T4_m5ZFpr uG3wv5AFP7vgbCxQCQY7o58a4BrxUJY4HJlXvVPQonj3pQB0bJBqjg4lGDoRikQdaoZjiOtC.Ueo r6t54Sck8V_JD9WPNVvEZSjMoZX0OH5UAnuks_uMm32JnmGgpQ6i94DnxokUhcPs9q7w5l1Qny.5 iM_VuUEVk2XkQnIXmuHic_dNp0EzhykE7v6flp6NfSmIXAW7K5P70ogQ7TJiBG1MJhexEtqwRGVr EbSqqlwFOlczid8JeXnVfakrn_yx1jc71_2ig6TUGS16boOL1Tmf_IByFeXndznstFucve.Nvi.J ZmvdJxXznW1.hmxriWGVurCuPkGUjzXtnwvcY.ogl.N76bEUnC05xCUsO7uQtuO7kKkDvi_k28r6 fuQ-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.ir2.yahoo.com with HTTP; Sat, 18 Jun 2022 12:08:11 +0000 Date: Sat, 18 Jun 2022 12:06:26 +0000 (UTC) From: Paolo Prete To: FFmpeg Development Discussions and Patches Message-ID: <122266341.9130638.1655553986479@mail.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_9130637_1057168071.1655553986479" References: <122266341.9130638.1655553986479.ref@mail.yahoo.com> X-Mailer: WebService/1.1.20280 YMailNorrin X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] doc/examples/muxing: code rewrite with improved readability and fixed issues 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: ------=_Part_9130637_1057168071.1655553986479 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Please review this. It's a code rewrite of doc/examples/muxing.c which improves readability and fixes issues. More specifically: *) Original functions of muxing.c have generic/unclear/ambiguous names and they don't group logically relatedblocks of code: this makes the code hard to read.See for example open_audio/video() and add_stream(), which mix initialization of the encoders' and muxers' stuff.A redundant structure with an ambiguous name ("struct OutputStream"), which is not part of API, is widely used too.The patch uses functions with clearer names and with blocks of code strictly logically related, such as: init_encoder(), init_avframe(), init_muxer(), convert_frame(), encode_frame(), mux_encoded_pkt()... *) Errors are not always properly managed: in some cases they are not propagated to the main() function and a call to exit(1) is forced, causing memory leaks. This has been fixed as well. *) The program doesn't work for some extensions (try for example: m4v or mjpeg). In addition, it gives weird results when the filename doesn't have an extension.This has been fixed by checking the filename and supporting a fixed set of extensions. *) The program claims to output raw images by using '%%d' in the filename, but it actually doesn't. This has been fixed as well. *) Input parameters such as width, height, sample_rate and ch_layout are now exposed at the level of the main() function and they are much easier to customize. *) fprintf() has been replaced with av_log() ------=_Part_9130637_1057168071.1655553986479 Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-doc-examples-muxing-code-rewrite-with-improved-reada.patch" Content-ID: <9eac36f7-3499-12fc-5572-ed5f8f4d69b3@yahoo.com> RnJvbSA4YTRlOTQyYTAwMWFlNDlkYzA1Mjg5OWYzMzFlZDQzYWJmOTU0ZGRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBwYW9sbyA8cGFvbG9wcjk3NkBnbWFpbC5jb20+CkRhdGU6IFNh dCwgMTggSnVuIDIwMjIgMTM6NTM6NTUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBkb2MvZXhhbXBs ZXMvbXV4aW5nOiBjb2RlIHJld3JpdGUgd2l0aCBpbXByb3ZlZCByZWFkYWJpbGl0eQogYW5kIGZp eGVkIGlzc3VlcwoKICAgICAgICAgICAgICAgSW1wcm92ZWQgcmVhZGFiaWxpdHkgd2l0aCBmdW5j dGlvbnMgdGhhdCBoYXZlIGNsZWFyZXIgcHJvdG90eXBlcyBhbmQgdGhhdCBkb24ndCBtaXggbG9n aWNhbGx5IHVucmVsYXRlZCBibG9ja3Mgb2YgY29kZQoKICAgICAgICAgICAgICAgRml4ZWQgaXNz dWVzIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucwoKICAgICAgICAgICAgICAgRml4 ZWQgbWVtb3J5IGxlYWtzIG9uIGVycm9ycywgd2hpY2ggYXJlIG5vdyBwcm9wZXJseSBwcm9wYWdh dGVkIHRvIHRoZSBtYWluKCkgZnVuY3Rpb24KCiAgICAgICAgICAgICAgIEZpeGVkIGlzc3VlIG9u IHJhdyBpbWFnZXMgb3V0cHV0CgogICAgICAgICAgICAgICBmcHJpbnRmKCkgcmVwbGFjZWQgd2l0 aCBhdl9sb2coKQoKICAgICAgICAgICAgICAgSW5wdXQgQS9WIHBhcmFtZXRlcnMgZXhwb3NlZCBp biB0aGUgbWFpbigpIGZ1bmN0aW9uIGFuZCBlYXNpZXIgdG8gY3VzdG9taXplCi0tLQogZG9jL2V4 YW1wbGVzL211eGluZy5jIHwgOTA1ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQwNiBpbnNlcnRpb25zKCspLCA0OTkgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL211eGluZy5jIGIvZG9jL2V4YW1wbGVzL211 eGluZy5jCmluZGV4IDNhY2I3NzgzMjIuLjA0NzM5OTk1ZDggMTAwNjQ0Ci0tLSBhL2RvYy9leGFt cGxlcy9tdXhpbmcuYworKysgYi9kb2MvZXhhbXBsZXMvbXV4aW5nLmMKQEAgLTEsNSArMSw1IEBA CiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzIEZhYnJpY2UgQmVsbGFyZAorICogQ29weXJpZ2h0 IChjKSAyMDIyIFBhb2xvIFByZXRlIChwYW9sb3ByOTc2IGF0IGdtYWlsLmNvbSkgYWZ0ZXIgRmFi cmljZSBCZWxsYXJkCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogICogb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwKQEAgLTI0LDYyNSArMjQsNTMyIEBACiAgKiBAZmlsZQogICogbGliYXZmb3JtYXQg QVBJIGV4YW1wbGUuCiAgKgotICogT3V0cHV0IGEgbWVkaWEgZmlsZSBpbiBhbnkgc3VwcG9ydGVk IGxpYmF2Zm9ybWF0IGZvcm1hdC4gVGhlIGRlZmF1bHQKKyAqIE91dHB1dCBhIG1lZGlhIGZpbGUg aW4gYSBzZXQgb2Ygc3VwcG9ydGVkIGxpYmF2Zm9ybWF0IGZvcm1hdHMuIFRoZSBkZWZhdWx0CiAg KiBjb2RlY3MgYXJlIHVzZWQuCiAgKiBAZXhhbXBsZSBtdXhpbmcuYwogICovCiAKLSNpbmNsdWRl IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lu Y2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGxpYmF2dXRpbC9hdmFzc2VydC5oPgotI2luY2x1 ZGUgPGxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oPgotI2luY2x1ZGUgPGxpYmF2dXRpbC9vcHQu aD4KLSNpbmNsdWRlIDxsaWJhdnV0aWwvbWF0aGVtYXRpY3MuaD4KLSNpbmNsdWRlIDxsaWJhdnV0 aWwvdGltZXN0YW1wLmg+CiAjaW5jbHVkZSA8bGliYXZjb2RlYy9hdmNvZGVjLmg+CiAjaW5jbHVk ZSA8bGliYXZmb3JtYXQvYXZmb3JtYXQuaD4KLSNpbmNsdWRlIDxsaWJzd3NjYWxlL3N3c2NhbGUu aD4KKyNpbmNsdWRlIDxsaWJhdnV0aWwvdGltZXN0YW1wLmg+CiAjaW5jbHVkZSA8bGlic3dyZXNh bXBsZS9zd3Jlc2FtcGxlLmg+CisjaW5jbHVkZSA8bGlic3dzY2FsZS9zd3NjYWxlLmg+CiAKLSNk ZWZpbmUgU1RSRUFNX0RVUkFUSU9OICAgMTAuMAotI2RlZmluZSBTVFJFQU1fRlJBTUVfUkFURSAy NSAvKiAyNSBpbWFnZXMvcyAqLwotI2RlZmluZSBTVFJFQU1fUElYX0ZNVCAgICBBVl9QSVhfRk1U X1lVVjQyMFAgLyogZGVmYXVsdCBwaXhfZm10ICovCi0KLSNkZWZpbmUgU0NBTEVfRkxBR1MgU1dT X0JJQ1VCSUMKKyNkZWZpbmUgVklERU9fRlJBTUVfUkFURSAyNSAvKiAyNSBpbWFnZXMvcyAqLwor I2RlZmluZSBWSURFT19TQ0FMRV9GTEFHUyBTV1NfQklDVUJJQworI2RlZmluZSBTVFJFQU1fRFVS QVRJT04gMTAuMCAvKiAxMCBzZWNvbmRzICovCiAKLS8vIGEgd3JhcHBlciBhcm91bmQgYSBzaW5n bGUgb3V0cHV0IEFWU3RyZWFtCi10eXBlZGVmIHN0cnVjdCBPdXRwdXRTdHJlYW0gewotICAgIEFW U3RyZWFtICpzdDsKLSAgICBBVkNvZGVjQ29udGV4dCAqZW5jOworc3RhdGljIHZvaWQgbG9nX2Vy cm9yKGNvbnN0IGNoYXIgKnMsIGludCAqbnVtKQoreworICAgIGlmIChudW0pCisgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICIlcyAoZXJyb3IgJyVzJylcbiIsIHMsIGF2X2VycjJz dHIoKm51bSkpOworICAgIGVsc2UKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IiVzXG4iLCBzKTsKK30KIAotICAgIC8qIHB0cyBvZiB0aGUgbmV4dCBmcmFtZSB0aGF0IHdpbGwg YmUgZ2VuZXJhdGVkICovCi0gICAgaW50NjRfdCBuZXh0X3B0czsKLSAgICBpbnQgc2FtcGxlc19j b3VudDsKK3N0YXRpYyBpbnQgbXV4X2VuY29kZWRfcGt0KEFWUGFja2V0ICpvdXRfcGt0LCBBVkZv cm1hdENvbnRleHQgKm91dF9mbXRfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSBBVk1lZGlhVHlwZSB0eXBlKQoreworICAgIGludCByZXQ7CisgICAgQVZSYXRpb25hbCBl bmNfdGltZV9iYXNlLCBzdHJfdGltZV9iYXNlOwogCi0gICAgQVZGcmFtZSAqZnJhbWU7Ci0gICAg QVZGcmFtZSAqdG1wX2ZyYW1lOworICAgIGlmIChvdXRfZm10X2N0eC0+c3RyZWFtc1swXS0+Y29k ZWNwYXItPmNvZGVjX3R5cGUgPT0gdHlwZSkKKyAgICAgICAgb3V0X3BrdC0+c3RyZWFtX2luZGV4 ID0gMDsKKyAgICBlbHNlIGlmICgob3V0X2ZtdF9jdHgtPm5iX3N0cmVhbXMgPiAxKSAmJiAodHlw ZSA9PSBBVk1FRElBX1RZUEVfVklERU8pKQorICAgICAgICBvdXRfcGt0LT5zdHJlYW1faW5kZXgg PSAxOworICAgIHN0cl90aW1lX2Jhc2UgPSBvdXRfZm10X2N0eC0+c3RyZWFtc1tvdXRfcGt0LT5z dHJlYW1faW5kZXhdLT50aW1lX2Jhc2U7CiAKLSAgICBBVlBhY2tldCAqdG1wX3BrdDsKKyAgICBp ZiAodHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pCisgICAgICAgIGVuY190aW1lX2Jhc2UgPSAo KEFWUmF0aW9uYWwgKilvdXRfZm10X2N0eC0+b3BhcXVlKVswXTsKKyAgICBlbHNlCisgICAgICAg IGVuY190aW1lX2Jhc2UgPSAoKEFWUmF0aW9uYWwgKilvdXRfZm10X2N0eC0+b3BhcXVlKVsxXTsK IAotICAgIGZsb2F0IHQsIHRpbmNyLCB0aW5jcjI7CisgICAgYXZfcGFja2V0X3Jlc2NhbGVfdHMo b3V0X3BrdCwgZW5jX3RpbWVfYmFzZSwgc3RyX3RpbWVfYmFzZSk7CiAKLSAgICBzdHJ1Y3QgU3dz Q29udGV4dCAqc3dzX2N0eDsKLSAgICBzdHJ1Y3QgU3dyQ29udGV4dCAqc3dyX2N0eDsKLX0gT3V0 cHV0U3RyZWFtOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgInN0cmVhbV9pbmRleD0l ZCwgc2l6ZT0lZCwgcHRzX3RpbWU9JXNcbiIsCisgICAgICAgICAgIG91dF9wa3QtPnN0cmVhbV9p bmRleCwKKyAgICAgICAgICAgb3V0X3BrdC0+c2l6ZSwgYXZfdHMydGltZXN0cihvdXRfcGt0LT5w dHMsICZzdHJfdGltZV9iYXNlKSk7CiAKLXN0YXRpYyB2b2lkIGxvZ19wYWNrZXQoY29uc3QgQVZG b3JtYXRDb250ZXh0ICpmbXRfY3R4LCBjb25zdCBBVlBhY2tldCAqcGt0KQotewotICAgIEFWUmF0 aW9uYWwgKnRpbWVfYmFzZSA9ICZmbXRfY3R4LT5zdHJlYW1zW3BrdC0+c3RyZWFtX2luZGV4XS0+ dGltZV9iYXNlOworICAgIGlmICgocmV0ID0gYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUob3V0 X2ZtdF9jdHgsIG91dF9wa3QpKSA8IDApCisgICAgICAgIGxvZ19lcnJvcigiRXJyb3IgY2FsbGlu ZyBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSgpIiwgJnJldCk7CiAKLSAgICBwcmludGYoInB0 czolcyBwdHNfdGltZTolcyBkdHM6JXMgZHRzX3RpbWU6JXMgZHVyYXRpb246JXMgZHVyYXRpb25f dGltZTolcyBzdHJlYW1faW5kZXg6JWRcbiIsCi0gICAgICAgICAgIGF2X3RzMnN0cihwa3QtPnB0 cyksIGF2X3RzMnRpbWVzdHIocGt0LT5wdHMsIHRpbWVfYmFzZSksCi0gICAgICAgICAgIGF2X3Rz MnN0cihwa3QtPmR0cyksIGF2X3RzMnRpbWVzdHIocGt0LT5kdHMsIHRpbWVfYmFzZSksCi0gICAg ICAgICAgIGF2X3RzMnN0cihwa3QtPmR1cmF0aW9uKSwgYXZfdHMydGltZXN0cihwa3QtPmR1cmF0 aW9uLCB0aW1lX2Jhc2UpLAotICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCk7CisgICAgcmV0 dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9mcmFtZShBVkZvcm1hdENvbnRleHQgKmZt dF9jdHgsIEFWQ29kZWNDb250ZXh0ICpjLAotICAgICAgICAgICAgICAgICAgICAgICBBVlN0cmVh bSAqc3QsIEFWRnJhbWUgKmZyYW1lLCBBVlBhY2tldCAqcGt0KQorc3RhdGljIGludCBpc19leHRl bnNpb25fc3VwcG9ydGVkKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotICAgIGludCByZXQ7Cisg ICAgY29uc3QgY2hhciAqZXh0ZW5zaW9uc1tdID0geyIuYWFjIiwgIi5hdmkiLCAiLmJtcCIsICIu anBlZyIsICIubWthIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5ta3YiLCAi Lm1vdiIsICIubXA0IiwgIi5mbHYiLCAgIi50cyJ9OworICAgIGludCBpLCBzaXplID0gc2l6ZW9m KGV4dGVuc2lvbnMpIC8gc2l6ZW9mKGV4dGVuc2lvbnNbMF0pOworICAgIGNoYXIgKmRvdCA9IHN0 cnJjaHIoZmlsZW5hbWUsICcuJyk7CiAKLSAgICAvLyBzZW5kIHRoZSBmcmFtZSB0byB0aGUgZW5j b2RlcgotICAgIHJldCA9IGF2Y29kZWNfc2VuZF9mcmFtZShjLCBmcmFtZSk7Ci0gICAgaWYgKHJl dCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBzZW5kaW5nIGEgZnJhbWUg dG8gdGhlIGVuY29kZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgIGF2X2VycjJzdHIocmV0KSk7 Ci0gICAgICAgIGV4aXQoMSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg ICAgICBpZiAoZG90ICYmICFzdHJjbXAoZG90LCBleHRlbnNpb25zW2ldKSkKKyAgICAgICAgICAg IHJldHVybiAxOwogICAgIH0KIAotICAgIHdoaWxlIChyZXQgPj0gMCkgewotICAgICAgICByZXQg PSBhdmNvZGVjX3JlY2VpdmVfcGFja2V0KGMsIHBrdCk7Ci0gICAgICAgIGlmIChyZXQgPT0gQVZF UlJPUihFQUdBSU4pIHx8IHJldCA9PSBBVkVSUk9SX0VPRikKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBlbHNlIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkVycm9yIGVuY29kaW5nIGEgZnJhbWU6ICVzXG4iLCBhdl9lcnIyc3RyKHJldCkpOwotICAgICAg ICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorICAgIGxvZ19lcnJvcigiRmlsZSBleHRlbnNpb24g bm90IHN1cHBvcnRlZCIsIE5VTEwpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfV0FSTklORywg IlBsZWFzZSBjaG9vc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogIik7CisgICAg Zm9yIChpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfV0FSTklORywgIiVzLCAiLCBleHRlbnNpb25zW2ldKTsKKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1dBUk5JTkcsICIlc1xuIiwgZXh0ZW5zaW9uc1tzaXplLTFdKTsKIAotICAgICAgICAvKiBy ZXNjYWxlIG91dHB1dCBwYWNrZXQgdGltZXN0YW1wIHZhbHVlcyBmcm9tIGNvZGVjIHRvIHN0cmVh bSB0aW1lYmFzZSAqLwotICAgICAgICBhdl9wYWNrZXRfcmVzY2FsZV90cyhwa3QsIGMtPnRpbWVf YmFzZSwgc3QtPnRpbWVfYmFzZSk7Ci0gICAgICAgIHBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPmlu ZGV4OwotCi0gICAgICAgIC8qIFdyaXRlIHRoZSBjb21wcmVzc2VkIGZyYW1lIHRvIHRoZSBtZWRp YSBmaWxlLiAqLwotICAgICAgICBsb2dfcGFja2V0KGZtdF9jdHgsIHBrdCk7Ci0gICAgICAgIHJl dCA9IGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKGZtdF9jdHgsIHBrdCk7Ci0gICAgICAgIC8q IHBrdCBpcyBub3cgYmxhbmsgKGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkgdGFrZXMgb3du ZXJzaGlwIG9mCi0gICAgICAgICAqIGl0cyBjb250ZW50cyBhbmQgcmVzZXRzIHBrdCksIHNvIHRo YXQgbm8gdW5yZWZlcmVuY2luZyBpcyBuZWNlc3NhcnkuCi0gICAgICAgICAqIFRoaXMgd291bGQg YmUgZGlmZmVyZW50IGlmIG9uZSB1c2VkIGF2X3dyaXRlX2ZyYW1lKCkuICovCi0gICAgICAgIGlm IChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHdoaWxlIHdy aXRpbmcgb3V0cHV0IHBhY2tldDogJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Ci0gICAgICAgICAg ICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldCA9PSBBVkVSUk9S X0VPRiA/IDEgOiAwOworICAgIHJldHVybiAwOwogfQogCi0vKiBBZGQgYW4gb3V0cHV0IHN0cmVh bS4gKi8KLXN0YXRpYyB2b2lkIGFkZF9zdHJlYW0oT3V0cHV0U3RyZWFtICpvc3QsIEFWRm9ybWF0 Q29udGV4dCAqb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWQ29kZWMgKipjb2Rl YywKLSAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQpCitzdGF0 aWMgaW50IGdldF9kZWZhdWx0X2VuY19wYXJhbXMoQVZDb2RlY1BhcmFtZXRlcnMgKnBhcmFtcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSwgZW51 bSBBVk1lZGlhVHlwZSB0eXBlKQogewotICAgIEFWQ29kZWNDb250ZXh0ICpjOwotICAgIGludCBp OwotCi0gICAgLyogZmluZCB0aGUgZW5jb2RlciAqLwotICAgICpjb2RlYyA9IGF2Y29kZWNfZmlu ZF9lbmNvZGVyKGNvZGVjX2lkKTsKLSAgICBpZiAoISgqY29kZWMpKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiQ291bGQgbm90IGZpbmQgZW5jb2RlciBmb3IgJyVzJ1xuIiwKLSAgICAgICAg ICAgICAgICBhdmNvZGVjX2dldF9uYW1lKGNvZGVjX2lkKSk7Ci0gICAgICAgIGV4aXQoMSk7Cisg ICAgQVZGb3JtYXRDb250ZXh0ICp0bXBfZmN0eDsKKyAgICBlbnVtIEFWQ29kZWNJRCBpZDsKKyAg ICBjb25zdCBBVkNvZGVjICpjOworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKChyZXQgPSBh dmZvcm1hdF9hbGxvY19vdXRwdXRfY29udGV4dDIoJnRtcF9mY3R4LCBOVUxMLCBOVUxMLCBmbmFt ZSkpIDwgMCkgeworICAgICAgICBsb2dfZXJyb3IoIkNvdWxkIG5vdCBnZXQgZGVmYXVsdCBlbmNv ZGVyIiwgJnJldCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYSVQ7CiAgICAgfQogCi0gICAg b3N0LT50bXBfcGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7Ci0gICAgaWYgKCFvc3QtPnRtcF9wa3Qp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWxsb2NhdGUgQVZQYWNrZXRc biIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KKyAgICBpZCA9ICh0eXBlID09IEFWTUVESUFf VFlQRV9BVURJTykgPyB0bXBfZmN0eC0+b2Zvcm1hdC0+YXVkaW9fY29kZWMgOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9mY3R4LT5vZm9ybWF0LT52aWRlb19j b2RlYzsKIAotICAgIG9zdC0+c3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKG9jLCBOVUxMKTsKLSAg ICBpZiAoIW9zdC0+c3QpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWxs b2NhdGUgc3RyZWFtXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgb3N0LT5zdC0+ aWQgPSBvYy0+bmJfc3RyZWFtcy0xOwotICAgIGMgPSBhdmNvZGVjX2FsbG9jX2NvbnRleHQzKCpj b2RlYyk7Ci0gICAgaWYgKCFjKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90 IGFsbG9jIGFuIGVuY29kaW5nIGNvbnRleHRcbiIpOwotICAgICAgICBleGl0KDEpOworICAgIGlm ICghKGMgPSBhdmNvZGVjX2ZpbmRfZW5jb2RlcihpZCkpKSB7CisgICAgICAgIGF2Zm9ybWF0X2Zy ZWVfY29udGV4dCh0bXBfZmN0eCk7CisgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQotICAgIG9z dC0+ZW5jID0gYzsKLQotICAgIHN3aXRjaCAoKCpjb2RlYyktPnR5cGUpIHsKLSAgICBjYXNlIEFW TUVESUFfVFlQRV9BVURJTzoKLSAgICAgICAgYy0+c2FtcGxlX2ZtdCAgPSAoKmNvZGVjKS0+c2Ft cGxlX2ZtdHMgPwotICAgICAgICAgICAgKCpjb2RlYyktPnNhbXBsZV9mbXRzWzBdIDogQVZfU0FN UExFX0ZNVF9GTFRQOwotICAgICAgICBjLT5iaXRfcmF0ZSAgICA9IDY0MDAwOwotICAgICAgICBj LT5zYW1wbGVfcmF0ZSA9IDQ0MTAwOwotICAgICAgICBpZiAoKCpjb2RlYyktPnN1cHBvcnRlZF9z YW1wbGVyYXRlcykgewotICAgICAgICAgICAgYy0+c2FtcGxlX3JhdGUgPSAoKmNvZGVjKS0+c3Vw cG9ydGVkX3NhbXBsZXJhdGVzWzBdOwotICAgICAgICAgICAgZm9yIChpID0gMDsgKCpjb2RlYykt PnN1cHBvcnRlZF9zYW1wbGVyYXRlc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgq Y29kZWMpLT5zdXBwb3J0ZWRfc2FtcGxlcmF0ZXNbaV0gPT0gNDQxMDApCi0gICAgICAgICAgICAg ICAgICAgIGMtPnNhbXBsZV9yYXRlID0gNDQxMDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgYXZfY2hhbm5lbF9sYXlvdXRfY29weSgmYy0+Y2hfbGF5b3V0LCAmKEFWQ2hhbm5l bExheW91dClBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8pOwotICAgICAgICBvc3QtPnN0LT50aW1l X2Jhc2UgPSAoQVZSYXRpb25hbCl7IDEsIGMtPnNhbXBsZV9yYXRlIH07Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSBBVk1FRElBX1RZUEVfVklERU86Ci0gICAgICAgIGMtPmNvZGVjX2lkID0g Y29kZWNfaWQ7Ci0KLSAgICAgICAgYy0+Yml0X3JhdGUgPSA0MDAwMDA7Ci0gICAgICAgIC8qIFJl c29sdXRpb24gbXVzdCBiZSBhIG11bHRpcGxlIG9mIHR3by4gKi8KLSAgICAgICAgYy0+d2lkdGgg ICAgPSAzNTI7Ci0gICAgICAgIGMtPmhlaWdodCAgID0gMjg4OwotICAgICAgICAvKiB0aW1lYmFz ZTogVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgdW5pdCBvZiB0aW1lIChpbiBzZWNvbmRzKSBpbiB0 ZXJtcwotICAgICAgICAgKiBvZiB3aGljaCBmcmFtZSB0aW1lc3RhbXBzIGFyZSByZXByZXNlbnRl ZC4gRm9yIGZpeGVkLWZwcyBjb250ZW50LAotICAgICAgICAgKiB0aW1lYmFzZSBzaG91bGQgYmUg MS9mcmFtZXJhdGUgYW5kIHRpbWVzdGFtcCBpbmNyZW1lbnRzIHNob3VsZCBiZQotICAgICAgICAg KiBpZGVudGljYWwgdG8gMS4gKi8KLSAgICAgICAgb3N0LT5zdC0+dGltZV9iYXNlID0gKEFWUmF0 aW9uYWwpeyAxLCBTVFJFQU1fRlJBTUVfUkFURSB9OwotICAgICAgICBjLT50aW1lX2Jhc2UgICAg ICAgPSBvc3QtPnN0LT50aW1lX2Jhc2U7Ci0KLSAgICAgICAgYy0+Z29wX3NpemUgICAgICA9IDEy OyAvKiBlbWl0IG9uZSBpbnRyYSBmcmFtZSBldmVyeSB0d2VsdmUgZnJhbWVzIGF0IG1vc3QgKi8K LSAgICAgICAgYy0+cGl4X2ZtdCAgICAgICA9IFNUUkVBTV9QSVhfRk1UOwotICAgICAgICBpZiAo Yy0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTVBFRzJWSURFTykgewotICAgICAgICAgICAgLyog anVzdCBmb3IgdGVzdGluZywgd2UgYWxzbyBhZGQgQi1mcmFtZXMgKi8KLSAgICAgICAgICAgIGMt Pm1heF9iX2ZyYW1lcyA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGMtPmNvZGVjX2lkID09 IEFWX0NPREVDX0lEX01QRUcxVklERU8pIHsKLSAgICAgICAgICAgIC8qIE5lZWRlZCB0byBhdm9p ZCB1c2luZyBtYWNyb2Jsb2NrcyBpbiB3aGljaCBzb21lIGNvZWZmcyBvdmVyZmxvdy4KLSAgICAg ICAgICAgICAqIFRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGggbm9ybWFsIHZpZGVvLCBpdCBqdXN0 IGhhcHBlbnMgaGVyZSBhcwotICAgICAgICAgICAgICogdGhlIG1vdGlvbiBvZiB0aGUgY2hyb21h IHBsYW5lIGRvZXMgbm90IG1hdGNoIHRoZSBsdW1hIHBsYW5lLiAqLwotICAgICAgICAgICAgYy0+ bWJfZGVjaXNpb24gPSAyOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVs dDoKLSAgICAgICAgYnJlYWs7CisgICAgcGFyYW1zLT5jb2RlY190eXBlID0gYy0+dHlwZTsKKyAg ICBwYXJhbXMtPmNvZGVjX2lkICAgPSBjLT4gaWQ7CisgICAgaWYgKGMtPnR5cGUgPT0gQVZNRURJ QV9UWVBFX0FVRElPKSB7CisgICAgICAgIHBhcmFtcy0+Zm9ybWF0ICAgICAgPSBjLT5zYW1wbGVf Zm10cyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5zYW1wbGVfZm10c1swXSA6 IEFWX1NBTVBMRV9GTVRfRkxUUDsKKyAgICAgICAgcGFyYW1zLT5jaF9sYXlvdXQgICA9IChBVkNo YW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOworICAgICAgICBwYXJhbXMtPnNh bXBsZV9yYXRlID0gYy0+c3VwcG9ydGVkX3NhbXBsZXJhdGVzID8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGMtPnN1cHBvcnRlZF9zYW1wbGVyYXRlc1swXSA6IDQ0MTAwOworICAgIH0g ZWxzZSBpZiAoYy0+dHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsKKyAgICAgICAgcGFyYW1z LT5mb3JtYXQgPSBjLT5waXhfZm10cyA/IGMtPnBpeF9mbXRzWzBdIDogQVZfUElYX0ZNVF9ZVVY0 MjBQOwogICAgIH0KKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQodG1wX2ZjdHgpOwogCi0gICAg LyogU29tZSBmb3JtYXRzIHdhbnQgc3RyZWFtIGhlYWRlcnMgdG8gYmUgc2VwYXJhdGUuICovCi0g ICAgaWYgKG9jLT5vZm9ybWF0LT5mbGFncyAmIEFWRk1UX0dMT0JBTEhFQURFUikKLSAgICAgICAg Yy0+ZmxhZ3MgfD0gQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSOworICAgIHJldHVybiByZXQ7 CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLS8qIGF1ZGlvIG91dHB1dCAqLwotCi1zdGF0aWMgQVZGcmFtZSAqYWxs b2NfYXVkaW9fZnJhbWUoZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9s YXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZV9yYXRl LCBpbnQgbmJfc2FtcGxlcykKK3N0YXRpYyBpbnQgaW5pdF9lbmNvZGVyKEFWQ29kZWNDb250ZXh0 ICoqZW5jX2N0eCwgQVZDb2RlY1BhcmFtZXRlcnMgKnBhcmFtcykKIHsKLSAgICBBVkZyYW1lICpm cmFtZSA9IGF2X2ZyYW1lX2FsbG9jKCk7CisgICAgY29uc3QgQVZDb2RlYyAqY29kZWMgPSBOVUxM OwogICAgIGludCByZXQ7CiAKLSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiRXJyb3IgYWxsb2NhdGluZyBhbiBhdWRpbyBmcmFtZVxuIik7Ci0gICAgICAgIGV4aXQo MSk7CisgICAgY29kZWMgPSBhdmNvZGVjX2ZpbmRfZW5jb2RlcihwYXJhbXMtPmNvZGVjX2lkKTsK KyAgICAqZW5jX2N0eCA9IGF2Y29kZWNfYWxsb2NfY29udGV4dDMoY29kZWMpOworICAgIGlmICgh Y29kZWMpIHsKKyAgICAgICAgbG9nX2Vycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgdGhlIGVuY29k aW5nIGNvbnRleHQiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKICAgICB9 CiAKLSAgICBmcmFtZS0+Zm9ybWF0ID0gc2FtcGxlX2ZtdDsKLSAgICBhdl9jaGFubmVsX2xheW91 dF9jb3B5KCZmcmFtZS0+Y2hfbGF5b3V0LCBjaGFubmVsX2xheW91dCk7Ci0gICAgZnJhbWUtPnNh bXBsZV9yYXRlID0gc2FtcGxlX3JhdGU7Ci0gICAgZnJhbWUtPm5iX3NhbXBsZXMgPSBuYl9zYW1w bGVzOwotCi0gICAgaWYgKG5iX3NhbXBsZXMpIHsKLSAgICAgICAgcmV0ID0gYXZfZnJhbWVfZ2V0 X2J1ZmZlcihmcmFtZSwgMCk7Ci0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkVycm9yIGFsbG9jYXRpbmcgYW4gYXVkaW8gYnVmZmVyXG4iKTsKLSAg ICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KKyAgICAoKmVuY19jdHgpLT5jb2RlY19pZCAg ID0gcGFyYW1zLT5jb2RlY19pZDsKKyAgICAoKmVuY19jdHgpLT5jb2RlY190eXBlID0gcGFyYW1z LT5jb2RlY190eXBlOworICAgIGlmIChwYXJhbXMtPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBF X0FVRElPKSB7CisgICAgICAgICgqZW5jX2N0eCktPnNhbXBsZV9mbXQgID0gcGFyYW1zLT5mb3Jt YXQ7CisgICAgICAgICgqZW5jX2N0eCktPnNhbXBsZV9yYXRlID0gcGFyYW1zLT5zYW1wbGVfcmF0 ZTsKKyAgICAgICAgKCplbmNfY3R4KS0+dGltZV9iYXNlICAgPSAoQVZSYXRpb25hbCl7MSwgcGFy YW1zLT5zYW1wbGVfcmF0ZX07CisgICAgICAgICgqZW5jX2N0eCktPmNoX2xheW91dCAgID0gcGFy YW1zLT5jaF9sYXlvdXQ7CisgICAgfSBlbHNlIGlmIChwYXJhbXMtPmNvZGVjX3R5cGUgPT0gQVZN RURJQV9UWVBFX1ZJREVPKSB7CisgICAgICAgICgqZW5jX2N0eCktPndpZHRoICAgICAgPSBwYXJh bXMtPndpZHRoOworICAgICAgICAoKmVuY19jdHgpLT5oZWlnaHQgICAgID0gcGFyYW1zLT5oZWln aHQ7CisgICAgICAgICgqZW5jX2N0eCktPnRpbWVfYmFzZSAgPSAoQVZSYXRpb25hbCl7IDEsIFZJ REVPX0ZSQU1FX1JBVEUgfTsKKyAgICAgICAgKCplbmNfY3R4KS0+Z29wX3NpemUgICA9IDEyOwor ICAgICAgICAoKmVuY19jdHgpLT5waXhfZm10ICAgID0gcGFyYW1zLT5mb3JtYXQ7CiAgICAgfQog Ci0gICAgcmV0dXJuIGZyYW1lOworICAgIGlmICgocmV0ID0gYXZjb2RlY19vcGVuMigqZW5jX2N0 eCwgY29kZWMsIE5VTEwpKSA8IDApIHsKKyAgICAgICAgbG9nX2Vycm9yKCJDb3VsZCBub3Qgb3Bl biBpbnB1dCBjb2RlYyIsICZyZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0gZWxzZQor ICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3Blbl9hdWRpbyhBVkZvcm1hdENv bnRleHQgKm9jLCBjb25zdCBBVkNvZGVjICpjb2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0U3RyZWFtICpvc3QsIEFWRGljdGlvbmFyeSAqb3B0X2FyZykKK3N0YXRpYyBpbnQgaW5p dF9hdmZyYW1lKEFWRnJhbWUgKipmcmFtZSwgQVZDb2RlY1BhcmFtZXRlcnMgKnBhcmFtcykKIHsK LSAgICBBVkNvZGVjQ29udGV4dCAqYzsKLSAgICBpbnQgbmJfc2FtcGxlczsKICAgICBpbnQgcmV0 OwotICAgIEFWRGljdGlvbmFyeSAqb3B0ID0gTlVMTDsKIAotICAgIGMgPSBvc3QtPmVuYzsKKyAg ICBpZiAoISgqZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpKSkgeworICAgICAgICBsb2dfZXJyb3Io IkNvdWxkIG5vdCBhbGxvY2F0ZSBBVkZyYW1lIiwgTlVMTCk7CisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisgICAgfQogCi0gICAgLyogb3BlbiBpdCAqLwotICAgIGF2X2RpY3RfY29w eSgmb3B0LCBvcHRfYXJnLCAwKTsKLSAgICByZXQgPSBhdmNvZGVjX29wZW4yKGMsIGNvZGVjLCAm b3B0KTsKLSAgICBhdl9kaWN0X2ZyZWUoJm9wdCk7Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBjb2RlYzogJXNcbiIsIGF2 X2VycjJzdHIocmV0KSk7Ci0gICAgICAgIGV4aXQoMSk7CisgICAgKCpmcmFtZSktPm9wYXF1ZSA9 ICZwYXJhbXMtPmNvZGVjX3R5cGU7CisgICAgaWYgKHBhcmFtcy0+Y29kZWNfdHlwZSA9PSBBVk1F RElBX1RZUEVfQVVESU8pIHsKKyAgICAgICAgKCpmcmFtZSktPm5iX3NhbXBsZXMgID0gcGFyYW1z LT5mcmFtZV9zaXplOworICAgICAgICAoKmZyYW1lKS0+c2FtcGxlX3JhdGUgPSBwYXJhbXMtPnNh bXBsZV9yYXRlOworICAgICAgICAoKmZyYW1lKS0+Zm9ybWF0ICAgICAgPSBwYXJhbXMtPmZvcm1h dDsKKyAgICAgICAgKCpmcmFtZSktPmNoX2xheW91dCAgID0gcGFyYW1zLT5jaF9sYXlvdXQ7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgKCpmcmFtZSktPndpZHRoICA9IHBhcmFtcy0+d2lkdGg7Cisg ICAgICAgICgqZnJhbWUpLT5oZWlnaHQgPSBwYXJhbXMtPmhlaWdodDsKKyAgICAgICAgKCpmcmFt ZSktPmZvcm1hdCA9IHBhcmFtcy0+Zm9ybWF0OwogICAgIH0KIAotICAgIC8qIGluaXQgc2lnbmFs IGdlbmVyYXRvciAqLwotICAgIG9zdC0+dCAgICAgPSAwOwotICAgIG9zdC0+dGluY3IgPSAyICog TV9QSSAqIDExMC4wIC8gYy0+c2FtcGxlX3JhdGU7Ci0gICAgLyogaW5jcmVtZW50IGZyZXF1ZW5j eSBieSAxMTAgSHogcGVyIHNlY29uZCAqLwotICAgIG9zdC0+dGluY3IyID0gMiAqIE1fUEkgKiAx MTAuMCAvIGMtPnNhbXBsZV9yYXRlIC8gYy0+c2FtcGxlX3JhdGU7CisgICAgLyogQWxsb2NhdGUg dGhlIGZyYW1lJ3MgZGF0YSBidWZmZXIgKi8KKyAgICBpZiAoKHJldCA9IGF2X2ZyYW1lX2dldF9i dWZmZXIoKmZyYW1lLCAwKSkgPCAwKSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGFs bG9jYXRlIGJ1ZmZlciBmb3IgQVZGcmFtZSIsICZyZXQpOworICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KIAotICAgIGlmIChj LT5jb2RlYy0+Y2FwYWJpbGl0aWVzICYgQVZfQ09ERUNfQ0FQX1ZBUklBQkxFX0ZSQU1FX1NJWkUp Ci0gICAgICAgIG5iX3NhbXBsZXMgPSAxMDAwMDsKLSAgICBlbHNlCi0gICAgICAgIG5iX3NhbXBs ZXMgPSBjLT5mcmFtZV9zaXplOworc3RhdGljIGludCBpbml0X2F1ZGlvX2NvbnZlcnQoc3RydWN0 IFN3ckNvbnRleHQgKipjdHgsIEFWQ29kZWNQYXJhbWV0ZXJzICppbl9wYXJhbXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkNvZGVjUGFyYW1ldGVycyAqb3V0X3BhcmFtcykKK3sK KyAgICBzd3JfYWxsb2Nfc2V0X29wdHMyKGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICYo b3V0X3BhcmFtcy0+Y2hfbGF5b3V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh bXMtPmZvcm1hdCwgb3V0X3BhcmFtcy0+c2FtcGxlX3JhdGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAmKGluX3BhcmFtcy0+Y2hfbGF5b3V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu X3BhcmFtcy0+Zm9ybWF0LCBpbl9wYXJhbXMtPnNhbXBsZV9yYXRlLAorICAgICAgICAgICAgICAg ICAgICAgICAgMCwgTlVMTCk7CisgICAgaWYgKCEqY3R4KSB7CisgICAgICAgIGxvZ19lcnJvcigi Q291bGQgbm90IGFsbG9jYXRlIHJlc2FtcGxlIGNvbnRleHQiLCBOVUxMKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CiAK LSAgICBvc3QtPmZyYW1lICAgICA9IGFsbG9jX2F1ZGlvX2ZyYW1lKGMtPnNhbXBsZV9mbXQsICZj LT5jaF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5z YW1wbGVfcmF0ZSwgbmJfc2FtcGxlcyk7Ci0gICAgb3N0LT50bXBfZnJhbWUgPSBhbGxvY19hdWRp b19mcmFtZShBVl9TQU1QTEVfRk1UX1MxNiwgJmMtPmNoX2xheW91dCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnNhbXBsZV9yYXRlLCBuYl9zYW1wbGVzKTsKK3N0 YXRpYyBpbnQgaW5pdF92aWRlb19jb252ZXJ0KHN0cnVjdCBTd3NDb250ZXh0ICoqY3R4LCBBVkNv ZGVjUGFyYW1ldGVycyAqaW5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZDb2RlY1BhcmFtZXRlcnMgKm91dF9wYXJhbXMpCit7CisgICAgKmN0eCA9IHN3c19nZXRDb250 ZXh0KGluX3BhcmFtcy0+d2lkdGgsIGluX3BhcmFtcy0+aGVpZ2h0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICBpbl9wYXJhbXMtPmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg b3V0X3BhcmFtcy0+d2lkdGgsIG91dF9wYXJhbXMtPmhlaWdodCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgb3V0X3BhcmFtcy0+Y29kZWNfaWQgPT0gb3V0X3BhcmFtcy0+Zm9ybWF0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICBWSURFT19TQ0FMRV9GTEFHUywgTlVMTCwgTlVMTCwgTlVM TCk7CisgICAgaWYgKCEqY3R4KSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGFsbG9j YXRlIHNjYWxlIGNvbnRleHQiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CiAKLSAgICAvKiBjb3B5IHRoZSBz dHJlYW0gcGFyYW1ldGVycyB0byB0aGUgbXV4ZXIgKi8KLSAgICByZXQgPSBhdmNvZGVjX3BhcmFt ZXRlcnNfZnJvbV9jb250ZXh0KG9zdC0+c3QtPmNvZGVjcGFyLCBjKTsKLSAgICBpZiAocmV0IDwg MCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb3B5IHRoZSBzdHJlYW0g cGFyYW1ldGVyc1xuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQorc3RhdGljIGludCBpbml0 X211eGVyKEFWRm9ybWF0Q29udGV4dCAqKm91dF9mbXRfY3R4LCBBVkNvZGVjQ29udGV4dCAqYXVk aW9fZW5jX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICBBVkNvZGVjQ29udGV4dCAqdmlkZW9f ZW5jX2N0eCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgaW50IHJldDsKKyAgICBBVlN0 cmVhbSAqb3V0X2F1ZGlvX3N0ciwgKm91dF92aWRlb19zdHI7CiAKLSAgICAvKiBjcmVhdGUgcmVz YW1wbGVyIGNvbnRleHQgKi8KLSAgICBvc3QtPnN3cl9jdHggPSBzd3JfYWxsb2MoKTsKLSAgICBp ZiAoIW9zdC0+c3dyX2N0eCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBh bGxvY2F0ZSByZXNhbXBsZXIgY29udGV4dFxuIik7Ci0gICAgICAgIGV4aXQoMSk7CisgICAgaWYg KChyZXQgPSBhdmZvcm1hdF9hbGxvY19vdXRwdXRfY29udGV4dDIob3V0X2ZtdF9jdHgsIE5VTEws IE5VTEwsIGZpbGVuYW1lKSkgPCAwKSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGNy ZWF0ZSBvdXRwdXQgY29udGV4dCIsICZyZXQpOworICAgICAgICByZXR1cm4gcmV0OwogICAgIH0K IAotICAgIC8qIHNldCBvcHRpb25zICovCi0gICAgYXZfb3B0X3NldF9jaGxheW91dCAgKG9zdC0+ c3dyX2N0eCwgImluX2NobGF5b3V0IiwgICAgICAgJmMtPmNoX2xheW91dCwgICAgICAwKTsKLSAg ICBhdl9vcHRfc2V0X2ludCAgICAgICAob3N0LT5zd3JfY3R4LCAiaW5fc2FtcGxlX3JhdGUiLCAg ICAgYy0+c2FtcGxlX3JhdGUsICAgIDApOwotICAgIGF2X29wdF9zZXRfc2FtcGxlX2ZtdChvc3Qt PnN3cl9jdHgsICJpbl9zYW1wbGVfZm10IiwgICAgICBBVl9TQU1QTEVfRk1UX1MxNiwgMCk7Ci0g ICAgYXZfb3B0X3NldF9jaGxheW91dCAgKG9zdC0+c3dyX2N0eCwgIm91dF9jaGxheW91dCIsICAg ICAgJmMtPmNoX2xheW91dCwgICAgICAwKTsKLSAgICBhdl9vcHRfc2V0X2ludCAgICAgICAob3N0 LT5zd3JfY3R4LCAib3V0X3NhbXBsZV9yYXRlIiwgICAgYy0+c2FtcGxlX3JhdGUsICAgIDApOwot ICAgIGF2X29wdF9zZXRfc2FtcGxlX2ZtdChvc3QtPnN3cl9jdHgsICJvdXRfc2FtcGxlX2ZtdCIs ICAgICBjLT5zYW1wbGVfZm10LCAgICAgMCk7Ci0KLSAgICAvKiBpbml0aWFsaXplIHRoZSByZXNh bXBsaW5nIGNvbnRleHQgKi8KLSAgICBpZiAoKHJldCA9IHN3cl9pbml0KG9zdC0+c3dyX2N0eCkp IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBpbml0aWFsaXplIHRo ZSByZXNhbXBsaW5nIGNvbnRleHRcbiIpOwotICAgICAgICBleGl0KDEpOworICAgIC8qIG9wZW4g dGhlIG91dHB1dCBmaWxlLCBpZiBuZWVkZWQgKi8KKyAgICBpZiAoISgoKm91dF9mbXRfY3R4KS0+ b2Zvcm1hdC0+ZmxhZ3MgJiBBVkZNVF9OT0ZJTEUpKSB7CisgICAgICAgIGlmICgocmV0ID0gYXZp b19vcGVuKCYoKm91dF9mbXRfY3R4KS0+cGIsIGZpbGVuYW1lLCBBVklPX0ZMQUdfV1JJVEUpKSA8 IDApIHsKKyAgICAgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUi LCAmcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KICAgICB9Ci19CiAK LS8qIFByZXBhcmUgYSAxNiBiaXQgZHVtbXkgYXVkaW8gZnJhbWUgb2YgJ2ZyYW1lX3NpemUnIHNh bXBsZXMgYW5kCi0gKiAnbmJfY2hhbm5lbHMnIGNoYW5uZWxzLiAqLwotc3RhdGljIEFWRnJhbWUg KmdldF9hdWRpb19mcmFtZShPdXRwdXRTdHJlYW0gKm9zdCkKLXsKLSAgICBBVkZyYW1lICpmcmFt ZSA9IG9zdC0+dG1wX2ZyYW1lOwotICAgIGludCBqLCBpLCB2OwotICAgIGludDE2X3QgKnEgPSAo aW50MTZfdCopZnJhbWUtPmRhdGFbMF07Ci0KLSAgICAvKiBjaGVjayBpZiB3ZSB3YW50IHRvIGdl bmVyYXRlIG1vcmUgZnJhbWVzICovCi0gICAgaWYgKGF2X2NvbXBhcmVfdHMob3N0LT5uZXh0X3B0 cywgb3N0LT5lbmMtPnRpbWVfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICBTVFJFQU1fRFVS QVRJT04sIChBVlJhdGlvbmFsKXsgMSwgMSB9KSA+IDApCi0gICAgICAgIHJldHVybiBOVUxMOwor ICAgIGlmIChhdWRpb19lbmNfY3R4KSB7CisgICAgICAgIGlmICghKG91dF9hdWRpb19zdHIgPSBh dmZvcm1hdF9uZXdfc3RyZWFtKCpvdXRfZm10X2N0eCwgTlVMTCkpKSB7CisgICAgICAgICAgICBs b2dfZXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHN0cmVhbSIsIE5VTEwpOworICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBvdXRfYXVkaW9f c3RyLT5pZCA9ICgqb3V0X2ZtdF9jdHgpLT5uYl9zdHJlYW1zIC0gMTsKKyAgICAgICAgYXZjb2Rl Y19wYXJhbWV0ZXJzX2Zyb21fY29udGV4dChvdXRfYXVkaW9fc3RyLT5jb2RlY3BhciwgYXVkaW9f ZW5jX2N0eCk7CisgICAgfQogCi0gICAgZm9yIChqID0gMDsgaiA8ZnJhbWUtPm5iX3NhbXBsZXM7 IGorKykgewotICAgICAgICB2ID0gKGludCkoc2luKG9zdC0+dCkgKiAxMDAwMCk7Ci0gICAgICAg IGZvciAoaSA9IDA7IGkgPCBvc3QtPmVuYy0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBpKyspCi0g ICAgICAgICAgICAqcSsrID0gdjsKLSAgICAgICAgb3N0LT50ICAgICArPSBvc3QtPnRpbmNyOwot ICAgICAgICBvc3QtPnRpbmNyICs9IG9zdC0+dGluY3IyOworICAgIGlmICh2aWRlb19lbmNfY3R4 KSB7CisgICAgICAgIGlmICghKG91dF92aWRlb19zdHIgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKCpv dXRfZm10X2N0eCwgTlVMTCkpKSB7CisgICAgICAgICAgICBsb2dfZXJyb3IoIkNvdWxkIG5vdCBj cmVhdGUgbmV3IHN0cmVhbSIsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKKyAgICAgICAgfQorICAgICAgICBvdXRfdmlkZW9fc3RyLT5pZCA9ICgqb3V0X2ZtdF9j dHgpLT5uYl9zdHJlYW1zIC0gMTsKKyAgICAgICAgYXZjb2RlY19wYXJhbWV0ZXJzX2Zyb21fY29u dGV4dChvdXRfdmlkZW9fc3RyLT5jb2RlY3BhciwgdmlkZW9fZW5jX2N0eCk7CiAgICAgfQogCi0g ICAgZnJhbWUtPnB0cyA9IG9zdC0+bmV4dF9wdHM7Ci0gICAgb3N0LT5uZXh0X3B0cyAgKz0gZnJh bWUtPm5iX3NhbXBsZXM7CisgICAgYXZfZHVtcF9mb3JtYXQoKm91dF9mbXRfY3R4LCAwLCBmaWxl bmFtZSwgMSk7CiAKLSAgICByZXR1cm4gZnJhbWU7CisgICAgLyogV3JpdGUgdGhlIHN0cmVhbSBo ZWFkZXIsIGlmIGFueS4gKi8KKyAgICBpZiAoYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCpvdXRfZm10 X2N0eCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGxvZ19lcnJvcigiYXZmb3JtYXRfd3JpdGVfaGVh ZGVyKCkgZXJyb3IiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKKyAgICB9 IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBlbmNvZGUgb25lIGF1ZGlvIGZy YW1lIGFuZCBzZW5kIGl0IHRvIHRoZSBtdXhlcgotICogcmV0dXJuIDEgd2hlbiBlbmNvZGluZyBp cyBmaW5pc2hlZCwgMCBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCB3cml0ZV9hdWRpb19mcmFt ZShBVkZvcm1hdENvbnRleHQgKm9jLCBPdXRwdXRTdHJlYW0gKm9zdCkKK3N0YXRpYyB2b2lkIGZp bGxfZHVtbXlfczE2X2ZyYW1lKEFWRnJhbWUgKmZyYW1lKQogewotICAgIEFWQ29kZWNDb250ZXh0 ICpjOwotICAgIEFWRnJhbWUgKmZyYW1lOwotICAgIGludCByZXQ7Ci0gICAgaW50IGRzdF9uYl9z YW1wbGVzOwotCi0gICAgYyA9IG9zdC0+ZW5jOwotCi0gICAgZnJhbWUgPSBnZXRfYXVkaW9fZnJh bWUob3N0KTsKLQotICAgIGlmIChmcmFtZSkgewotICAgICAgICAvKiBjb252ZXJ0IHNhbXBsZXMg ZnJvbSBuYXRpdmUgZm9ybWF0IHRvIGRlc3RpbmF0aW9uIGNvZGVjIGZvcm1hdCwgdXNpbmcgdGhl IHJlc2FtcGxlciAqLwotICAgICAgICAvKiBjb21wdXRlIGRlc3RpbmF0aW9uIG51bWJlciBvZiBz YW1wbGVzICovCi0gICAgICAgIGRzdF9uYl9zYW1wbGVzID0gYXZfcmVzY2FsZV9ybmQoc3dyX2dl dF9kZWxheShvc3QtPnN3cl9jdHgsIGMtPnNhbXBsZV9yYXRlKSArIGZyYW1lLT5uYl9zYW1wbGVz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnNhbXBsZV9yYXRl LCBjLT5zYW1wbGVfcmF0ZSwgQVZfUk9VTkRfVVApOwotICAgICAgICBhdl9hc3NlcnQwKGRzdF9u Yl9zYW1wbGVzID09IGZyYW1lLT5uYl9zYW1wbGVzKTsKLQotICAgICAgICAvKiB3aGVuIHdlIHBh c3MgYSBmcmFtZSB0byB0aGUgZW5jb2RlciwgaXQgbWF5IGtlZXAgYSByZWZlcmVuY2UgdG8gaXQK LSAgICAgICAgICogaW50ZXJuYWxseTsKLSAgICAgICAgICogbWFrZSBzdXJlIHdlIGRvIG5vdCBv dmVyd3JpdGUgaXQgaGVyZQotICAgICAgICAgKi8KLSAgICAgICAgcmV0ID0gYXZfZnJhbWVfbWFr ZV93cml0YWJsZShvc3QtPmZyYW1lKTsKLSAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAg ICBleGl0KDEpOwotCi0gICAgICAgIC8qIGNvbnZlcnQgdG8gZGVzdGluYXRpb24gZm9ybWF0ICov Ci0gICAgICAgIHJldCA9IHN3cl9jb252ZXJ0KG9zdC0+c3dyX2N0eCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgb3N0LT5mcmFtZS0+ZGF0YSwgZHN0X25iX3NhbXBsZXMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICoqKWZyYW1lLT5kYXRhLCBmcmFtZS0+bmJf c2FtcGxlcyk7Ci0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIkVycm9yIHdoaWxlIGNvbnZlcnRpbmdcbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsK LSAgICAgICAgfQotICAgICAgICBmcmFtZSA9IG9zdC0+ZnJhbWU7Ci0KLSAgICAgICAgZnJhbWUt PnB0cyA9IGF2X3Jlc2NhbGVfcShvc3QtPnNhbXBsZXNfY291bnQsIChBVlJhdGlvbmFsKXsxLCBj LT5zYW1wbGVfcmF0ZX0sIGMtPnRpbWVfYmFzZSk7Ci0gICAgICAgIG9zdC0+c2FtcGxlc19jb3Vu dCArPSBkc3RfbmJfc2FtcGxlczsKKyAgICBpbnQgaiwgaSwgdjsKKyAgICBzdGF0aWMgZmxvYXQg dCwgdGluY3IsIHRpbmNyMjsKKyAgICBpbnQxNl90ICpkYXRhID0gKGludDE2X3QqKWZyYW1lLT5k YXRhWzBdOworICAgIHN0YXRpYyBpbnQgZnJhbWVfY3RyOworCisgICAgaWYgKCF0aW5jcikgewor ICAgICAgICB0ICAgICAgID0gMDsKKyAgICAgICAgdGluY3IgICA9IDIgKiBNX1BJICogMTEwLjAg LyBmcmFtZS0+c2FtcGxlX3JhdGU7CisgICAgICAgIC8qIGluY3JlbWVudCBmcmVxdWVuY3kgYnkg MTEwIEh6IHBlciBzZWNvbmQgKi8KKyAgICAgICAgdGluY3IyICA9IHRpbmNyIC8gZnJhbWUtPnNh bXBsZV9yYXRlOwogICAgIH0KLQotICAgIHJldHVybiB3cml0ZV9mcmFtZShvYywgYywgb3N0LT5z dCwgZnJhbWUsIG9zdC0+dG1wX3BrdCk7CisgICAgZm9yIChqID0gMDsgaiA8ZnJhbWUtPm5iX3Nh bXBsZXM7IGorKykgeworICAgICAgICB2ID0gKGludCkoc2luKHQpICogMTAwMDApOworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmNoX2xheW91dC5uYl9jaGFubmVsczsgaSsrKQorICAg ICAgICAgICAgKmRhdGErKyA9IHY7CisgICAgICAgIHQgICAgICs9IHRpbmNyOworICAgICAgICB0 aW5jciArPSB0aW5jcjI7CisgICAgfQorICAgIGZyYW1lLT5wdHMgPSBmcmFtZS0+bmJfc2FtcGxl cyooKytmcmFtZV9jdHIpOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiB2aWRlbyBvdXRwdXQgKi8KLQotc3Rh dGljIEFWRnJhbWUgKmFsbG9jX3BpY3R1cmUoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGlu dCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyB2b2lkIGZpbGxfZHVtbXlfeXV2NDIwcF9mcmFt ZShBVkZyYW1lICpmcmFtZSkKIHsKLSAgICBBVkZyYW1lICpwaWN0dXJlOwotICAgIGludCByZXQ7 Ci0KLSAgICBwaWN0dXJlID0gYXZfZnJhbWVfYWxsb2MoKTsKLSAgICBpZiAoIXBpY3R1cmUpCi0g ICAgICAgIHJldHVybiBOVUxMOworICAgIGludCB4LCB5OworICAgIHN0YXRpYyBpbnQgaWR4Owog Ci0gICAgcGljdHVyZS0+Zm9ybWF0ID0gcGl4X2ZtdDsKLSAgICBwaWN0dXJlLT53aWR0aCAgPSB3 aWR0aDsKLSAgICBwaWN0dXJlLT5oZWlnaHQgPSBoZWlnaHQ7CisgICAgLyogWSAqLworICAgIGZv ciAoeSA9IDA7IHkgPCBmcmFtZS0+d2lkdGg7IHkrKykKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8 IGZyYW1lLT53aWR0aDsgeCsrKQorICAgICAgICAgICAgZnJhbWUtPmRhdGFbMF1beSAqIGZyYW1l LT5saW5lc2l6ZVswXSArIHhdID0geCArIHkgKyBpZHggKiAzOwogCi0gICAgLyogYWxsb2NhdGUg dGhlIGJ1ZmZlcnMgZm9yIHRoZSBmcmFtZSBkYXRhICovCi0gICAgcmV0ID0gYXZfZnJhbWVfZ2V0 X2J1ZmZlcihwaWN0dXJlLCAwKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSBkYXRhLlxuIik7Ci0gICAgICAgIGV4 aXQoMSk7CisgICAgLyogQ2IgYW5kIENyICovCisgICAgZm9yICh5ID0gMDsgeSA8IGZyYW1lLT5o ZWlnaHQgLyAyOyB5KyspIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IGZyYW1lLT53aWR0aCAv IDI7IHgrKykgeworICAgICAgICAgICAgZnJhbWUtPmRhdGFbMV1beSAqIGZyYW1lLT5saW5lc2l6 ZVsxXSArIHhdID0gMTI4ICsgeSArIGlkeCAqIDI7CisgICAgICAgICAgICBmcmFtZS0+ZGF0YVsy XVt5ICogZnJhbWUtPmxpbmVzaXplWzJdICsgeF0gPSA2NCArIHggKyBpZHggKiA1OworICAgICAg ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHBpY3R1cmU7CisgICAgZnJhbWUtPnB0cyA9IGlkeCsr OwogfQogCi1zdGF0aWMgdm9pZCBvcGVuX3ZpZGVvKEFWRm9ybWF0Q29udGV4dCAqb2MsIGNvbnN0 IEFWQ29kZWMgKmNvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gKm9z dCwgQVZEaWN0aW9uYXJ5ICpvcHRfYXJnKQorc3RhdGljIGludCBjb252ZXJ0X2ZyYW1lKHZvaWQg KmNvbnZlcnRfY3R4LCBBVkZyYW1lICppbl9mcmFtZSwgQVZGcmFtZSAqb3V0X2ZyYW1lKQogewog ICAgIGludCByZXQ7Ci0gICAgQVZDb2RlY0NvbnRleHQgKmMgPSBvc3QtPmVuYzsKLSAgICBBVkRp Y3Rpb25hcnkgKm9wdCA9IE5VTEw7Ci0KLSAgICBhdl9kaWN0X2NvcHkoJm9wdCwgb3B0X2FyZywg MCk7CisgICAgZW51bSBBVk1lZGlhVHlwZSAqdHlwZSA9IChlbnVtIEFWTWVkaWFUeXBlICopKGlu X2ZyYW1lLT5vcGFxdWUpOwogCi0gICAgLyogb3BlbiB0aGUgY29kZWMgKi8KLSAgICByZXQgPSBh dmNvZGVjX29wZW4yKGMsIGNvZGVjLCAmb3B0KTsKLSAgICBhdl9kaWN0X2ZyZWUoJm9wdCk7Ci0g ICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3Bl biB2aWRlbyBjb2RlYzogJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Ci0gICAgICAgIGV4aXQoMSk7 Ci0gICAgfQotCi0gICAgLyogYWxsb2NhdGUgYW5kIGluaXQgYSByZS11c2FibGUgZnJhbWUgKi8K LSAgICBvc3QtPmZyYW1lID0gYWxsb2NfcGljdHVyZShjLT5waXhfZm10LCBjLT53aWR0aCwgYy0+ aGVpZ2h0KTsKLSAgICBpZiAoIW9zdC0+ZnJhbWUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICJDb3VsZCBub3QgYWxsb2NhdGUgdmlkZW8gZnJhbWVcbiIpOwotICAgICAgICBleGl0KDEpOwor ICAgIGlmIChhdl9mcmFtZV9tYWtlX3dyaXRhYmxlKG91dF9mcmFtZSkgPCAwKSB7CisgICAgICAg IGxvZ19lcnJvcigiYXZfZnJhbWVfbWFrZV93cml0YWJsZSgpIGVycm9yIiwgTlVMTCk7CisgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYSVQ7CiAgICAgfQogCi0gICAgLyogSWYgdGhlIG91dHB1dCBm b3JtYXQgaXMgbm90IFlVVjQyMFAsIHRoZW4gYSB0ZW1wb3JhcnkgWVVWNDIwUAotICAgICAqIHBp Y3R1cmUgaXMgbmVlZGVkIHRvby4gSXQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdGhlIHJlcXVpcmVk Ci0gICAgICogb3V0cHV0IGZvcm1hdC4gKi8KLSAgICBvc3QtPnRtcF9mcmFtZSA9IE5VTEw7Ci0g ICAgaWYgKGMtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQKSB7Ci0gICAgICAgIG9zdC0+ dG1wX2ZyYW1lID0gYWxsb2NfcGljdHVyZShBVl9QSVhfRk1UX1lVVjQyMFAsIGMtPndpZHRoLCBj LT5oZWlnaHQpOwotICAgICAgICBpZiAoIW9zdC0+dG1wX2ZyYW1lKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0ZW1wb3JhcnkgcGljdHVyZVxuIik7 Ci0gICAgICAgICAgICBleGl0KDEpOworICAgIGlmICgqdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVE SU8pIHsKKyAgICAgICAgaWYgKChyZXQgPSBzd3JfY29udmVydF9mcmFtZSgoc3RydWN0IFN3ckNv bnRleHQgKiljb252ZXJ0X2N0eCwgb3V0X2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCBBVkZyYW1lICopaW5fZnJhbWUpKSAhPSAwKSB7CisgICAgICAg ICAgICBsb2dfZXJyb3IoIkVycm9yIGNvbnZlcnRpbmcgQVZGcmFtZSIsICZyZXQpOworICAgICAg ICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3c19z Y2FsZSgoc3RydWN0IFN3c0NvbnRleHQgKiljb252ZXJ0X2N0eCwgKGNvbnN0IHVpbnQ4X3QgKiBj b25zdCAqKWluX2ZyYW1lLT5kYXRhLAorICAgICAgICAgICAgICAgICAgaW5fZnJhbWUtPmxpbmVz aXplLCAwLCBpbl9mcmFtZS0+aGVpZ2h0LCBvdXRfZnJhbWUtPmRhdGEsCisgICAgICAgICAgICAg ICAgICBvdXRfZnJhbWUtPmxpbmVzaXplKTsKICAgICB9CiAKLSAgICAvKiBjb3B5IHRoZSBzdHJl YW0gcGFyYW1ldGVycyB0byB0aGUgbXV4ZXIgKi8KLSAgICByZXQgPSBhdmNvZGVjX3BhcmFtZXRl cnNfZnJvbV9jb250ZXh0KG9zdC0+c3QtPmNvZGVjcGFyLCBjKTsKLSAgICBpZiAocmV0IDwgMCkg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb3B5IHRoZSBzdHJlYW0gcGFy YW1ldGVyc1xuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQorICAgIG91dF9mcmFtZS0+cHRz ID0gaW5fZnJhbWUtPnB0czsKKyAgICByZXR1cm4gMDsKIH0KIAotLyogUHJlcGFyZSBhIGR1bW15 IGltYWdlLiAqLwotc3RhdGljIHZvaWQgZmlsbF95dXZfaW1hZ2UoQVZGcmFtZSAqcGljdCwgaW50 IGZyYW1lX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQg aGVpZ2h0KQorc3RhdGljIGludCBlbmNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmN0eCwgQVZG cmFtZSAqaW5fZnJhbWUsIEFWUGFja2V0ICpvdXRfcGt0KQogewotICAgIGludCB4LCB5LCBpOwor ICAgIHN0YXRpYyBpbnQgaXNfZmx1c2hpbmdfYXVkaW8gPSAwLCBpc19mbHVzaGluZ192aWRlbyA9 IDA7CisgICAgaW50IHJldCA9IDA7CisgICAgaW50IGlzX2F1ZGlvID0gY3R4LT5jb2RlYy0+dHlw ZSA9PSBBVk1FRElBX1RZUEVfQVVESU87CiAKLSAgICBpID0gZnJhbWVfaW5kZXg7Ci0KLSAgICAv KiBZICovCi0gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICBmb3IgKHgg PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgIHBpY3QtPmRhdGFbMF1beSAqIHBpY3Qt PmxpbmVzaXplWzBdICsgeF0gPSB4ICsgeSArIGkgKiAzOwotCi0gICAgLyogQ2IgYW5kIENyICov Ci0gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodCAvIDI7IHkrKykgewotICAgICAgICBmb3IgKHgg PSAwOyB4IDwgd2lkdGggLyAyOyB4KyspIHsKLSAgICAgICAgICAgIHBpY3QtPmRhdGFbMV1beSAq IHBpY3QtPmxpbmVzaXplWzFdICsgeF0gPSAxMjggKyB5ICsgaSAqIDI7Ci0gICAgICAgICAgICBw aWN0LT5kYXRhWzJdW3kgKiBwaWN0LT5saW5lc2l6ZVsyXSArIHhdID0gNjQgKyB4ICsgaSAqIDU7 Ci0gICAgICAgIH0KKyAgICBpZiAoKGlzX2F1ZGlvICYmICFpc19mbHVzaGluZ19hdWRpbykgfHwg KCFpc19hdWRpbyAmJiAhaXNfZmx1c2hpbmdfdmlkZW8pKSB7CisgICAgICAgIHJldCA9IGF2Y29k ZWNfc2VuZF9mcmFtZShjdHgsIGluX2ZyYW1lKTsKICAgICB9Ci19Ci0KLXN0YXRpYyBBVkZyYW1l ICpnZXRfdmlkZW9fZnJhbWUoT3V0cHV0U3RyZWFtICpvc3QpCi17Ci0gICAgQVZDb2RlY0NvbnRl eHQgKmMgPSBvc3QtPmVuYzsKLQotICAgIC8qIGNoZWNrIGlmIHdlIHdhbnQgdG8gZ2VuZXJhdGUg bW9yZSBmcmFtZXMgKi8KLSAgICBpZiAoYXZfY29tcGFyZV90cyhvc3QtPm5leHRfcHRzLCBjLT50 aW1lX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgU1RSRUFNX0RVUkFUSU9OLCAoQVZSYXRp b25hbCl7IDEsIDEgfSkgPiAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIHdoZW4g d2UgcGFzcyBhIGZyYW1lIHRvIHRoZSBlbmNvZGVyLCBpdCBtYXkga2VlcCBhIHJlZmVyZW5jZSB0 byBpdAotICAgICAqIGludGVybmFsbHk7IG1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcndyaXRlIGl0 IGhlcmUgKi8KLSAgICBpZiAoYXZfZnJhbWVfbWFrZV93cml0YWJsZShvc3QtPmZyYW1lKSA8IDAp Ci0gICAgICAgIGV4aXQoMSk7Ci0KLSAgICBpZiAoYy0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lV VjQyMFApIHsKLSAgICAgICAgLyogYXMgd2Ugb25seSBnZW5lcmF0ZSBhIFlVVjQyMFAgcGljdHVy ZSwgd2UgbXVzdCBjb252ZXJ0IGl0Ci0gICAgICAgICAqIHRvIHRoZSBjb2RlYyBwaXhlbCBmb3Jt YXQgaWYgbmVlZGVkICovCi0gICAgICAgIGlmICghb3N0LT5zd3NfY3R4KSB7Ci0gICAgICAgICAg ICBvc3QtPnN3c19jdHggPSBzd3NfZ2V0Q29udGV4dChjLT53aWR0aCwgYy0+aGVpZ2h0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9ZVVY0MjBQ LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+d2lkdGgsIGMt PmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnBp eF9mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRV9G TEFHUywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoIW9zdC0+c3dzX2N0eCkg ewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAg ICAgIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBjb252ZXJzaW9uIGNvbnRleHRcbiIpOwotICAg ICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHJldCA8IDApIHsK KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJFcnJv ciBzZW5kaW5nIGZyYW1lIHRvIHRoZSBlbmNvZGVyIChlcnJvciAnJXMnKVxuIiwgYXZfZXJyMnN0 cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9IGVsc2UgaWYgKHJldCA9PSAwKSB7 CisgICAgICAgIHJldCA9IGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQoY3R4LCBvdXRfcGt0KTsKKyAg ICAgICAgaWYgKChyZXQgPCAwKSAmJiAocmV0ICE9IEFWRVJST1IoRUFHQUlOKSkgJiYgKHJldCAh PSBBVkVSUk9SX0VPRikpIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is CisgICAgICAgICAgICAgICAgICAgIkVycm9yIHJlY2VpdmluZyBlbmNvZGVkIHBhY2tldCAoZXJy b3IgJyVzJylcbiIsIGF2X2VycjJzdHIocmV0KSk7CisgICAgICAgICAgICByZXR1cm4gcmV0Owog ICAgICAgICB9Ci0gICAgICAgIGZpbGxfeXV2X2ltYWdlKG9zdC0+dG1wX2ZyYW1lLCBvc3QtPm5l eHRfcHRzLCBjLT53aWR0aCwgYy0+aGVpZ2h0KTsKLSAgICAgICAgc3dzX3NjYWxlKG9zdC0+c3dz X2N0eCwgKGNvbnN0IHVpbnQ4X3QgKiBjb25zdCAqKSBvc3QtPnRtcF9mcmFtZS0+ZGF0YSwKLSAg ICAgICAgICAgICAgICAgIG9zdC0+dG1wX2ZyYW1lLT5saW5lc2l6ZSwgMCwgYy0+aGVpZ2h0LCBv c3QtPmZyYW1lLT5kYXRhLAotICAgICAgICAgICAgICAgICAgb3N0LT5mcmFtZS0+bGluZXNpemUp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxfeXV2X2ltYWdlKG9zdC0+ZnJhbWUsIG9zdC0+ bmV4dF9wdHMsIGMtPndpZHRoLCBjLT5oZWlnaHQpOwogICAgIH0KIAotICAgIG9zdC0+ZnJhbWUt PnB0cyA9IG9zdC0+bmV4dF9wdHMrKzsKKyAgICBpZiAoaXNfYXVkaW8pCisgICAgICAgIGlzX2Zs dXNoaW5nX2F1ZGlvID0gKGluX2ZyYW1lID09IE5VTEwpOworICAgIGVsc2UKKyAgICAgICAgaXNf Zmx1c2hpbmdfdmlkZW8gPSAoaW5fZnJhbWUgPT0gTlVMTCk7CiAKLSAgICByZXR1cm4gb3N0LT5m cmFtZTsKKyAgICByZXR1cm4gcmV0OwogfQogCi0vKgotICogZW5jb2RlIG9uZSB2aWRlbyBmcmFt ZSBhbmQgc2VuZCBpdCB0byB0aGUgbXV4ZXIKLSAqIHJldHVybiAxIHdoZW4gZW5jb2RpbmcgaXMg ZmluaXNoZWQsIDAgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfdmlkZW9fZnJhbWUo QVZGb3JtYXRDb250ZXh0ICpvYywgT3V0cHV0U3RyZWFtICpvc3QpCitzdGF0aWMgaW50IGZyYW1l X2V4Y2VlZHNfc3RyZWFtX2R1cmF0aW9uKEFWRnJhbWUgKmZyKQogewotICAgIHJldHVybiB3cml0 ZV9mcmFtZShvYywgb3N0LT5lbmMsIG9zdC0+c3QsIGdldF92aWRlb19mcmFtZShvc3QpLCBvc3Qt PnRtcF9wa3QpOworICAgIGVudW0gQVZNZWRpYVR5cGUgKnR5cGUgPSAoZW51bSBBVk1lZGlhVHlw ZSAqKShmci0+b3BhcXVlKTsKKyAgICBBVlJhdGlvbmFsIHRiID0gKCp0eXBlID09IEFWTUVESUFf VFlQRV9BVURJTykgPyAoQVZSYXRpb25hbCl7IDEsIGZyLT5zYW1wbGVfcmF0ZX0gOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFs KXsgMSwgVklERU9fRlJBTUVfUkFURX07CisKKyAgICByZXR1cm4gYXZfY29tcGFyZV90cyhmci0+ cHRzLCB0YiAsU1RSRUFNX0RVUkFUSU9OLCAoQVZSYXRpb25hbCl7IDEsIDEgfSkgPiAwOwogfQog Ci1zdGF0aWMgdm9pZCBjbG9zZV9zdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpvYywgT3V0cHV0U3Ry ZWFtICpvc3QpCitzdGF0aWMgZW51bSBBVk1lZGlhVHlwZSBtZWRpYV90eXBlX29mX2VhcmxpZXJf ZnJhbWUoQVZGcmFtZSAqYXVkaW9fZnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqdmlkZW9fZnIpCiB7Ci0gICAgYXZjb2RlY19m cmVlX2NvbnRleHQoJm9zdC0+ZW5jKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZvc3QtPmZyYW1lKTsK LSAgICBhdl9mcmFtZV9mcmVlKCZvc3QtPnRtcF9mcmFtZSk7Ci0gICAgYXZfcGFja2V0X2ZyZWUo Jm9zdC0+dG1wX3BrdCk7Ci0gICAgc3dzX2ZyZWVDb250ZXh0KG9zdC0+c3dzX2N0eCk7Ci0gICAg c3dyX2ZyZWUoJm9zdC0+c3dyX2N0eCk7CisgICAgaWYgKCFhdWRpb19mcikKKyAgICAgICAgcmV0 dXJuIEFWTUVESUFfVFlQRV9WSURFTzsKKyAgICBpZiAoIXZpZGVvX2ZyKQorICAgICAgICByZXR1 cm4gQVZNRURJQV9UWVBFX0FVRElPOworCisgICAgaWYgKGF2X2NvbXBhcmVfdHMoYXVkaW9fZnIt PnB0cywgKEFWUmF0aW9uYWwpeyAxLCBhdWRpb19mci0+c2FtcGxlX3JhdGV9LAorICAgICAgICAg ICAgICAgICAgICAgIHZpZGVvX2ZyLT5wdHMsIChBVlJhdGlvbmFsKXsgMSwgVklERU9fRlJBTUVf UkFURX0pIDwgMCkKKyAgICAgICAgcmV0dXJuIEFWTUVESUFfVFlQRV9BVURJTzsKKyAgICBlbHNl CisgICAgICAgIHJldHVybiBBVk1FRElBX1RZUEVfVklERU87CiB9CiAKLS8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIG1l ZGlhIGZpbGUgb3V0cHV0ICovCi0KIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsK LSAgICBPdXRwdXRTdHJlYW0gdmlkZW9fc3QgPSB7IDAgfSwgYXVkaW9fc3QgPSB7IDAgfTsKLSAg ICBjb25zdCBBVk91dHB1dEZvcm1hdCAqZm10OwotICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwot ICAgIEFWRm9ybWF0Q29udGV4dCAqb2M7Ci0gICAgY29uc3QgQVZDb2RlYyAqYXVkaW9fY29kZWMs ICp2aWRlb19jb2RlYzsKLSAgICBpbnQgcmV0OwotICAgIGludCBoYXZlX3ZpZGVvID0gMCwgaGF2 ZV9hdWRpbyA9IDA7Ci0gICAgaW50IGVuY29kZV92aWRlbyA9IDAsIGVuY29kZV9hdWRpbyA9IDA7 Ci0gICAgQVZEaWN0aW9uYXJ5ICpvcHQgPSBOVUxMOwotICAgIGludCBpOwotCi0gICAgaWYgKGFy Z2MgPCAyKSB7CisgICAgY29uc3QgY2hhciAqZm5hbWU7CisgICAgQVZDb2RlY0NvbnRleHQgKmF1 ZGlvX2VuY19jdHggPSBOVUxMLCAqdmlkZW9fZW5jX2N0eCA9IE5VTEwsICplbmNfY3R4ID0gTlVM TDsKKworICAgIC8qIE5PVEU6IGlmIHlvdSB3YW50IHRvIG1vZGlmeSB0aGUgYXVkaW8vdmlkZW8g aW5wdXQgIi5mb3JtYXQiIHBhcmFtZXRlciwKKyAgICAgKiB5b3UgbmVlZCB0byBtb2RpZnkgdGhl IGNvcnJlc3BvbmRpbmcgZmlsbF9kdW1teV9YWFhfZnJhbWUoKSBmdW5jdGlvbihzKSB0b28gKi8K KyAgICBBVkNvZGVjUGFyYW1ldGVycyBhdWRpb19pbl9wYXJhbXMgPSB7CisgICAgICAgIC5jb2Rl Y190eXBlICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAgICAgLmZvcm1hdCAgICAgID0gQVZf U0FNUExFX0ZNVF9TMTYsCisgICAgICAgIC5zYW1wbGVfcmF0ZSA9IDQ0MTAwLAorICAgICAgICAu Y2hfbGF5b3V0ICAgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTwor ICAgIH0sCisgICAgdmlkZW9faW5fcGFyYW1zID0geworICAgICAgICAuY29kZWNfdHlwZSA9IEFW TUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLndpZHRoICAgICAgPSAzNTIsCisgICAgICAgIC5o ZWlnaHQgICAgID0gMjg4LAorICAgICAgICAuZm9ybWF0ICAgICA9IEFWX1BJWF9GTVRfWVVWNDIw UAorICAgIH0sCisgICAgdmlkZW9fZW5jX3BhcmFtcyAgPSB7IDAgfSwgYXVkaW9fZW5jX3BhcmFt cyA9IHsgMCB9OworICAgIHN0cnVjdCBBVlJhdGlvbmFsIGVuY190aW1lYmFzZXNbMl07CisgICAg QVZGcmFtZSAqaW5fYXVkaW9fZnJhbWUgPSBOVUxMLCAqY29udmVydGVkX2F1ZGlvX2ZyYW1lID0g TlVMTCwKKyAgICAgICAgICAgICppbl92aWRlb19mcmFtZSA9IE5VTEwsICpjb252ZXJ0ZWRfdmlk ZW9fZnJhbWUgPSBOVUxMLAorICAgICAgICAgICAgKmZyYW1lX3RvX2VuY29kZSA9IE5VTEw7Cisg ICAgc3RydWN0IFN3ckNvbnRleHQgKmF1ZGlvX2NvbnZlcnRfY3R4ID0gTlVMTDsKKyAgICBzdHJ1 Y3QgU3dzQ29udGV4dCAqdmlkZW9fY29udmVydF9jdHggPSBOVUxMOworICAgIGVudW0gQVZNZWRp YVR5cGUgbWVkaWFfdHlwZTsKKyAgICBBVkZvcm1hdENvbnRleHQgKm91dF9mbXRfY3R4ID0gTlVM TDsKKyAgICBBVlBhY2tldCAqb3V0X3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOworICAgIGludCBy ZXQgPSAwLCBwcm9jZXNzX2F1ZGlvID0gMCwgcHJvY2Vzc192aWRlbyA9IDA7CisKKyAgICBpZiAo YXJnYyAhPSAyKSB7CiAgICAgICAgIHByaW50ZigidXNhZ2U6ICVzIG91dHB1dF9maWxlXG4iCiAg ICAgICAgICAgICAgICAiQVBJIGV4YW1wbGUgcHJvZ3JhbSB0byBvdXRwdXQgYSBtZWRpYSBmaWxl IHdpdGggbGliYXZmb3JtYXQuXG4iCi0gICAgICAgICAgICAgICAiVGhpcyBwcm9ncmFtIGdlbmVy YXRlcyBhIHN5bnRoZXRpYyBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtLCBlbmNvZGVzIGFuZFxuIgor ICAgICAgICAgICAgICAgIlRoaXMgcHJvZ3JhbSBnZW5lcmF0ZXMgYSBzeW50aGV0aWMgYXVkaW8g YW5kL29yIHZpZGVvIHN0cmVhbSwgZW5jb2RlcyBhbmRcbiIKICAgICAgICAgICAgICAgICJtdXhl cyB0aGVtIGludG8gYSBmaWxlIG5hbWVkIG91dHB1dF9maWxlLlxuIgogICAgICAgICAgICAgICAg IlRoZSBvdXRwdXQgZm9ybWF0IGlzIGF1dG9tYXRpY2FsbHkgZ3Vlc3NlZCBhY2NvcmRpbmcgdG8g dGhlIGZpbGUgZXh0ZW5zaW9uLlxuIgotICAgICAgICAgICAgICAgIlJhdyBpbWFnZXMgY2FuIGFs c28gYmUgb3V0cHV0IGJ5IHVzaW5nICclJWQnIGluIHRoZSBmaWxlbmFtZS5cbiIKKyAgICAgICAg ICAgICAgICJCTVAgb3IgSlBFRyBpbWFnZXMgY2FuIGFsc28gYmUgb3V0cHV0IGJ5IHVzaW5nICcl JWQnIGluIHRoZSBmaWxlbmFtZS5cbiIKICAgICAgICAgICAgICAgICJcbiIsIGFyZ3ZbMF0pOwot ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKICAgICB9CiAK LSAgICBmaWxlbmFtZSA9IGFyZ3ZbMV07Ci0gICAgZm9yIChpID0gMjsgaSsxIDwgYXJnYzsgaSs9 MikgewotICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLWZsYWdzIikgfHwgIXN0cmNtcChh cmd2W2ldLCAiLWZmbGFncyIpKQotICAgICAgICAgICAgYXZfZGljdF9zZXQoJm9wdCwgYXJndltp XSsxLCBhcmd2W2krMV0sIDApOworICAgIGZuYW1lID0gYXJndlsxXTsKKyAgICBpZiAoIWlzX2V4 dGVuc2lvbl9zdXBwb3J0ZWQoZm5hbWUpKSB7CisgICAgICAgIHJldCA9IEFWRVJST1JfRVhJVDsK KyAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgLyogYWxsb2NhdGUgdGhlIG91dHB1dCBt ZWRpYSBjb250ZXh0ICovCi0gICAgYXZmb3JtYXRfYWxsb2Nfb3V0cHV0X2NvbnRleHQyKCZvYywg TlVMTCwgTlVMTCwgZmlsZW5hbWUpOwotICAgIGlmICghb2MpIHsKLSAgICAgICAgcHJpbnRmKCJD b3VsZCBub3QgZGVkdWNlIG91dHB1dCBmb3JtYXQgZnJvbSBmaWxlIGV4dGVuc2lvbjogdXNpbmcg TVBFRy5cbiIpOwotICAgICAgICBhdmZvcm1hdF9hbGxvY19vdXRwdXRfY29udGV4dDIoJm9jLCBO VUxMLCAibXBlZyIsIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgaWYgKCFvYykKLSAgICAgICAgcmV0 dXJuIDE7Ci0KLSAgICBmbXQgPSBvYy0+b2Zvcm1hdDsKLQotICAgIC8qIEFkZCB0aGUgYXVkaW8g YW5kIHZpZGVvIHN0cmVhbXMgdXNpbmcgdGhlIGRlZmF1bHQgZm9ybWF0IGNvZGVjcwotICAgICAq IGFuZCBpbml0aWFsaXplIHRoZSBjb2RlY3MuICovCi0gICAgaWYgKGZtdC0+dmlkZW9fY29kZWMg IT0gQVZfQ09ERUNfSURfTk9ORSkgewotICAgICAgICBhZGRfc3RyZWFtKCZ2aWRlb19zdCwgb2Ms ICZ2aWRlb19jb2RlYywgZm10LT52aWRlb19jb2RlYyk7Ci0gICAgICAgIGhhdmVfdmlkZW8gPSAx OwotICAgICAgICBlbmNvZGVfdmlkZW8gPSAxOworICAgIC8qIERlc3VtZSB0aGUgZGVmYXVsdCBj b2RlY3MgYW5kIHRoZWlyIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIHRoZSBmaWxlbmFtZSAqLwor ICAgIGlmICgocmV0ID0gZ2V0X2RlZmF1bHRfZW5jX3BhcmFtcygmYXVkaW9fZW5jX3BhcmFtcywg Zm5hbWUsIEFWTUVESUFfVFlQRV9BVURJTykpIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisgICAg aWYgKChyZXQgPSBnZXRfZGVmYXVsdF9lbmNfcGFyYW1zKCZ2aWRlb19lbmNfcGFyYW1zLCBmbmFt ZSwgQVZNRURJQV9UWVBFX1ZJREVPKSkgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBwcm9j ZXNzX2F1ZGlvID0gYXVkaW9fZW5jX3BhcmFtcy5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9OT05F OworICAgIHByb2Nlc3NfdmlkZW8gPSB2aWRlb19lbmNfcGFyYW1zLmNvZGVjX2lkICE9IEFWX0NP REVDX0lEX05PTkU7CisgICAgaWYgKCFwcm9jZXNzX2F1ZGlvICYmICFwcm9jZXNzX3ZpZGVvKSB7 CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGdldCBkZWZhdWx0IGVuY29kZXIocykiLCBO VUxMKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9FWElUOworICAgICAgICBnb3RvIGVuZDsKICAg ICB9Ci0gICAgaWYgKGZtdC0+YXVkaW9fY29kZWMgIT0gQVZfQ09ERUNfSURfTk9ORSkgewotICAg ICAgICBhZGRfc3RyZWFtKCZhdWRpb19zdCwgb2MsICZhdWRpb19jb2RlYywgZm10LT5hdWRpb19j b2RlYyk7Ci0gICAgICAgIGhhdmVfYXVkaW8gPSAxOwotICAgICAgICBlbmNvZGVfYXVkaW8gPSAx OwotICAgIH0KLQotICAgIC8qIE5vdyB0aGF0IGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgc2V0LCB3 ZSBjYW4gb3BlbiB0aGUgYXVkaW8gYW5kCi0gICAgICogdmlkZW8gY29kZWNzIGFuZCBhbGxvY2F0 ZSB0aGUgbmVjZXNzYXJ5IGVuY29kZSBidWZmZXJzLiAqLwotICAgIGlmIChoYXZlX3ZpZGVvKQot ICAgICAgICBvcGVuX3ZpZGVvKG9jLCB2aWRlb19jb2RlYywgJnZpZGVvX3N0LCBvcHQpOwotCi0g ICAgaWYgKGhhdmVfYXVkaW8pCi0gICAgICAgIG9wZW5fYXVkaW8ob2MsIGF1ZGlvX2NvZGVjLCAm YXVkaW9fc3QsIG9wdCk7Ci0KLSAgICBhdl9kdW1wX2Zvcm1hdChvYywgMCwgZmlsZW5hbWUsIDEp OwogCi0gICAgLyogb3BlbiB0aGUgb3V0cHV0IGZpbGUsIGlmIG5lZWRlZCAqLwotICAgIGlmICgh KGZtdC0+ZmxhZ3MgJiBBVkZNVF9OT0ZJTEUpKSB7Ci0gICAgICAgIHJldCA9IGF2aW9fb3Blbigm b2MtPnBiLCBmaWxlbmFtZSwgQVZJT19GTEFHX1dSSVRFKTsKLSAgICAgICAgaWYgKHJldCA8IDAp IHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJyVzJzogJXNc biIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwotICAg ICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KKyAgICBpZiAocHJvY2Vzc19hdWRpbykgewor ICAgICAgICAvKiBQcmVwYXJlIHRoZSBhdWRpbyBlbmNvZGVyKi8KKyAgICAgICAgaWYgKChyZXQg PSBpbml0X2VuY29kZXIoJmF1ZGlvX2VuY19jdHgsICZhdWRpb19lbmNfcGFyYW1zKSkgPCAwKQor ICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGVuY190aW1lYmFzZXNbMF0gPSBhdWRpb19l bmNfY3R4LT50aW1lX2Jhc2U7CisgICAgICAgIGF1ZGlvX2luX3BhcmFtcy5mcmFtZV9zaXplICA9 IGF1ZGlvX2VuY19wYXJhbXMuZnJhbWVfc2l6ZSAgPSBhdWRpb19lbmNfY3R4LT5mcmFtZV9zaXpl OworCisgICAgICAgIC8qIEFsbG9jYXRlIGFuIGF1ZGlvIHJlc2FtcGxlciBhbmQgaXRzIGlucHV0 IGFuZCBvdXRwdXQgQVZGcmFtZXMgKi8KKyAgICAgICAgaWYgKChyZXQgPSBpbml0X2F1ZGlvX2Nv bnZlcnQoJmF1ZGlvX2NvbnZlcnRfY3R4LCAmYXVkaW9faW5fcGFyYW1zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYXVkaW9fZW5jX3BhcmFtcykpIDwgMCkKKyAgICAg ICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAoKHJldCA9IGluaXRfYXZmcmFtZSgmaW5fYXVk aW9fZnJhbWUsICZhdWRpb19pbl9wYXJhbXMpKSA8IDApCisgICAgICAgICAgICBnb3RvIGVuZDsK KyAgICAgICAgaWYgKChyZXQgPSBpbml0X2F2ZnJhbWUoJmNvbnZlcnRlZF9hdWRpb19mcmFtZSwg JmF1ZGlvX2VuY19wYXJhbXMpKSA8IDApCisgICAgICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAK LSAgICAvKiBXcml0ZSB0aGUgc3RyZWFtIGhlYWRlciwgaWYgYW55LiAqLwotICAgIHJldCA9IGF2 Zm9ybWF0X3dyaXRlX2hlYWRlcihvYywgJm9wdCk7Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBvY2N1cnJlZCB3aGVuIG9wZW5pbmcgb3V0cHV0IGZp bGU6ICVzXG4iLAotICAgICAgICAgICAgICAgIGF2X2VycjJzdHIocmV0KSk7Ci0gICAgICAgIHJl dHVybiAxOworICAgIGlmIChwcm9jZXNzX3ZpZGVvKSB7CisgICAgICAgIHZpZGVvX2VuY19wYXJh bXMud2lkdGggID0gdmlkZW9faW5fcGFyYW1zLndpZHRoOworICAgICAgICB2aWRlb19lbmNfcGFy YW1zLmhlaWdodCA9IHZpZGVvX2luX3BhcmFtcy5oZWlnaHQ7CisgICAgICAgIGlmICgocmV0ID0g aW5pdF9lbmNvZGVyKCZ2aWRlb19lbmNfY3R4LCAmdmlkZW9fZW5jX3BhcmFtcykpIDwgMCkKKyAg ICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBlbmNfdGltZWJhc2VzWzFdID0gdmlkZW9fZW5j X2N0eC0+dGltZV9iYXNlOworICAgICAgICBpZiAoKHJldCA9IGluaXRfdmlkZW9fY29udmVydCgm dmlkZW9fY29udmVydF9jdHgsJnZpZGVvX2luX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnZpZGVvX2VuY19wYXJhbXMpKSA8IDApCisgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgaWYgKChyZXQgPSBpbml0X2F2ZnJhbWUoJmluX3ZpZGVvX2ZyYW1l LCAmdmlkZW9faW5fcGFyYW1zKSkgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAg IGlmICgocmV0ID0gaW5pdF9hdmZyYW1lKCZjb252ZXJ0ZWRfdmlkZW9fZnJhbWUsICZ2aWRlb19l bmNfcGFyYW1zKSkgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgd2hp bGUgKGVuY29kZV92aWRlbyB8fCBlbmNvZGVfYXVkaW8pIHsKLSAgICAgICAgLyogc2VsZWN0IHRo ZSBzdHJlYW0gdG8gZW5jb2RlICovCi0gICAgICAgIGlmIChlbmNvZGVfdmlkZW8gJiYKLSAgICAg ICAgICAgICghZW5jb2RlX2F1ZGlvIHx8IGF2X2NvbXBhcmVfdHModmlkZW9fc3QubmV4dF9wdHMs IHZpZGVvX3N0LmVuYy0+dGltZV9iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdWRpb19zdC5uZXh0X3B0cywgYXVkaW9fc3QuZW5jLT50aW1lX2Jhc2Up IDw9IDApKSB7Ci0gICAgICAgICAgICBlbmNvZGVfdmlkZW8gPSAhd3JpdGVfdmlkZW9fZnJhbWUo b2MsICZ2aWRlb19zdCk7CisgICAgLyogQ3JlYXRlIHRoZSBvdXRwdXQgY29udGFpbmVyIGZvciB0 aGUgZW5jb2RlZCBmcmFtZXMgKi8KKyAgICBpZiAoKHJldCA9IGluaXRfbXV4ZXIoJm91dF9mbXRf Y3R4LCBhdWRpb19lbmNfY3R4LCB2aWRlb19lbmNfY3R4LCBmbmFtZSkpIDwgMCkKKyAgICAgICAg Z290byBlbmQ7CisgICAgb3V0X2ZtdF9jdHgtPm9wYXF1ZSA9ICZlbmNfdGltZWJhc2VzOworCisg ICAgd2hpbGUgKHByb2Nlc3NfYXVkaW8gfHwgcHJvY2Vzc192aWRlbykgeworCisgICAgICAgIGZy YW1lX3RvX2VuY29kZSA9IE5VTEw7CisgICAgICAgIG1lZGlhX3R5cGUgPSBtZWRpYV90eXBlX29m X2VhcmxpZXJfZnJhbWUoaW5fYXVkaW9fZnJhbWUsIGluX3ZpZGVvX2ZyYW1lKTsKKworICAgICAg ICAvKiBmaWxsIGFuZCBjb252ZXJ0IHRoZSBpbnB1dCBmcmFtZXMgKi8KKyAgICAgICAgaWYgKG1l ZGlhX3R5cGUgPT0gQVZNRURJQV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICBlbmNfY3R4ID0g YXVkaW9fZW5jX2N0eDsKKyAgICAgICAgICAgIGZpbGxfZHVtbXlfczE2X2ZyYW1lKGluX2F1ZGlv X2ZyYW1lKTsKKyAgICAgICAgICAgIGlmICgocmV0ID0gY29udmVydF9mcmFtZShhdWRpb19jb252 ZXJ0X2N0eCwgaW5fYXVkaW9fZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udmVydGVkX2F1ZGlvX2ZyYW1lKSkgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3Rv IGVuZDsKKyAgICAgICAgICAgIGlmICghZnJhbWVfZXhjZWVkc19zdHJlYW1fZHVyYXRpb24oY29u dmVydGVkX2F1ZGlvX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZV90b19lbmNvZGUgPSBj b252ZXJ0ZWRfYXVkaW9fZnJhbWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbmNv ZGVfYXVkaW8gPSAhd3JpdGVfYXVkaW9fZnJhbWUob2MsICZhdWRpb19zdCk7CisgICAgICAgICAg ICBlbmNfY3R4ID0gdmlkZW9fZW5jX2N0eDsKKyAgICAgICAgICAgIGZpbGxfZHVtbXlfeXV2NDIw cF9mcmFtZShpbl92aWRlb19mcmFtZSk7CisgICAgICAgICAgICBpZiAoKHJldCA9IGNvbnZlcnRf ZnJhbWUodmlkZW9fY29udmVydF9jdHgsIGluX3ZpZGVvX2ZyYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZF92aWRlb19mcmFtZSkpICE9IDApCisgICAg ICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICBpZiAoIWZyYW1lX2V4Y2VlZHNfc3Ry ZWFtX2R1cmF0aW9uKGluX3ZpZGVvX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZV90b19l bmNvZGUgPSBjb252ZXJ0ZWRfdmlkZW9fZnJhbWU7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBh dl93cml0ZV90cmFpbGVyKG9jKTsKIAotICAgIC8qIENsb3NlIGVhY2ggY29kZWMuICovCi0gICAg aWYgKGhhdmVfdmlkZW8pCi0gICAgICAgIGNsb3NlX3N0cmVhbShvYywgJnZpZGVvX3N0KTsKLSAg ICBpZiAoaGF2ZV9hdWRpbykKLSAgICAgICAgY2xvc2Vfc3RyZWFtKG9jLCAmYXVkaW9fc3QpOwor ICAgICAgICAvKiBlbmNvZGUgdGhlIGNvbnZlcnRlZCBmcmFtZXMgYW5kIG11eCB0aGUgZW5jb2Rl ZCBwYWNrZXRzICovCisgICAgICAgIGlmICgocmV0ID0gZW5jb2RlX2ZyYW1lKGVuY19jdHgsIGZy YW1lX3RvX2VuY29kZSwgb3V0X3BrdCkpID09IDApIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0g bXV4X2VuY29kZWRfcGt0KG91dF9wa3QsIG91dF9mbXRfY3R4LCBtZWRpYV90eXBlKSkgPCAwKQor ICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KIAotICAgIGlmICghKGZtdC0+Zmxh Z3MgJiBBVkZNVF9OT0ZJTEUpKQotICAgICAgICAvKiBDbG9zZSB0aGUgb3V0cHV0IGZpbGUuICov Ci0gICAgICAgIGF2aW9fY2xvc2VwKCZvYy0+cGIpOworICAgICAgICAvKiBjaGVjayBpZiB0aGUg ZW5jb2RlcnMgaGF2ZSBiZWVuIGZ1bGx5IGZsdXNoZWQgKi8KKyAgICAgICAgcHJvY2Vzc19hdWRp byAmPSAhKChyZXQgPT0gQVZFUlJPUl9FT0YpICYmIChtZWRpYV90eXBlID09IEFWTUVESUFfVFlQ RV9BVURJTykpOworICAgICAgICBwcm9jZXNzX3ZpZGVvICY9ICEoKHJldCA9PSBBVkVSUk9SX0VP RikgJiYgKG1lZGlhX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSk7CiAKLSAgICAvKiBmcmVl IHRoZSBzdHJlYW0gKi8KLSAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob2MpOworICAgIH0KIAot ICAgIHJldHVybiAwOworICAgIGF2X3dyaXRlX3RyYWlsZXIob3V0X2ZtdF9jdHgpOworICAgIHJl dCA9IDA7CisKK2VuZDoKKworICAgIGF2Y29kZWNfZnJlZV9jb250ZXh0KCZhdWRpb19lbmNfY3R4 KTsKKyAgICBhdmNvZGVjX2ZyZWVfY29udGV4dCgmdmlkZW9fZW5jX2N0eCk7CisgICAgYXZfZnJh bWVfZnJlZSgmaW5fYXVkaW9fZnJhbWUpOworICAgIGF2X2ZyYW1lX2ZyZWUoJmluX3ZpZGVvX2Zy YW1lKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZjb252ZXJ0ZWRfYXVkaW9fZnJhbWUpOworICAgIGF2 X2ZyYW1lX2ZyZWUoJmNvbnZlcnRlZF92aWRlb19mcmFtZSk7CisgICAgc3dyX2ZyZWUoJmF1ZGlv X2NvbnZlcnRfY3R4KTsKKyAgICBzd3NfZnJlZUNvbnRleHQodmlkZW9fY29udmVydF9jdHgpOwor ICAgIGlmIChvdXRfZm10X2N0eCkKKyAgICAgICAgYXZpb19jbG9zZXAoJm91dF9mbXRfY3R4LT5w Yik7CisgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KG91dF9mbXRfY3R4KTsKKyAgICBhdl9wYWNr ZXRfZnJlZSgmb3V0X3BrdCk7CisKKyAgICByZXR1cm4gcmV0OwogfQotLSAKMi4zMi4wCgo= ------=_Part_9130637_1057168071.1655553986479 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ------=_Part_9130637_1057168071.1655553986479--