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 BB205428E3 for ; Fri, 6 May 2022 14:15:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9EA1968B345; Fri, 6 May 2022 17:15:21 +0300 (EEST) Received: from nef.ens.fr (nef2.ens.fr [129.199.96.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F40736801E6 for ; Fri, 6 May 2022 17:15:14 +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 246EFE2a001794 for ; Fri, 6 May 2022 16:15:14 +0200 Received: by phare.normalesup.org (Postfix, from userid 1001) id E9AB7E00F5; Fri, 6 May 2022 16:15:13 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Fri, 6 May 2022 16:15:11 +0200 Message-Id: <20220506141511.112227-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]); Fri, 06 May 2022 16:15:14 +0200 (CEST) Subject: [FFmpeg-devel] [WIP] [PATCH] libavutil: add a limited XML parser 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: U2lnbmVkLW9mZi1ieTogTmljb2xhcyBHZW9yZ2UgPGdlb3JnZUBuc3VwLm9yZz4KLS0tCiBsaWJh dnV0aWwvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKwogbGliYXZ1dGlsL3Rlc3RzL3htbHBhcnNl ci5jIHwgIDkzICsrKysrKwogbGliYXZ1dGlsL3htbHBhcnNlci5jICAgICAgIHwgNjQ0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZ1dGlsL3htbHBhcnNlci5oICAg ICAgIHwgIDU4ICsrKysKIDQgZmlsZXMgY2hhbmdlZCwgNzk4IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdGVzdHMveG1scGFyc2VyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdnV0aWwveG1scGFyc2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwv eG1scGFyc2VyLmgKCgpJIHByb21pc2VkIHRoaXMgcXVpdGUgc29tZSB0aW1lIGFnbywgSSBmaW5h bGx5IGdvdCBhcm91bmQgdG8gd29yawp0aHJvdWdoIHRoZSBmaXJzdCBibG9jayBhbmQgbWFrZSBz b21ldGhpbmcuIEl0IGlzIHN0aWxsCndvcmstaW4tcHJvZ3Jlc3MsIGJ1dCBJIHdpbGwgaGF2ZSBs ZXNzIHRpbWUgdG8gd29yayBvbiBpdCBvbiB0aGUgbmV4dAp3ZWVrcywgc28gSSBtaWdodCBhcyB3 ZWxsIHB1dCBpdCBvdXQgdGhlcmUuCgpDdXJyZW50bHksIGl0IGNhbiBwYXJzZSBpbnRvIGV2ZW50 cyBhIFhNTCBmaWxlIHdpdGhvdXQgZGVjbGFyYXRpb25zIG9yCmNvbW1lbnRzLiBUaGUgZ29hbCBp cyB0byBtYWtlIGl0IGVub3VnaCB0byBwYXJzZSB0aGUgZmlsZXMgd2UgYWN0dWFsbHkKZW5jb3Vu dGVyIGluIHRoZSBmaWVsZCBvZiBtdWx0aW1lZGlhLCBzbyB0aGF0IEZGbXBlZyBjYW4gZG8gaXRz IHdvcmsKd2l0aG91dCBsaWJ4bWwyLgoKVE9ETzoKCi0gYnl0ZSBvcmRlciBtYXJrCi0gPD94bWwu Li4/PgotIGNvbW1lbnRzCi0gZG9jdHlwZSBkZWNsYXJhdGlvbgotIGNoZWNrIG1hdGNoaW5nIGJl Z2luL2VuZCB0YWdzCi0gZnJlZWluZyBtZW1vcnkKLSBidWZmZXIgY29tcGFjdGlvbgotIGV4dGVu c2l2ZSB0ZXN0aW5nCi0gdXNlIGl0IGluIEZGbXBlZwoKSWYgdGhlcmUgYXJlIFhNTCBmaWxlcyB5 b3Ugd2FudCBtZSB0byBtYWtlIHN1cmUgdGhlIHBhcnNlciBjYW4gZGlnZXN0LApwbGVhc2Ugc2Vu ZCB0aGVtIHRvIG1lLgoKSWYgdGhlcmUgYXJlIGZlYXR1cmVzIHlvdSB3YW50IG1lIHRvIG1ha2Ug c3VyZSBhcmUgcG9zc2libGUsIHBsZWFzZSBsZXQKbWUga25vdy4KCklmIHRoZXJlIGFyZSBGRm1w ZWcgY29tcG9uZW50cyB0aGF0IHlvdSB3YW50IG1lIHRvIHBvcnQgdG8gdXNpbmcgdGhpcwpBUEks IHBsZWFzZSB0ZWxsIG1lIHByZWNpc2VseSBob3cgSSBjYW4gdGVzdCB0aGVtLiBUaGUgcmVhbCBj YXNlIEkKaW50ZW5kIHRvIGltcGxlbWVudCBmaXJzdCBpcyBtYXRyb3NrYWNoYXB0ZXJzLmR0ZC4K CkkgdGhpbiBsaWJhdnV0aWwgYWxzbyBuZWVkcyBhIFhNTCB3cml0ZXIuIEFuZCBhIEpTT04gd3Jp dGVyLiBQb3NzaWJseQpvdGhlcnMuIEkgd2FudCB0byB3b3JrIG9uIGl0LiBCdXQgSSByZWZ1c2Ug dG8gZG8gaXQgdW5sZXNzIHdlIGhhdmUgYQpnb29kIEFQSSB0byByZXR1cm4gdGhlIHJlc3VsdDog YWx3YXlzIHJldHVybmluZyBtYWxsb2NhdGVkIGJ1ZmZlcnMgb3IgYQpzaW1pbGFyIG9idmlvdXMg c29sdXRpb24gaXMgd2FzdGVmdWwgYW5kIHVnbHkuIFNvIHBsZWFzZSByZXBseSB0byB0aGlzOgpo dHRwczovL2ZmbXBlZy5vcmcvcGlwZXJtYWlsL2ZmbXBlZy1kZXZlbC8yMDIxLURlY2VtYmVyLzI5 MDIyNi5odG1sCgpSZWdhcmRzLAoKLS0gCiAgTmljb2xhcyBHZW9yZ2UKCgoKZGlmZiAtLWdpdCBh L2xpYmF2dXRpbC9NYWtlZmlsZSBiL2xpYmF2dXRpbC9NYWtlZmlsZQppbmRleCA4MWRmM2IwNjQw Li43ZGNmMzA4ZTRhIDEwMDY0NAotLS0gYS9saWJhdnV0aWwvTWFrZWZpbGUKKysrIGIvbGliYXZ1 dGlsL01ha2VmaWxlCkBAIC04NCw2ICs4NCw3IEBAIEhFQURFUlMgPSBhZGxlcjMyLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg ICB0d29maXNoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKICAgICAgICAgICB2ZXJzaW9uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICB2aWRlb19lbmNfcGFyYW1zLmgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB4 bWxwYXJzZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKICAgICAgICAgICB4dGVhLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICB0ZWEuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICB0eC5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKQEAgLTE2OCw2ICsxNjksNyBAQCBPQkpTID0gYWRsZXIzMi5vICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgdHdvZmlzaC5v ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CiAgICAgICAgdXRpbHMubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCiAgICAgICAgeGdhX2ZvbnRfZGF0YS5vICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgeG1scGFyc2VyLm8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgeHRlYS5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgICAgICAgdGVhLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgdHgubyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0y NTgsNiArMjYwLDcgQEAgVEVTVFBST0dTID0gYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgdHJlZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg ICAgICAgdHdvZmlzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAogICAgICAgICAgICAgdXRmOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeG1scGFyc2VyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg ICAgeHRlYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAogICAgICAgICAgICAgdGVhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogCmRpZmYgLS1naXQgYS9saWJhdnV0aWwvdGVzdHMv eG1scGFyc2VyLmMgYi9saWJhdnV0aWwvdGVzdHMveG1scGFyc2VyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjY4MjNiNDA3NAotLS0gL2Rldi9udWxsCisrKyBiL2xp YmF2dXRpbC90ZXN0cy94bWxwYXJzZXIuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDIyIE5pY29sYXMgR2VvcmdlCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisj aW5jbHVkZSAibGliYXZ1dGlsL2Vycm9yLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3htbHBhcnNl ci5oIgorCitzdGF0aWMgdm9pZCBkdW1wX3RleHQoY29uc3QgdWludDhfdCAqdGV4dCwgc2l6ZV90 IGxlbikKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykK KyAgICAgICAgcHJpbnRmKHRleHRbaV0gPCAzMiA/ICJcXHglMDJ4IiA6ICIlYyIsIHRleHRbaV0p OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgQVZYTUxQYXJz ZXIgKnhwOworICAgIEFWWE1MUEV2ZW50ICpldjsKKyAgICBjaGFyIGJ1ZlsyMF07CisgICAgc2l6 ZV90IHI7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBkZXB0aCA9IDA7CisKKyAgICByZXQg PSBhdl94bWxwX2FsbG9jKCZ4cCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJGYWxpZWQgdG8gYWxsb2NhdGUgcGFyc2VyOiAlc1xuIiwgYXZfZXJyMnN0cihy ZXQpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg ciA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHN0ZGluKTsKKyAgICAgICAgcmV0ID0gYXZf eG1scF9hZGRfZGF0YSh4cCwgYnVmLCByKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFsaWVkIHRvIGFkZCBkYXRhOiAlc1xuIiwgYXZfZXJy MnN0cihyZXQpKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHIgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAg ICAgICByZXQgPSBhdl94bWxwX2dldF9ldmVudCh4cCwgJmV2KTsKKyAgICAgICAgaWYgKHJldCA9 PSBBVkVSUk9SX0VPRikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocmV0IDwgMCkg eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIGF2X2VycjJzdHIo cmV0KSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHByaW50Zigi JSpzIiwgZGVwdGggKiAyLCAiIik7CisgICAgICAgIHN3aXRjaCAoZXYtPnR5cGUpIHsKKyAgICAg ICAgY2FzZSBBVl9YTUxQX0VWX0VMX1NUQVJUOgorICAgICAgICAgICAgcHJpbnRmKCI8JXM+XG4i LCBldi0+bmFtZSk7CisgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgQVZfWE1MUF9FVl9FTF9FTkQ6CisgICAgICAgICAgICBkZXB0aC0tOworICAg ICAgICAgICAgcHJpbnRmKCI8LyVzPlxuIiwgZXYtPm5hbWUpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgQVZfWE1MUF9FVl9FTF9FTVBUWToKKyAgICAgICAgICAgIHByaW50Zigi PCVzLz5cbiIsIGV2LT5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFW X1hNTFBfRVZfQVRUUjoKKyAgICAgICAgICAgIHByaW50ZigiJXM9IiwgZXYtPm5hbWUpOworICAg ICAgICAgICAgZHVtcF90ZXh0KGV2LT50ZXh0LCBldi0+dGV4dF9sZW4pOworICAgICAgICAgICAg cHJpbnRmKCJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVZfWE1MUF9F Vl9URVhUOgorICAgICAgICAgICAgcHJpbnRmKCJcIiIpOworICAgICAgICAgICAgZHVtcF90ZXh0 KGV2LT50ZXh0LCBldi0+dGV4dF9sZW4pOworICAgICAgICAgICAgcHJpbnRmKCJcIlxuIik7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlm ZiAtLWdpdCBhL2xpYmF2dXRpbC94bWxwYXJzZXIuYyBiL2xpYmF2dXRpbC94bWxwYXJzZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44N2VmMTI1MTBmCi0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZ1dGlsL3htbHBhcnNlci5jCkBAIC0wLDAgKzEsNjQ0IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDIyIE5pY29sYXMgR2VvcmdlCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImF2 YXNzZXJ0LmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZXJyb3IuaCIKKyNpbmNs dWRlICJsb2cuaCIKKyNpbmNsdWRlICJtZW0uaCIKKworI2luY2x1ZGUgInhtbHBhcnNlci5oIgor Cit0eXBlZGVmIGVudW0gQ29udGV4dCB7CisgICAgQ09OVF9TVEFSVCwKKyAgICBDT05UX1BST0xP RywKKyAgICBDT05UX0JBU0UsCisgICAgQ09OVF9TVEFHLAorICAgIENPTlRfRVRBRywKKyAgICBD T05UX0FUVFJJQlVURSwKKyAgICBDT05UX0FGVEVSLAorfSBDb250ZXh0OworCit0eXBlZGVmIGVu dW0gVG9rZW5UeXBlIHsKKyAgICBUT0tfU1RBRywKKyAgICBUT0tfRVRBRywKKyAgICBUT0tfU0VU QUcsCisgICAgVE9LX0FUVFIsCisgICAgVE9LX1RFWFQsCit9IFRva2VuVHlwZTsKKworc3RydWN0 IEFWWE1MUGFyc2VyIHsKKyAgICBpbnQgKCphZGRfb2N0ZXQpKEFWWE1MUGFyc2VyICp4cCwgdW5z aWduZWQgYyk7CisgICAgdWludDhfdCAqYnVmOworICAgIGNvbnN0IEFWWE1MUEVudGl0aWVzICpl bnRpdGllczsKKyAgICB1aW50NjRfdCBpbl9vZmZzZXQ7CisgICAgc2l6ZV90IGJ1Zl9zaXplOwor ICAgIHNpemVfdCBidWZfaGVhZDsKKyAgICBzaXplX3QgYnVmX3RhaWw7CisgICAgc2l6ZV90IGJ1 Zl9jdXJfdG9rZW47CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGludCBwYXJzZV9lcnJvcjsK KyAgICBpbnQgcnVuX2Vycm9yOworICAgIHVuc2lnbmVkIGhhdmVfZXhwZWN0OworICAgIHVuc2ln bmVkIHU4X2NvZGVwb2ludDsKKworICAgIHVuc2lnbmVkIGRlcHRoOworICAgIHVuc2lnbmVkIGVu dGl0eTsKKyAgICB1aW50OF90IHU4X2xlbjsKKyAgICB1aW50OF90IGhhdmVfcXVvdGU7CisgICAg dW5zaWduZWQgc2hvcnQgZW50X2ZpcnN0OworICAgIHVuc2lnbmVkIHNob3J0IGVudF9sYXN0Owor ICAgIHVuc2lnbmVkIHNob3J0IGhhdmVfYW1wX25hbWU7CisgICAgdW5zaWduZWQgaGF2ZV9sdCA6 IDE7CisgICAgdW5zaWduZWQgaGF2ZV9lcXVhbCA6IDE7CisgICAgdW5zaWduZWQgaGF2ZV9uYW1l IDogMTsKKyAgICB1bnNpZ25lZCBoYXZlX2FtcCA6IDE7CisgICAgdW5zaWduZWQgaGF2ZV9hbXBf bnVtIDogMTsKKyAgICB1bnNpZ25lZCBoYXZlX2FtcF9kZWMgOiAxOworICAgIHVuc2lnbmVkIGhh dmVfYW1wX2hleCA6IDE7CisgICAgdW5zaWduZWQgaGF2ZV90ZXh0IDogMTsKKyAgICB1bnNpZ25l ZCBlb2YgOiAxOworICAgIEFWWE1MUEV2ZW50IGV2ZW50OworfTsKKwordHlwZWRlZiBzdHJ1Y3Qg RW50aXR5IEVudGl0eTsKKworc3RydWN0IEVudGl0eSB7CisgICAgY29uc3QgY2hhciAqbmFtZTsK KyAgICBjb25zdCBjaGFyICp0ZXh0OworfTsKKworc3RydWN0IEFWWE1MUEVudGl0aWVzIHsKKyAg ICB1bnNpZ25lZCBuYjsKKyAgICBFbnRpdHkgZW50aXRpZXNbMF07Cit9OworCisvKiBodHRwczov L3d3dy53My5vcmcvVFIveG1sLyNzZWMtcHJlZGVmaW5lZC1lbnQgKi8KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgeworICAgIEFWWE1MUEVudGl0aWVzIGVudGl0aWVzOworICAgIEVudGl0eSBhcnJheVs1 XTsKK30gcHJlZGVmaW5lZF9lbnRpdGllcyA9IHsKKyAgICAuZW50aXRpZXMubmIgPSA1LAorICAg IC5hcnJheSA9IHsKKyAgICAgICAgLyogbXVzdCBiZSBzb3J0ZWQgKi8KKyAgICAgICAgeyAiYW1w IiwgICAiJiIgIH0sCisgICAgICAgIHsgImFwb3MiLCAgIiciICB9LAorICAgICAgICB7ICJndCIs ICAgICI+IiAgfSwKKyAgICAgICAgeyAibHQiLCAgICAiPCIgIH0sCisgICAgICAgIHsgInF1b3Qi LCAgIlwiIiB9LAorICAgIH0sCit9OworCisvKiBDYW4gYmUgY2hhbmdlZCB0byBzaXplX3QgaWYg d2UgbmVlZC4gKi8KK3R5cGVkZWYgdW5zaWduZWQgdG9rc2l6ZTsKKworc3RhdGljIGludCBzZXRf ZXJyb3IoQVZYTUxQYXJzZXIgKnhwKQoreworICAgIGF2X2xvZygwLCAxNiwgInNldF9lcnJvcigp IGF0ICUiUFJJdTY0IlxuIiwgeHAtPmluX29mZnNldCk7CisgICAgeHAtPnBhcnNlX2Vycm9yID0g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRf cnVuX2Vycm9yKEFWWE1MUGFyc2VyICp4cCwgaW50IGVycikKK3sKKyAgICBhdl9sb2coMCwgMTYs ICJzZXRfcnVuX2Vycm9yKCVzKVxuIiwgYXZfZXJyMnN0cihlcnIpKTsKKyAgICB4cC0+cnVuX2Vy cm9yID0gZXJyOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYmV0d2Vlbih1bnNp Z25lZCBjLCB1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiAoYyAtIGEpIDw9 IChiIC0gYSk7Cit9CisKKy8qIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI05ULVMgKi8KK3N0 YXRpYyBpbnQgY2hhcl9pc19zcGFjZSh1bnNpZ25lZCBjKQoreworICAgIHJldHVybiBjID09ICcg JyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXGEnIHx8IGMgPT0gJ1xuJzsKK30KKworLyogaHR0cHM6 Ly93d3cudzMub3JnL1RSL3htbC8jTlQtTmFtZVN0YXJ0Q2hhciAqLworc3RhdGljIGludCBjaGFy X2lzX25hbWVfaW5pdGlhbCh1bnNpZ25lZCBjKQoreworICAgIHJldHVybiBjID09ICc6JyB8fAor ICAgICAgICAgICBjID09ICdfJyB8fAorICAgICAgICAgICBiZXR3ZWVuKGMsICdBJywgJ1onKSB8 fAorICAgICAgICAgICBiZXR3ZWVuKGMsICdhJywgJ3onKSB8fAorICAgICAgICAgICBiZXR3ZWVu KGMsIDB4QzAsIDB4RDYpIHx8CisgICAgICAgICAgIGJldHdlZW4oYywgMHhEOCwgMHhGNikgfHwK KyAgICAgICAgICAgYmV0d2VlbihjLCAweEY4LCAweDJGRikgfHwKKyAgICAgICAgICAgYmV0d2Vl bihjLCAweDM3MCwgMHgzN0QpIHx8CisgICAgICAgICAgIGJldHdlZW4oYywgMHgzN0YsIDB4MUZG RikgfHwKKyAgICAgICAgICAgYmV0d2VlbihjLCAweDIwMEMsIDB4MjAwRCkgfHwKKyAgICAgICAg ICAgYmV0d2VlbihjLCAweDIwNzAsIDB4MjE4RikgfHwKKyAgICAgICAgICAgYmV0d2VlbihjLCAw eDJDMDAsIDB4MkZFRikgfHwKKyAgICAgICAgICAgYmV0d2VlbihjLCAweDMwMDEsIDB4RDdGRikg fHwKKyAgICAgICAgICAgYmV0d2VlbihjLCAweEY5MDAsIDB4RkRDRikgfHwKKyAgICAgICAgICAg YmV0d2VlbihjLCAweEZERjAsIDB4RkZGRCkgfHwKKyAgICAgICAgICAgYmV0d2VlbihjLCAweDEw MDAwLCAweEVGRkZGKTsKK30KKworLyogaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtTmFt ZSAqLworc3RhdGljIGludCBjaGFyX2lzX25hbWUodW5zaWduZWQgYykKK3sKKyAgICByZXR1cm4g Y2hhcl9pc19uYW1lX2luaXRpYWwoYykgfHwKKyAgICAgICAgICAgYyA9PSAnLScgfHwKKyAgICAg ICAgICAgYyA9PSAnLicgfHwKKyAgICAgICAgICAgYyA9PSAweEI3IHx8CisgICAgICAgICAgIGJl dHdlZW4oYywgJzAnLCAnOScpIHx8CisgICAgICAgICAgIGJldHdlZW4oYywgMHgwMzAwLCAweDAz NkYpIHx8CisgICAgICAgICAgIGJldHdlZW4oYywgMHgyMDNGLCAweDIwNDApOworfQorCitzdGF0 aWMgaW50IGJ1Zl9ncm93KEFWWE1MUGFyc2VyICp4cCwgc2l6ZV90IHJlZiwgc2l6ZV90IGFkZCkK K3sKKyAgICBzaXplX3QgbmV3X3NpemUgPSB4cC0+YnVmX3NpemUgLyBzaXplb2YodG9rc2l6ZSk7 CisgICAgc2l6ZV90IG1pbl9zaXplID0gcmVmICsgYWRkICsgc2l6ZW9mKHRva3NpemUpIC0gMTsK KyAgICB1aW50OF90ICpuZXdfYnVmOworCisgICAgaWYgKHhwLT5ydW5fZXJyb3IpCisgICAgICAg IHJldHVybiB4cC0+cnVuX2Vycm9yOworICAgIGlmIChtaW5fc2l6ZSA8IHJlZikKKyAgICAgICAg cmV0dXJuIHNldF9ydW5fZXJyb3IoeHAsIEFWRVJST1IoRU5PTUVNKSk7CisgICAgbWluX3NpemUg Lz0gc2l6ZW9mKHRva3NpemUpOworICAgIHdoaWxlIChuZXdfc2l6ZSA8IG1pbl9zaXplKSB7Cisg ICAgICAgIGlmIChuZXdfc2l6ZSA+IFNJWkVfTUFYIC8gc2l6ZW9mKHRva3NpemUpIC8gMikKKyAg ICAgICAgICAgIHJldHVybiBzZXRfcnVuX2Vycm9yKHhwLCBBVkVSUk9SKEVOT01FTSkpOworICAg ICAgICBuZXdfc2l6ZSA9ICgobmV3X3NpemUgfCA1MTEpIDw8IDEpICsgMTsKKyAgICB9CisgICAg bmV3X3NpemUgKj0gc2l6ZW9mKHRva3NpemUpOworICAgIG5ld19idWYgPSBhdl9yZWFsbG9jKHhw LT5idWYsIG5ld19zaXplKTsKKyAgICBpZiAoIW5ld19idWYpCisgICAgICAgIHJldHVybiBzZXRf cnVuX2Vycm9yKHhwLCBBVkVSUk9SKEVOT01FTSkpOworICAgIHhwLT5idWYgPSBuZXdfYnVmOwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdG9rc2l6ZSAqdG9rZW5fYXRfc2l6ZShBVlhNTFBh cnNlciAqeHAsIHNpemVfdCBvZmYpCit7CisgICAgcmV0dXJuICh0b2tzaXplICopKHhwLT5idWYg KyBvZmYpOworfQorCitzdGF0aWMgdWludDhfdCAqdG9rZW5fYXRfdHlwZShBVlhNTFBhcnNlciAq eHAsIHNpemVfdCBvZmYpCit7CisgICAgcmV0dXJuICh1aW50OF90ICopKHhwLT5idWYgKyBvZmYg KyBzaXplb2YodG9rc2l6ZSkpOworfQorCitzdGF0aWMgdWludDhfdCAqdG9rZW5fYXRfYm9keShB VlhNTFBhcnNlciAqeHAsIHNpemVfdCBvZmYpCit7CisgICAgcmV0dXJuICh1aW50OF90ICopKHhw LT5idWYgKyBvZmYgKyBzaXplb2YodG9rc2l6ZSkgKyAxKTsKK30KKworI2RlZmluZSBjdXJfdG9r ZW5fc2l6ZSAoKnRva2VuX2F0X3NpemUoeHAsIHhwLT5idWZfY3VyX3Rva2VuKSkKKyNkZWZpbmUg Y3VyX3Rva2VuX3R5cGUgKCp0b2tlbl9hdF90eXBlKHhwLCB4cC0+YnVmX2N1cl90b2tlbikpCisj ZGVmaW5lIGN1cl90b2tlbl9ib2R5ICggdG9rZW5fYXRfYm9keSh4cCwgeHAtPmJ1Zl9jdXJfdG9r ZW4pKQorCitzdGF0aWMgc2l6ZV90IHRva2VuX2F0X25leHQoQVZYTUxQYXJzZXIgKnhwLCBzaXpl X3Qgb2ZmKQoreworICAgIC8qIHNpemUgKyB0eXBlICsgYm9keSArIDAgKyByb3VuZGluZyAqLwor ICAgIHJldHVybiBvZmYgKyAoMiAqIHNpemVvZih0b2tzaXplKSArIDEgKyAqdG9rZW5fYXRfc2l6 ZSh4cCwgb2ZmKSkKKyAgICAgICAgICAgLyBzaXplb2YodG9rc2l6ZSkgKiBzaXplb2YodG9rc2l6 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRva2VuX2VuZChBVlhNTFBhcnNlciAqeHApCit7CisgICAg aWYgKHhwLT5idWZfY3VyX3Rva2VuID09IHhwLT5idWZfaGVhZCkKKyAgICAgICAgcmV0dXJuOwor ICAgIGF2X2Fzc2VydDAoeHAtPmJ1Zl9oZWFkID09IHRva2VuX2F0X25leHQoeHAsIHhwLT5idWZf Y3VyX3Rva2VuKSk7CisgICAgeHAtPmJ1Zl9jdXJfdG9rZW4gPSB4cC0+YnVmX2hlYWQ7Cit9CisK K3N0YXRpYyBpbnQgdG9rZW5fbmV3KEFWWE1MUGFyc2VyICp4cCwgVG9rZW5UeXBlIHR5cGUpCit7 CisgICAgYnVmX2dyb3coeHAsIHhwLT5idWZfaGVhZCwgc2l6ZW9mKHRva3NpemUpICsgMik7Cisg ICAgaWYgKHhwLT5ydW5fZXJyb3IpCisgICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9yOworICAg IHRva2VuX2VuZCh4cCk7CisgICAgeHAtPmJ1Zl9oZWFkICs9IDIgKiBzaXplb2YodG9rc2l6ZSk7 CisgICAgY3VyX3Rva2VuX3NpemUgPSAwOworICAgIGN1cl90b2tlbl90eXBlID0gdHlwZTsKKyAg ICBjdXJfdG9rZW5fYm9keVswXSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg dG9rZW5fZ3JvdyhBVlhNTFBhcnNlciAqeHAsIHRva3NpemUgYWRkKQoreworICAgIC8qIFRPRE8g Y2hlY2sgZm9yIG92ZXJmbG93IGZvciB0b2tzaXplICovCisgICAgcmV0dXJuIGJ1Zl9ncm93KHhw LCBjdXJfdG9rZW5fYm9keSArIGN1cl90b2tlbl9zaXplIC0geHAtPmJ1ZiwgYWRkICsgMSk7Cit9 CisKK3N0YXRpYyBpbnQgdG9rZW5fYWRkX2NoYXIoQVZYTUxQYXJzZXIgKnhwLCB1bnNpZ25lZCBj KQoreworICAgIHVpbnQ4X3QgKnAsIHRtcDsKKworICAgIC8qIFRPRE8gbXVzdCBiZSBVVEYtOCEg Ki8KKyAgICB0b2tlbl9ncm93KHhwLCA2KTsKKyAgICBpZiAoeHAtPnJ1bl9lcnJvcikKKyAgICAg ICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgcCA9IGN1cl90b2tlbl9ib2R5ICsgY3VyX3Rv a2VuX3NpemU7CisgICAgUFVUX1VURjgoYywgdG1wLCAqKHArKykgPSB0bXA7KTsKKyAgICAqcCA9 IDA7CisgICAgY3VyX3Rva2VuX3NpemUgKz0gcCAtIChjdXJfdG9rZW5fYm9keSArIGN1cl90b2tl bl9zaXplKTsKKyAgICB4cC0+YnVmX2hlYWQgPSB0b2tlbl9hdF9uZXh0KHhwLCB4cC0+YnVmX2N1 cl90b2tlbik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBFbnRpdHkgKmVudGl0 eV9nZXQoY29uc3QgQVZYTUxQRW50aXRpZXMgKmVudGl0aWVzLCB1bnNpZ25lZCBpZHgpCit7Cisg ICAgcHRyZGlmZl90IG9mZiA9IChjaGFyICopJnByZWRlZmluZWRfZW50aXRpZXMuYXJyYXkgLSAo Y2hhciAqKSZwcmVkZWZpbmVkX2VudGl0aWVzOworICAgIGF2X2Fzc2VydDAoaWR4IDwgZW50aXRp ZXMtPm5iKTsKKyAgICByZXR1cm4gJigoY29uc3QgRW50aXR5ICopKChjaGFyICopZW50aXRpZXMg KyBvZmYpKVtpZHhdOworfQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RhdGljIHZvaWQgZHVt cF90b2tlbnMoQVZYTUxQYXJzZXIgKnhwKQoreworICAgIHNpemVfdCBvZmYgPSAwOworICAgIHRv a3NpemUgc2l6ZSwgaTsKKyAgICB1aW50OF90ICpib2R5OworCisgICAgcHJpbnRmKCJUb2tlbnM6 XG4iKTsKKyAgICB3aGlsZSAob2ZmIDwgeHAtPmJ1Zl9oZWFkKSB7CisgICAgICAgIHNpemUgPSAq dG9rZW5fYXRfc2l6ZSh4cCwgb2ZmKTsKKyAgICAgICAgYm9keSA9IHRva2VuX2F0X2JvZHkoeHAs IG9mZik7CisgICAgICAgIHByaW50ZigiICBhdCAlemQ6IFsweCUwMngsICV6ZF0gXCIiLCBvZmYs ICp0b2tlbl9hdF90eXBlKHhwLCBvZmYpLCAoc2l6ZV90KXNpemUpOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYm9keVtpXSA8IDMyIHx8IGJv ZHlbaV0gPT0gJyInKQorICAgICAgICAgICAgICAgIHByaW50ZigiXFx4JTAyeCIsIGJvZHlbaV0p OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZwdXRjKGJvZHlbaV0sIHN0ZG91 dCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcIlxuIik7CisgICAgICAgIG9mZiA9IHRv a2VuX2F0X25leHQoeHAsIG9mZik7CisgICAgfQorICAgIGF2X2Fzc2VydDAob2ZmID09IHhwLT5i dWZfaGVhZCk7CisgICAgcHJpbnRmKCIgIC5cbiIpOworfQorCitzdGF0aWMgaW50IGFkZF9jaGFy KEFWWE1MUGFyc2VyICp4cCwgdW5zaWduZWQgYykKK3sKKyAgICBpZiAoeHAtPnBhcnNlX2Vycm9y IHx8IHhwLT5ydW5fZXJyb3IpCisgICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9yOworICAgIHdo aWxlICgxKSB7CisgICAgICAgIC8qIHJldHVybiAgIOKGkiBjYXNlIGhhbmRsZWQKKyAgICAgICAg ICAgY29udGludWUg4oaSIHRyeSBhZ2FpbiBpbiB0aGUgbmV3IHN0YXRlCisgICAgICAgICAgIGJy ZWFrICAgIOKGkiBlcnJvciAqLworCisgICAgICAgIGlmICgwKSB7IC8qIGNvc21ldGljICovCisg ICAgICAgIH0gZWxzZSBpZiAoeHAtPmhhdmVfZXhwZWN0KSB7CisgICAgICAgICAgICBpZiAoYyAh PSB4cC0+aGF2ZV9leHBlY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9lcnJvcih4cCk7 CisgICAgICAgICAgICB4cC0+aGF2ZV9leHBlY3QgPSAwOworICAgICAgICAgICAgcmV0dXJuIHhw LT5ydW5fZXJyb3I7CisKKyAgICAgICAgfSBlbHNlIGlmICh4cC0+aGF2ZV9sdCkgeworICAgICAg ICAgICAgYXZfYXNzZXJ0MCh4cC0+Y29udGV4dCA9PSBDT05UX0JBU0UpOworICAgICAgICAgICAg aWYgKGNoYXJfaXNfbmFtZV9pbml0aWFsKGMpKSB7CisgICAgICAgICAgICAgICAgeHAtPmhhdmVf bHQgPSAwOworICAgICAgICAgICAgICAgIHRva2VuX25ldyh4cCwgVE9LX1NUQUcpOworICAgICAg ICAgICAgICAgIHRva2VuX2FkZF9jaGFyKHhwLCBjKTsKKyAgICAgICAgICAgICAgICB4cC0+Y29u dGV4dCA9IENPTlRfU1RBRzsKKyAgICAgICAgICAgICAgICB4cC0+aGF2ZV9uYW1lID0gMTsKKyAg ICAgICAgICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChjID09ICcvJykgeworICAgICAgICAgICAgICAgIHhwLT5oYXZlX2x0ID0gMDsK KyAgICAgICAgICAgICAgICB0b2tlbl9uZXcoeHAsIFRPS19FVEFHKTsKKyAgICAgICAgICAgICAg ICB4cC0+Y29udGV4dCA9IENPTlRfRVRBRzsKKyAgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwg YWNjZXB0IHRhZ3MgdGhhdCBiZWdpbiB3aXRoIGEgbm9uLWluaXRpYWwKKyAgICAgICAgICAgICAg ICAgICBjaGFyYWN0ZXIsIGJ1dCB0aGVpIGl0IHdpbGwgbm90IG1hdGNoIHRoZSBzdGFydCB0YWcu ICovCisgICAgICAgICAgICAgICAgeHAtPmhhdmVfbmFtZSA9IDE7CisgICAgICAgICAgICAgICAg cmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlm ICh4cC0+aGF2ZV9uYW1lKSB7CisgICAgICAgICAgICBpZiAoY2hhcl9pc19uYW1lKGMpKSB7Cisg ICAgICAgICAgICAgICAgdG9rZW5fYWRkX2NoYXIoeHAsIGMpOworICAgICAgICAgICAgICAgIHJl dHVybiB4cC0+cnVuX2Vycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeHAtPmhhdmVf bmFtZSA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB9IGVsc2UgaWYgKHhw LT5oYXZlX2FtcCkgeworICAgICAgICAgICAgeHAtPmhhdmVfYW1wID0gMDsKKyAgICAgICAgICAg IHhwLT5lbnRpdHkgPSAwOworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAgICAgICAg ICAgICAgeHAtPmhhdmVfYW1wX251bSA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5y dW5fZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4cC0+ZW50X2ZpcnN0ID0gMDsK KyAgICAgICAgICAgIHhwLT5lbnRfbGFzdCA9IHhwLT5lbnRpdGllcy0+bmI7CisgICAgICAgICAg ICB4cC0+aGF2ZV9hbXBfbmFtZSA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICB9IGVsc2UgaWYgKHhwLT5oYXZlX2FtcF9udW0pIHsKKyAgICAgICAgICAgIHhwLT5oYXZlX2Ft cF9udW0gPSAwOworICAgICAgICAgICAgaWYgKGMgPT0gJ3gnKSB7CisgICAgICAgICAgICAgICAg eHAtPmhhdmVfYW1wX2hleCA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJy b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4cC0+aGF2ZV9hbXBfZGVjID0gMTsKKyAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIH0gZWxzZSBpZiAoeHAtPmhhdmVfYW1wX2Rl YykgeworICAgICAgICAgICAgaWYgKGJldHdlZW4oYywgJzAnLCAnOScpKSB7CisgICAgICAgICAg ICAgICAgeHAtPmVudGl0eSA9IHhwLT5lbnRpdHkgKiAxMCArIChjIC0gJzAnKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9 PSAnOycpIHsKKyAgICAgICAgICAgICAgICB4cC0+aGF2ZV9hbXBfZGVjID0gMDsKKyAgICAgICAg ICAgICAgICB0b2tlbl9hZGRfY2hhcih4cCwgeHAtPmVudGl0eSk7CisgICAgICAgICAgICAgICAg cmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlm ICh4cC0+aGF2ZV9hbXBfbmFtZSkgeworICAgICAgICAgICAgYXZfbG9nKDAsIDE2LCAiZ290ICVj IGF0ICVkXG4iLCBjLCB4cC0+aGF2ZV9hbXBfbmFtZSAtIDEpOworICAgICAgICAgICAgaWYgKGMg PT0gJzsnKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5ICplID0gZW50aXR5X2dldCh4 cC0+ZW50aXRpZXMsIHhwLT5lbnRfZmlyc3QpOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnA7CisgICAgICAgICAgICAgICAgaWYgKGUtPm5hbWVbeHAtPmhhdmVfYW1wX25hbWUgLSAxXSkK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9lcnJvcih4cCk7CisgICAgICAgICAgICAg ICAgeHAtPmhhdmVfYW1wX25hbWUgPSAwOworICAgICAgICAgICAgICAgIGZvciAocCA9IGUtPnRl eHQ7ICpwOyBwKyspCisgICAgICAgICAgICAgICAgICAgIHRva2VuX2FkZF9jaGFyKHhwLCAqcCk7 CisgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICAvKiBUT0RPIHVzZSBhIGRpY2hvdG9teSAqLworICAgICAgICAgICAgLyogQWxs IGVudGl0aWVzIGJldHdlZW4gZW50X2ZpcnN0IChpbmNsdWRlZCkgYW5kIGVudF9sYXN0CisgICAg ICAgICAgICAgICAoZXhjbHVkZWQpIGJlZ2luIHdpdGggdGhlIGN1cnJlbnQgaGF2ZV9hbXBfbmFt ZS0xIGNoYXJhY3RlcnMuICovCisgICAgICAgICAgICB3aGlsZSAoeHAtPmVudF9maXJzdCA8IHhw LT5lbnRfbGFzdCkgeworICAgICAgICAgICAgICAgIGNvbnN0IEVudGl0eSAqZSA9IGVudGl0eV9n ZXQoeHAtPmVudGl0aWVzLCB4cC0+ZW50X2ZpcnN0KTsKKyAgICAgICAgICAgICAgICBpZiAoZS0+ bmFtZVt4cC0+aGF2ZV9hbXBfbmFtZSAtIDFdID49IGMpCisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIHhwLT5lbnRfZmlyc3QrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGF2X2xvZygwLCAxNiwgImZvciAlYywgYmV0d2VlbiAlZCBhbmQgJWRcbiIsIGMs IHhwLT5lbnRfZmlyc3QsIHhwLT5lbnRfbGFzdCk7CisgICAgICAgICAgICB3aGlsZSAoeHAtPmVu dF9sYXN0ID4geHAtPmVudF9maXJzdCkgeworICAgICAgICAgICAgICAgIGNvbnN0IEVudGl0eSAq ZSA9IGVudGl0eV9nZXQoeHAtPmVudGl0aWVzLCB4cC0+ZW50X2xhc3QgLSAxKTsKKyAgICAgICAg ICAgICAgICBpZiAoZS0+bmFtZVt4cC0+aGF2ZV9hbXBfbmFtZSAtIDFdIDw9IGMpCisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHhwLT5lbnRfbGFzdC0tOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYXZfbG9nKDAsIDE2LCAiLi4uIGJldHdlZW4gJWQgYW5k ICVkXG4iLCB4cC0+ZW50X2ZpcnN0LCB4cC0+ZW50X2xhc3QpOworICAgICAgICAgICAgaWYgKHhw LT5lbnRfbGFzdCA9PSB4cC0+ZW50X2ZpcnN0KQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRf ZXJyb3IoeHApOworICAgICAgICAgICAgeHAtPmhhdmVfYW1wX25hbWUrKzsKKyAgICAgICAgICAg IHJldHVybiB4cC0+cnVuX2Vycm9yOworCisgICAgICAgIH0gZWxzZSBpZiAoeHAtPmhhdmVfYW1w X2hleCkgeworICAgICAgICAgICAgaWYgKGJldHdlZW4oYywgJzAnLCAnOScpKSB7CisgICAgICAg ICAgICAgICAgeHAtPmVudGl0eSA9IHhwLT5lbnRpdHkgKiAxNiArIChjIC0gJzAnKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo YmV0d2VlbihjICYgfignYScgLSAnQScpLCAnQScsICdGJykpIHsKKyAgICAgICAgICAgICAgICB4 cC0+ZW50aXR5ID0geHAtPmVudGl0eSAqIDE2ICsgKChjICYgfignYScgLSAnQScpKSAtICdBJyAr IDEwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICAgICAgICAg IH0gZWxzZSBpZiAoYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICB4cC0+aGF2ZV9hbXBfaGV4 ID0gMDsKKyAgICAgICAgICAgICAgICB0b2tlbl9hZGRfY2hhcih4cCwgeHAtPmVudGl0eSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgfSBlbHNlIGlmICh4cC0+aGF2ZV90ZXh0KSB7CisgICAgICAgICAgICBpZiAoYyA9PSAn PCcgfHwgKHhwLT5oYXZlX3F1b3RlICYmIGMgPT0geHAtPmhhdmVfcXVvdGUpKSB7CisgICAgICAg ICAgICAgICAgeHAtPmhhdmVfdGV4dCA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAg ICB4cC0+aGF2ZV9hbXAgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9y OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW5fYWRkX2NoYXIoeHAsIGMpOworICAg ICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisKKyAgICAgICAgfSBlbHNlIGlmICh4cC0+ Y29udGV4dCA9PSBDT05UX0JBU0UpIHsKKyAgICAgICAgICAgIGlmIChjID09ICc8JykgeworICAg ICAgICAgICAgICAgIHhwLT5oYXZlX2x0ID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4geHAt PnJ1bl9lcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2VuX25ldyh4cCwgVE9L X1RFWFQpOworICAgICAgICAgICAgeHAtPmhhdmVfdGV4dCA9IDE7CisgICAgICAgICAgICBjb250 aW51ZTsKKworICAgICAgICB9IGVsc2UgaWYgKHhwLT5jb250ZXh0ID09IENPTlRfU1RBRykgewor ICAgICAgICAgICAgLyogaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtZWxlbWVudCAqLwor ICAgICAgICAgICAgaWYgKGNoYXJfaXNfc3BhY2UoYykpCisgICAgICAgICAgICAgICAgcmV0dXJu IHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICBpZiAoY2hhcl9pc19uYW1lX2luaXRpYWwoYykp IHsKKyAgICAgICAgICAgICAgICAvKiBUT0RPIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgKi8KKyAg ICAgICAgICAgICAgICB0b2tlbl9uZXcoeHAsIFRPS19BVFRSKTsKKyAgICAgICAgICAgICAgICB0 b2tlbl9hZGRfY2hhcih4cCwgYyk7CisgICAgICAgICAgICAgICAgeHAtPmhhdmVfbmFtZSA9IDE7 CisgICAgICAgICAgICAgICAgeHAtPmNvbnRleHQgPSBDT05UX0FUVFJJQlVURTsKKyAgICAgICAg ICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAgIHRva2VuX2VuZCh4cCk7CisgICAgICAg ICAgICAgICAgeHAtPmRlcHRoKys7CisgICAgICAgICAgICAgICAgeHAtPmNvbnRleHQgPSBDT05U X0JBU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoYyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBjdXJfdG9r ZW5fdHlwZSA9IFRPS19TRVRBRzsKKyAgICAgICAgICAgICAgICB0b2tlbl9lbmQoeHApOworICAg ICAgICAgICAgICAgIHhwLT5jb250ZXh0ID0gQ09OVF9CQVNFOworICAgICAgICAgICAgICAgIHhw LT5oYXZlX2V4cGVjdCA9ICc+JzsKKyAgICAgICAgICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJv cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKHhwLT5jb250ZXh0ID09IENP TlRfRVRBRykgeworICAgICAgICAgICAgLyogaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQt RVRhZyAqLworICAgICAgICAgICAgaWYgKGNoYXJfaXNfc3BhY2UoYykpCisgICAgICAgICAgICAg ICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICBpZiAoYyA9PSAnPicpIHsKKyAg ICAgICAgICAgICAgICAvKiBDaGVja2luZyBpdCBtYXRjaGVzIHRoZSBiZWdpbiB0YWcgd2lsbCBi ZSBkb25lIHdoZW4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgdGhlIGV2ZW50cy4gKi8K KyAgICAgICAgICAgICAgICB0b2tlbl9lbmQoeHApOworICAgICAgICAgICAgICAgIHhwLT5kZXB0 aC0tOworICAgICAgICAgICAgICAgIHhwLT5jb250ZXh0ID0geHAtPmRlcHRoID8gQ09OVF9CQVNF IDogQ09OVF9BRlRFUjsKKyAgICAgICAgICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAg ICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKHhwLT5jb250ZXh0ID09IENPTlRfQVRU UklCVVRFKSB7CisgICAgICAgICAgICBpZiAoIXhwLT5oYXZlX2VxdWFsKSB7CisgICAgICAgICAg ICAgICAgaWYgKGMgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAgIHhwLT5oYXZlX2VxdWFs ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgheHAtPmhhdmVfcXVvdGUpIHsKKyAg ICAgICAgICAgICAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXCcnKSB7CisgICAgICAgICAgICAg ICAgICAgIHhwLT5oYXZlX3F1b3RlID0gYzsKKyAgICAgICAgICAgICAgICAgICAgeHAtPmhhdmVf dGV4dCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHRva2VuX2FkZF9jaGFyKHhwLCAwKTsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHhwLT5ydW5fZXJyb3I7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSB4cC0+aGF2 ZV9xdW90ZSkgeworICAgICAgICAgICAgICAgICAgICB4cC0+aGF2ZV9xdW90ZSA9IDA7CisgICAg ICAgICAgICAgICAgICAgIHhwLT5oYXZlX2VxdWFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAg eHAtPmNvbnRleHQgPSBDT05UX1NUQUc7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cC0+ cnVuX2Vycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9 IGVsc2UgaWYgKHhwLT5jb250ZXh0ID09IENPTlRfQUZURVIpIHsKKyAgICAgICAgICAgIGlmIChj aGFyX2lzX3NwYWNlKGMpKQorICAgICAgICAgICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9yOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhdl9sb2coMCwgMTYsICJ1bmV4 cGVjdGVkIGNhc2UgZm9yICVjXG4iLCBjKTsKKyAgICByZXR1cm4gc2V0X2Vycm9yKHhwKTsKK30K Kworc3RhdGljIGludCBhZGRfZW9mKEFWWE1MUGFyc2VyICp4cCkKK3sKKyAgICBpZiAoeHAtPnBh cnNlX2Vycm9yIHx8IHhwLT5ydW5fZXJyb3IpCisgICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9y OworICAgIGlmICh4cC0+Y29udGV4dCAhPSBDT05UX0FGVEVSKQorICAgICAgICByZXR1cm4gc2V0 X2Vycm9yKHhwKTsKKyAgICB4cC0+ZW9mID0gMTsKKyAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsK K30KKworc3RhdGljIGludCBhZGRfb2N0ZXRfdXRmOChBVlhNTFBhcnNlciAqeHAsIHVuc2lnbmVk IGMpCit7CisgICAgaWYgKGMgPT0gKHVuc2lnbmVkKS0xKQorICAgICAgICByZXR1cm4gYWRkX2Vv Zih4cCk7CisgICAgaWYgKCF4cC0+dThfbGVuKSB7CisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAg ICAgICAgICAgIHJldHVybiBhZGRfY2hhcih4cCwgYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPCAw eGMwKQorICAgICAgICAgICAgcmV0dXJuIHNldF9lcnJvcih4cCk7CisgICAgICAgIGVsc2UgaWYg KGMgPCAweGUwKQorICAgICAgICAgICAgeHAtPnU4X2xlbiA9IDE7CisgICAgICAgIGVsc2UgaWYg KGMgPCAweGYwKQorICAgICAgICAgICAgeHAtPnU4X2xlbiA9IDI7CisgICAgICAgIGVsc2UgaWYg KGMgPCAweGY4KQorICAgICAgICAgICAgeHAtPnU4X2xlbiA9IDM7CisgICAgICAgIGVsc2UgaWYg KGMgPCAweGZjKQorICAgICAgICAgICAgeHAtPnU4X2xlbiA9IDQ7CisgICAgICAgIGVsc2UgaWYg KGMgPCAweGZlKQorICAgICAgICAgICAgeHAtPnU4X2xlbiA9IDU7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoeHApOworICAgICAgICB4cC0+dThfY29kZXBvaW50 ID0gKGMgJiAoMHgzZiA+PiB4cC0+dThfbGVuKSkgPDwgKDYgKiB4cC0+dThfbGVuKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBpZiAoYyA8IDB4ODAgfHwgYyA+PSAweGMwKQorICAgICAgICAgICAg cmV0dXJuIHNldF9lcnJvcih4cCk7CisgICAgICAgIHhwLT51OF9jb2RlcG9pbnQgfD0gKGMgJiAw eDNmKSA8PCAoLS14cC0+dThfbGVuICogNik7CisgICAgICAgIGlmICgheHAtPnU4X2xlbikKKyAg ICAgICAgICAgIHJldHVybiBhZGRfY2hhcih4cCwgeHAtPnU4X2NvZGVwb2ludCk7CisgICAgfQor ICAgIHJldHVybiAwOworfQorCitpbnQgYXZfeG1scF9hbGxvYyhBVlhNTFBhcnNlciAqKnJ4cCkK K3sKKyAgICBBVlhNTFBhcnNlciAqeHA7CisKKyAgICB4cCA9IGF2X2NhbGxvYygxLCBzaXplb2Yo KnhwKSk7CisgICAgaWYgKCF4cCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICB4cC0+ZW50aXRpZXMgPSAmcHJlZGVmaW5lZF9lbnRpdGllcy5lbnRpdGllczsKKyAgICB4cC0+ Y29udGV4dCA9IENPTlRfQkFTRTsKKyAgICB4cC0+YWRkX29jdGV0ID0gYWRkX29jdGV0X3V0Zjg7 IC8qIFRPRE8gcHJvYmUsIEJPTSAqLworICAgICpyeHAgPSB4cDsKKyAgICByZXR1cm4gMDsKK30K KworaW50IGF2X3htbHBfYWRkX2RhdGEoQVZYTUxQYXJzZXIgKnhwLCB1aW50OF90ICpidWYsIHNp emVfdCBzaXplKQoreworICAgIHNpemVfdCBpOworCisgICAgaWYgKHhwLT5wYXJzZV9lcnJvciB8 fCB4cC0+cnVuX2Vycm9yKQorICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIHhwLT5hZGRfb2N0ZXQoeHAsIGJ1Zltp XSk7CisgICAgICAgIGlmICh4cC0+cGFyc2VfZXJyb3IgfHwgeHAtPnJ1bl9lcnJvcikKKyAgICAg ICAgICAgIHJldHVybiB4cC0+cnVuX2Vycm9yOworICAgICAgICB4cC0+aW5fb2Zmc2V0Kys7Cisg ICAgfQorICAgIGlmICghc2l6ZSkgeworICAgICAgICB4cC0+YWRkX29jdGV0KHhwLCAtMSk7Cisg ICAgICAgIGlmICh4cC0+cGFyc2VfZXJyb3IgfHwgeHAtPnJ1bl9lcnJvcikKKyAgICAgICAgICAg IHJldHVybiB4cC0+cnVuX2Vycm9yOworICAgIH0KKyAgICBpZiAoMCAmJiAhc2l6ZSkKKyAgICAg ICAgZHVtcF90b2tlbnMoeHApOworICAgIHJldHVybiAwOworfQorCitpbnQgYXZfeG1scF9nZXRf ZXZlbnQoQVZYTUxQYXJzZXIgKnhwLCBBVlhNTFBFdmVudCAqKnJldikKK3sKKyAgICBBVlhNTFBF dmVudCAqZXYgPSAmeHAtPmV2ZW50OworICAgIHRva3NpemUgc2l6ZTsKKyAgICBUb2tlblR5cGUg dHlwZTsKKyAgICB1aW50OF90ICpib2R5OworCisgICAgaWYgKHhwLT5ydW5fZXJyb3IgPCAwKQor ICAgICAgICByZXR1cm4geHAtPnJ1bl9lcnJvcjsKKyAgICBpZiAoeHAtPnBhcnNlX2Vycm9yIDwg MCkKKyAgICAgICAgcmV0dXJuIHhwLT5wYXJzZV9lcnJvcjsKKyAgICBpZiAoeHAtPmJ1Zl90YWls ID09IHhwLT5idWZfY3VyX3Rva2VuKQorICAgICAgICByZXR1cm4geHAtPmVvZiA/IEFWRVJST1Jf RU9GIDogQVZFUlJPUihFQUdBSU4pOworCisgICAgc2l6ZSA9ICp0b2tlbl9hdF9zaXplKHhwLCB4 cC0+YnVmX3RhaWwpOworICAgIHR5cGUgPSAqdG9rZW5fYXRfdHlwZSh4cCwgeHAtPmJ1Zl90YWls KTsKKyAgICBib2R5ID0gIHRva2VuX2F0X2JvZHkoeHAsIHhwLT5idWZfdGFpbCk7CisgICAgbWVt c2V0KGV2LCAwLCBzaXplb2YoKmV2KSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBU T0tfU1RBRzoKKyAgICAgICAgZXYtPnR5cGUgPSBBVl9YTUxQX0VWX0VMX1NUQVJUOworICAgICAg ICBldi0+bmFtZSA9IGJvZHk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUT0tfRVRBRzoK KyAgICAgICAgLyogVE9ETyBjaGVjayBjb25zaXN0ZW5jeSAqLworICAgICAgICBldi0+dHlwZSA9 IEFWX1hNTFBfRVZfRUxfRU5EOworICAgICAgICBldi0+bmFtZSA9IGJvZHk7CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBUT0tfU0VUQUc6CisgICAgICAgIGV2LT50eXBlID0gQVZfWE1MUF9F Vl9FTF9FTVBUWTsKKyAgICAgICAgZXYtPm5hbWUgPSBib2R5OworICAgICAgICBicmVhazsKKwor ICAgIGNhc2UgVE9LX0FUVFI6CisgICAgICAgIGV2LT50eXBlID0gQVZfWE1MUF9FVl9BVFRSOwor ICAgICAgICBldi0+bmFtZSA9IGJvZHk7CisgICAgICAgIGV2LT50ZXh0ID0gYm9keSArIHN0cmxl bihib2R5KSArIDE7CisgICAgICAgIGV2LT50ZXh0X2xlbiA9IGJvZHkgKyBzaXplIC0gZXYtPnRl eHQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUT0tfVEVYVDoKKyAgICAgICAgZXYtPnR5 cGUgPSBBVl9YTUxQX0VWX1RFWFQ7CisgICAgICAgIGV2LT50ZXh0ID0gYm9keTsKKyAgICAgICAg ZXYtPnRleHRfbGVuID0gc2l6ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg ICAgICBhdl9hc3NlcnQwKCEicmVhY2hlZCIpOworICAgIH0KKyAgICB4cC0+YnVmX3RhaWwgPSB0 b2tlbl9hdF9uZXh0KHhwLCB4cC0+YnVmX3RhaWwpOworICAgICpyZXYgPSBldjsKKyAgICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC94bWxwYXJzZXIuaCBiL2xpYmF2dXRpbC94 bWxwYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNGZiZjQ2 ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1dGlsL3htbHBhcnNlci5oCkBAIC0wLDAgKzEs NTggQEAKKy8qCisgKiBMaW1pdGVkIFhNTCBwYXJzZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVlVUSUxfWE1MUEFSU0VSX0gKKyNkZWZpbmUgQVZV VElMX1hNTFBBUlNFUl9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQu aD4KKwordHlwZWRlZiBzdHJ1Y3QgQVZYTUxQYXJzZXIgQVZYTUxQYXJzZXI7CisKK3R5cGVkZWYg ZW51bSBBVlhNTFBFdmVudFR5cGUgQVZYTUxQRXZlbnRUeXBlOworCit0eXBlZGVmIHN0cnVjdCBB VlhNTFBFdmVudCBBVlhNTFBFdmVudDsKKwordHlwZWRlZiBzdHJ1Y3QgQVZYTUxQRW50aXRpZXMg QVZYTUxQRW50aXRpZXM7CisKK2VudW0gQVZYTUxQRXZlbnRUeXBlIHsKKyAgICBBVl9YTUxQX0VW X0VMX1NUQVJULAorICAgIEFWX1hNTFBfRVZfRUxfRU5ELAorICAgIEFWX1hNTFBfRVZfRUxfRU1Q VFksCisgICAgQVZfWE1MUF9FVl9BVFRSLAorICAgIEFWX1hNTFBfRVZfVEVYVCwKK307CisKK3N0 cnVjdCBBVlhNTFBFdmVudCB7CisgICAgY29uc3QgdWludDhfdCAqbmFtZTsKKyAgICBjb25zdCB1 aW50OF90ICp0ZXh0OworICAgIHNpemVfdCB0ZXh0X2xlbjsKKyAgICBBVlhNTFBFdmVudFR5cGUg dHlwZTsKK307CisKK2ludCBhdl94bWxwX2FsbG9jKEFWWE1MUGFyc2VyICoqcnhwKTsKKworaW50 IGF2X3htbHBfYWRkX2RhdGEoQVZYTUxQYXJzZXIgKnhwLCB1aW50OF90ICpidWYsIHNpemVfdCBz aXplKTsKKworaW50IGF2X3htbHBfYWRkX2VvZihBVlhNTFBhcnNlciAqeHApOworCitpbnQgYXZf eG1scF9nZXRfZXZlbnQoQVZYTUxQYXJzZXIgKnhwLCBBVlhNTFBFdmVudCAqKmV2KTsKKworI2Vu ZGlmIC8qIEFWRklMVEVSX0ZJTFRFUlNfSCAqLwotLSAKMi4zNS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0 CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNj cmliZSIuCg==