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 E9D2749D7B for ; Fri, 10 May 2024 21:12:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0299668D4FA; Sat, 11 May 2024 00:12:37 +0300 (EEST) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 45E8E68BDB6 for ; Sat, 11 May 2024 00:12:29 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 9A6699C41A0 for ; Fri, 10 May 2024 17:12:27 -0400 (EDT) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id mE3rYMQnPcsb for ; Fri, 10 May 2024 17:12:19 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id D0BA89C5649 for ; Fri, 10 May 2024 17:12:19 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com D0BA89C5649 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1715375539; bh=7c/oVAVSLQ16VvJDjPVIu5V35H6meOPfrHMKqGNnqHU=; h=From:To:Date:Message-Id:MIME-Version; b=dJZfLoPb8Q82d+NYFHkVOXGaCaoffdlbJanh1BbYi1g+Aze/0g3pwp52vmqQmUMa8 ewBWOZOqk7FT5kWGs4p7U71A+bf/38wx9iaaC9rzT43ZqYSPxqwToPX0zfPPN/r7L+ hNdaJltFDj/O8QrKBG9GIIe9Gxugujfbwdglck6MLZR5yKdfBCvm5pYjCrv5eon5bP F+vNmXcPamAM5WuMlPd36VHHnzt7dmPUANxc7dqItXk4TSPz2nAd5wDHilXjAj8ZE5 weYwiu5zXTntjW8ZfxlA4ve+KbdNg1BFP6GjRM8Ld3qgdDzNszmZBFCKXw36KBlxKe ANkP4KOn0Bxog== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id SEGa4w0jHYXW for ; Fri, 10 May 2024 17:12:19 -0400 (EDT) Received: from strix670.mtl.sfl (unknown [192.168.51.254]) by mail.savoirfairelinux.com (Postfix) with ESMTP id AE6A69C41A0 for ; Fri, 10 May 2024 17:12:19 -0400 (EDT) From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 May 2024 17:12:19 -0400 Message-Id: <20240510211219.213409-1-francois-simon.fauteux-chapleau@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] libavfilter: add PipeWire-based grab 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: VGhpcyBpcyBhIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgInBpcGV3aXJlZ3JhYiIgcGF0Y2ggc3Vi bWl0dGVkIGJ5CkFiaGlzaGVrIE9qaGEgYSBmZXcgbW9udGhzIGFnbzoKaHR0cHM6Ly9wYXRjaHdv cmsuZmZtcGVnLm9yZy9wcm9qZWN0L2ZmbXBlZy9wYXRjaC8yMDIzMTIyNzE2MjUwNC42OTA3MzAt MS1hYmhpc2hlay5vamhhQHNhdm9pcmZhaXJlbGludXguY29tLwpodHRwczovL3BhdGNod29yay5m Zm1wZWcub3JnL3Byb2plY3QvZmZtcGVnL3BhdGNoLzIwMjMxMjI3MTYyNTA0LjY5MDczMC0yLWFi aGlzaGVrLm9qaGFAc2F2b2lyZmFpcmVsaW51eC5jb20vCgpUaGUgbWFpbiBjaGFuZ2UgaXMgdGhh dCB0aGUgcGF0Y2ggaXMgbm93IGltcGxlbWVudGVkIGFzIGEgbGliYXZmaWx0ZXIKc291cmNlIGZp bHRlciBpbnN0ZWFkIG9mIGEgbGliYXZkZXZpY2UgaW5wdXQgZGV2aWNlLCBhcyB3YXMgcmVxdWVz dGVkIGluCmEgY29tbWVudCBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4gVGhpcyB2ZXJzaW9uIGFs c28gYWRkcyBzdXBwb3J0IGZvcgpETUEgYnVmZmVyIHNoYXJpbmcgYW5kIHVzZXMgc2QtYnVzIGlu c3RlYWQgb2YgR0RCdXMuCgpUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIHNtYWxsIGNoYW5nZXMgbWVh bnQgdG8gZml4IGJ1Z3Mgb3Igc2ltcGxpZnkgdGhlCmNvZGUsIGJ1dCB0aGUgb3ZlcmFsbCBzdHJ1 Y3R1cmUgcmVtYWlucyB0aGUgc2FtZSBhcyBiZWZvcmU6IHdlIHVzZSB0aGUKU2NyZWVuQ2FzdCBp bnRlcmZhY2UgcHJvdmlkZWQgYnkgWERHIERlc2t0b3AgUG9ydGFsIHRvIG9idGFpbiBhIGZpbGUK ZGVzY3JpcHRvciwgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGNyZWF0ZSBhIFBpcGVXaXJlIHN0cmVh bS4gVGhlIGRhdGEgZnJvbQp0aGF0IHN0cmVhbSBjYW4gdGhlbiBiZSB1c2VkIHRvIGdlbmVyYXRl IGZyYW1lcyBmb3IgRkZtcGVnLgoKRXhhbXBsZSB1c2FnZToKZmZtcGVnIC1mIGxhdmZpIC1pIHBp cGV3aXJlZ3JhYiBcCiAgICAgICAtdmYgJ2h3bWFwPWRlcml2ZV9kZXZpY2U9dmFhcGksc2NhbGVf dmFhcGk9Zm9ybWF0PW52MTInIFwKICAgICAgIC1jOnYgaDI2NF92YWFwaSAtdCAxMCBvdXRwdXQu bXA0CgpTaWduZWQtb2ZmLWJ5OiBGcmFuw6dvaXMtU2ltb24gRmF1dGV1eC1DaGFwbGVhdSA8ZnJh bmNvaXMtc2ltb24uZmF1dGV1eC1jaGFwbGVhdUBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KLS0tCiBj b25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArCiBsaWJhdmZpbHRlci9NYWtl ZmlsZSAgICAgICAgICAgIHwgICAgMSArCiBsaWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgICAgICAg IHwgICAgMSArCiBsaWJhdmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jIHwgMTQzMyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE0NTEgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZzcmNfcGlwZXdpcmVncmFiLmMK CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggYmViMWZhNmQzYy4uMDI4 MDIwNDU1ZSAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMzA0LDYg KzMwNCw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKICAgLS1lbmFibGUtbGlieGNiLXNo bSAgICAgIGVuYWJsZSBYMTEgZ3JhYmJpbmcgc2htIGNvbW11bmljYXRpb24gW2F1dG9kZXRlY3Rd CiAgIC0tZW5hYmxlLWxpYnhjYi14Zml4ZXMgICBlbmFibGUgWDExIGdyYWJiaW5nIG1vdXNlIHJl bmRlcmluZyBbYXV0b2RldGVjdF0KICAgLS1lbmFibGUtbGlieGNiLXNoYXBlICAgIGVuYWJsZSBY MTEgZ3JhYmJpbmcgc2hhcGUgcmVuZGVyaW5nIFthdXRvZGV0ZWN0XQorICAtLWVuYWJsZS1saWJw aXBld2lyZSAgICAgZW5hYmxlIHNjcmVlbiBncmFiYmluZyB1c2luZyBQaXBlV2lyZSBbYXV0b2Rl dGVjdF0KICAgLS1lbmFibGUtbGlieHZpZCAgICAgICAgIGVuYWJsZSBYdmlkIGVuY29kaW5nIHZp YSB4dmlkY29yZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBNUEVHLTQvWHZp ZCBlbmNvZGVyIGV4aXN0cyBbbm9dCiAgIC0tZW5hYmxlLWxpYnhtbDIgICAgICAgICBlbmFibGUg WE1MIHBhcnNpbmcgdXNpbmcgdGhlIEMgbGlicmFyeSBsaWJ4bWwyLCBuZWVkZWQKQEAgLTE4NDUs NiArMTg0Niw4IEBAIEVYVEVSTkFMX0FVVE9ERVRFQ1RfTElCUkFSWV9MSVNUPSIKICAgICBsaWJ4 Y2Jfc2htCiAgICAgbGlieGNiX3NoYXBlCiAgICAgbGlieGNiX3hmaXhlcworICAgIGxpYnBpcGV3 aXJlCisgICAgbGlic3lzdGVtZAogICAgIGx6bWEKICAgICBtZWRpYWZvdW5kYXRpb24KICAgICBt ZXRhbApAQCAtMzg5NSw2ICszODk4LDcgQEAgcGFkX29wZW5jbF9maWx0ZXJfZGVwcz0ib3BlbmNs IgogcGFuX2ZpbHRlcl9kZXBzPSJzd3Jlc2FtcGxlIgogcGVyc3BlY3RpdmVfZmlsdGVyX2RlcHM9 ImdwbCIKIHBoYXNlX2ZpbHRlcl9kZXBzPSJncGwiCitwaXBld2lyZWdyYWJfZmlsdGVyX2RlcHM9 ImxpYnBpcGV3aXJlIGxpYnN5c3RlbWQgcHRocmVhZHMiCiBwcDdfZmlsdGVyX2RlcHM9ImdwbCIK IHBwX2ZpbHRlcl9kZXBzPSJncGwgcG9zdHByb2MiCiBwcmV3aXR0X29wZW5jbF9maWx0ZXJfZGVw cz0ib3BlbmNsIgpAQCAtNzIzMCw2ICs3MjM0LDE4IEBAIGlmIGVuYWJsZWQgbGlieGNiOyB0aGVu CiAgICAgZW5hYmxlZCBsaWJ4Y2JfeGZpeGVzICYmIGNoZWNrX3BrZ19jb25maWcgbGlieGNiX3hm aXhlcyB4Y2IteGZpeGVzIHhjYi94Zml4ZXMuaCB4Y2JfeGZpeGVzX2dldF9jdXJzb3JfaW1hZ2UK IGZpCiAKKyMgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDAuMy41MiwgUGlwZVdpcmUncyBzcGEgbGli cmFyeSB1c2VzIHRoZSBfX0xPQ0FMRV9DX09OTFkgbWFjcm8gdG8gZGV0ZXJtaW5lCisjIHdoZXRo ZXIgdGhlIGxvY2FsZV90IHR5cGUgKGludHJvZHVjZWQgaW4gUE9TSVguMS0yMDA4KSBhbmQgc29t ZSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIChzZWUKKyMgaHR0cHM6Ly9naXRsYWIu ZnJlZWRlc2t0b3Aub3JnL3BpcGV3aXJlL3BpcGV3aXJlLy0vaXNzdWVzLzIzOTAgZm9yIG1vcmUg aW5mb3JtYXRpb24pLgorIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1hY3JvIGlzIHNwZWNpZmljIHRv IHVjbGliYywgd2hpY2ggY2FuIGNhdXNlIGJ1aWxkIGlzc3VlcyBvbiBzeXN0ZW1zIHRoYXQgdXNl IGEKKyMgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIGxpYmMgaWYgUE9TSVggMjAwOCBzdXBw b3J0IGlzbid0IGVuYWJsZWQgKHdoaWNoIGlzIHRoZSBjYXNlIGZvciBGRm1wZWcgY3VycmVudGx5 KS4KKyMgQXMgYSB3b3JrYXJvdW5kIGZvciB0aGlzIHByb2JsZW0sIHdlIGFkZCBhIGNvbXBpbGF0 aW9uIGZsYWcgdG8gZW5zdXJlIHRoYXQgX19MT0NBTEVfQ19PTkxZIGlzIGFsd2F5cyBkZWZpbmVk LgorYWRkX2NwcGZsYWdzIC1EX19MT0NBTEVfQ19PTkxZCitlbmFibGVkIGxpYnBpcGV3aXJlICYm IGNoZWNrX3BrZ19jb25maWcgbGlicGlwZXdpcmUgImxpYnBpcGV3aXJlLTAuMyA+PSAwLjMuNDAi IHBpcGV3aXJlL3BpcGV3aXJlLmggcHdfaW5pdAoraWYgZW5hYmxlZCBsaWJwaXBld2lyZTsgdGhl bgorICAgIGVuYWJsZWQgbGlic3lzdGVtZCAgJiYgY2hlY2tfcGtnX2NvbmZpZyBsaWJzeXN0ZW1k ICJsaWJzeXN0ZW1kID49IDI0NiIgc3lzdGVtZC9zZC1idXMuaCBzZF9idXNfY2FsbF9tZXRob2QK K2ZpCisKIGNoZWNrX2Z1bmNfaGVhZGVycyAid2luZG93cy5oIiBDcmVhdGVESUJTZWN0aW9uICIk Z2RpZ3JhYl9pbmRldl9leHRyYWxpYnMiCiAKICMgY2hlY2sgaWYgYnVpbGRpbmcgZm9yIGRlc2t0 b3Agb3IgdXdwCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2ZmlsdGVy L01ha2VmaWxlCmluZGV4IDU5OTJmZDE2MWYuLjYzNTJlOTE1ODYgMTAwNjQ0Ci0tLSBhL2xpYmF2 ZmlsdGVyL01ha2VmaWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCkBAIC02MDMsNiArNjAz LDcgQEAgT0JKUy0kKENPTkZJR19OVUxMU1JDX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0gdnNy Y190ZXN0c3JjLm8KIE9CSlMtJChDT05GSUdfT1BFTkNMU1JDX0ZJTFRFUikgICAgICAgICAgICAg ICs9IHZmX3Byb2dyYW1fb3BlbmNsLm8gb3BlbmNsLm8KIE9CSlMtJChDT05GSUdfUEFMNzVCQVJT X0ZJTFRFUikgICAgICAgICAgICAgICs9IHZzcmNfdGVzdHNyYy5vCiBPQkpTLSQoQ09ORklHX1BB TDEwMEJBUlNfRklMVEVSKSAgICAgICAgICAgICArPSB2c3JjX3Rlc3RzcmMubworT0JKUy0kKENP TkZJR19QSVBFV0lSRUdSQUJfRklMVEVSKSAgICAgICAgICAgKz0gdnNyY19waXBld2lyZWdyYWIu bwogT0JKUy0kKENPTkZJR19RUkVOQ09ERV9GSUxURVIpICAgICAgICAgICAgICAgKz0gcXJlbmNv ZGUubyB0ZXh0dXRpbHMubwogT0JKUy0kKENPTkZJR19RUkVOQ09ERVNSQ19GSUxURVIpICAgICAg ICAgICAgKz0gcXJlbmNvZGUubyB0ZXh0dXRpbHMubwogT0JKUy0kKENPTkZJR19SR0JURVNUU1JD X0ZJTFRFUikgICAgICAgICAgICAgKz0gdnNyY190ZXN0c3JjLm8KZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCBjNTMy NjgyZmMyLi4zNjcwYTZkN2U3IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMK KysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCkBAIC01NjksNiArNTY5LDcgQEAgZXh0ZXJu IGNvbnN0IEFWRmlsdGVyIGZmX3ZzcmNfb3BlbmNsc3JjOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVy IGZmX3ZzcmNfcXJlbmNvZGVzcmM7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19wYWw3 NWJhcnM7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19wYWwxMDBiYXJzOworZXh0ZXJu IGNvbnN0IEFWRmlsdGVyIGZmX3ZzcmNfcGlwZXdpcmVncmFiOwogZXh0ZXJuIGNvbnN0IEFWRmls dGVyIGZmX3ZzcmNfcmdidGVzdHNyYzsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92c3JjX3Np ZXJwaW5za2k7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19zbXB0ZWJhcnM7CmRpZmYg LS1naXQgYS9saWJhdmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jIGIvbGliYXZmaWx0ZXIvdnNy Y19waXBld2lyZWdyYWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41 MTA3M2MyMmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvdnNyY19waXBld2lyZWdy YWIuYwpAQCAtMCwwICsxLDE0MzMgQEAKKy8qCisgKiBQaXBlV2lyZSBpbnB1dCBncmFiYmVyIChT Y3JlZW5DYXN0KQorICogQ29weXJpZ2h0IChDKSAyMDI0IFNhdm9pci1mYWlyZSBMaW51eCwgSW5j LgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxl CisgKiBQaXBlV2lyZUdyYWIgdmlkZW8gc291cmNlCisgKiBAYXV0aG9yIEZpcmFzIEFzaGthciA8 ZmlyYXMuYXNoa2FyIGF0IHNhdm9pcmZhaXJlbGludXguY29tPgorICogQGF1dGhvciBBYmhpc2hl ayBPamhhIDxhYmhpc2hlay5vamhhIGF0IHNhdm9pcmZhaXJlbGludXguY29tPgorICogQGF1dGhv ciBGcmFuw6dvaXMtU2ltb24gRmF1dGV1eC1DaGFwbGVhdSA8ZnJhbmNvaXMtc2ltb24uZmF1dGV1 eC1jaGFwbGVhdSBhdCBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJt X2ZvdXJjYy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cGlwZXdpcmUvcGlwZXdp cmUuaD4KKyNpbmNsdWRlIDxwaXBld2lyZS90aHJlYWQtbG9vcC5oPgorI2luY2x1ZGUgPHB0aHJl YWQuaD4KKyNpbmNsdWRlIDxzcGEvZGVidWcvdHlwZXMuaD4KKyNpbmNsdWRlIDxzcGEvcGFyYW0v dmlkZW8vZm9ybWF0LXV0aWxzLmg+CisjaW5jbHVkZSA8c3BhL3BhcmFtL3ZpZGVvL3Jhdy5oPgor I2luY2x1ZGUgPHNwYS9wYXJhbS92aWRlby90eXBlLWluZm8uaD4KKyNpbmNsdWRlIDxzdGRhdG9t aWMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl IDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5c3RlbWQvc2QtYnVzLmg+CisjaW5jbHVkZSA8c3lz dGVtZC9zZC1idXMtcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUg ImF2ZmlsdGVyLmgiCisjaW5jbHVkZSAiZm9ybWF0cy5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisK KyNpbmNsdWRlICJsaWJhdmZvcm1hdC9hdmZvcm1hdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9h dmFzc2VydC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgorI2luY2x1ZGUgImxp YmF2dXRpbC9od2NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2RybS5o IgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0Lmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKKworI2lmbmRlZiBfX1VTRV9YT1BFTjJLOAor I2RlZmluZSBGX0RVUEZEX0NMT0VYRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAxMDMwIC8qIER1cGxpY2F0ZSBmaWxlIGRlc2Ny aXB0b3Igd2l0aCBjbG9zZS1vbi1leGl0IHNldC4gICovCisjZW5kaWYKKworI2RlZmluZSBERVNU SU5BVElPTiAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIgorI2RlZmluZSBTRU5ERVIg REVTVElOQVRJT04KKyNkZWZpbmUgT0JKRUNUX1BBVEggIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFs L2Rlc2t0b3AiCisjZGVmaW5lIElOVEVSRkFDRSAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5TY3Jl ZW5DYXN0IgorI2RlZmluZSBSRVFVRVNUX1BBVEggIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rl c2t0b3AvcmVxdWVzdC8lcy8lcyIKKworI2RlZmluZSBCWVRFU19QRVJfUElYRUwgNCAvKiBjdXJy ZW50bHkgYWxsIGZvcm1hdHMgYXNzdW1lIDQgYnl0ZXMgcGVyIHBpeGVsICovCisjZGVmaW5lIE1B WF9TUEFfUEFSQU0gNCAvKiBtYXggbnVtYmVyIG9mIHBhcmFtcyBmb3Igc3BhIHBvZCAqLworCisv KioKKyAqIFBpcGVXaXJlIGNhcHR1cmUgdHlwZXMKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBE RVNLVE9QX0NBUFRVUkUgPSAxLAorICAgIFdJTkRPV19DQVBUVVJFID0gMiwKK30gcHdfY2FwdHVy ZV90eXBlOworCisvKioKKyAqIFhERyBEZXNrdG9wIFBvcnRhbCBzdXBwb3J0ZWQgY3Vyc29yIG1v ZGVzCisgKi8KK2VudW0gUG9ydGFsQ3Vyc29yTW9kZSB7CisgICAgUE9SVEFMX0NVUlNPUl9NT0RF X0hJRERFTiA9IDEgPDwgMCwKKyAgICBQT1JUQUxfQ1VSU09SX01PREVfRU1CRURERUQgPSAxIDw8 IDEsCit9OworCit0eXBlZGVmIHN0cnVjdCBQaXBld2lyZUdyYWJDb250ZXh0IHsKKyAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKKworICAgIHNkX2J1cyAqY29ubmVjdGlvbjsKKyAgICBhdG9taWNf aW50IGRidXNfZXZlbnRfbG9vcF9ydW5uaW5nOworICAgIGNoYXIgKnNlbmRlcl9uYW1lOworICAg IGNoYXIgKnNlc3Npb25faGFuZGxlOworCisgICAgdWludDY0X3QgcGlwZXdpcmVfbm9kZTsKKyAg ICBpbnQgcGlwZXdpcmVfZmQ7CisKKyAgICBwdGhyZWFkX2NvbmRfdCBwaXBld2lyZV9pbml0aWFs aXphdGlvbl9jb25kX3ZhcjsKKyAgICBwdGhyZWFkX211dGV4X3QgcGlwZXdpcmVfaW5pdGlhbGl6 YXRpb25fbXV0ZXg7CisgICAgYXRvbWljX2ludCBwaXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVy OworICAgIGludCBwd19pbml0X2NhbGxlZDsKKyAgICBzdHJ1Y3QgcHdfdGhyZWFkX2xvb3AgKnRo cmVhZF9sb29wOworICAgIHN0cnVjdCBwd19jb250ZXh0ICpjb250ZXh0OworICAgIHN0cnVjdCBw d19jb3JlICpjb3JlOworICAgIHN0cnVjdCBzcGFfaG9vayBjb3JlX2xpc3RlbmVyOworICAgIHN0 cnVjdCBwd19zdHJlYW0gKnN0cmVhbTsKKyAgICBzdHJ1Y3Qgc3BhX2hvb2sgc3RyZWFtX2xpc3Rl bmVyOworICAgIHN0cnVjdCBzcGFfdmlkZW9faW5mbyBmb3JtYXQ7CisKKyAgICB1aW50MzJfdCBh dmFpbGFibGVfY3Vyc29yX21vZGVzOworICAgIHB3X2NhcHR1cmVfdHlwZSBjYXB0dXJlX3R5cGU7 CisgICAgaW50IGRyYXdfbW91c2U7CisKKyAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OworICAg IHNpemVfdCBmcmFtZV9zaXplOworICAgIHVpbnQ4X3QgQnBwOworICAgIGVudW0gQVZQaXhlbEZv cm1hdCBhdl9weGxfZm9ybWF0OworCisgICAgaW50NjRfdCB0aW1lX2ZyYW1lOworICAgIGludDY0 X3QgZnJhbWVfZHVyYXRpb247CisgICAgQVZSYXRpb25hbCBmcmFtZXJhdGU7CisgICAgcHRocmVh ZF9tdXRleF90IGN1cnJlbnRfZnJhbWVfbXV0ZXg7CisgICAgQVZGcmFtZSAqY3VycmVudF9mcmFt ZTsKKyAgICBBVkJ1ZmZlclJlZiAqaHdfZGV2aWNlX3JlZjsKKyAgICBBVkJ1ZmZlclJlZiAqaHdf ZnJhbWVzX3JlZjsKKyAgICBpbnQgZW5hYmxlX2RtYWJ1ZjsKKyAgICBjb25zdCBjaGFyICpkZXZp Y2VfcGF0aDsKKworICAgIGludCBwb3J0YWxfZXJyb3I7CisgICAgaW50IHBpcGV3aXJlX2Vycm9y OworfSBQaXBld2lyZUdyYWJDb250ZXh0OworCisvKioKKyAqIERhdGEgZm9yIERCdXMgc2lnbmFs cyBjYWxsYmFja3MKKyAqLworc3RydWN0IERidXNTaWduYWxEYXRhIHsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eDsKKyAgICBzZF9idXNfc2xvdCAqc2xvdDsKK307CisKKyNkZWZpbmUgT0ZGU0VU KHgpIG9mZnNldG9mKFBpcGV3aXJlR3JhYkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIEFWX09Q VF9GTEFHX0ZJTFRFUklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTQorc3RhdGljIGNv bnN0IEFWT3B0aW9uIHBpcGV3aXJlZ3JhYl9vcHRpb25zW10gPSB7CisgICAgeyAiZnJhbWVyYXRl IiwgInNldCB2aWRlbyBmcmFtZSByYXRlIiwgT0ZGU0VUKGZyYW1lcmF0ZSksIEFWX09QVF9UWVBF X1ZJREVPX1JBVEUsIHsgLnN0ciA9ICJudHNjIiB9LCAwLCBJTlRfTUFYLCBGTEFHUyB9LAorICAg IHsgImRyYXdfbW91c2UiLCAiZHJhdyB0aGUgbW91c2UgcG9pbnRlciIsIE9GRlNFVChkcmF3X21v dXNlKSwgQVZfT1BUX1RZUEVfQk9PTCwgeyAuaTY0ID0gMSB9LCAwLCAxLCBGTEFHUyB9LAorICAg IHsgImNhcHR1cmVfdHlwZSIsICJzZXQgdGhlIGNhcHR1cmUgdHlwZSAoMSBmb3Igc2NyZWVuLCAy IGZvciB3aW5kb3cpIiwgT0ZGU0VUKGNhcHR1cmVfdHlwZSksIEFWX09QVF9UWVBFX0lOVCwgeyAu aTY0ID0gMSB9LCAxLCAyLCBGTEFHUyB9LAorICAgIHsgImZkIiwgInNldCBmaWxlIGRlc2NyaXB0 b3IgdG8gYmUgdXNlZCBieSBQaXBlV2lyZSIsIE9GRlNFVChwaXBld2lyZV9mZCksIEFWX09QVF9U WVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCBJTlRfTUFYLCBGTEFHUyB9LAorICAgIHsgIm5vZGUi LCAic2V0IFBpcGVXaXJlIG5vZGUgKHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlICdmZCcgb3B0aW9u KSIsIE9GRlNFVChwaXBld2lyZV9ub2RlKSwgQVZfT1BUX1RZUEVfVUlOVDY0LCB7IC5pNjQgPSAw IH0sIDAsIDB4ZmZmZmZmZmYsIEZMQUdTIH0sCisgICAgeyAiZW5hYmxlX2RtYWJ1ZiIsICJlbmFi bGUgRE1BLUJVRiBzaGFyaW5nIiwgT0ZGU0VUKGVuYWJsZV9kbWFidWYpLCBBVl9PUFRfVFlQRV9C T09MLCB7IC5pNjQgPSAxIH0sIDAsIDEsIEZMQUdTIH0sCisgICAgeyAiZGV2aWNlIiwgIkRSTSBk ZXZpY2UgcGF0aCIsIE9GRlNFVChkZXZpY2VfcGF0aCksIEFWX09QVF9UWVBFX1NUUklORywgeyAu c3RyID0gIi9kZXYvZHJpL2NhcmQwIiB9LCAwLCAwLCBGTEFHUyB9LAorICAgIHsgTlVMTCB9LAor fTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKHBpcGV3aXJlZ3JhYik7CisKKy8qKgorICogSGVs cGVyIGZ1bmN0aW9uIHRvIGFsbG93IHBvcnRhbF9pbml0X3NjcmVlbmNhc3QgdG8gc3RvcCBhbmQg cmV0dXJuIGFuIGVycm9yCisgKiBjb2RlIGlmIGEgREJ1cyBvcGVyYXRpb24vY2FsbGJhY2sgZmFp bHMuCisgKgorICogQHBhcmFtIGN0eAorICogQHBhcmFtIGVycm9yIEFWRVJST1IgY29kZSAobmVn YXRpdmUpCisgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lk IHBvcnRhbF9hYm9ydChBVkZpbHRlckNvbnRleHQgKmN0eCwgaW50IGVycm9yLCBjb25zdCBjaGFy ICptZXNzYWdlKQoreworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJp djsKKworICAgIHB3X2N0eC0+cG9ydGFsX2Vycm9yID0gZXJyb3I7CisgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiQWJvcnRpbmc6ICVzXG4iLCBtZXNzYWdlKTsKKworICAgIGF0b21pY19z dG9yZSgmcHdfY3R4LT5kYnVzX2V2ZW50X2xvb3BfcnVubmluZywgMCk7Cit9CisKKy8qKgorICog Q2FsbGJhY2sgdG8gaGFuZGxlIFBpcGVXaXJlIGNvcmUgaW5mbyBldmVudHMKKyAqCisgKiBAcGFy YW0gdXNlcl9kYXRhIHBvaW50ZXIgdG8gQVZGaWx0ZXJDb250ZXh0CisgKiBAcGFyYW0gaW5mbyBw d19jb3JlX2luZm8KKyAqLworc3RhdGljIHZvaWQgb25fY29yZV9pbmZvX2NhbGxiYWNrKHZvaWQg KnVzZXJfZGF0YSwgY29uc3Qgc3RydWN0IHB3X2NvcmVfaW5mbyAqaW5mbykKK3sKKyAgICBBVkZp bHRlckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVC VUcsICJTZXJ2ZXIgdmVyc2lvbjogJXNcbiIsIGluZm8tPnZlcnNpb24pOworICAgIGF2X2xvZyhj dHgsIEFWX0xPR19JTkZPLCAiTGlicmFyeSB2ZXJzaW9uOiAlc1xuIiwgcHdfZ2V0X2xpYnJhcnlf dmVyc2lvbigpKTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJIZWFkZXIgdmVyc2lv bjogJXNcbiIsIHB3X2dldF9oZWFkZXJzX3ZlcnNpb24oKSk7Cit9CisKKy8qKgorICogQ2FsbGJh Y2sgdG8gaGFuZGxlIFBpcGVXaXJlIGNvcmUgZG9uZSBldmVudHMKKyAqCisgKiBAcGFyYW0gdXNl cl9kYXRhIHBvaW50ZXIgdG8gQVZGaWx0ZXJDb250ZXh0CisgKiBAcGFyYW0gaWQgUGlwZVdpcmUg b2JqZWN0IGlkIG9mIGNhbGxpbmcKKyAqIEBwYXJhbSBzZXEgUGlwZVdpcmUgb2JqZWN0IHNlcXVl bmNlCisgKi8KK3N0YXRpYyB2b2lkIG9uX2NvcmVfZG9uZV9jYWxsYmFjayh2b2lkICp1c2VyX2Rh dGEsIHVpbnQzMl90IGlkLCBpbnQgc2VxKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0g dXNlcl9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eDsKKworICAgIGlmICgh Y3R4IHx8ICFjdHgtPnByaXYpCisgICAgICAgIHJldHVybjsKKyAgICBwd19jdHggPSBjdHgtPnBy aXY7CisKKyAgICBpZiAoaWQgPT0gUFdfSURfQ09SRSkKKyAgICAgICAgcHdfdGhyZWFkX2xvb3Bf c2lnbmFsKHB3X2N0eC0+dGhyZWFkX2xvb3AsIGZhbHNlKTsKK30KKworLyoqCisgKiBDYWxsYmFj ayB0byBoYW5kbGUgUGlwZXdpcmUgY29yZSBlcnJvciBldmVudHMKKyAqCisgKiBAcGFyYW0gdXNl cl9kYXRhIHBvaW50ZXIgdG8gQVZGaWx0ZXJDb250ZXh0CisgKiBAcGFyYW0gaWQgaWQgb2YgUGlw ZVdpcmUgcHJveHkgb2JqZWN0IHdoZXJlIHRoZSBlcnJvciBvY2N1cmVkCisgKiBAcGFyYW0gc2Vx IFBpcGVXaXJlIHNlcXVlbmNlIG51bWJlciB3aGljaCBwcm9kdWNlZCB0aGUgZXJyb3IKKyAqIEBw YXJhbSByZXMgZXJyb3IgbnVtYmVyCisgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlCisg Ki8KK3N0YXRpYyB2b2lkIG9uX2NvcmVfZXJyb3JfY2FsbGJhY2sodm9pZCAqdXNlcl9kYXRhLCB1 aW50MzJfdCBpZCwgaW50IHNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHJlcywgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0 eCA9IHVzZXJfZGF0YTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHg7CisKKyAgICBp ZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAorICAgICAgICAgICAiUGlwZVdpcmUgY29yZSBlcnJvcjogJXMgKGlkPSV1LCBzZXE9JWQsIHJl cz0lZDogJXMpXG4iLAorICAgICAgICAgICBtZXNzYWdlLCBpZCwgc2VxLCByZXMsIHN0cmVycm9y KC1yZXMpKTsKKworICAgIHB3X2N0eCA9IGN0eC0+cHJpdjsKKyAgICBpZiAoIXB3X2N0eCkKKyAg ICAgICAgcmV0dXJuOworCisgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3X2N0eC0+dGhyZWFk X2xvb3AsIGZhbHNlKTsKKyAgICBwd19jdHgtPnBpcGV3aXJlX2Vycm9yID0gcmVzOworICAgIGF0 b21pY19zdG9yZSgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVyLCAxKTsKKyAg ICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2Nv bmRfdmFyKTsKK30KKworLyoqCisgKiBQaXBlV2lyZSBjb3JlIGV2ZW50cyBjYWxsYmFja3MKKyAq Lworc3RhdGljIGNvbnN0IHN0cnVjdCBwd19jb3JlX2V2ZW50cyBjb3JlX2V2ZW50cyA9IHsKKyAg ICBQV19WRVJTSU9OX0NPUkVfRVZFTlRTLAorICAgIC5pbmZvID0gb25fY29yZV9pbmZvX2NhbGxi YWNrLAorICAgIC5kb25lID0gb25fY29yZV9kb25lX2NhbGxiYWNrLAorICAgIC5lcnJvciA9IG9u X2NvcmVfZXJyb3JfY2FsbGJhY2ssCit9OworCisvKioKKyAqIEhlbHBlciBmdW5jdGlvbjogY29u dmVydCBzcGEgdmlkZW8gZm9ybWF0IHRvIEFWUGl4ZWxGb3JtYXQKKyAqCisgKiBAcGFyYW0gdmlk ZW9fZm9ybWF0IHNwYSB2aWRlbyBmb3JtYXQgdG8gY29udmVydAorICogQHJldHVybiB0aGUgY29y cmVzcG9uZGluZyBBVlBpeGVsRm9ybWF0CisgKi8KK3N0YXRpYyBlbnVtIEFWUGl4ZWxGb3JtYXQK K3NwYV92aWRlb19mb3JtYXRfdG9fYXZfcGl4ZWxfZm9ybWF0KGVudW0gc3BhX3ZpZGVvX2Zvcm1h dCB2aWRlb19mb3JtYXQpCit7CisgICAgc3dpdGNoICh2aWRlb19mb3JtYXQpIHsKKyAgICBjYXNl IFNQQV9WSURFT19GT1JNQVRfUkdCQToKKyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfUkdCeDoK KyAgICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfUkdCQTsKKworICAgIGNhc2UgU1BBX1ZJREVPX0ZP Uk1BVF9CR1JBOgorICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9CR1J4OgorICAgICAgICByZXR1 cm4gQVZfUElYX0ZNVF9CR1JBOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWX1BJ WF9GTVRfTk9ORTsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzcGFfdmlkZW9fZm9ybWF0 X3RvX2RybV9mb3JtYXQoZW51bSBzcGFfdmlkZW9fZm9ybWF0IHZpZGVvX2Zvcm1hdCkKK3sKKyAg ICBzd2l0Y2ggKHZpZGVvX2Zvcm1hdCkgeworICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9SR0JB OgorICAgICAgICByZXR1cm4gRFJNX0ZPUk1BVF9BQkdSODg4ODsKKyAgICBjYXNlIFNQQV9WSURF T19GT1JNQVRfUkdCeDoKKyAgICAgICAgcmV0dXJuIERSTV9GT1JNQVRfWEJHUjg4ODg7CisgICAg Y2FzZSBTUEFfVklERU9fRk9STUFUX0JHUkE6CisgICAgICAgIHJldHVybiBEUk1fRk9STUFUX0FS R0I4ODg4OworICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9CR1J4OgorICAgICAgICByZXR1cm4g RFJNX0ZPUk1BVF9YUkdCODg4ODsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRFJNX0ZP Uk1BVF9JTlZBTElEOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHBpcGV3aXJl Z3JhYl9mb3JtYXRzW10gPSB7CisgICAgU1BBX1ZJREVPX0ZPUk1BVF9SR0JBLAorICAgIFNQQV9W SURFT19GT1JNQVRfUkdCeCwKKyAgICBTUEFfVklERU9fRk9STUFUX0JHUngsCisgICAgU1BBX1ZJ REVPX0ZPUk1BVF9CR1JBLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IHBpcGV3aXJlZ3Jh Yl9kZWZhdWx0X21vZGlmaWVyc1tdID0geworICAgIERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKyAg ICBEUk1fRk9STUFUX01PRF9JTlZBTElELAorfTsKKworLyoqCisgKiBQaXBlV2lyZSBjYWxsYmFj ayBvZiBwYXJhbWV0ZXJzIGNoYW5nZWQgZXZlbnRzCisgKgorICogQHBhcmFtIHVzZXJfZGF0YSBw b2ludGVyIHRvIEFWRmlsdGVyQ29udGV4dAorICogQHBhcmFtIGlkIHR5cGUgb2YgY2hhbmdlZCBw YXJhbQorICogQHBhcmFtIHBhcmFtIHBvaW50ZXIgdG8gY2hhbmdlZCBwYXJhbSBzdHJ1Y3R1cmUK KyAqLworc3RhdGljIHZvaWQgb25fc3RyZWFtX3BhcmFtX2NoYW5nZWRfY2FsbGJhY2sodm9pZCAq dXNlcl9kYXRhLCB1aW50MzJfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbSkKK3sKKyAgICBzdHJ1Y3Qg c3BhX3BvZF9idWlsZGVyIHBvZF9idWlsZGVyOworICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpw YXJhbXNbTUFYX1NQQV9QQVJBTV07CisgICAgdWludDMyX3Qgbl9wYXJhbXMgPSAwOworICAgIHVp bnQzMl90IGJ1ZmZlcl90eXBlczsKKyAgICB1aW50OF90IHBhcmFtc19idWZmZXJbNDA5Nl07Cisg ICAgaW50IHJlc3VsdDsKKyAgICBpbnQgZXJyOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3 X2N0eDsKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAgICBBVkhXRnJh bWVzQ29udGV4dCAqZnJhbWVzX2N0eCA9IE5VTEw7CisKKyAgICBpZiAoIWN0eCB8fCAhY3R4LT5w cml2IHx8ICFwYXJhbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlkICE9IFNQQV9QQVJB TV9Gb3JtYXQpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsCisgICAgICAg ICAgICAgICAiSWdub3Jpbmcgbm9uLUZvcm1hdCBwYXJhbSBjaGFuZ2VcbiIpOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgcHdfY3R4ID0gY3R4LT5wcml2OworCisgICAgcmVzdWx0ID0g c3BhX2Zvcm1hdF9wYXJzZShwYXJhbSwgJnB3X2N0eC0+Zm9ybWF0Lm1lZGlhX3R5cGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5mb3JtYXQubWVkaWFfc3VidHlwZSk7 CisgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIHBhcnNlIG1lZGlhIHR5cGVcbiIpOworICAgICAgICBwd19jdHgtPnBpcGV3 aXJlX2Vycm9yID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK KyAgICBpZiAocHdfY3R4LT5mb3JtYXQubWVkaWFfdHlwZSAhPSBTUEFfTUVESUFfVFlQRV92aWRl byB8fAorICAgICAgICBwd19jdHgtPmZvcm1hdC5tZWRpYV9zdWJ0eXBlICE9IFNQQV9NRURJQV9T VUJUWVBFX3JhdykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmV4cGVj dGVkIG1lZGlhIHR5cGVcbiIpOworICAgICAgICBwd19jdHgtPnBpcGV3aXJlX2Vycm9yID0gQVZF UlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBzcGFfZm9ybWF0 X3ZpZGVvX3Jhd19wYXJzZShwYXJhbSwgJnB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3KTsKKworICAg IGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiTmVnb3RpYXRlZCBmb3JtYXQ6XG4iKTsKKworICAg IGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiRm9ybWF0OiAlZCAoJXMpXG4iLAorICAgICAgICAg ICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mb3JtYXQsCisgICAgICAgICAgIHNwYV9kZWJ1Z190 eXBlX2ZpbmRfbmFtZShzcGFfdHlwZV92aWRlb19mb3JtYXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mb3JtYXQpKTsKKyAgICBh dl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlNpemU6ICVkeCVkXG4iLAorICAgICAgICAgICBwd19j dHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLndpZHRoLAorICAgICAgICAgICBwd19jdHgtPmZvcm1h dC5pbmZvLnJhdy5zaXplLmhlaWdodCk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJG cmFtZXJhdGU6ICVkLyVkXG4iLAorICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5m cmFtZXJhdGUubnVtLAorICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mcmFtZXJh dGUuZGVub20pOworCisgICAgcHdfY3R4LT53aWR0aCA9IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3 LnNpemUud2lkdGg7CisgICAgcHdfY3R4LT5oZWlnaHQgPSBwd19jdHgtPmZvcm1hdC5pbmZvLnJh dy5zaXplLmhlaWdodDsKKyAgICBwd19jdHgtPkJwcCA9IEJZVEVTX1BFUl9QSVhFTDsKKyAgICBw d19jdHgtPmZyYW1lX3NpemUgPSBwd19jdHgtPndpZHRoICogcHdfY3R4LT5oZWlnaHQgKiBwd19j dHgtPkJwcDsKKyAgICBpZiAocHdfY3R4LT5mcmFtZV9zaXplICsgQVZfSU5QVVRfQlVGRkVSX1BB RERJTkdfU0laRSA+IElOVF9NQVgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQ2FwdHVyZWQgYXJlYSBpcyB0b28gbGFyZ2VcbiIpOworICAgICAgICBwd19jdHgtPnBpcGV3 aXJlX2Vycm9yID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK KyAgICBwd19jdHgtPmF2X3B4bF9mb3JtYXQgPQorICAgICAgICBzcGFfdmlkZW9fZm9ybWF0X3Rv X2F2X3BpeGVsX2Zvcm1hdChwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mb3JtYXQpOworICAgIGlm IChwd19jdHgtPmF2X3B4bF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBidWZm ZXIgZm9ybWF0OiAlZFxuIiwgcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZm9ybWF0KTsKKyAgICAg ICAgcHdfY3R4LT5waXBld2lyZV9lcnJvciA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290 byBlbmQ7CisgICAgfQorCisgICAgLyogVmlkZW8gY3JvcCAqLworICAgIHBvZF9idWlsZGVyID0g U1BBX1BPRF9CVUlMREVSX0lOSVQocGFyYW1zX2J1ZmZlciwgc2l6ZW9mKHBhcmFtc19idWZmZXIp KTsKKyAgICBwYXJhbXNbbl9wYXJhbXMrK10gPSBzcGFfcG9kX2J1aWxkZXJfYWRkX29iamVjdCgK KyAgICAgICAgJnBvZF9idWlsZGVyLCBTUEFfVFlQRV9PQkpFQ1RfUGFyYW1NZXRhLCBTUEFfUEFS QU1fTWV0YSwKKyAgICAgICAgU1BBX1BBUkFNX01FVEFfdHlwZSwgU1BBX1BPRF9JZChTUEFfTUVU QV9WaWRlb0Nyb3ApLAorICAgICAgICBTUEFfUEFSQU1fTUVUQV9zaXplLCBTUEFfUE9EX0ludChz aXplb2Yoc3RydWN0IHNwYV9tZXRhX3JlZ2lvbikpKTsKKworICAgIC8qIEJ1ZmZlciBvcHRpb25z ICovCisgICAgYnVmZmVyX3R5cGVzID0gKDEgPDwgU1BBX0RBVEFfTWVtUHRyKSB8ICgxIDw8IFNQ QV9EQVRBX01lbUZkKTsKKyAgICBpZiAoc3BhX3BvZF9maW5kX3Byb3AocGFyYW0sIE5VTEwsIFNQ QV9GT1JNQVRfVklERU9fbW9kaWZpZXIpKSB7CisgICAgICAgIGVyciA9IGF2X2h3ZGV2aWNlX2N0 eF9jcmVhdGUoJnB3X2N0eC0+aHdfZGV2aWNlX3JlZiwgQVZfSFdERVZJQ0VfVFlQRV9EUk0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdfY3R4LT5kZXZpY2VfcGF0aCwg TlVMTCwgMCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBod19mYWls OworCisgICAgICAgIHB3X2N0eC0+aHdfZnJhbWVzX3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9j KHB3X2N0eC0+aHdfZGV2aWNlX3JlZik7CisgICAgICAgIGlmICghcHdfY3R4LT5od19mcmFtZXNf cmVmKSB7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBn b3RvIGh3X2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVz Q29udGV4dCopcHdfY3R4LT5od19mcmFtZXNfcmVmLT5kYXRhOworICAgICAgICBmcmFtZXNfY3R4 LT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX0RSTV9QUklNRTsKKyAgICAgICAgZnJhbWVzX2N0eC0+ c3dfZm9ybWF0ID0gcHdfY3R4LT5hdl9weGxfZm9ybWF0OworICAgICAgICBmcmFtZXNfY3R4LT53 aWR0aCAgICAgPSBwd19jdHgtPndpZHRoOworICAgICAgICBmcmFtZXNfY3R4LT5oZWlnaHQgICAg PSBwd19jdHgtPmhlaWdodDsKKyAgICAgICAgZXJyID0gYXZfaHdmcmFtZV9jdHhfaW5pdChwd19j dHgtPmh3X2ZyYW1lc19yZWYpOworaHdfZmFpbDoKKyAgICAgICAgaWYgKCFlcnIpIHsKKyAgICAg ICAgICAgIGJ1ZmZlcl90eXBlcyB8PSAxIDw8IFNQQV9EQVRBX0RtYUJ1ZjsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLAorICAgICAgICAg ICAgICAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBoYXJkd2FyZSBmcmFtZXMgY29udGV4dDog JXMuICIKKyAgICAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIHNoYXJlZCBtZW1vcnlc biIsIGF2X2VycjJzdHIoZXJyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYXJhbXNbbl9w YXJhbXMrK10gPSBzcGFfcG9kX2J1aWxkZXJfYWRkX29iamVjdCgKKyAgICAgICAgJnBvZF9idWls ZGVyLCBTUEFfVFlQRV9PQkpFQ1RfUGFyYW1CdWZmZXJzLCBTUEFfUEFSQU1fQnVmZmVycywKKyAg ICAgICAgU1BBX1BBUkFNX0JVRkZFUlNfZGF0YVR5cGUsCisgICAgICAgIFNQQV9QT0RfSW50KGJ1 ZmZlcl90eXBlcykpOworCisgICAgLyogTWV0YSBoZWFkZXIgKi8KKyAgICBwYXJhbXNbbl9wYXJh bXMrK10gPSBzcGFfcG9kX2J1aWxkZXJfYWRkX29iamVjdCgKKyAgICAgICAgJnBvZF9idWlsZGVy LCBTUEFfVFlQRV9PQkpFQ1RfUGFyYW1NZXRhLCBTUEFfUEFSQU1fTWV0YSwKKyAgICAgICAgU1BB X1BBUkFNX01FVEFfdHlwZSwgU1BBX1BPRF9JZChTUEFfTUVUQV9IZWFkZXIpLAorICAgICAgICBT UEFfUEFSQU1fTUVUQV9zaXplLAorICAgICAgICBTUEFfUE9EX0ludChzaXplb2Yoc3RydWN0IHNw YV9tZXRhX2hlYWRlcikpKTsKKworICAgIHB3X3N0cmVhbV91cGRhdGVfcGFyYW1zKHB3X2N0eC0+ c3RyZWFtLCBwYXJhbXMsIG5fcGFyYW1zKTsKKworZW5kOgorICAgIC8vIFNpZ25hbCBwaXBld2ly ZWdyYWJfaW5pdCB0aGF0IFBpcGVXaXJlIGluaXRpYWxpemF0aW9uIGlzIG92ZXIgKGVpdGhlcgor ICAgIC8vIGJlY2F1c2UgaXQgd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3IgYmVjYXVzZSB0 aGVyZSB3YXMgYW4gZXJyb3IsIGluCisgICAgLy8gd2hpY2ggY2FzZSBwd19jdHgtPnBpcGV3aXJl X2Vycm9yIHdpbGwgaGF2ZSBiZWVuIHNldCB0byBhIG5vbnplcm8gdmFsdWUpLgorICAgIGF0b21p Y19zdG9yZSgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVyLCAxKTsKKyAgICBw dGhyZWFkX2NvbmRfc2lnbmFsKCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRf dmFyKTsKK30KKworLyoqCisgKiBQaXBlV2lyZSBjYWxsYmFjayBvZiBzdGF0ZSBjaGFuZ2VkIGV2 ZW50cworICoKKyAqIEBwYXJhbSB1c2VyX2RhdGEgcG9pbnRlciB0byBBVkZpbHRlckNvbnRleHQK KyAqIEBwYXJhbSBvbGQgb2xkIFBpcGVXaXJlIHN0cmVhbSBzdGF0ZQorICogQHBhcmFtIHN0YXRl IGN1cnJlbnQgUGlwZVdpcmUgc3RyZWFtIHN0YXRlCisgKiBAcGFyYW0gZXJyb3IgcmVjZWl2ZWQg ZXJyb3IgaW5mb3JtYXRpb24KKyAqLworc3RhdGljIHZvaWQgb25fc3RyZWFtX3N0YXRlX2NoYW5n ZWRfY2FsbGJhY2sodm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBwd19zdHJlYW1fc3RhdGUgb2xkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwd19zdHJlYW1fc3RhdGUgc3Rh dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICplcnJvcikKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAg ICBpZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lO Rk8sICJzdHJlYW0gc3RhdGU6IFwiJXNcIlxuIiwKKyAgICAgICAgICAgcHdfc3RyZWFtX3N0YXRl X2FzX3N0cmluZyhzdGF0ZSkpOworfQorCisvKioKKyAqIEZpbmQgbW9zdCByZWNlbnQgYnVmZmVy IHJlY2VpdmVkIGluIGEgUGlwZVdpcmUgc3RyZWFtCisgKgorICogQHBhcmFtIHN0cmVhbSBzdHJl YW0gdG8gZ2V0IGJ1ZmZlciBmcm9tCisgKiBAcmV0dXJuIG1vc3QgcmVjZW50IGJ1ZmZlciBpbiB0 aGUgc3RyZWFtCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdfYnVmZmVyICpmaW5kX21vc3RfcmVjZW50 X2J1ZmZlcl9hbmRfcmVjeWNsZV9vbGRlcnMoc3RydWN0IHB3X3N0cmVhbSAqc3RyZWFtKQorewor ICAgIHN0cnVjdCBwd19idWZmZXIgKnB3X2J1ZiA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICAgc3RydWN0IHB3X2J1ZmZlciAqYXV4ID0gcHdfc3RyZWFtX2RlcXVldWVfYnVmZmVyKHN0 cmVhbSk7CisgICAgICAgIGlmICghYXV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm IChwd19idWYpCisgICAgICAgICAgICBwd19zdHJlYW1fcXVldWVfYnVmZmVyKHN0cmVhbSwgcHdf YnVmKTsKKyAgICAgICAgcHdfYnVmID0gYXV4OworICAgIH0KKyAgICByZXR1cm4gcHdfYnVmOwor fQorCitzdGF0aWMgdm9pZCBmcmVlX2ZyYW1lX2Rlc2Modm9pZCAqb3BhcXVlLCB1aW50OF90ICpk YXRhKQoreworICAgIEFWRFJNRnJhbWVEZXNjcmlwdG9yICpmcmFtZV9kZXNjID0gKEFWRFJNRnJh bWVEZXNjcmlwdG9yICopZGF0YTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVfZGVz Yy0+bmJfb2JqZWN0czsgaSsrKQorICAgICAgICBjbG9zZShmcmFtZV9kZXNjLT5vYmplY3RzW2ld LmZkKTsKKyAgICBhdl9mcmVlKGZyYW1lX2Rlc2MpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNz X2RtYV9idWZmZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIHN0cnVjdCBzcGFfYnVmZmVyICpzcGFf YnVmKQoreworICAgIEFWRnJhbWUgKmZyYW1lID0gTlVMTDsKKyAgICBBVkRSTUZyYW1lRGVzY3Jp cHRvciAqZnJhbWVfZGVzYyA9IE5VTEw7CisgICAgaW50IHJldDsKKyAgICBpbnQgbl9wbGFuZXM7 CisgICAgc2l6ZV90IHNpemU7CisgICAgdWludDMyX3Qgb2Zmc2V0LCBwaXRjaDsKKyAgICBQaXBl d2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7CisKKyAgICBuX3BsYW5lcyA9IHNw YV9idWYtPm5fZGF0YXM7CisgICAgYXZfYXNzZXJ0MChuX3BsYW5lcyA8PSBBVl9EUk1fTUFYX1BM QU5FUyk7CisKKyAgICAvLyBDcmVhdGUgZnJhbWUgZGVzY3JpcHRvcgorICAgIGZyYW1lX2Rlc2Mg PSBhdl9tYWxsb2N6KHNpemVvZigqZnJhbWVfZGVzYykpOworICAgIGlmICghZnJhbWVfZGVzYykg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWxsb2NhdGUg ZnJhbWUgZGVzY3JpcHRvclxuIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgKmZy YW1lX2Rlc2MgPSAoQVZEUk1GcmFtZURlc2NyaXB0b3IpIHsKKyAgICAgICAgLm5iX29iamVjdHMg PSBuX3BsYW5lcywKKyAgICAgICAgLm5iX2xheWVycyA9IDEsCisgICAgICAgIC5sYXllcnNbMF0g PSB7CisgICAgICAgICAgICAuZm9ybWF0ID0gc3BhX3ZpZGVvX2Zvcm1hdF90b19kcm1fZm9ybWF0 KHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCksCisgICAgICAgICAgICAubmJfcGxhbmVz ID0gbl9wbGFuZXMsCisgICAgICAgIH0sCisgICAgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IG5fcGxhbmVzOyBpKyspIHsKKyAgICAgICAgb2Zmc2V0ID0gc3BhX2J1Zi0+ZGF0YXNbaV0uY2h1 bmstPm9mZnNldDsKKyAgICAgICAgcGl0Y2ggPSBzcGFfYnVmLT5kYXRhc1tpXS5jaHVuay0+c3Ry aWRlOworICAgICAgICBzaXplID0gb2Zmc2V0ICsgcGl0Y2ggKiBwd19jdHgtPmhlaWdodDsKKwor ICAgICAgICBmcmFtZV9kZXNjLT5vYmplY3RzW2ldID0gKEFWRFJNT2JqZWN0RGVzY3JpcHRvcikg eworICAgICAgICAgICAgLmZkICAgICAgICAgICAgICA9IHNwYV9idWYtPmRhdGFzW2ldLmZkLAor ICAgICAgICAgICAgLnNpemUgICAgICAgICAgICA9IHNpemUsCisgICAgICAgICAgICAuZm9ybWF0 X21vZGlmaWVyID0gcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcubW9kaWZpZXIsCisgICAgICAgIH07 CisgICAgICAgIGZyYW1lX2Rlc2MtPmxheWVyc1swXS5wbGFuZXNbaV0gPSAoQVZEUk1QbGFuZURl c2NyaXB0b3IpIHsKKyAgICAgICAgICAgIC5vYmplY3RfaW5kZXggPSBpLAorICAgICAgICAgICAg Lm9mZnNldCAgICAgICA9IG9mZnNldCwKKyAgICAgICAgICAgIC5waXRjaCAgICAgICAgPSBwaXRj aCwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgZnJhbWUKKyAgICBmcmFtZSA9 IGF2X2ZyYW1lX2FsbG9jKCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWxsb2NhdGUgZnJhbWVcbiIpOworICAgICAgICBn b3RvIGZhaWw7CisgICAgfQorICAgIGZyYW1lLT5od19mcmFtZXNfY3R4ID0gYXZfYnVmZmVyX3Jl Zihwd19jdHgtPmh3X2ZyYW1lc19yZWYpOworICAgIGlmICghZnJhbWUtPmh3X2ZyYW1lc19jdHgp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBi dWZmZXIgcmVmZXJlbmNlXG4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBmcmFt ZS0+YnVmWzBdID0gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKWZyYW1lX2Rlc2MsIHNpemVv ZigqZnJhbWVfZGVzYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl ZV9mcmFtZV9kZXNjLCBOVUxMLCAwKTsKKyAgICBpZiAoIWZyYW1lLT5idWZbMF0pIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBidWZmZXJcbiIp OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIGZyYW1lLT5kYXRhWzBdID0gKHVpbnQ4 X3QgKilmcmFtZV9kZXNjOworICAgIGZyYW1lLT5mb3JtYXQgID0gQVZfUElYX0ZNVF9EUk1fUFJJ TUU7CisgICAgZnJhbWUtPndpZHRoID0gcHdfY3R4LT53aWR0aDsKKyAgICBmcmFtZS0+aGVpZ2h0 ID0gcHdfY3R4LT5oZWlnaHQ7CisKKyAgICAvLyBVcGRhdGUgY3VycmVudF9mcmFtZQorICAgIHB0 aHJlYWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICBhdl9m cmFtZV91bnJlZihwd19jdHgtPmN1cnJlbnRfZnJhbWUpOworICAgIHJldCA9IGF2X2ZyYW1lX3Jl Zihwd19jdHgtPmN1cnJlbnRfZnJhbWUsIGZyYW1lKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9j aygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIGZyYW1lIHJl ZmVyZW5jZVxuIik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmZyYW1lKTsKKyAgICB9CisgICAg cmV0dXJuOworCitmYWlsOgorICAgIGF2X2ZyZWVwKCZmcmFtZV9kZXNjKTsKKyAgICBhdl9mcmFt ZV9mcmVlKCZmcmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc2htX2J1ZmZlcihBVkZp bHRlckNvbnRleHQgKmN0eCwgc3RydWN0IHNwYV9idWZmZXIgKnNwYV9idWYpCit7CisgICAgdWlu dDhfdCAqbWFwID0gTlVMTDsKKyAgICB2b2lkICpzZGF0YSA9IE5VTEw7CisgICAgc3RydWN0IHNw YV9tZXRhX3JlZ2lvbiAqcmVnaW9uOworICAgIGludCBjcm9wX2xlZnQsIGNyb3BfcmlnaHQsIGNy b3BfdG9wLCBjcm9wX2JvdHRvbTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBj dHgtPnByaXY7CisKKyAgICAvLyBHZXQgZGF0YQorICAgIGlmIChzcGFfYnVmLT5kYXRhc1swXS50 eXBlID09IFNQQV9EQVRBX01lbUZkICkgeworICAgICAgICBtYXAgPSBtbWFwKE5VTEwsIHNwYV9i dWYtPmRhdGFzWzBdLm1heHNpemUgKyBzcGFfYnVmLT5kYXRhc1swXS5tYXBvZmZzZXQsCisgICAg ICAgICAgICAgICAgICAgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgc3BhX2J1Zi0+ZGF0YXNbMF0u ZmQsIDApOworICAgICAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIm1tYXAgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJy bm8pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZGF0YSA9IFNQ QV9QVFJPRkYobWFwLCBzcGFfYnVmLT5kYXRhc1swXS5tYXBvZmZzZXQsIHVpbnQ4X3QpOworICAg IH0gZWxzZSBpZiAoc3BhX2J1Zi0+ZGF0YXNbMF0udHlwZSA9PSBTUEFfREFUQV9NZW1QdHIpIHsK KyAgICAgICAgaWYgKHNwYV9idWYtPmRhdGFzWzBdLmRhdGEgPT0gTlVMTCkgeworICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiTm8gZGF0YSBpbiBidWZmZXJcbiIpOworICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNkYXRhID0gc3BhX2J1Zi0+ZGF0 YXNbMF0uZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJCdWZmZXIgaXMgbm90IHZhbGlkXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIHJlZ2lvbiA9IHNwYV9idWZmZXJfZmluZF9tZXRhX2RhdGEoc3BhX2J1ZiwgU1BBX01FVEFf VmlkZW9Dcm9wLCBzaXplb2YoKnJlZ2lvbikpOworICAgIGlmIChyZWdpb24gJiYgc3BhX21ldGFf cmVnaW9uX2lzX3ZhbGlkKHJlZ2lvbikpIHsKKyAgICAgICAgY3JvcF9sZWZ0ID0gcmVnaW9uLT5y ZWdpb24ucG9zaXRpb24ueDsKKyAgICAgICAgY3JvcF90b3AgPSByZWdpb24tPnJlZ2lvbi5wb3Np dGlvbi55OworICAgICAgICBjcm9wX3JpZ2h0ID0gcHdfY3R4LT53aWR0aCAtIGNyb3BfbGVmdCAt IHJlZ2lvbi0+cmVnaW9uLnNpemUud2lkdGg7CisgICAgICAgIGNyb3BfYm90dG9tID0gcHdfY3R4 LT5oZWlnaHQgLSBjcm9wX3RvcCAtIHJlZ2lvbi0+cmVnaW9uLnNpemUuaGVpZ2h0OworICAgIH0K KworICAgIC8vIFVwZGF0ZSBjdXJyZW50X2ZyYW1lIHdpdGggdGhlIG5ldyBkYXRhCisgICAgcHRo cmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworICAgIG1lbWNw eShwd19jdHgtPmN1cnJlbnRfZnJhbWUtPmRhdGFbMF0sIHNkYXRhLCBzcGFfYnVmLT5kYXRhc1sw XS5jaHVuay0+c2l6ZSk7CisgICAgcHdfY3R4LT5jdXJyZW50X2ZyYW1lLT5jcm9wX3RvcCA9IGNy b3BfdG9wOworICAgIHB3X2N0eC0+Y3VycmVudF9mcmFtZS0+Y3JvcF9ib3R0b20gPSBjcm9wX2Jv dHRvbTsKKyAgICBwd19jdHgtPmN1cnJlbnRfZnJhbWUtPmNyb3BfbGVmdCA9IGNyb3BfbGVmdDsK KyAgICBwd19jdHgtPmN1cnJlbnRfZnJhbWUtPmNyb3BfcmlnaHQgPSBjcm9wX3JpZ2h0OworICAg IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworCisg ICAgLy8gQ2xlYW51cAorICAgIGlmIChzcGFfYnVmLT5kYXRhc1swXS50eXBlID09IFNQQV9EQVRB X01lbUZkKQorICAgICAgICBtdW5tYXAobWFwLCBzcGFfYnVmLT5kYXRhc1swXS5tYXhzaXplICsg c3BhX2J1Zi0+ZGF0YXNbMF0ubWFwb2Zmc2V0KTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBieSBQaXBlV2lyZSB3aGVuIGEgYnVmZmVyCisgKiBpcyByZWFkeSB0byBiZSBk ZXF1ZXVlZCBhbmQgcHJvY2Vzc2VkLgorICoKKyAqIEBwYXJhbSB1c2VyX2RhdGEgcG9pbnRlciB0 byBBVkZpbHRlckNvbnRleHQKKyAqLworc3RhdGljIHZvaWQgb25fc3RyZWFtX3Byb2Nlc3NfY2Fs bGJhY2sodm9pZCAqdXNlcl9kYXRhKQoreworICAgIHN0cnVjdCBzcGFfYnVmZmVyICpzcGFfYnVm OworICAgIHN0cnVjdCBwd19idWZmZXIgKnB3X2J1ZiA9IE5VTEw7CisgICAgc3RydWN0IHNwYV9t ZXRhX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKKworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0g dXNlcl9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eDsKKyAgICBpZiAoIWN0 eCB8fCAhY3R4LT5wcml2KQorICAgICAgICByZXR1cm47CisgICAgcHdfY3R4ID0gY3R4LT5wcml2 OworCisgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBwd19jdHgtPmN1cnJlbnRfZnJhbWUgdG8g aGF2ZSBiZWVuIGFsbG9jYXRlZCBiZWZvcmUKKyAgICAvLyB3ZSBjYW4gdXNlIGl0IHRvIGdldCBm cmFtZXMgZnJvbSB0aGUgUGlwZVdpcmUgdGhyZWFkIHRvIEZGbXBlZworICAgIHB0aHJlYWRfbXV0 ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICBpZiAoIXB3X2N0eC0+ Y3VycmVudF9mcmFtZSkgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcHdfY3R4LT5j dXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwdGhyZWFk X211dGV4X3VubG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKworICAgIHB3X2J1 ZiA9IGZpbmRfbW9zdF9yZWNlbnRfYnVmZmVyX2FuZF9yZWN5Y2xlX29sZGVycyhwd19jdHgtPnN0 cmVhbSk7CisgICAgaWYgKCFwd19idWYpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiT3V0IG9mIGJ1ZmZlcnNcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg c3BhX2J1ZiA9IHB3X2J1Zi0+YnVmZmVyOworICAgIGhlYWRlciA9IHNwYV9idWZmZXJfZmluZF9t ZXRhX2RhdGEoc3BhX2J1ZiwgU1BBX01FVEFfSGVhZGVyLCBzaXplb2YoKmhlYWRlcikpOworICAg IGlmIChoZWFkZXIgJiYgKGhlYWRlci0+ZmxhZ3MgJiBTUEFfTUVUQV9IRUFERVJfRkxBR19DT1JS VVBURUQpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNvcnJ1cHRlZCBQ aXBlV2lyZSBidWZmZXJcbiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAo c3BhX2J1Zi0+ZGF0YXNbMF0udHlwZSA9PSBTUEFfREFUQV9EbWFCdWYpCisgICAgICAgIHByb2Nl c3NfZG1hX2J1ZmZlcihjdHgsIHNwYV9idWYpOworICAgIGVsc2UKKyAgICAgICAgcHJvY2Vzc19z aG1fYnVmZmVyKGN0eCwgc3BhX2J1Zik7CisKK2VuZDoKKyAgICBwd19zdHJlYW1fcXVldWVfYnVm ZmVyKHB3X2N0eC0+c3RyZWFtLCBwd19idWYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHB3 X3N0cmVhbV9ldmVudHMgc3RyZWFtX2V2ZW50cyA9IHsKKyAgICBQV19WRVJTSU9OX1NUUkVBTV9F VkVOVFMsCisgICAgLnN0YXRlX2NoYW5nZWQgPSBvbl9zdHJlYW1fc3RhdGVfY2hhbmdlZF9jYWxs YmFjaywKKyAgICAucGFyYW1fY2hhbmdlZCA9IG9uX3N0cmVhbV9wYXJhbV9jaGFuZ2VkX2NhbGxi YWNrLAorICAgIC5wcm9jZXNzID0gb25fc3RyZWFtX3Byb2Nlc3NfY2FsbGJhY2ssCit9OworCitz dGF0aWMgaW50IHN1YnNjcmliZV90b19zaWduYWwoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VuZGVyX25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVxdWVzdF90b2tlbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZF9idXNfbWVzc2FnZV9oYW5kbGVyX3QgY2Fs bGJhY2spCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyICpyZXF1ZXN0X3BhdGg7CisgICAgc3Ry dWN0IERidXNTaWduYWxEYXRhICpkYnVzX3NpZ25hbF9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNv bnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIGRidXNfc2lnbmFsX2RhdGEgPSAoc3Ry dWN0IERidXNTaWduYWxEYXRhICopYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IERidXNTaWduYWxE YXRhKSk7CisgICAgaWYgKCFkYnVzX3NpZ25hbF9kYXRhKQorICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworCisgICAgZGJ1c19zaWduYWxfZGF0YS0+Y3R4ID0gY3R4OworICAgIHJlcXVl c3RfcGF0aCA9IGF2X2FzcHJpbnRmKFJFUVVFU1RfUEFUSCwgc2VuZGVyX25hbWUsIHJlcXVlc3Rf dG9rZW4pOworCisgICAgcmV0ID0gc2RfYnVzX21hdGNoX3NpZ25hbChwd19jdHgtPmNvbm5lY3Rp b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGJ1c19zaWduYWxfZGF0YS0+c2xv dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTkRFUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlcXVlc3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh bGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19zaWduYWxfZGF0YSk7 CisgICAgYXZfZnJlZShyZXF1ZXN0X3BhdGgpOworICAgIHJldHVybiAocmV0IDwgMCkgPyByZXQg OiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwYV9wb2QgKmJ1aWxkX2Zvcm1hdChQaXBld2lyZUdy YWJDb250ZXh0ICpwd19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc3BhX3BvZF9idWlsZGVyICpidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludDY0X3QgKm1vZGlmaWVycywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBuX21vZGlmaWVycykKK3sKKyAgICBzdHJ1Y3Qgc3BhX3BvZF9m cmFtZSBmb3JtYXRfZnJhbWU7CisgICAgc3RydWN0IHNwYV9wb2RfZnJhbWUgbW9kaWZpZXJfZnJh bWU7CisKKyAgICBzcGFfcG9kX2J1aWxkZXJfcHVzaF9vYmplY3QoYnVpbGRlciwgJmZvcm1hdF9m cmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBX1RZUEVfT0JKRUNUX0Zv cm1hdCwgU1BBX1BBUkFNX0VudW1Gb3JtYXQpOworICAgIHNwYV9wb2RfYnVpbGRlcl9hZGQoYnVp bGRlciwgU1BBX0ZPUk1BVF9tZWRpYVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTUEFf UE9EX0lkKFNQQV9NRURJQV9UWVBFX3ZpZGVvKSwgMCk7CisgICAgc3BhX3BvZF9idWlsZGVyX2Fk ZChidWlsZGVyLCBTUEFfRk9STUFUX21lZGlhU3VidHlwZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIFNQQV9QT0RfSWQoU1BBX01FRElBX1NVQlRZUEVfcmF3KSwgMCk7CisgICAgc3BhX3BvZF9i dWlsZGVyX2FkZChidWlsZGVyLCBTUEFfRk9STUFUX1ZJREVPX2Zvcm1hdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgIFNQQV9QT0RfSWQoZm9ybWF0KSwgMCk7CisgICAgc3BhX3BvZF9idWlsZGVy X2FkZChidWlsZGVyLCBTUEFfRk9STUFUX1ZJREVPX3NpemUsCisgICAgICAgICAgICAgICAgICAg ICAgICBTUEFfUE9EX0NIT0lDRV9SQU5HRV9SZWN0YW5nbGUoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlNQQV9SRUNUQU5HTEUoMzIwLCAyNDApLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZTUEFfUkVDVEFOR0xFKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZTUEFfUkVDVEFOR0xFKDQwOTYsIDQwOTYpCisgICAgICAgICAgICAgICAgICAgICAgICApLCAw KTsKKyAgICBzcGFfcG9kX2J1aWxkZXJfYWRkKGJ1aWxkZXIsIFNQQV9GT1JNQVRfVklERU9fZnJh bWVyYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfRnJh Y3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNQQV9GUkFDVElPTihwd19jdHgt PmZyYW1lcmF0ZS5udW0sIHB3X2N0eC0+ZnJhbWVyYXRlLmRlbiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlNQQV9GUkFDVElPTigwLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmU1BBX0ZSQUNUSU9OKDE0NCwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICksIDAp OworICAgIGlmIChuX21vZGlmaWVycyA+IDApIHsKKyAgICAgICAgc3BhX3BvZF9idWlsZGVyX3By b3AoYnVpbGRlciwgU1BBX0ZPUk1BVF9WSURFT19tb2RpZmllciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU1BBX1BPRF9QUk9QX0ZMQUdfTUFOREFUT1JZIHwgU1BBX1BPRF9QUk9QX0ZM QUdfRE9OVF9GSVhBVEUpOworICAgICAgICBzcGFfcG9kX2J1aWxkZXJfcHVzaF9jaG9pY2UoYnVp bGRlciwgJm1vZGlmaWVyX2ZyYW1lLCBTUEFfQ0hPSUNFX0VudW0sIDApOworCisgICAgICAgIC8v IEEgY2hvaWNlIFBPRCBjb25zaXN0cyBvZiBhICJkZWZhdWx0IiB2YWx1ZSBmb2xsb3dlZCBieSB0 aGUgbGlzdCBvZgorICAgICAgICAvLyBhbGwgcG9zc2libGUgdmFsdWVzIChodHRwczovL2RvY3Mu cGlwZXdpcmUub3JnL3BhZ2Vfc3BhX3BvZC5odG1sKQorICAgICAgICAvLyBUaGlzIGlzIHdoeSB3 ZSBuZWVkIHRvIGFkZCBvbmUgb2YgdGhlIG1vZGlmaWVycyB0d2ljZS4KKyAgICAgICAgc3BhX3Bv ZF9idWlsZGVyX2xvbmcoYnVpbGRlciwgbW9kaWZpZXJzWzBdKTsKKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBuX21vZGlmaWVyczsgaSsrKQorICAgICAgICAgICAgc3BhX3BvZF9idWlsZGVy X2xvbmcoYnVpbGRlciwgbW9kaWZpZXJzW2ldKTsKKworICAgICAgICBzcGFfcG9kX2J1aWxkZXJf cG9wKGJ1aWxkZXIsICZtb2RpZmllcl9mcmFtZSk7CisgICAgfQorICAgIHJldHVybiBzcGFfcG9k X2J1aWxkZXJfcG9wKGJ1aWxkZXIsICZmb3JtYXRfZnJhbWUpOworfQorCitzdGF0aWMgaW50IHBs YXlfcGlwZXdpcmVfc3RyZWFtKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIGludCByZXQ7 CisgICAgdWludDhfdCBidWZmZXJbNDA5Nl07CisgICAgc3RydWN0IHNwYV9wb2RfYnVpbGRlciBw b2RfYnVpbGRlcjsKKyAgICBjb25zdCBzdHJ1Y3Qgc3BhX3BvZCAqKnBhcmFtczsKKyAgICB1aW50 MzJfdCBuX3BhcmFtczsKKworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+ cHJpdjsKKworICAgIHB3X2luaXQoTlVMTCwgTlVMTCk7CisgICAgcHdfY3R4LT5wd19pbml0X2Nh bGxlZCA9IDE7CisKKyAgICBwd19jdHgtPnRocmVhZF9sb29wID0KKyAgICAgICAgcHdfdGhyZWFk X2xvb3BfbmV3KCJ0aHJlYWQgbG9vcCIsIE5VTEwpOworICAgIGlmICghcHdfY3R4LT50aHJlYWRf bG9vcCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJwd190aHJlYWRfbG9v cF9uZXcgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9 CisKKyAgICBwd19jdHgtPmNvbnRleHQgPQorICAgICAgICBwd19jb250ZXh0X25ldyhwd190aHJl YWRfbG9vcF9nZXRfbG9vcChwd19jdHgtPnRocmVhZF9sb29wKSwgTlVMTCwgMCk7CisgICAgaWYg KCFwd19jdHgtPmNvbnRleHQpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi cHdfY29udGV4dF9uZXcgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0p OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHB3X3RocmVhZF9sb29wX3N0 YXJ0KHB3X2N0eC0+dGhyZWFkX2xvb3ApIDwgMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJwd190aHJlYWRfbG9vcF9zdGFydCBmYWlsZWRcbiIpOworICAgICAgICByZXQg PSBBVkVSUk9SKEVGQVVMVCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBwd190 aHJlYWRfbG9vcF9sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOworCisgICAgLy8gQ29yZQorICAg IHB3X2N0eC0+Y29yZSA9CisgICAgICAgIHB3X2NvbnRleHRfY29ubmVjdF9mZChwd19jdHgtPmNv bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bChwd19jdHgtPnBpcGV3 aXJlX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwgMCk7CisgICAgaWYgKCFwd19jdHgtPmNvcmUpIHsKKyAgICAgICAgcmV0ID0gQVZF UlJPUihlcnJubyk7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInB3X2NvbnRl eHRfY29ubmVjdF9mZCBmYWlsZWRcbiIpOworICAgICAgICBwd190aHJlYWRfbG9vcF91bmxvY2so cHdfY3R4LT50aHJlYWRfbG9vcCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBw d19jb3JlX2FkZF9saXN0ZW5lcihwd19jdHgtPmNvcmUsICZwd19jdHgtPmNvcmVfbGlzdGVuZXIs ICZjb3JlX2V2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHggLyogdXNlcl9kYXRh ICovKTsKKworICAgIC8vIFN0cmVhbQorICAgIHB3X2N0eC0+c3RyZWFtID0gcHdfc3RyZWFtX25l dygKKyAgICAgICAgcHdfY3R4LT5jb3JlLCAid2F5bGFuZCBncmFiIiwKKyAgICAgICAgcHdfcHJv cGVydGllc19uZXcoUFdfS0VZX01FRElBX1RZUEUsICJWaWRlbyIsIFBXX0tFWV9NRURJQV9DQVRF R09SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhcHR1cmUiLCBQV19LRVlfTUVESUFf Uk9MRSwgIlNjcmVlbiIsIE5VTEwpKTsKKworICAgIGlmICghcHdfY3R4LT5zdHJlYW0pIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHdfc3RyZWFtX25ldyBmYWlsZWRcbiIp OworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIHB3X3RocmVhZF9sb29w X3VubG9jayhwd19jdHgtPnRocmVhZF9sb29wKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0K KworICAgIHB3X3N0cmVhbV9hZGRfbGlzdGVuZXIocHdfY3R4LT5zdHJlYW0sICZwd19jdHgtPnN0 cmVhbV9saXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1fZXZlbnRz LCBjdHggLyogdXNlcl9kYXRhICovKTsKKworICAgIC8vIFN0cmVhbSBwYXJhbWV0ZXJzCisgICAg cG9kX2J1aWxkZXIgPSBTUEFfUE9EX0JVSUxERVJfSU5JVChidWZmZXIsIHNpemVvZihidWZmZXIp KTsKKyAgICBwYXJhbXMgPSBhdl9tYWxsb2N6KDIgKiBGRl9BUlJBWV9FTEVNUyhwaXBld2lyZWdy YWJfZm9ybWF0cykgKiBzaXplb2YoKnBhcmFtcykpOworICAgIG5fcGFyYW1zID0gMDsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocGlwZXdpcmVncmFiX2Zvcm1hdHMp OyBpKyspIHsKKyAgICAgICAgaWYgKHB3X2N0eC0+ZW5hYmxlX2RtYWJ1ZikKKyAgICAgICAgICAg IHBhcmFtc1tuX3BhcmFtcysrXSA9IGJ1aWxkX2Zvcm1hdChwd19jdHgsICZwb2RfYnVpbGRlciwg cGlwZXdpcmVncmFiX2Zvcm1hdHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGlwZXdpcmVncmFiX2RlZmF1bHRfbW9kaWZpZXJzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGX0FSUkFZX0VMRU1TKHBpcGV3 aXJlZ3JhYl9kZWZhdWx0X21vZGlmaWVycykpOworICAgICAgICBwYXJhbXNbbl9wYXJhbXMrK10g PSBidWlsZF9mb3JtYXQocHdfY3R4LCAmcG9kX2J1aWxkZXIsIHBpcGV3aXJlZ3JhYl9mb3JtYXRz W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7 CisgICAgfQorCisgICAgcmV0ID0gcHdfc3RyZWFtX2Nvbm5lY3QoCisgICAgICAgIHB3X2N0eC0+ c3RyZWFtLCBQV19ESVJFQ1RJT05fSU5QVVQsICh1aW50MzJfdClwd19jdHgtPnBpcGV3aXJlX25v ZGUsCisgICAgICAgIFBXX1NUUkVBTV9GTEFHX0FVVE9DT05ORUNUIHwgUFdfU1RSRUFNX0ZMQUdf TUFQX0JVRkZFUlMsIHBhcmFtcywgbl9wYXJhbXMpOworICAgIGlmIChyZXQgIT0gMCkgeworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJwd19zdHJlYW1fY29ubmVjdCBmYWlsZWRc biIpOworICAgICAgICBwd190aHJlYWRfbG9vcF91bmxvY2socHdfY3R4LT50aHJlYWRfbG9vcCk7 CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5G TywgIlN0YXJ0aW5nIHNjcmVlbiBjYXB0dXJlIC4uLlxuIik7CisgICAgcHdfdGhyZWFkX2xvb3Bf dW5sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgIHJldHVybiAwOworCitmYWlsOgorICAg IGlmIChwd19jdHgtPmNvcmUpIHsKKyAgICAgICAgcHdfY29yZV9kaXNjb25uZWN0KHB3X2N0eC0+ Y29yZSk7CisgICAgICAgIHB3X2N0eC0+Y29yZSA9IE5VTEw7CisgICAgfQorICAgIGlmIChwd19j dHgtPmNvbnRleHQpIHsKKyAgICAgICAgcHdfY29udGV4dF9kZXN0cm95KHB3X2N0eC0+Y29udGV4 dCk7CisgICAgICAgIHB3X2N0eC0+Y29udGV4dCA9IE5VTEw7CisgICAgfQorICAgIGlmIChwd19j dHgtPnRocmVhZF9sb29wKSB7CisgICAgICAgIHB3X3RocmVhZF9sb29wX2Rlc3Ryb3kocHdfY3R4 LT50aHJlYWRfbG9vcCk7CisgICAgICAgIHB3X2N0eC0+dGhyZWFkX2xvb3AgPSBOVUxMOworICAg IH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRhbF9vcGVuX3BpcGV3 aXJlX3JlbW90ZShBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIGlu dCBmZDsKKyAgICBzZF9idXNfbWVzc2FnZSAqcmVwbHkgPSBOVUxMOworICAgIHNkX2J1c19lcnJv ciBlcnIgPSBTRF9CVVNfRVJST1JfTlVMTDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19j dHggPSBjdHgtPnByaXY7CisKKyAgICBjb25zdCBjaGFyICptZXRob2RfbmFtZSA9ICJPcGVuUGlw ZVdpcmVSZW1vdGUiOworICAgIHJldCA9IHNkX2J1c19jYWxsX21ldGhvZChwd19jdHgtPmNvbm5l Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPQkpFQ1RfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rf bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVyciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnJlcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2F7 c3Z9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdfY3R4LT5zZXNzaW9uX2hhbmRs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgaWYgKHJldCA8IDApIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkNhbGwg dG8gREJ1cyBtZXRob2QgJyVzJyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgbWV0aG9k X25hbWUsIGVyci5tZXNzYWdlKTsKKyAgICAgICAgc2RfYnVzX2Vycm9yX2ZyZWUoJmVycik7Cisg ICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byBvcGVuIFBpcGVXaXJlIHJl bW90ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmV0ID0gc2RfYnVzX21lc3Nh Z2VfcmVhZChyZXBseSwgImgiLCAmZmQpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHBv cnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byByZWFkIGZpbGUgZGVzY3JpcHRvciIpOwor ICAgICAgICByZXR1cm47CisgICAgfSBlbHNlCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19E RUJVRywgIlBpcGVXaXJlIGZkOiAlZFxuIiwgZmQpOworCisgICAgcHdfY3R4LT5waXBld2lyZV9m ZCA9IGZkOworICAgIGF0b21pY19zdG9yZSgmcHdfY3R4LT5kYnVzX2V2ZW50X2xvb3BfcnVubmlu ZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRidXNfc2lnbmFsX2RhdGFfZnJlZShzdHJ1Y3QgRGJ1 c1NpZ25hbERhdGEgKmRidXNfc2lnbmFsX2RhdGEpCit7CisgICAgc2RfYnVzX3Nsb3RfdW5yZWYo ZGJ1c19zaWduYWxfZGF0YS0+c2xvdCk7CisgICAgYXZfZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsK K30KKworc3RhdGljIGludCBvbl9zdGFydF9yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjaygKKyAg ICBzZF9idXNfbWVzc2FnZSAqbWVzc2FnZSwgdm9pZCAqdXNlcl9kYXRhLCBzZF9idXNfZXJyb3Ig KmVycikKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IHJlc3BvbnNlOworICAgIHVpbnQz Ml90IG5vZGU7CisgICAgc3RydWN0IERidXNTaWduYWxEYXRhICpkYnVzX3NpZ25hbF9kYXRhID0g dXNlcl9kYXRhOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gZGJ1c19zaWduYWxfZGF0YS0+ Y3R4OworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAg IGRidXNfc2lnbmFsX2RhdGFfZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsKKworICAgIHJldCA9IHNk X2J1c19tZXNzYWdlX3JlYWQobWVzc2FnZSwgInUiLCAmcmVzcG9uc2UpOworICAgIGlmIChyZXQg PCAwKSB7CisgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byByZWFkIERC dXMgcmVzcG9uc2UiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzcG9u c2UgIT0gMCkgeworICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCBBVkVSUk9SKEVBQ0NFUyksCisg ICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHN0YXJ0IHNjcmVlbiBjYXN0LCBkZW5pZWQg b3IgY2FuY2VsbGVkIGJ5IHVzZXIiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg IHNkX2J1c19tZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNzYWdlLCBTRF9CVVNfVFlQRV9BUlJB WSwgIntzdn0iKTsKKyAgICBzZF9idXNfbWVzc2FnZV9lbnRlcl9jb250YWluZXIobWVzc2FnZSwg U0RfQlVTX1RZUEVfRElDVF9FTlRSWSwgInN2Iik7CisgICAgc2RfYnVzX21lc3NhZ2Vfc2tpcCht ZXNzYWdlLCAicyIpOworICAgIHNkX2J1c19tZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNzYWdl LCBTRF9CVVNfVFlQRV9WQVJJQU5ULCAiYSh1YXtzdn0pIik7CisgICAgc2RfYnVzX21lc3NhZ2Vf ZW50ZXJfY29udGFpbmVyKG1lc3NhZ2UsIFNEX0JVU19UWVBFX0FSUkFZLCAiKHVhe3N2fSkiKTsK KyAgICBzZF9idXNfbWVzc2FnZV9lbnRlcl9jb250YWluZXIobWVzc2FnZSwgU0RfQlVTX1RZUEVf U1RSVUNULCAidWF7c3Z9Iik7CisKKyAgICByZXQgPSBzZF9idXNfbWVzc2FnZV9yZWFkKG1lc3Nh Z2UsICJ1IiwgJm5vZGUpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHBvcnRhbF9hYm9y dChjdHgsIHJldCwgIkZhaWxlZCB0byByZWFkIFBpcGVXaXJlIG5vZGU6ICVzIik7CisgICAgICAg IHJldHVybiAtMTsKKyAgICB9CisgICAgcHdfY3R4LT5waXBld2lyZV9ub2RlID0gbm9kZTsKKwor ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlBpcGVXaXJlIG5vZGU6ICUiUFJJdTY0Ilxu IiwgcHdfY3R4LT5waXBld2lyZV9ub2RlKTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywg Ik1vbml0b3Igc2VsZWN0ZWQsIHNldHRpbmcgdXAgc2NyZWVuIGNhc3RcblxuIik7CisKKyAgICBw b3J0YWxfb3Blbl9waXBld2lyZV9yZW1vdGUoY3R4KTsKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgcG9ydGFsX3N0YXJ0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIGludCBy ZXQ7CisgICAgc2RfYnVzX2Vycm9yIGVyciA9IFNEX0JVU19FUlJPUl9OVUxMOworICAgIFBpcGV3 aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIGNvbnN0IGNoYXIgKm1l dGhvZF9uYW1lID0gIlN0YXJ0IjsKKyAgICBjb25zdCBjaGFyICpyZXF1ZXN0X3Rva2VuID0gInBp cGV3aXJlZ3JhYlN0YXJ0IjsKKworICAgIHJldCA9IHN1YnNjcmliZV90b19zaWduYWwoY3R4LCBw d19jdHgtPnNlbmRlcl9uYW1lLCByZXF1ZXN0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb25fc3RhcnRfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2spOworICAgIGlmIChy ZXQgPCAwKSB7CisgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byBzdWJz Y3JpYmUgdG8gREJ1cyBzaWduYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiQXNraW5nIGZvciBtb25pdG9y4oCmXG4iKTsKKyAgICBy ZXQgPSBzZF9idXNfY2FsbF9tZXRob2QocHdfY3R4LT5jb25uZWN0aW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBERVNUSU5BVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT0JKRUNUX1BBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX25hbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvc2F7c3Z9IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGVfdG9rZW4iLCAicyIsIHJlcXVlc3RfdG9rZW4p OworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwK KyAgICAgICAgICAgICAgICJDYWxsIHRvIERCdXMgbWV0aG9kICclcycgZmFpbGVkOiAlc1xuIiwK KyAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLCBlcnIubWVzc2FnZSk7CisgICAgICAgIHNkX2J1 c19lcnJvcl9mcmVlKCZlcnIpOworICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWls ZWQgdG8gc3RhcnQgc2NyZWVuIGNhc3Qgc2Vzc2lvbiIpOworICAgIH0KK30KKworc3RhdGljIGlu dCBvbl9zZWxlY3Rfc291cmNlc19yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjaygKKyAgICBzZF9i dXNfbWVzc2FnZSAqbWVzc2FnZSwgdm9pZCAqdXNlcl9kYXRhLCBzZF9idXNfZXJyb3IgKmVycikK K3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IHJlc3BvbnNlOworICAgIHN0cnVjdCBEYnVz U2lnbmFsRGF0YSAqZGJ1c19zaWduYWxfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGRidXNfc2lnbmFsX2RhdGEtPmN0eDsKKworICAgIGRidXNfc2lnbmFsX2Rh dGFfZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsKKworICAgIHJldCA9IHNkX2J1c19tZXNzYWdlX3Jl YWQobWVzc2FnZSwgInUiLCAmcmVzcG9uc2UpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAg IHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byByZWFkIERCdXMgcmVzcG9uc2UiKTsK KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzcG9uc2UgIT0gMCkgeworICAg ICAgICBwb3J0YWxfYWJvcnQoY3R4LCBBVkVSUk9SKEVBQ0NFUyksCisgICAgICAgICAgICAgICAg ICAgICAiRmFpbGVkIHRvIHNlbGVjdCBzY3JlZW4gY2FzdCBzb3VyY2VzIik7CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisKKyAgICBwb3J0YWxfc3RhcnQoY3R4KTsKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgcG9ydGFsX3NlbGVjdF9zb3VyY2VzKEFWRmlsdGVyQ29udGV4dCAq Y3R4KQoreworICAgIGludCByZXQ7CisgICAgdWludDMyX3QgY3Vyc29yX21vZGU7CisgICAgc2Rf YnVzX2Vycm9yIGVyciA9IFNEX0JVU19FUlJPUl9OVUxMOworICAgIFBpcGV3aXJlR3JhYkNvbnRl eHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIGNvbnN0IGNoYXIgKm1ldGhvZF9uYW1lID0g IlNlbGVjdFNvdXJjZXMiOworICAgIGNvbnN0IGNoYXIgKnJlcXVlc3RfdG9rZW4gPSAicGlwZXdp cmVncmFiU2VsZWN0U291cmNlcyI7CisKKyAgICByZXQgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0 eCwgcHdfY3R4LT5zZW5kZXJfbmFtZSwgcmVxdWVzdF90b2tlbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9uX3NlbGVjdF9zb3VyY2VzX3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNr KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJG YWlsZWQgdG8gc3Vic2NyaWJlIHRvIERCdXMgc2lnbmFsIik7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICBpZiAoKHB3X2N0eC0+YXZhaWxhYmxlX2N1cnNvcl9tb2RlcyAmIFBPUlRBTF9D VVJTT1JfTU9ERV9FTUJFRERFRCkKKyAgICAgICAgICAgICAmJiBwd19jdHgtPmRyYXdfbW91c2Up CisgICAgICAgIGN1cnNvcl9tb2RlID0gUE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEOworICAg IGVsc2UKKyAgICAgICAgY3Vyc29yX21vZGUgPSBQT1JUQUxfQ1VSU09SX01PREVfSElEREVOOwor CisgICAgcmV0ID0gc2RfYnVzX2NhbGxfbWV0aG9kKHB3X2N0eC0+Y29ubmVjdGlvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgREVTVElOQVRJT04sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9CSkVDVF9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRF UkZBQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2F7c3Z9IiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGVz IiwgInUiLCBwd19jdHgtPmNhcHR1cmVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIm11bHRpcGxlIiwgImIiLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFu ZGxlX3Rva2VuIiwgInMiLCByZXF1ZXN0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiY3Vyc29yX21vZGUiLCAidSIsIGN1cnNvcl9tb2RlKTsKKyAgICBpZiAocmV0IDwgMCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAiQ2Fs bCB0byBEQnVzIG1ldGhvZCAnJXMnIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICBtZXRo b2RfbmFtZSwgZXJyLm1lc3NhZ2UpOworICAgICAgICBzZF9idXNfZXJyb3JfZnJlZSgmZXJyKTsK KyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgcmV0LCAiRmFpbGVkIHRvIHNlbGVjdCBzb3VyY2Vz IGZvciBzY3JlZW4gY2FzdCBzZXNzaW9uIik7CisgICAgfQorfQorCitzdGF0aWMgaW50IG9uX2Ny ZWF0ZV9zZXNzaW9uX3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKAorICAgIHNkX2J1c19tZXNz YWdlICptZXNzYWdlLCB2b2lkICp1c2VyX2RhdGEsIHNkX2J1c19lcnJvciAqZXJyKQoreworICAg IGludCByZXQ7CisgICAgdWludDMyX3QgcmVzcG9uc2U7CisgICAgY29uc3QgY2hhciAqc2Vzc2lv bl9oYW5kbGU7CisgICAgY29uc3QgY2hhciAqdHlwZTsKKyAgICBzdHJ1Y3QgRGJ1c1NpZ25hbERh dGEgKmRidXNfc2lnbmFsX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpj dHggPSBkYnVzX3NpZ25hbF9kYXRhLT5jdHg7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdf Y3R4ID0gY3R4LT5wcml2OworCisgICAgZGJ1c19zaWduYWxfZGF0YV9mcmVlKGRidXNfc2lnbmFs X2RhdGEpOworCisgICAgcmV0ID0gc2RfYnVzX21lc3NhZ2VfcmVhZChtZXNzYWdlLCAidSIsICZy ZXNwb25zZSk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwg cmV0LCAiRmFpbGVkIHRvIHJlYWQgREJ1cyByZXNwb25zZSIpOworICAgICAgICByZXR1cm4gLTE7 CisgICAgfQorICAgIGlmIChyZXNwb25zZSAhPSAwKSB7CisgICAgICAgIHBvcnRhbF9hYm9ydChj dHgsIEFWRVJST1IoRUFDQ0VTKSwKKyAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3Jl YXRlIHNjcmVlbiBjYXN0IHNlc3Npb24iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAgIHNkX2J1c19tZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNzYWdlLCBTRF9CVVNfVFlQRV9B UlJBWSwgIntzdn0iKTsKKyAgICBzZF9idXNfbWVzc2FnZV9lbnRlcl9jb250YWluZXIobWVzc2Fn ZSwgU0RfQlVTX1RZUEVfRElDVF9FTlRSWSwgInN2Iik7CisgICAgc2RfYnVzX21lc3NhZ2Vfc2tp cChtZXNzYWdlLCAicyIpOworICAgIC8vIFRoZSBYREcgRGVza3RvcCBQb3J0YWwgZG9jdW1lbnRh dGlvbiBzYXlzIHRoYXQgdGhlIHR5cGUgb2YgYHNlc3Npb25faGFuZGxlYAorICAgIC8vIGlzICJv IiAob2JqZWN0IHBhdGgpLCBidXQgYXQgbGVhc3Qgb24gc29tZSBzeXN0ZW1zIGl0J3MgYWN0dWFs bHkgInMiIChzdHJpbmcpLAorICAgIC8vIHNvIHdlIG5lZWQgdG8gY2hlY2sgdG8gbWFrZSBzdXJl IHdlJ3JlIHVzaW5nIHRoZSByaWdodCBvbmUuCisgICAgc2RfYnVzX21lc3NhZ2VfcGVla190eXBl KG1lc3NhZ2UsIE5VTEwsICZ0eXBlKTsKKyAgICByZXQgPSBzZF9idXNfbWVzc2FnZV9yZWFkKG1l c3NhZ2UsICJ2IiwgdHlwZSwgJnNlc3Npb25faGFuZGxlKTsKKyAgICBpZiAocmV0IDwgMCkgewor ICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWlsZWQgdG8gcmVhZCBzZXNzaW9uIGhh bmRsZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHB3X2N0eC0+c2Vzc2lvbl9o YW5kbGUgPSBhdl9zdHJkdXAoc2Vzc2lvbl9oYW5kbGUpOworCisgICAgcG9ydGFsX3NlbGVjdF9z b3VyY2VzKGN0eCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogRnVuY3Rpb24gdG8gY3Jl YXRlIGEgc2NyZWVuIGNhc3Qgc2Vzc2lvbgorICoKKyAqIEBwYXJhbSBjdHgKKyAqLworc3RhdGlj IHZvaWQgcG9ydGFsX2NyZWF0ZV9zZXNzaW9uKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAg IGludCByZXQ7CisgICAgc2RfYnVzX2Vycm9yIGVyciA9IFNEX0JVU19FUlJPUl9OVUxMOworICAg IFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIGNvbnN0IGNo YXIgKm1ldGhvZF9uYW1lID0gIkNyZWF0ZVNlc3Npb24iOworICAgIGNvbnN0IGNoYXIgKnJlcXVl c3RfdG9rZW4gPSAicGlwZXdpcmVncmFiQ3JlYXRlU2Vzc2lvbiI7CisKKyAgICByZXQgPSBzdWJz Y3JpYmVfdG9fc2lnbmFsKGN0eCwgcHdfY3R4LT5zZW5kZXJfbmFtZSwgcmVxdWVzdF90b2tlbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uX2NyZWF0ZV9zZXNzaW9uX3Jlc3BvbnNl X3JlY2VpdmVkX2NhbGxiYWNrKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBwb3J0YWxf YWJvcnQoY3R4LCByZXQsICJGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIERCdXMgc2lnbmFsIik7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXQgPSBzZF9idXNfY2FsbF9tZXRob2QocHdf Y3R4LT5jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVNUSU5BVElP TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0JKRUNUX1BBVEgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWV0aG9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJhe3N2fSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJoYW5kbGVfdG9rZW4iLCAicyIsIHJlcXVlc3RfdG9rZW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uX2hhbmRsZV90b2tlbiIsICJzIiwg InBpcGV3aXJlZ3JhYiIpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJDYWxsIHRvIERCdXMgbWV0aG9kICclcycg ZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLCBlcnIubWVzc2FnZSk7 CisgICAgICAgIHNkX2J1c19lcnJvcl9mcmVlKCZlcnIpOworICAgICAgICBwb3J0YWxfYWJvcnQo Y3R4LCByZXQsICJGYWlsZWQgdG8gY3JlYXRlIHNjcmVlbiBjYXN0IHNlc3Npb24iKTsKKyAgICB9 Cit9CisKKy8qKgorICogSGVscGVyIGZ1bmN0aW9uOiBnZXQgYXZhaWxhYmxlIGN1cnNvciBtb2Rl cyBhbmQgdXBkYXRlIHRoZQorICogICAgICAgICAgICAgICAgICBQaXBld2lyZUdyYWJDb250ZXh0 IGFjY29yZGluZ2x5CisgKgorICogQHBhcmFtIGN0eAorICovCitzdGF0aWMgaW50IHBvcnRhbF91 cGRhdGVfYXZhaWxhYmxlX2N1cnNvcl9tb2RlcyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAg ICBpbnQgcmV0OworICAgIHNkX2J1c19lcnJvciBlcnIgPSBTRF9CVVNfRVJST1JfTlVMTDsKKyAg ICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7CisKKyAgICByZXQgPSBz ZF9idXNfZ2V0X3Byb3BlcnR5X3RyaXZpYWwocHdfY3R4LT5jb25uZWN0aW9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVNUSU5BVElPTiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT0JKRUNUX1BBVEgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkF2YWlsYWJsZUN1cnNvck1vZGVzIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4 LT5hdmFpbGFibGVfY3Vyc29yX21vZGVzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkNvdWxkbid0IHJldHJpZXZl IGF2YWlsYWJsZSBjdXJzb3IgbW9kZXM6ICVzXG4iLCBlcnIubWVzc2FnZSk7CisKKyAgICBzZF9i dXNfZXJyb3JfZnJlZSgmZXJyKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNy ZWF0ZV9kYnVzX2Nvbm5lY3Rpb24oQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgY29uc3Qg Y2hhciAqYXV4OworICAgIGludCByZXQ7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4 ID0gY3R4LT5wcml2OworCisgICAgcmV0ID0gc2RfYnVzX29wZW5fdXNlcigmcHdfY3R4LT5jb25u ZWN0aW9uKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsCisgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBEQnVzIGNvbm5lY3Rpb246 ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisg ICAgcmV0ID0gc2RfYnVzX2dldF91bmlxdWVfbmFtZShwd19jdHgtPmNvbm5lY3Rpb24sICZhdXgp OworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwK KyAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZ2V0IGJ1cyBuYW1lOiAlc1xuIiwgc3RyZXJyb3Io LXJldCkpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICAvLyBGcm9tIGh0dHBzOi8v ZmxhdHBhay5naXRodWIuaW8veGRnLWRlc2t0b3AtcG9ydGFsL2RvY3MvZG9jLW9yZy5mcmVlZGVz a3RvcC5wb3J0YWwuUmVxdWVzdC5odG1sOgorICAgIC8vICJTRU5ERVIgaXMgdGhlIGNhbGxlcidz IHVuaXF1ZSBuYW1lLCB3aXRoIHRoZSBpbml0aWFsICc6JyByZW1vdmVkIGFuZCBhbGwgJy4nIHJl cGxhY2VkIGJ5ICdfJyIKKyAgICBwd19jdHgtPnNlbmRlcl9uYW1lID0gYXZfc3RyaXJlcGxhY2Uo YXV4ICsgMSwgIi4iLCAiXyIpOworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywKKyAgICAg ICAgICAgIkRCdXMgY29ubmVjdGlvbiBjcmVhdGVkIChzZW5kZXIgbmFtZTogJXMpXG4iLCBwd19j dHgtPnNlbmRlcl9uYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKioKKyAqIFVzZSBYREcg RGVza3RvcCBQb3J0YWwncyBTY3JlZW5DYXN0IGludGVyZmFjZSB0byBvcGVuIGEgZmlsZSBkZXNj cmlwdG9yIHRoYXQKKyAqIGNhbiBiZSB1c2VkIGJ5IFBpcGVXaXJlIHRvIGFjY2VzcyB0aGUgc2Ny ZWVuIGNhc3Qgc3RyZWFtcy4KKyAqIChodHRwczovL2ZsYXRwYWsuZ2l0aHViLmlvL3hkZy1kZXNr dG9wLXBvcnRhbC9kb2NzL2RvYy1vcmcuZnJlZWRlc2t0b3AucG9ydGFsLlNjcmVlbkNhc3QuaHRt bCkKKyAqCisgKiBAcGFyYW0gY3R4CisgKi8KK3N0YXRpYyBpbnQgcG9ydGFsX2luaXRfc2NyZWVu Y2FzdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIFBpcGV3aXJl R3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIHJldCA9IGNyZWF0ZV9kYnVz X2Nvbm5lY3Rpb24oY3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHJldCA9IHBvcnRhbF91cGRhdGVfYXZhaWxhYmxlX2N1cnNvcl9tb2RlcyhjdHgpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcG9ydGFsX2NyZWF0 ZV9zZXNzaW9uKGN0eCk7CisgICAgaWYgKHB3X2N0eC0+cG9ydGFsX2Vycm9yKQorICAgICAgICBy ZXR1cm4gcHdfY3R4LT5wb3J0YWxfZXJyb3I7CisKKyAgICAvLyBUaGUgZXZlbnQgbG9vcCB3aWxs IHJ1biB1bnRpbCBpdCdzIHN0b3BwZWQgYnkgcG9ydGFsX29wZW5fcGlwZXdpcmVfcmVtb3RlIChp ZgorICAgIC8vIGFsbCBEQnVzIG1ldGhvZCBjYWxscyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5KSBv ciBwb3J0YWxfYWJvcnQgKGluIGNhc2Ugb2YgZXJyb3IpLgorICAgIC8vIEluIHRoZSBsYXR0ZXIg Y2FzZSwgcHdfY3R4LT5wb3J0YWxfZXJyb3IgZ2V0cyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS4K KyAgICBhdG9taWNfc3RvcmUoJnB3X2N0eC0+ZGJ1c19ldmVudF9sb29wX3J1bm5pbmcsIDEpOwor ICAgIHdoaWxlKGF0b21pY19sb2FkKCZwd19jdHgtPmRidXNfZXZlbnRfbG9vcF9ydW5uaW5nKSkg eworICAgICAgICByZXQgPSBzZF9idXNfcHJvY2Vzcyhwd19jdHgtPmNvbm5lY3Rpb24sIE5VTEwp OworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyBEQnVzIGV2ZW50 OiAlc1xuIiwgc3RyZXJyb3IoLXJldCkpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg ICAgfQorCisgICAgICAgIHJldCA9IHNkX2J1c193YWl0KHB3X2N0eC0+Y29ubmVjdGlvbiwgMjAw MCk7CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIHdhaXRpbmcgb24gYnVz OiAlc1xuIiwgc3RyZXJyb3IoLXJldCkpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg ICAgfQorICAgIH0KKyAgICByZXR1cm4gcHdfY3R4LT5wb3J0YWxfZXJyb3I7Cit9CisKK3N0YXRp YyBhdl9jb2xkIGludCBwaXBld2lyZWdyYWJfaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sK KyAgICBpbnQgcmV0OworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJp djsKKyAgICBpZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is CisgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YVxuIik7CisgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgYXRvbWljX2luaXQoJnB3 X2N0eC0+ZGJ1c19ldmVudF9sb29wX3J1bm5pbmcsIDApOworICAgIGF0b21pY19pbml0KCZwd19j dHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX292ZXIsIDApOworICAgIHB0aHJlYWRfY29uZF9p bml0KCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRfdmFyLCBOVUxMKTsKKyAg ICBwdGhyZWFkX211dGV4X2luaXQoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fbXV0 ZXgsIE5VTEwpOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmcHdfY3R4LT5jdXJyZW50X2ZyYW1l X211dGV4LCBOVUxMKTsKKworICAgIGlmIChwd19jdHgtPnBpcGV3aXJlX2ZkID09IDApIHsKKyAg ICAgICAgcmV0ID0gcG9ydGFsX2luaXRfc2NyZWVuY2FzdChjdHgpOworICAgICAgICBpZiAocmV0 ICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNvdWxkbid0 IGluaXQgc2NyZWVuIGNhc3RcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg fQorICAgIH0KKworICAgIHJldCA9IHBsYXlfcGlwZXdpcmVfc3RyZWFtKGN0eCk7CisgICAgaWYg KHJldCAhPSAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLy8gV2FpdCB1bnRpbCBQaXBl V2lyZSBpbml0aWFsaXphdGlvbiBpcyBvdmVyCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19j dHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX211dGV4KTsKKyAgICB3aGlsZSAoIWF0b21pY19s b2FkKCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX292ZXIpKSB7CisgICAgICAgIHB0 aHJlYWRfY29uZF93YWl0KCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRfdmFy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXph dGlvbl9tdXRleCk7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPnBp cGV3aXJlX2luaXRpYWxpemF0aW9uX211dGV4KTsKKworICAgIHJldHVybiBwd19jdHgtPnBpcGV3 aXJlX2Vycm9yOworfQorCitzdGF0aWMgdm9pZCBwaXBld2lyZWdyYWJfdW5pbml0KEFWRmlsdGVy Q29udGV4dCAqY3R4KQoreworICAgIGludCByZXQ7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAq cHdfY3R4ID0gY3R4LT5wcml2OworICAgIGlmICghcHdfY3R4KQorICAgICAgICByZXR1cm47CisK KyAgICAvLyBQaXBlV2lyZSBjbGVhbnVwCisgICAgaWYgKHB3X2N0eC0+dGhyZWFkX2xvb3ApIHsK KyAgICAgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3X2N0eC0+dGhyZWFkX2xvb3AsIGZhbHNl KTsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOwor ICAgICAgICBwd190aHJlYWRfbG9vcF9zdG9wKHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgIH0K KyAgICBpZiAocHdfY3R4LT5zdHJlYW0pIHsKKyAgICAgICAgcHdfc3RyZWFtX2Rpc2Nvbm5lY3Qo cHdfY3R4LT5zdHJlYW0pOworICAgICAgICBwd19zdHJlYW1fZGVzdHJveShwd19jdHgtPnN0cmVh bSk7CisgICAgICAgIHB3X2N0eC0+c3RyZWFtID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHB3X2N0 eC0+Y29yZSl7CisgICAgICAgIHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOworICAg ICAgICBwd19jdHgtPmNvcmUgPSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5jb250ZXh0 KSB7CisgICAgICAgIHB3X2NvbnRleHRfZGVzdHJveShwd19jdHgtPmNvbnRleHQpOworICAgICAg ICBwd19jdHgtPmNvbnRleHQgPSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT50aHJlYWRf bG9vcCkgeworICAgICAgICBwd190aHJlYWRfbG9vcF9kZXN0cm95KHB3X2N0eC0+dGhyZWFkX2xv b3ApOworICAgICAgICBwd19jdHgtPnRocmVhZF9sb29wID0gTlVMTDsKKyAgICB9CisgICAgaWYg KHB3X2N0eC0+cHdfaW5pdF9jYWxsZWQpIHsKKyAgICAgICAgcHdfZGVpbml0KCk7CisgICAgICAg IHB3X2N0eC0+cHdfaW5pdF9jYWxsZWQgPSAwOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5waXBl d2lyZV9mZCA+IDApIHsKKyAgICAgICAgY2xvc2UocHdfY3R4LT5waXBld2lyZV9mZCk7CisgICAg ICAgIHB3X2N0eC0+cGlwZXdpcmVfZmQgPSAwOworICAgIH0KKyAgICBhdl9mcmFtZV9mcmVlKCZw d19jdHgtPmN1cnJlbnRfZnJhbWUpOworICAgIGF2X2J1ZmZlcl91bnJlZigmcHdfY3R4LT5od19m cmFtZXNfcmVmKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJnB3X2N0eC0+aHdfZGV2aWNlX3JlZik7 CisKKyAgICAvLyBEQnVzIGNsZWFudXAKKyAgICBpZiAocHdfY3R4LT5zZXNzaW9uX2hhbmRsZSkg eworICAgICAgICByZXQgPSBzZF9idXNfY2FsbF9tZXRob2QocHdfY3R4LT5jb25uZWN0aW9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVTVElOQVRJT04sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwd19jdHgtPnNlc3Npb25faGFuZGxlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuU2Vzc2lvbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xvc2UiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmIChyZXQg PCAwKQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLAorICAgICAgICAgICAg ICAgICAgICJGYWlsZWQgdG8gY2xvc2UgcG9ydGFsIHNlc3Npb246ICVzXG4iLCBzdHJlcnJvcigt cmV0KSk7CisKKyAgICAgICAgYXZfZnJlZXAoJnB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUpOworICAg IH0KKyAgICBzZF9idXNfZmx1c2hfY2xvc2VfdW5yZWYocHdfY3R4LT5jb25uZWN0aW9uKTsKKyAg ICBhdl9mcmVlcCgmcHdfY3R4LT5zZW5kZXJfbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcGlwZXdp cmVncmFiX2NvbmZpZ19wcm9wcyhBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGcmFt ZSAqZnJhbWU7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gb3V0bGluay0+c3Jj LT5wcml2OworCisgICAgQVZSYXRpb25hbCB0aW1lX2Jhc2UgPSBhdl9pbnZfcShwd19jdHgtPmZy YW1lcmF0ZSk7CisgICAgcHdfY3R4LT5mcmFtZV9kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcSgxLCB0 aW1lX2Jhc2UsIEFWX1RJTUVfQkFTRV9RKTsKKyAgICBwd19jdHgtPnRpbWVfZnJhbWUgPSBhdl9n ZXR0aW1lX3JlbGF0aXZlKCk7CisKKyAgICBvdXRsaW5rLT53ID0gcHdfY3R4LT53aWR0aDsKKyAg ICBvdXRsaW5rLT5oID0gcHdfY3R4LT5oZWlnaHQ7CisgICAgb3V0bGluay0+dGltZV9iYXNlID0g QVZfVElNRV9CQVNFX1E7CisgICAgb3V0bGluay0+ZnJhbWVfcmF0ZSA9IHB3X2N0eC0+ZnJhbWVy YXRlOworCisgICAgZnJhbWUgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIHB3X2N0eC0+ d2lkdGgsIHB3X2N0eC0+aGVpZ2h0KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50 X2ZyYW1lX211dGV4KTsKKyAgICBwd19jdHgtPmN1cnJlbnRfZnJhbWUgPSBmcmFtZTsKKyAgICBw dGhyZWFkX211dGV4X3VubG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBpcGV3aXJlZ3JhYl9yZXF1ZXN0X2ZyYW1lKEFW RmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBpbnQgcmV0OworICAgIGludDY0X3QgY3VydGlt ZSwgZGVsYXk7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gb3V0bGluay0+c3Jj LT5wcml2OworICAgIEFWRnJhbWUgKmZyYW1lID0gYXZfZnJhbWVfYWxsb2MoKTsKKyAgICBpZiAo IWZyYW1lKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgcHdfY3R4LT50 aW1lX2ZyYW1lICs9IHB3X2N0eC0+ZnJhbWVfZHVyYXRpb247CisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICAgY3VydGltZSA9IGF2X2dldHRpbWVfcmVsYXRpdmUoKTsKKyAgICAgICAgZGVsYXkgICA9 IHB3X2N0eC0+dGltZV9mcmFtZSAtIGN1cnRpbWU7CisgICAgICAgIGlmIChkZWxheSA8PSAwKQor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGF2X3VzbGVlcChkZWxheSk7CisgICAgfQorCisg ICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworICAg IHJldCA9IGF2X2ZyYW1lX3JlZihmcmFtZSwgcHdfY3R4LT5jdXJyZW50X2ZyYW1lKTsKKyAgICBw dGhyZWFkX211dGV4X3VubG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICBp ZiAocmV0IDwgMCkgeworICAgICAgICBhdl9mcmFtZV9mcmVlKCZmcmFtZSk7CisgICAgICAgIHJl dHVybiByZXQ7CisgICAgfQorCisgICAgZnJhbWUtPnB0cyA9IGF2X2dldHRpbWUoKTsKKyAgICBm cmFtZS0+ZHVyYXRpb24gPSBwd19jdHgtPmZyYW1lX2R1cmF0aW9uOworICAgIGZyYW1lLT5zYW1w bGVfYXNwZWN0X3JhdGlvID0gKEFWUmF0aW9uYWwpIHsxLCAxfTsKKworICAgIHJldHVybiBmZl9m aWx0ZXJfZnJhbWUob3V0bGluaywgZnJhbWUpOworfQorCitzdGF0aWMgaW50IHBpcGV3aXJlZ3Jh Yl9xdWVyeV9mb3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFBpcGV3aXJlR3Jh YkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4 X2ZtdHNbXSA9IHtwd19jdHgtPmF2X3B4bF9mb3JtYXQsIEFWX1BJWF9GTVRfTk9ORX07CisKKyAg ICByZXR1cm4gZmZfc2V0X2NvbW1vbl9mb3JtYXRzX2Zyb21fbGlzdChjdHgsIHBpeF9mbXRzKTsK K30KKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHBpcGV3aXJlZ3JhYl9vdXRwdXRzW10gPSB7 CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5 cGUgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5yZXF1ZXN0X2ZyYW1l ID0gcGlwZXdpcmVncmFiX3JlcXVlc3RfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJvcHMgID0g cGlwZXdpcmVncmFiX2NvbmZpZ19wcm9wcywKKyAgICB9LAorfTsKKworY29uc3QgQVZGaWx0ZXIg ZmZfdnNyY19waXBld2lyZWdyYWI9IHsKKyAgICAubmFtZSA9ICJwaXBld2lyZWdyYWIiLAorICAg IC5kZXNjcmlwdGlvbiA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDYXB0dXJlIHNjcmVlbiBvciB3 aW5kb3cgdXNpbmcgUGlwZVdpcmUuIiksCisgICAgLnByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg UGlwZXdpcmVHcmFiQ29udGV4dCksCisgICAgLnByaXZfY2xhc3MgPSAmcGlwZXdpcmVncmFiX2Ns YXNzLAorICAgIC5pbml0ID0gcGlwZXdpcmVncmFiX2luaXQsCisgICAgLnVuaW5pdCA9IHBpcGV3 aXJlZ3JhYl91bmluaXQsCisgICAgLmlucHV0cyA9IE5VTEwsCisgICAgRklMVEVSX09VVFBVVFMo cGlwZXdpcmVncmFiX291dHB1dHMpLAorICAgIEZJTFRFUl9RVUVSWV9GVU5DKHBpcGV3aXJlZ3Jh Yl9xdWVyeV9mb3JtYXRzKSwKK307Ci0tIAoyLjM0LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVn LWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZt cGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K