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 95C0444027 for ; Wed, 24 Aug 2022 15:18:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8BAED68B9F0; Wed, 24 Aug 2022 18:18:40 +0300 (EEST) Received: from nef.ens.fr (nef2.ens.fr [129.199.96.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B85068B93E for ; Wed, 24 Aug 2022 18:18:33 +0300 (EEST) X-ENS-nef-client: 129.199.129.80 ( name = phare.normalesup.org ) Received: from phare.normalesup.org (phare.normalesup.org [129.199.129.80]) by nef.ens.fr (8.14.4/1.01.28121999) with ESMTP id 27OFIWYj026579 for ; Wed, 24 Aug 2022 17:18:32 +0200 Received: by phare.normalesup.org (Postfix, from userid 1001) id 1A056E0101; Wed, 24 Aug 2022 17:18:32 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Aug 2022 17:18:28 +0200 Message-Id: <20220824151828.24218-1-george@nsup.org> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (nef.ens.fr [129.199.96.32]); Wed, 24 Aug 2022 17:18:32 +0200 (CEST) Subject: [FFmpeg-devel] [PATCH] lavu: header and documentation for AVWriter 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 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: VGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGVzdHMgYW5kIHVzZXMgaW4gdGhlIHJlc3Qgb2YK RkZtcGVnIGNvZGUgd2lsbCBiZSBjb21taXR0ZWQgc2VwYXJhdGVseSBvbmNlIHRoZSBBUEkgaXMK c2V0dGxlZC4KClNpZ25lZC1vZmYtYnk6IE5pY29sYXMgR2VvcmdlIDxnZW9yZ2VAbnN1cC5vcmc+ Ci0tLQogZG9jL2F2d3JpdGVyX2ludHJvLm1kIHwgMTA5ICsrKysrKysrKysKIGxpYmF2dXRpbC93 cml0ZXIuaCAgICB8IDQ4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDIgZmlsZXMgY2hhbmdlZCwgNTkzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkb2MvYXZ3cml0ZXJfaW50cm8ubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvd3Jp dGVyLmgKCgpBcyBzdWdnZXN0ZWQgYnkgSkIsIGhlcmUgaXMgdGhlIGhlYWRlciBhbmQgZG9jdW1l bnRhdGlvbiBmb3IgQVZXcml0ZXIsCnRvIGRpc2N1c3MgdGhlIHByaW5jaXBsZSBiZWZvcmUgaW52 ZXN0aW5nIHRpbWUgaW4gcG9saXNoaW5nIHRoZQppbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8g ZGlzY3VzcyB0aGUgQVBJIGFuZCBpZiBubyBibG9ja2lnbgpvYmplY3Rpb25zIGFyZSByYWlzZWQg cHVzaCBpdCB0aGVuIHNwZW5kIHRpbWUgb24gdGhlIGltcGxlbWVudGF0aW9uLgoKVGhpcyBBUEkg aXMgYSBuaWNlciBhbmQgbXVjaCBtb3JlIHBvd2VyZnVsIHZlcnNpb24gb2YgQlByaW50LiBJdCBj YW4gYmUKdXNlZCB0byBzaW1wbGlmeSBleGlzdGluZyBjb2RlIHdoZXJlIEJQcmludCBjb3VsZCBo ZWxwLCBwbHVzIHBsYWNlcwp3aGVyZSBCUHJpbnQgY291bGQgbm90IGhlbHAuCgpJdCBhbHNvIGlz IHRoZSBwcmVyZXF1aXNpdGUgZm9yIG1vcmUgYW1iaXRpb3VzIHByb2plY3RzLCBleHBlY2lhbGx5 CnVuaXZlcnNhbCBzZXJpYWxpemF0aW9uIG9mIEZGbXBlZyBvYmplY3RzIChzaWRlIGRhdGEgYW5k IHN1Y2gpIGludG8Kc3RhbmRhcmRpemVkIGZvcm1hdHMuCgpUaGUgaW1wbGVtZW50YXRpb24gaXMg aW4gbW9zdCBwYXJ0IGRvbmUsIGFuZCBJIGFtIHN1cmUgSSBjYW4gZGVsaXZlci4KV2hhdCByZW1h aW5zIGlzIHRoZSBib3JpbmcgcGFydCBvZiBpbnRlZ3JhdGluZyB0aGUgdGVzdHMgaW4gRkFURSwK cG9saXNoaW5nIHZhcmlvdXMgcGFydHMsIHVwZGF0aW5nIHRoZSBwYXJ0cyB3aGVyZSBJIGNoYW5n ZWQgbXkgbWluZAptaWR3YXksIGV0Yy4KCk5vdGU6IEZGX05FV19TWiBpcyBhIG1hY3JvIGRlZmlu ZWQgZWxzZXdoZXJlOyBpdCBpcyByZWFsbHkgcGFydCBvZiB0aGUKaW1wbGVtZW50YXRpb24gbW9y ZSB0aGFuIHRoZSBBUEkuCgoKZGlmZiAtLWdpdCBhL2RvYy9hdndyaXRlcl9pbnRyby5tZCBiL2Rv Yy9hdndyaXRlcl9pbnRyby5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li40ZmQ4YTVhNGFkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2F2d3JpdGVyX2ludHJvLm1kCkBA IC0wLDAgKzEsMTA5IEBACisjIFF1aWNrIHN0YXJ0IGd1aWRlIGZvciBBVldyaXRlcgorCitBVldy aXRlciBpcyBhbiBBUEkgdG8gdW5pZnkgZnVuY3Rpb25zIHJldHVybmluZyBzdHJpbmdzIChvciBh bnkgYXJiaXRyYXJ5CitiaW5hcnkgYnVmZmVyKSBhbmQgdG8gbWFrZSBidWlsZGluZyBzdHJpbmdz IGZyb20gcGFydHMgZWFzaWVyLiBIZXJlIGlzIGEKK3F1aWNrIGludHJvZHVjdGlvbiB3aXRoIHBh aXJzIG9mIOKAnHdoYXQgSSB3b3VsZCBkbyB3aXRob3V0IEFWV3JpdGVy4oCdIC8KK+KAnGhvdyB0 byBkbyBpdCB3aXRoIEFWV3JpdGVy4oCdIG9mIGV4YW1wbGUgY29kZS4KKworIyMgSSB3YW50IGEg YGNoYXIqYCBidWZmZXIsIHRoZSBmdW5jdGlvbiB3YW50cyBhbiBBVldyaXRlcgorCitPbGQtc3R5 bGUgY29kZToKKworYGBgCisgICAgICAgIGNoYXIgKmJ1ZjsKKyAgICAgICAgcmV0ID0gYXZfc29t ZXRoaW5nX3RvX3N0cmluZygmYnVmLCBzb21ldGhpbmcpOworICAgICAgICBpZiAocmV0IDwgMCkK KyAgICAgICAgICAgIGRpZSgiRmFpbGVkIik7CisgICAgICAgIHVzZV9zdHJpbmcoYnVmKTsKKyAg ICAgICAgYXZfZnJlZXAoJmJ1Zik7CitgYGAKKworRXF1aXZhbGVudCBjb2RlIHdpdGggQVZXcml0 ZXI6CisKK2BgYAorICAgICAgICBBVldyaXRlciB3ciA9IGF2X2R5bmJ1Zl93cml0ZXIoKTsKKyAg ICAgICAgYXZfc29tZXRoaW5nX3dyaXRlKHdyLCBzb21ldGhpbmcsIDApOworICAgICAgICBpZiAo YXZfd3JpdGVyX2dldF9lcnJvcih3ciwgMCkgPCAwKQorICAgICAgICAgICAgZGllKCJGYWlsZWQi KTsKKyAgICAgICAgdXNlX3N0cmluZyhhdl9keW5idWZfd3JpdGVyX2dldF9kYXRhKHdyLCBOVUxM KSk7CisgICAgICAgIGF2X2R5bmJ1Zl93cml0ZXJfZmluYWxpemUod3IsIE5VTEwsIE5VTEwpOwor YGBgCisKK0lmIHRoZSBzdHJpbmcgaXMgc21hbGwgZW5vdWdoLCBubyBkeW5hbWljIG1lbW9yeSBh bGxvY2F0aW9uIGhhcHBlbnMuCisKK1RoZSBOVUxMIHRvIGBhdl9keW5idWZfd3JpdGVyX2dldF9k YXRhKClgIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBzaXplCitvZiB0aGUgZGF0YSBpbiB0 aGUgYnVmZmVyLgorCitDYWxsaW5nIGBhdl93cml0ZXJfZ2V0X2Vycm9yKClgIGlzIG1hbmRhdG9y eS4KKworIyMgSSB3YW50IGEgKnBlcnNpc3RlbnQqIGBjaGFyKmAgYnVmZmVyLCB0aGUgZnVuY3Rp b24gd2FudHMgYW4gQVZXcml0ZXIKKworT2xkLXN0eWxlIGNvZGU6CisKK2BgYAorICAgICAgICBj aGFyICpidWY7CisgICAgICAgIHJldCA9IGF2X3NvbWV0aGluZ190b19zdHJpbmcoJmJ1Ziwgc29t ZXRoaW5nKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBkaWUoIkZhaWxlZCIp OworICAgICAgICBjdHgtPnN0cmluZyA9IGJ1ZjsKK2BgYAorCitFcXVpdmFsZW50IGNvZGUgd2l0 aCBBVldyaXRlcjoKKworYGBgCisgICAgICAgIEFWV3JpdGVyIHdyID0gYXZfZHluYnVmX3dyaXRl cigpOworICAgICAgICBhdl9zb21ldGhpbmdfd3JpdGUod3IsIHNvbWV0aGluZywgMCk7CisgICAg ICAgIHJldCA9IGF2X2R5bmJ1Zl93cml0ZXJfZmluYWxpemUod3IsICZjdHgtPnN0cmluZywgTlVM TCk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgZGllKCJGYWlsZWQiKTsKK2Bg YAorCisjIyBJIGhhdmUgYSBgY2hhcltdYCBidWZmZXIsIHRoZSBmdW5jdGlvbiB3YW50cyBhbiBB VldyaXRlcgorCitPbGQtc3R5bGUgY29kZToKKworYGBgCisgICAgICAgIGNoYXIgYnVmW0JVRl9T SVpFXTsKKyAgICAgICAgYXZfc29tZXRoaW5nX3RvX3N0cmluZyhidWYsIHNpemVvZihidWYpLCBz b21ldGhpbmcpOworICAgICAgICB1c2Vfc3RyaW5nKGJ1Zik7CitgYGAKKworRXF1aXZhbGVudCBj b2RlIHdpdGggQVZXcml0ZXI6CisKK2BgYAorICAgICAgICBjaGFyIGJ1ZltCVUZfU0laRV07Cisg ICAgICAgIGF2X3NvbWV0aGluZ193cml0ZShhdl9idWZfd3JpdGVyKGJ1Ziwgc2l6ZW9mKGJ1Zikp LCBzb21ldGhpbmcsIDApOworICAgICAgICB1c2Vfc3RyaW5nKGJ1Zik7CitgYGAKKworIyMgSSBu ZWVkIHRvIGJ1aWxkIGEgc3RyaW5nIGZyb20gcGFydHMKKworT2xkLXN0eWxlIGNvZGU6CisKK2Bg YAorICAgICAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICAgICAgaW50IHBvcyA9IDA7CisgICAgICAg IHBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIHNpemVvZihidWYpIC0gcG9zLAorICAgICAgICAg ICAgICAgICAgICAgICAgIlN0cmVhbSAlZDogIiwgaSk7CisgICAgICAgIGF2X2dldF9jaGFubmVs X2xheW91dF9zdHJpbmcoYnVmICsgcG9zLCBzaXplb2YoYnVmKSAtIHBvcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuYiwgbGF5b3V0KTsKKyAgICAgICAgcG9zICs9IHN0 cmxlbihidWYgKyBwb3MpOworICAgICAgICBwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBzaXpl b2YoYnVmKSAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICIsICVzIiwgYXZfZ2V0X3Nh bXBsZV9mbXRfbmFtZShmbXQpKTsKK2BgYAorCitOb3RlOiB0aGlzIGNvZGUgY291bGQgb3ZlcmZs b3cgdGhlIGJ1ZmZlci4KKworRXF1aXZhbGVudCBjb2RlIHdpdGggQVZXcml0ZXI6CisKK2BgYAor ICAgICAgICBBVldyaXRlciB3ciA9IGF2X2R5bmJ1Zl93cml0ZXIoKTsKKyAgICAgICAgYXZfd3Jp dGVyX3ByaW50Zih3ciwgIlN0cmVhbSAlZDogIiwgaSk7CisgICAgICAgIGF2X2NoYW5uZWxfbGF5 b3V0X3dyaXRlKHdyLCBuYiwgbGF5b3V0LCAwKTsKKyAgICAgICAgYXZfd3JpdGVyX3ByaW50Zih3 ciwgIiwgJXMiLCBhdl9nZXRfc2FtcGxlX2ZtdF9uYW1lKGZtdCkpOworYGBgCisKK1NlZSB0aGUg Zmlyc3QgZXhhbXBsZSBvbiBob3cgdG8gYWNjZXNzIHRoZSByZXN1bHRpbmcgc3RyaW5nLgorCitO b3RlOiB0aGlzIGlzIHZlcnkgc2ltaWxhciB0byB1c2luZyBBVkJQcmludDsgZnJvbSB0aGlzIHNp ZGUsIEFWV3JpdGVyCityZXBsYWNlcyBBVkJQcmludC4KZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC93 cml0ZXIuaCBiL2xpYmF2dXRpbC93cml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi41NWUyY2YzZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1dGlsL3dyaXRl ci5oCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSBGRm1w ZWcgcHJvamVjdAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZu ZGVmIEFWVVRJTF9XUklURVJfSAorI2RlZmluZSBBVlVUSUxfV1JJVEVSX0gKKworI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNp bmNsdWRlICJleHRlbmRhYmxlLmgiCisjaW5jbHVkZSAiYnByaW50LmgiCisKKy8qKgorICogQGRl Zmdyb3VwIGF2X3dyaXRlciBBVldyaXRlcgorICoKKyAqIE9iamVjdC1vcmllbnRlZCBBUEkgdG8g d3JpdGUgc3RyaW5ncyBhbmQgYmluYXJ5IGRhdGEuCisgKgorICogQHsKKyAqLworCit0eXBlZGVm IHN0cnVjdCBBVldyaXRlck1ldGhvZHMgQVZXcml0ZXJNZXRob2RzOworCisvKioKKyAqIE9wYXF1 ZSBvYmplY3QgdG8gd3JpdGUgc3RyaW5ncyBhbmQgYmluYXJ5IGRhdGEuCisgKgorICogQVZXcml0 ZXIgaXMgbWVhbnQgdG8gYWxsb3cgdG8gYnVpbGQgYW5kIHJldHVybiBzdHJpbmdzIChhbmQgYmxv Y2tzIG9mCisgKiBiaW5hcnkgZGF0YSkgZWZmaWNpZW50bHkgYmV0d2VlbiBmdW5jdGlvbnMuCisg KiBGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiB0aGF0IHNlcmlhbGl6ZSBzb21ldGhpbmcgaW50byBh IHN0cmluZyB3aWxsCisgKiBhY3R1YWxseSB3cml0ZSBpbnRvIGFuIEFWV3JpdGVyLCBhbmQgdGhl IGNhbGxlciB3aWxsIGNob29zZSB0aGUgd2F5IHRoZQorICogZGF0YSB3aWxsIGJlIHN0b3JlZCBv ciBwcm9jZXNzZWQgb24gdGhlIGZseS4KKyAqCisgKiBGb3IgYSBxdWljayBpbnRyb2R1Y3Rpb24g b24gaG93IHRvIHVzZSBBVldyaXRlciBpbiBzaW1wbGUgY2FzZXMsIHNlZQorICogZG9jL2F2d3Jp dGVyX2ludHJvLm1kLgorICoKKyAqIFRoZXJlIGFyZSB2YXJpb3VzIHByZS1kZWZpbmVkIHR5cGVz IG9mIEFWV3JpdGVyLCBzZWUgYmVsb3c6CisgKgorICogLSBhdl9keW5idWZfd3JpdGVyKCkgd3Jp dGVzIHRoZSBkYXRhIGludG8gYSBidWZmZXIgdGhhdCBpcyBncm93biB3aXRoCisgKiAgIGF2X3Jl YWxsb2MoKSBpZiBpdCBkb2VzIG5vdCBmaXQgaW4gdGhlIGluaXRpYWwgYnVmZmVyOyBpdCBpcyB0 aGUKKyAqICAgcmVjb21tZW5kZWQgY2hvaWNlLgorICoKKyAqIC0gYXZfYnVmX3dyaXRlcigpIHdy aXRlcyB0aGUgZGF0YSBpbnRvIGEgcHJlLWV4aXN0aW5nIGZpbml0ZSBidWZmZXIuCisgKgorICog LSBhdl9zdGRpb193cml0ZXIoKSB3cml0ZXMgdGhlIGRhdGEgaW50byBhIEZJTEUqLgorICoKKyAq IC0gYXZfbG9nX3dyaXRlcigpIHdyaXRlcyB0aGUgZGF0YSB0byBhdl9sb2coKS4KKyAqCisgKiBB VldyaXRlciBvYmplY3RzIGFyZSBwYXNzZWQgYnkgdmFsdWUuIEl0IGFsbG93cyBjcmVhdGluZyBh IHdyaXRlciBvbiB0aGUKKyAqIGZseSwgd2l0aG91dCBleHRyYSB2YXJpYWJsZSBvciBlcnJvciBj aGVja2luZy4gVGhlIHN0cnVjdHVyZSBjYW4gbmV2ZXIKKyAqIGNoYW5nZS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgQVZXcml0ZXIgeworICAgIGNvbnN0IEFWV3JpdGVyTWV0aG9kcyAqbWV0aG9kczsK KyAgICB2b2lkICpvYmo7Cit9IEFWV3JpdGVyOworCisvKioKKyAqIFdyaXRlIGEgZGF0YSBidWZm ZXIgdG8gYW4gQVZXcml0ZXIuCisgKi8KK3ZvaWQgYXZfd3JpdGVyX3dyaXRlKEFWV3JpdGVyIHdy LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworLyoqCisgKiBXcml0ZSBhIDAtdGVy bWluYXRlZCBzdHJpbmcgdG8gYW4gQVZXcml0ZXIuCisgKi8KK3ZvaWQgYXZfd3JpdGVyX3ByaW50 KEFWV3JpdGVyIHdyLCBjb25zdCBjaGFyICpzdHIpOworCisvKioKKyAqIFdyaXRlIGEgZm9ybWF0 dGVkIHN0cmluZyB0byBhbiBBVldyaXRlci4KKyAqIE5vdGU6IGRvIG5vdCB1c2UgbGliYy1zcGVj aWZpYyBleHRlbnNpb25zIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICovCit2b2lkIGF2X3dyaXRl cl9wcmludGYoQVZXcml0ZXIgd3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBX cml0ZSBhIGZvcm1hdHRlZCB0byBzdHJpbmcgYW4gQVZXcml0ZXIgdXNpbmcgYSB2YV9saXN0Lgor ICovCit2b2lkIGF2X3dyaXRlcl92cHJpbnRmKEFWV3JpdGVyIHdyLCBjb25zdCBjaGFyICpmbXQs IHZhX2xpc3QgdmEpOworCisvKioKKyAqIFdyaXRlIGEgc2VxdWVuY2Ugb2YgaWRlbnRpY2FsIGNo YXJzIHRvIGFuIEFWV3JpdGVyLgorICovCit2b2lkIGF2X3dyaXRlcl9hZGRfY2hhcnMoQVZXcml0 ZXIgd3IsIGNoYXIgYywgc2l6ZV90IG4pOworCisvKioKKyAqIEZsdXNoIGRhdGEgdGhhdCBtYXkg YmUgYnVmZmVyZWQgaW4gdGhlIHdyaXRlci4KKyAqLwordm9pZCBhdl93cml0ZXJfZmx1c2goQVZX cml0ZXIgd3IpOworCisvKioKKyAqIFJldHVybiB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSB3cml0 ZXIsIGFuIEFWRVJST1IgY29kZS4KKyAqCisgKiBJZiBzZWxmX29ubHkgaXMgbm9uLXplcm8sIHJl dHVybiBlcnJvcnMgb25seSBvbiB0aGlzIHdyaXRlciBhbmQgbm90IG9uCisgKiBwb3NzaWJsZSBv dGhlciB3cml0ZXJzIHRoYXQgaXQgZ290IGZyb20gdGhlIGNhbGxlci4gSWYgaW4gZG91YnQsIHVz ZSAwLgorICovCitpbnQgYXZfd3JpdGVyX2dldF9lcnJvcihBVldyaXRlciB3ciwgaW50IHNlbGZf b25seSk7CisKKy8qKgorICogUHJpbnQgYSBzYW5lIHZhbHVlIGZvciBpbnZhbGlkIGlucHV0Lgor ICoKKyAqIFRoaXMgaXMgYSBmbGFnIGZvciBhbGwgYXZfc29tZXRoaW5nX3dyaXRlKCkgZnVuY3Rp b25zOiB3aGVuIHByZXNlbnRlZAorICogd2l0aCBhbiBpbnZhbGlkICJzb21ldGhpbmciLCBpZiB0 aGUgZmxhZyBpcyBub3QgcHJlc2VudCB0aGV5IHNob3VsZCBsZWF2ZQorICogdGhlIHdyaXRlciB1 bmNoYW5nZWQ7IGlmIHRoZSBmbGFnIGlzIHByZXNlbnQgdGhleSBzaG91bGQgcHJpbnQgYSBzYW5l CisgKiBmYWxsYmFjayBzdHJpbmcuCisgKi8KKyNkZWZpbmUgQVZfV1JJVEVSX0ZBTExCQUNLIDB4 MTAwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgYXZfZHlu YnVmX3dyaXRlciBBVkR5bmJ1ZldyaXRlcgorICoKKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIEFW V3JpdGVyIHRoYXQgd3JpdGVzIHRvIGEgZHluYW1pYyBidWZmZXIuCisgKgorICogVGhlIGJ1ZmZl ciBpcyBrZXB0IDAtdGVybWluYXRlZC4KKyAqCisgKiBUaGUgYnVmZmVyIGlzIGluaXRpYWxseSBr ZXB0IGluIHRoZSB2YXJpYWJsZSBpdHNlbGYsIGl0IHN3aXRjaGVzIHRvIGhlYXAKKyAqIGFsbG9j YXRpb24gaWYgaXQgZ3Jvd3MgdG9vIGxhcmdlLiBJbiB0aGF0IGNhc2UsIGF2X3dyaXRlcl9nZXRf ZXJyb3IoKSBjYW4KKyAqIHJldHVybiBBVkVSUk9SKEVOT01FTSkgaWYgdGhlIGFsbG9jYXRpb24g ZmFpbHMuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIEFuIEFWV3JpdGVyIG9iamVjdCBmb3Ig cHJlLWFsbG9jYXRlZCBtZW1vcnkgYnVmZmVycy4KKyAqCisgKiBDYW4gYmUgYWxsb2NhdGVkIG9u IHRoZSBzdGFjay4KKyAqCisgKiBTaG91bGQgYmUgaW5pdGVkIHdpdGggb25lIG9mIHRoZSB1dGls aXR5IGZ1bmN0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQVZEeW5idWZXcml0ZXIgeworICAg IHNpemVfdCBzZWxmX3NpemU7IC8qKjwgU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZiAqLwor ICAgIHVuc2lnbmVkIGZsYWdzOworICAgIEFWQlByaW50IGJwOworfSBBVkR5bmJ1ZldyaXRlcjsK KworY29uc3QgQVZXcml0ZXJNZXRob2RzICphdl9keW5idWZfd3JpdGVyX2dldF9tZXRob2RzKHZv aWQpOworaW50IGF2X2R5bmJ1Zl93cml0ZXJfY2hlY2soQVZXcml0ZXIgd3IpOworCisvKioKKyAq IEluaXRpYWxpemUgYW4gQVZEeW5idWZXcml0ZXIuCisgKgorICogQHJldHVybiAgZHdyIGl0c2Vs ZgorICogZHdyLT5zZWxmX3NpemUgbXVzdCBiZSBzZXQuCisgKi8KK0FWRHluYnVmV3JpdGVyICph dl9keW5idWZfd3JpdGVyX2luaXQoQVZEeW5idWZXcml0ZXIgKmR3cik7CisKKy8qKgorICogQ3Jl YXRlIGFuIEFWV3JpdGVyIGZyb20gYW4gQVZEeW5idWZXcml0ZXIgc3RydWN0dXJlLgorICovCitB VldyaXRlciBhdl9keW5idWZfd3JpdGVyX3dyYXAoQVZEeW5idWZXcml0ZXIgKmR3cik7CisKKy8q KgorICogQ3JlYXRlIGFuIEFWV3JpdGVyIHRvIGEgZHluYW1pYyBidWZmZXIuCisgKgorICogTm90 ZTogYXMgaXQgcmVsaWVzIG9uIGEgY29tcG91bmQgc3RhdGVtZW50LCB0aGUgQVZEeW5idWZXcml0 ZXIgb2JqZWN0IGhhcworICogYSBzY29wZSBsaW1pdGVkIHRvIHRoZSBibG9jayB3aGVyZSB0aGlz IG1hY3JvIGlzIGNhbGxlZC4KKyAqLworI2RlZmluZSBhdl9keW5idWZfd3JpdGVyKCkgXAorICAg IGF2X2R5bmJ1Zl93cml0ZXJfd3JhcChhdl9keW5idWZfd3JpdGVyX2luaXQoJkZGX05FV19TWihB VkR5bmJ1ZldyaXRlcikpKQorCisvKioKKyAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBk YXRhIG9mIGFuIEFWV3JpdGVyIHRvIGEgZHluYW1pYyBidWZmZXIuCisgKgorICogSWYgbm90IG51 bGwsIHNpemUgd2lsbCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZl ci4KKyAqCisgKiBVbmRlZmluZWQgYmVoYXZpb3IgaWYgY2FsbGVkIHdpdGggYW5vdGhlciB0eXBl IG9mIEFWV3JpdGVyLgorICogVW5kZWZpbmVkIGJlaGF2aW9yIGlmIGNhbGxlZCB3aXRob3V0IGNo ZWNraW5nIGZvciBlcnJvciBmaXJzdC4KKyAqLworY2hhciAqYXZfZHluYnVmX3dyaXRlcl9nZXRf ZGF0YShBVldyaXRlciB3ciwgc2l6ZV90ICpzaXplKTsKKworLyoqCisgKiBHZXQgYSBwb2ludGVy IHRvIHRoZSBidWZmZXIgZGF0YSBvZiBhbiBBVldyaXRlciB0byBhIGR5bmFtaWMgYnVmZmVyCisg KiAodW5zYWZlIHZlcnNpb24pLgorICoKKyAqIElmIG5vdCBudWxsLCBzaXplIHdpbGwgYmUgc2V0 IHRvIHRoZSBzaXplIG9mIHRoZSBkYXRhIGluIHRoZSBidWZmZXIuCisgKgorICogSWYgdGhlIHdy aXRlciBpcyBpbiBlcnJvciwgdGhlIGRhdGEgbWF5IGJlIHRydW5jYXRlZC4KKyAqCisgKiBVbmRl ZmluZWQgYmVoYXZpb3IgaWYgY2FsbGVkIHdpdGggYW5vdGhlciB0eXBlIG9mIEFWV3JpdGVyLgor ICovCitjaGFyICphdl9keW5idWZfd3JpdGVyX2dldF9kYXRhX3Vuc2FmZShBVldyaXRlciB3ciwg c2l6ZV90ICpzaXplKTsKKworLyoqCisgKiBGaW5hbGl6ZSBhbiBBVldyaXRlciB0byBhIGR5bmFt aWMgYnVmZmVyLgorICoKKyAqIEBhcmdbb3V0XSBidWYgICBpZiBub3QgTlVMTCwgdXNlZCB0byBy ZXR1cm4gdGhlIGJ1ZmZlciBjb250ZW50cworICogQGFyZ1tvdXRdIHNpemUgIGlmIG5vdCBOVUxM LCB1c2VkIHRvIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZGF0YQorICogQHJldHVybiAgMCBmb3Ig c3VjY2VzcyBvciBlcnJvciBjb2RlIChwcm9iYWJseSBBVkVSUk9SKEVOT01FTSkpCisgKgorICog SW4gY2FzZSBvZiBlcnJvciwgdGhlIGJ1ZmZlciB3aWxsIG5vdCBiZSBkdXBsaWNhdGVkIGJ1dCBz dGlsbCBmcmVlZC4KKyAqIFNhbWUgaWYgdGhlIHdyaXRlciBpcyBhbHJlYWR5IGluIGVycm9yLgor ICoKKyAqIFVuZGVmaW5lZCBiZWhhdmlvciBpZiBjYWxsZWQgd2l0aCBhbm90aGVyIHR5cGUgb2Yg QVZXcml0ZXIuCisgKi8KK2ludCBhdl9keW5idWZfd3JpdGVyX2ZpbmFsaXplKEFWV3JpdGVyIHdy LCBjaGFyICoqYnVmLCBzaXplX3QgKnNpemUpOworCisvKioKKyAqIEZpbmFsaXplIGFuIEFWV3Jp dGVyIHRvIGEgZHluYW1pYyBidWZmZXIgKHVuc2FmZSB2ZXJzaW9uKS4KKyAqCisgKiBAYXJnW291 dF0gYnVmICAgaWYgbm90IE5VTEwsIHVzZWQgdG8gcmV0dXJuIHRoZSBidWZmZXIgY29udGVudHMK KyAqIEBhcmdbb3V0XSBzaXplICBpZiBub3QgTlVMTCwgdXNlZCB0byByZXR1cm4gdGhlIHNpemUg b2YgdGhlIGRhdGEKKyAqIEByZXR1cm4gIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSAocHJv YmFibHkgQVZFUlJPUihFTk9NRU0pKQorICoKKyAqIElmIHRoZSB3cml0ZXIgaXMgaW4gZXJyb3Is IHRoZSByZXR1cm5lZCBkYXRhIG1heSBiZSB0cnVuY2F0ZWQuCisgKgorICogSW4gY2FzZSBvZiBl cnJvciwgdGhlIGJ1ZmZlciB3aWxsIG5vdCBiZSBkdXBsaWNhdGVkIGJ1dCBzdGlsbCBmcmVlZC4K KyAqCisgKiBVbmRlZmluZWQgYmVoYXZpb3IgaWYgY2FsbGVkIHdpdGggYW5vdGhlciB0eXBlIG9m IEFWV3JpdGVyLgorICovCitpbnQgYXZfZHluYnVmX3dyaXRlcl9maW5hbGl6ZV91bnNhZmUoQVZX cml0ZXIgd3IsIGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSk7CisKKy8qKgorICogQWxsb2NhdGUg Y2hhcnMgaW4gdGhlIGJ1ZmZlciBmb3IgZXh0ZXJuYWwgdXNlLgorICoKKyAqIFVuZGVmaW5lZCBi ZWhhdmlvciBpZiBjYWxsZWQgd2l0aCBhbm90aGVyIHR5cGUgb2YgQVZXcml0ZXIuCisgKi8KK2No YXIgKmF2X2R5bmJ1Zl93cml0ZXJfZ2V0X2J1ZmZlcihBVldyaXRlciB3ciwgc2l6ZV90IHNpemUs IHNpemVfdCAqcnNpemUpOworCisvKioKKyAqIEFkdmFuY2UgdGhlIHBvc2l0aW9uIGluIHRoZSBi dWZmZXIuCisgKgorICogc2l6ZSBtdXN0IGJlIDw9ICpyc2l6ZSBvbiBhIHByZXZpb3VzIGNhbGwg dG8KKyAqIGF2X2R5bmJ1Zl93cml0ZXJfZ2V0X2J1ZmZlcigpLgorICoKKyAqIFVuZGVmaW5lZCBi ZWhhdmlvciBpZiBjYWxsZWQgd2l0aCBhbm90aGVyIHR5cGUgb2YgQVZXcml0ZXIuCisgKiBVbmRl ZmluZWQgYmVoYXZpb3IgaXMgY2FsbGVkIG5vdCBkaXJlY3RseSBhZnRlcgorICogYXZfZHluYnVm X3dyaXRlcl9nZXRfYnVmZmVyKCkuCisgKi8KK3ZvaWQgYXZfZHluYnVmX3dyaXRlcl9hZHZhbmNl X2J1ZmZlcihBVldyaXRlciB3ciwgc2l6ZV90IHNpemUpOworCisvKioKKyAqIEB9CisgKi8KKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgYXZfYnVmX3dyaXRlciBB VkJ1ZldyaXRlcgorICoKKyAqIEFuIGltcGxlbWVudHRpb24gb2YgQVZXcml0ZXIgdGhhdCB3cml0 ZXMgaW50byBhbiBhbHJlYWR5LWFsbG9jYXRlZCBidWZmZXIKKyAqIG9mIG1lbW9yeS4KKyAqCisg KiBUaGUgYnVmZmVyIGlzIGtlcHQgMC10ZXJtaW5hdGVkLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBz bWFsbCwgdGhlIGRhdGEgaXMKKyAqIGRpc2NhcmRlZCwgYnV0IHRoZSB0b3RhbCBzaXplIGlzIGNv bXB1dGVkLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBBbiBBVldyaXRlciBvYmplY3QgZm9y IHByZS1hbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlcnMuCisgKgorICogQ2FuIGJlIGFsbG9jYXRlZCBv biB0aGUgc3RhY2suCisgKgorICogU2hvdWxkIGJlIGluaXRlZCB3aXRoIG9uZSBvZiB0aGUgdXRp bGl0eSBmdW5jdGlvbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IEFWQnVmV3JpdGVyIHsKKyAgICBz aXplX3Qgc2VsZl9zaXplOyAvKio8IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYgKi8KKyAg ICBjaGFyICpidWY7IC8qKjwgTWVtb3J5IGJ1ZmZlci4gTXVzdCBub3QgYmUgTlVMTCBub3IgZW1w dHkuICovCisgICAgc2l6ZV90IHNpemU7IC8qKjwgU2l6ZSBvZiB0aGUgbWVtb3J5IGJ1ZmZlci4g TXVzdCBub3QgYmUgMC4gKi8KKyAgICBzaXplX3QgcG9zOyAvKio8IFBvc2l0aW9uIGluIHRoZSBt ZW1vcnkgYnVmZmVyLiAqLworfSBBVkJ1ZldyaXRlcjsKKworY29uc3QgQVZXcml0ZXJNZXRob2Rz ICphdl9idWZfd3JpdGVyX2dldF9tZXRob2RzKHZvaWQpOworaW50IGF2X2J1Zl93cml0ZXJfY2hl Y2soQVZXcml0ZXIgd3IpOworCisvKioKKyAqIEluaXRpYWxpemUgYW4gQVZCdWZXcml0ZXIgdG8g YW4gYWxyZWFkeS1hbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBAcmV0dXJuICBid3Ig aXRzZWxmCisgKiBid3ItPnNlbGZfc2l6ZSBtdXN0IGJlIHNldC4KKyAqLworQVZCdWZXcml0ZXIg KmF2X2J1Zl93cml0ZXJfaW5pdChBVkJ1ZldyaXRlciAqYndyLCBjaGFyICpidWYsIHNpemVfdCBz aXplKTsKKworLyoqCisgKiBDcmVhdGUgYW4gQVZXcml0ZXIgZnJvbSBhbiBBVkJ1ZldyaXRlciBz dHJ1Y3R1cmUuCisgKi8KK0FWV3JpdGVyIGF2X2J1Zl93cml0ZXJfd3JhcChBVkJ1ZldyaXRlciAq YndyKTsKKworLyoqCisgKiBDcmVhdGUgYW4gQVZXcml0ZXIgdG8gYSBidWZmZXIuCisgKgorICog Tm90ZTogYXMgaXQgcmVsaWVzIG9uIGEgY29tcG91bmQgc3RhdGVtZW50LCB0aGUgQVZCdWZXcml0 ZXIgb2JqZWN0IGhhcworICogYSBzY29wZSBsaW1pdGVkIHRvIHRoZSBibG9jayB3aGVyZSB0aGlz IG1hY3JvIGlzIGNhbGxlZC4KKyAqLworI2RlZmluZSBhdl9idWZfd3JpdGVyKGJ1Ziwgc2l6ZSkg XAorICAgIGF2X2J1Zl93cml0ZXJfd3JhcChhdl9idWZfd3JpdGVyX2luaXQoJkZGX05FV19TWihB VkJ1ZldyaXRlciksIChidWYpLCAoc2l6ZSkpKQorCisvKioKKyAqIENyZWF0ZSBhbiBBVldyaXRl ciB0byBhIGNoYXJbXSBvciBlcXVpdmFsZW50LgorICoKKyAqIE5vdGU6IGFzIGl0IHJlbGllcyBv biBhIGNvbXBvdW5kIHN0YXRlbWVudCwgdGhlIEFWQnVmV3JpdGVyIG9iamVjdCBoYXMKKyAqIGEg c2NvcGUgbGltaXRlZCB0byB0aGUgYmxvY2sgd2hlcmUgdGhpcyBtYWNybyBpcyBjYWxsZWQuCisg Ki8KKyNkZWZpbmUgYXZfYnVmX3dyaXRlcl9hcnJheShhcnJheSkgXAorICAgIGF2X2J1Zl93cml0 ZXIoYXJyYXksIHNpemVvZiAoYXJyYXkpKQorCisvKioKKyAqIEB9CisgKi8KKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgYXZfc3RkaW9fd3JpdGVyIEFWU3RkaW9X cml0ZXIKKyAqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBBVldyaXRlciB0aGF0IHdyaXRlcyB0 byBzdGRpby4KKyAqCisgKiBAeworICovCisKK2NvbnN0IEFWV3JpdGVyTWV0aG9kcyAqYXZfc3Rk aW9fd3JpdGVyX2dldF9tZXRob2RzKHZvaWQpOworaW50IGF2X3N0ZGlvX3dyaXRlcl9jaGVjayhB VldyaXRlciB3cik7CisKKy8qKgorICogQ3JlYXRlIGFuIEFWV3JpdGVyIHRoYXQgZ29lcyB0byBh IHN0ZGlvIEZJTEUuCisgKi8KK0FWV3JpdGVyIGF2X3N0ZGlvX3dyaXRlcihGSUxFICpvdXQpOwor CisvKioKKyAqIEB9CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVm Z3JvdXAgYXZfbG9nX3dyaXRlciBBVkxvZ1dyaXRlcgorICoKKyAqIEFuIGltcGxlbWVudGF0aW9u IG9mIEFWV3JpdGVyIHRoYXQgd3JpdGVzIHRvIGF2X2xvZygpLgorICoKKyAqIEB7CisgKi8KKwor Y29uc3QgQVZXcml0ZXJNZXRob2RzICphdl9sb2dfd3JpdGVyX2dldF9tZXRob2RzKHZvaWQpOwor aW50IGF2X2xvZ193cml0ZXJfY2hlY2soQVZXcml0ZXIgd3IpOworCisvKioKKyAqIENyZWF0ZSBh biBBVldyaXRlciB0aGF0IGdvZXMgdG8gYXZfbG9nKG9iaikuCisgKi8KK0FWV3JpdGVyIGF2X2xv Z193cml0ZXIodm9pZCAqb2JqKTsKKworLyoqCisgKiBMb2cgdG8gYSB3cml0ZXIuCisgKiBJZiB3 ciBkb2VzIG5vdCBnbyB0byBhdl9sb2coKSwgbGV2ZWwgaXMgaWdub3JlZC4KKyAqLwordm9pZCBh dl9sb2dfd3JpdGVyX2xvZyhBVldyaXRlciB3ciwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQs IC4uLik7CisKKy8qKgorICogQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioK KyAqIEBkZWZncm91cCBhdl93cml0ZXJfbWV0aG9kcyBBVldyaXRlck1ldGhvZHMKKyAqCisgKiBT dHJ1Y3R1cmVzIGFuZCB1dGlsaXR5IG5lZWRlZCB0byBkZWZpbmUgbmV3IHR5cGVzIG9mIEFWV3Jp dGVyLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBTZXQgb2YgbWV0aG9kcyBmb3IgaW1wbGVt ZW50aW5nIGFuIEFWV3JpdGVyLgorICoKKyAqIEFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gaW1w bGVtZW50IG90aGVyIGtpbmRzIG9mIEFWV3JpdGVyCisgKiBuZWVkIHRvIGNyZWF0ZSBhIHN0cnVj dHVyZSB3aXRoIHNvbWUgb2YgdGhlc2UgbWV0aG9kcyBpbXBsZW1lbnRlZC4KKyAqCisgKiBFdmVy eSB0eXBlIG9mIEFWV3JpdGVyIGlzIHN1cHBvc2VkIHRvIGhhdmUgYSBwYWlyIG9mIGZ1bmN0aW9u czoKKyAqIGF2X3NvbWV0aGluZ193cml0ZXJfZ2V0X21ldGhvZHMoKSByZXR1cm5zIHRoZSBtZXRo b2RzIGZvciB0aGF0IHR5cGUuCisgKiBhdl9zb21ldGhpbmdfd3JpdGVyX2NoZWNrcygpIHJldHVy bnMgMSBpZiB0aGUgd3JpdGVyIGlzIG9mIHRoYXQgdHlwZS4KKyAqCisgKiBBIG1hY3JvIHRvIGRl ZmluZSB0aGUgc3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgaXMgcHJvdmlkZWQgYmVsb3cuCisgKgor ICogV2hlbiBhIHR5cGUgb2YgQVZXcml0ZXIgZGVmaW5lcyBzcGVjaWZpYyBmdW5jdGlvbnMsIGl0 IGlzIHVzdWFsbHkgdGhlCisgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIGVuc3Vy ZSB0aGF0IHRoZXkgYXJlIGNhbGxlZCBvbmx5IHdpdGggYQorICogY29tcGF0aWJsZSBBVldyaXRl cjsgb3RoZXJ3aXNlIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCisgKi8KK3N0cnVjdCBBVldy aXRlck1ldGhvZHMgeworCisgICAgLyoqCisgICAgICogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGl0 c2VsZi4KKyAgICAgKiBNdXN0IG5vcm1hbGx5IGJlIHNldCB0byBzaXplb2YoQVZXcml0ZXJNZXRo b2RzKS4KKyAgICAgKi8KKyAgICBzaXplX3Qgc2VsZl9zaXplOworCisgICAgLyoqCisgICAgICog TmFtZSBvZiB0aGUgb2JqZWN0IHR5cGUuCisgICAgICovCisgICAgY29uc3QgY2hhciAqbmFtZTsK KworICAgIC8qKgorICAgICAqIFdhcm4gdGhhdCBhbiBvcGVyYXRpb24gd2FzIGltcG9zc2libGUg ZXZlbiB3aXRoIGZhbGxiYWNrcy4KKyAgICAgKi8KKyAgICB2b2lkICgqaW1wb3NzaWJsZSkoQVZX cml0ZXIgd3IsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogTm90aWZ5 IHRoYXQgc2l6ZSBjaGFycyBoYXZlIGJlZW4gZGlzY2FyZGVkCisgICAgICovCisgICAgdm9pZCAo Km5vdGlmeV9kaXNjYXJkKShBVldyaXRlciB3ciwgc2l6ZV90IHNpemUpOworCisgICAgLyoqCisg ICAgICogR2V0IHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIHdyaXRlcgorICAgICAqIElmIHNlbGZf b25seSBpcyBub24temVybywgcmV0dXJuIGVycm9ycyBvbmx5IG9uIHRoaXMgd3JpdGVyIGFuZCBu b3Qgb24KKyAgICAgKiBwb3NzaWJsZSBvdGhlciB3cml0ZXJzIHRoYXQgaXQgZ290IGZyb20gdGhl IGNhbGxlci4gRXJyb3JzIGZyb20KKyAgICAgKiB3cml0ZXJzIGNyZWF0ZWQgaW50ZXJuYWxseSBz aG91bGQgYWx3YXlzIGJlIGNoZWNrZWQuCisgICAgICovCisgICAgaW50ICgqZ2V0X2Vycm9yKShB VldyaXRlciB3ciwgaW50IHNlbGZfb25seSk7CisKKyAgICAvKioKKyAgICAgKiBXcml0ZSBjaGFy cyBkaXJlY3RseS4KKyAgICAgKi8KKyAgICB2b2lkICgqd3JpdGUpKEFWV3JpdGVyIHdyLCBjb25z dCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworICAgIC8qKgorICAgICAqIFdyaXRlIGEgZm9y bWF0dGVkIHN0cmluZy4KKyAgICAgKi8KKyAgICB2b2lkICgqdnByaW50ZikoQVZXcml0ZXIgd3Is IGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBi dWZmZXIgdG8gd3JpdGUgZGF0YS4KKyAgICAgKiBJZiAqc2l6ZSBpcyByZXR1cm5lZCA8IG1pbl9z aXplLCBkYXRhIG1heSBnZXQgZGlzY2FyZGVkLgorICAgICAqIEEgd3JpdGVyIHRoYXQgaW1wbGVt ZW50cyB0aGlzIG1ldGhvZCBtdXN0IGltcGxlbWVudCBhZHZhbmNlX2J1ZmZlciB0b28uCisgICAg ICogSWYgdnByaW50ZiBpcyBub3QgaW1wbGVtZW50ZWQsIGF2X3dyaXRlX3ByaW50ZigpIHdpbGwg dXNlCisgICAgICogZ2V0X2J1ZmZlcigpIGFuZCB2c25wcmludGYoKTogaXQgd2lsbCBuZWVkIGFu IGV4dHJhIGNoYXIgaW4gdGhlCisgICAgICogYnVmZmVyIGZvciB0aGUgMCB0aGF0IHZzbnByaW50 ZigpIGFkZHMuCisgICAgICovCisgICAgY2hhciAqKCpnZXRfYnVmZmVyKShBVldyaXRlciB3ciwg c2l6ZV90IG1pbl9zaXplLCBzaXplX3QgKnNpemUpOworCisgICAgLyoqCisgICAgICogQWNrbm93 bGVkZ2UgY2hhcnMgd3JpdHRlbiBpbiBhIGJ1ZmZlciBvYnRhaW5lZCB3aXRoIGdldF9idWZmZXIo KS4KKyAgICAgKiBzaXplIGlzIGd1YXJhbnRlZWQgPD0gdGhlIHNpemUgdmFsdWUgcmV0dXJuZWQg YnkgZ2V0X2J1ZmZlcigpLgorICAgICAqLworICAgIHZvaWQgKCphZHZhbmNlX2J1ZmZlcikoQVZX cml0ZXIgd3IsIHNpemVfdCBzaXplKTsKKworICAgIC8qKgorICAgICAqIEZsdXNoIGltbWVkaWF0 ZWx5IGRhdGEgdGhhdCBtYXkgYmUgYnVmZmVyZWQgaW4gdGhlIHdyaXRlci4KKyAgICAgKi8KKyAg ICB2b2lkICgqZmx1c2gpKEFWV3JpdGVyIHdyKTsKKworfTsKKworLyoqCisgKiBDb252ZW5pZW5j ZSBtYWNybyBmb3IgdGhlIGJvaWxlcnBsYXRlIG5lY2Vzc2FyeSB0byBkZWZpbmUgYSB3cml0ZXIg Y2xhc3MuCisgKgorICogQGFyZyBxdWFsICAgIHR5cGUgcXVhbGlmaWVyIGZvciBmb3IgdGhlIHN5 bWJvbHMsIGZvciBleGFtcGxlICJzdGF0aWMiCisgKiBAYXJnIHR5cGUgICAgY2xhc3MgbmFtZSBm b3IgdGhlIHR5cGUgb2Ygd3JpdGVyLAorICogICAgICAgICAgICAgIGZvciBleGFtcGxlICJBVkJ1 ZldyaXRlciIgb3IgIk15V3JpdGVyIgorICogQGFyZyBwcmVmaXggIHByZWZpeCBmb3IgdGhlIHN5 bWJvbHMsCisgKiAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgImF2X2J1Zl93cml0ZXIiIG9yICJt eV93cml0ZXIiCisgKi8KKyNkZWZpbmUgQVZfV1JJVEVSX0RFRklORV9NRVRIT0RTKHF1YWwsIHR5 cGUsIHByZWZpeCkgXAorc3RhdGljIGNvbnN0IEFWV3JpdGVyTWV0aG9kcyBwcmVmaXgjI19tZXRo b2RzOyBcCitxdWFsIGNvbnN0IEFWV3JpdGVyTWV0aG9kcyAqcHJlZml4IyNfZ2V0X21ldGhvZHMo dm9pZCkgeyBcCisgICAgcmV0dXJuICZwcmVmaXgjI19tZXRob2RzOyBcCit9IFwKK3F1YWwgaW50 IHByZWZpeCMjX2NoZWNrKEFWV3JpdGVyIHdyKSB7IFwKKyAgICByZXR1cm4gd3IubWV0aG9kcyA9 PSBwcmVmaXgjI19nZXRfbWV0aG9kcygpOyBcCit9IFwKK3N0YXRpYyBjb25zdCBBVldyaXRlck1l dGhvZHMgcHJlZml4IyNfbWV0aG9kcyA9CisKKy8qKgorICogQH0KKyAqLworCisvKioKKyAqIEB9 CisgKi8KKworI2VuZGlmIC8qIEFWVVRJTF9XUklURVJfSCAqLwotLSAKMi4zNS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==