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 E460F48BBE for ; Thu, 7 Mar 2024 15:24:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6F8AB68C455; Thu, 7 Mar 2024 17:24:52 +0200 (EET) Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 62C9568C25D for ; Thu, 7 Mar 2024 17:24:46 +0200 (EET) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=cJAk9+T5; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id E66504D42 for ; Thu, 7 Mar 2024 16:24:45 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id gr9n0VdokvCV for ; Thu, 7 Mar 2024 16:24:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1709825084; bh=hGYTnsYzBiXrw20+tMMxBhCVM+rkczb8jCcOsKN1lRM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=cJAk9+T5jtpRjj7fXP5SEqml8I+AldyrlwQnOOjHAclmE7WyWJHkFxUEWRNowoRje r3hNI2vZu6km7s2c+KBb/WpL8uHU58mgbFcNKjVTtFSyqD3yVdCUuXskvHx7iWioEB CLz5mvxbfnu74lapXFUPlzv+3InH0Y2gVXDgFO3U76kMeJzIj16f9qMKaPRUB3CZOs 9Ifz5+eNNUXCnRmP9YozOMmTld7Y4IKz/NNzygWDsQq0DB0k5HmJBvFvmSDpVQqqMy p0vtJBDbErBUcFr7QTwSpytZyYKpGOh/d/oy7YH9A2OKxt12V3A+DS02Zda5j4J4rW NSsWjZj3AORhA== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id C78A110B9 for ; Thu, 7 Mar 2024 16:24:44 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id AB3DD3A03D8 for ; Thu, 7 Mar 2024 16:24:44 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 7 Mar 2024 16:24:07 +0100 Message-ID: <20240307152416.5151-1-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 06/29] lavu/opt: add array options 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: LS0tCiBkb2MvQVBJY2hhbmdlcyAgICAgICAgfCAgIDMgKwogbGliYXZ1dGlsL29wdC5jICAgICAg IHwgMzYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogbGliYXZ1 dGlsL29wdC5oICAgICAgIHwgIDU2ICsrKysrKy0KIGxpYmF2dXRpbC90ZXN0cy9vcHQuYyB8ICA0 OSArKysrKysKIHRlc3RzL3JlZi9mYXRlL29wdCAgICB8ICAzNSArKystCiA1IGZpbGVzIGNoYW5n ZWQsIDQ1OCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv QVBJY2hhbmdlcyBiL2RvYy9BUEljaGFuZ2VzCmluZGV4IDRmNzYxMmU0NDkuLjZlMmM4NTFlMzEg MTAwNjQ0Ci0tLSBhL2RvYy9BUEljaGFuZ2VzCisrKyBiL2RvYy9BUEljaGFuZ2VzCkBAIC0yLDYg KzIsOSBAQCBUaGUgbGFzdCB2ZXJzaW9uIGluY3JlYXNlcyBvZiBhbGwgbGlicmFyaWVzIHdlcmUg b24gMjAyNC0wMy0wNwogCiBBUEkgY2hhbmdlcywgbW9zdCByZWNlbnQgZmlyc3Q6CiAKKzIwMjQt MDIteHggLSB4eHh4eHh4eHh4IC0gbGF2dSA1OC54eC4xMDAgLSBvcHQuaAorICBBZGQgQVZfT1BU X1RZUEVfRkxBR19BUlJBWSBhbmQgQVZPcHRpb25BcnJheURlZi4KKwogMjAyNC0wMy0wNiAtIHh4 eHh4eHh4eHggLSBsYXZmIDYwLjI1LjEwMCAtIGF2Zm9ybWF0LmgKICAgRGVwcmVjYXRlIGF2X2Zt dF9jdHhfZ2V0X2R1cmF0aW9uX2VzdGltYXRpb25fbWV0aG9kKCkuCiAgIFRoZSByZWxldmFudCBm aWVsZCBpcyBwdWJsaWMgYW5kIG5lZWRzIG5vIGdldHRlciB0byBhY2Nlc3MuCmRpZmYgLS1naXQg YS9saWJhdnV0aWwvb3B0LmMgYi9saWJhdnV0aWwvb3B0LmMKaW5kZXggMDZkMzA1NmEzNy4uNjg1 MjA2ZjQxNiAxMDA2NDQKLS0tIGEvbGliYXZ1dGlsL29wdC5jCisrKyBiL2xpYmF2dXRpbC9vcHQu YwpAQCAtNDMsNiArNDMsOCBAQAogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAorI2RlZmluZSBUWVBF X0JBU0UodHlwZSkgKCh0eXBlKSAmIH5BVl9PUFRfVFlQRV9GTEFHX0FSUkFZKQorCiBjb25zdCBB Vk9wdGlvbiAqYXZfb3B0X25leHQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbGFz dCkKIHsKICAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKQEAgLTEwMCw2ICsxMDIsNTQgQEAgc3Rh dGljIGludCBvcHRfaXNfcG9kKGVudW0gQVZPcHRpb25UeXBlIHR5cGUpCiAgICAgcmV0dXJuIDA7 CiB9CiAKK3N0YXRpYyB1aW50OF90IG9wdF9hcnJheV9zZXAoY29uc3QgQVZPcHRpb24gKm8pCit7 CisgICAgY29uc3QgQVZPcHRpb25BcnJheURlZiAqZCA9IG8tPmRlZmF1bHRfdmFsLmFycjsKKyAg ICBhdl9hc3NlcnQxKG8tPnR5cGUgJiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKTsKKyAgICByZXR1 cm4gKGQgJiYgZC0+c2VwKSA/IGQtPnNlcCA6ICcsJzsKK30KKworc3RhdGljIHZvaWQgKm9wdF9h cnJheV9wZWxlbShjb25zdCBBVk9wdGlvbiAqbywgdm9pZCAqYXJyYXksIHVuc2lnbmVkIGlkeCkK K3sKKyAgICBhdl9hc3NlcnQxKG8tPnR5cGUgJiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKTsKKyAg ICByZXR1cm4gKHVpbnQ4X3QgKilhcnJheSArIGlkeCAqIG9wdF9lbGVtX3NpemVbVFlQRV9CQVNF KG8tPnR5cGUpXTsKK30KKworc3RhdGljIHVuc2lnbmVkICpvcHRfYXJyYXlfcGNvdW50KGNvbnN0 IHZvaWQgKnBhcnJheSkKK3sKKyAgICByZXR1cm4gKHVuc2lnbmVkICopKChjb25zdCB2b2lkICog Y29uc3QgKilwYXJyYXkgKyAxKTsKK30KKworc3RhdGljIHZvaWQgb3B0X2ZyZWVfZWxlbShjb25z dCBBVk9wdGlvbiAqbywgdm9pZCAqcHRyKQoreworICAgIHN3aXRjaCAoVFlQRV9CQVNFKG8tPnR5 cGUpKSB7CisgICAgY2FzZSBBVl9PUFRfVFlQRV9TVFJJTkc6CisgICAgY2FzZSBBVl9PUFRfVFlQ RV9CSU5BUlk6CisgICAgICAgIGF2X2ZyZWVwKHB0cik7CisgICAgICAgIGJyZWFrOworCisgICAg Y2FzZSBBVl9PUFRfVFlQRV9ESUNUOgorICAgICAgICBhdl9kaWN0X2ZyZWUoKEFWRGljdGlvbmFy eSAqKilwdHIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQVZfT1BUX1RZUEVfQ0hMQVlP VVQ6CisgICAgICAgIGF2X2NoYW5uZWxfbGF5b3V0X3VuaW5pdCgoQVZDaGFubmVsTGF5b3V0ICop cHRyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIG9wdF9mcmVlX2FycmF5KGNvbnN0IEFWT3B0aW9uICpvLCB2 b2lkICpwYXJyYXksIHVuc2lnbmVkICpjb3VudCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgKmNvdW50OyBpKyspCisgICAgICAgIG9wdF9mcmVlX2VsZW0obywgb3B0X2FycmF5X3Bl bGVtKG8sICoodm9pZCAqKilwYXJyYXksIGkpKTsKKworICAgIGF2X2ZyZWVwKHBhcnJheSk7Cisg ICAgKmNvdW50ID0gMDsKK30KKwogc3RhdGljIGludCByZWFkX251bWJlcihjb25zdCBBVk9wdGlv biAqbywgY29uc3Qgdm9pZCAqZHN0LCBkb3VibGUgKm51bSwgaW50ICpkZW4sIGludDY0X3QgKmlu dG51bSkKIHsKICAgICBzd2l0Y2ggKG8tPnR5cGUpIHsKQEAgLTE0MCwxNCArMTkwLDE2IEBAIHN0 YXRpYyBpbnQgcmVhZF9udW1iZXIoY29uc3QgQVZPcHRpb24gKm8sIGNvbnN0IHZvaWQgKmRzdCwg ZG91YmxlICpudW0sIGludCAqZGVuCiAKIHN0YXRpYyBpbnQgd3JpdGVfbnVtYmVyKHZvaWQgKm9i aiwgY29uc3QgQVZPcHRpb24gKm8sIHZvaWQgKmRzdCwgZG91YmxlIG51bSwgaW50IGRlbiwgaW50 NjRfdCBpbnRudW0pCiB7Ci0gICAgaWYgKG8tPnR5cGUgIT0gQVZfT1BUX1RZUEVfRkxBR1MgJiYK KyAgICBjb25zdCBlbnVtIEFWT3B0aW9uVHlwZSB0eXBlID0gVFlQRV9CQVNFKG8tPnR5cGUpOwor CisgICAgaWYgKHR5cGUgIT0gQVZfT1BUX1RZUEVfRkxBR1MgJiYKICAgICAgICAgKCFkZW4gfHwg by0+bWF4ICogZGVuIDwgbnVtICogaW50bnVtIHx8IG8tPm1pbiAqIGRlbiA+IG51bSAqIGludG51 bSkpIHsKICAgICAgICAgbnVtID0gZGVuID8gbnVtICogaW50bnVtIC8gZGVuIDogKG51bSAmJiBp bnRudW0gPyBJTkZJTklUWSA6IE5BTik7CiAgICAgICAgIGF2X2xvZyhvYmosIEFWX0xPR19FUlJP UiwgIlZhbHVlICVmIGZvciBwYXJhbWV0ZXIgJyVzJyBvdXQgb2YgcmFuZ2UgWyVnIC0gJWddXG4i LAogICAgICAgICAgICAgICAgbnVtLCBvLT5uYW1lLCBvLT5taW4sIG8tPm1heCk7CiAgICAgICAg IHJldHVybiBBVkVSUk9SKEVSQU5HRSk7CiAgICAgfQotICAgIGlmIChvLT50eXBlID09IEFWX09Q VF9UWVBFX0ZMQUdTKSB7CisgICAgaWYgKHR5cGUgPT0gQVZfT1BUX1RZUEVfRkxBR1MpIHsKICAg ICAgICAgZG91YmxlIGQgPSBudW0qaW50bnVtL2RlbjsKICAgICAgICAgaWYgKGQgPCAtMS41IHx8 IGQgPiAweEZGRkZGRkZGKzAuNSB8fCAobGxyaW50KGQqMjU2KSAmIDI1NSkpIHsKICAgICAgICAg ICAgIGF2X2xvZyhvYmosIEFWX0xPR19FUlJPUiwKQEAgLTE1Nyw3ICsyMDksNyBAQCBzdGF0aWMg aW50IHdyaXRlX251bWJlcih2b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpvLCB2b2lkICpkc3Qs IGRvdWJsZSBudW0sIGludAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3dpdGNoIChvLT50eXBl KSB7CisgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBBVl9PUFRfVFlQRV9QSVhFTF9GTVQ6 CiAgICAgICAgICooZW51bSBBVlBpeGVsRm9ybWF0ICopZHN0ID0gbGxyaW50KG51bSAvIGRlbikg KiBpbnRudW07CiAgICAgICAgIGJyZWFrOwpAQCAtMjcxLDkgKzMyMywxMCBAQCBzdGF0aWMgaW50 IHNldF9zdHJpbmcodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hhciAqdmFs LCB1aW50OF90ICoqZAogCiBzdGF0aWMgaW50IHNldF9zdHJpbmdfbnVtYmVyKHZvaWQgKm9iaiwg dm9pZCAqdGFyZ2V0X29iaiwgY29uc3QgQVZPcHRpb24gKm8sIGNvbnN0IGNoYXIgKnZhbCwgdm9p ZCAqZHN0KQogeworICAgIGNvbnN0IGVudW0gQVZPcHRpb25UeXBlIHR5cGUgPSBUWVBFX0JBU0Uo by0+dHlwZSk7CiAgICAgaW50IHJldCA9IDA7CiAKLSAgICBpZiAoby0+dHlwZSA9PSBBVl9PUFRf VFlQRV9SQVRJT05BTCB8fCBvLT50eXBlID09IEFWX09QVF9UWVBFX1ZJREVPX1JBVEUpIHsKKyAg ICBpZiAodHlwZSA9PSBBVl9PUFRfVFlQRV9SQVRJT05BTCB8fCB0eXBlID09IEFWX09QVF9UWVBF X1ZJREVPX1JBVEUpIHsKICAgICAgICAgaW50IG51bSwgZGVuOwogICAgICAgICBjaGFyIGM7CiAg ICAgICAgIGlmIChzc2NhbmYodmFsLCAiJWQlKjFbOi9dJWQlYyIsICZudW0sICZkZW4sICZjKSA9 PSAyKSB7CkBAIC0yOTAsNyArMzQzLDcgQEAgc3RhdGljIGludCBzZXRfc3RyaW5nX251bWJlcih2 b2lkICpvYmosIHZvaWQgKnRhcmdldF9vYmosIGNvbnN0IEFWT3B0aW9uICpvLCBjb24KICAgICAg ICAgZG91YmxlIGQ7CiAgICAgICAgIGludDY0X3QgaW50bnVtID0gMTsKIAotICAgICAgICBpZiAo by0+dHlwZSA9PSBBVl9PUFRfVFlQRV9GTEFHUykgeworICAgICAgICBpZiAodHlwZSA9PSBBVl9P UFRfVFlQRV9GTEFHUykgewogICAgICAgICAgICAgaWYgKCp2YWwgPT0gJysnIHx8ICp2YWwgPT0g Jy0nKQogICAgICAgICAgICAgICAgIGNtZCA9ICoodmFsKyspOwogICAgICAgICAgICAgZm9yICg7 IGkgPCBzaXplb2YoYnVmKSAtIDEgJiYgdmFsW2ldICYmIHZhbFtpXSAhPSAnKycgJiYgdmFsW2ld ICE9ICctJzsgaSsrKQpAQCAtMzQ2LDcgKzM5OSw3IEBAIHN0YXRpYyBpbnQgc2V0X3N0cmluZ19u dW1iZXIodm9pZCAqb2JqLCB2b2lkICp0YXJnZXRfb2JqLCBjb25zdCBBVk9wdGlvbiAqbywgY29u CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm IChvLT50eXBlID09IEFWX09QVF9UWVBFX0ZMQUdTKSB7CisgICAgICAgIGlmICh0eXBlID09IEFW X09QVF9UWVBFX0ZMQUdTKSB7CiAgICAgICAgICAgICBpbnRudW0gPSAqKHVuc2lnbmVkIGludCop ZHN0OwogICAgICAgICAgICAgaWYgKGNtZCA9PSAnKycpCiAgICAgICAgICAgICAgICAgZCA9IGlu dG51bSB8IChpbnQ2NF90KWQ7CkBAIC01MzEsMTggKzU4NCwxNyBAQCBzdGF0aWMgaW50IHNldF9z dHJpbmdfY2hhbm5lbF9sYXlvdXQodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbywKIHN0YXRp YyBpbnQgb3B0X3NldF9lbGVtKHZvaWQgKm9iaiwgdm9pZCAqdGFyZ2V0X29iaiwgY29uc3QgQVZP cHRpb24gKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWwsIHZvaWQg KmRzdCkKIHsKKyAgICBjb25zdCBlbnVtIEFWT3B0aW9uVHlwZSB0eXBlID0gVFlQRV9CQVNFKG8t PnR5cGUpOwogICAgIGludCByZXQ7CiAKLUZGX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MK LSAgICBpZiAoIXZhbCAmJiAoby0+dHlwZSAhPSBBVl9PUFRfVFlQRV9TVFJJTkcgJiYKLSAgICAg ICAgICAgICAgICAgby0+dHlwZSAhPSBBVl9PUFRfVFlQRV9QSVhFTF9GTVQgJiYgby0+dHlwZSAh PSBBVl9PUFRfVFlQRV9TQU1QTEVfRk1UICYmCi0gICAgICAgICAgICAgICAgIG8tPnR5cGUgIT0g QVZfT1BUX1RZUEVfSU1BR0VfU0laRSAmJgotICAgICAgICAgICAgICAgICBvLT50eXBlICE9IEFW X09QVF9UWVBFX0RVUkFUSU9OICYmIG8tPnR5cGUgIT0gQVZfT1BUX1RZUEVfQ09MT1IgJiYKLSAg ICAgICAgICAgICAgICAgby0+dHlwZSAhPSBBVl9PUFRfVFlQRV9CT09MKSkKKyAgICBpZiAoIXZh bCAmJiAodHlwZSAhPSBBVl9PUFRfVFlQRV9TVFJJTkcgJiYKKyAgICAgICAgICAgICAgICAgdHlw ZSAhPSBBVl9PUFRfVFlQRV9QSVhFTF9GTVQgJiYgdHlwZSAhPSBBVl9PUFRfVFlQRV9TQU1QTEVf Rk1UICYmCisgICAgICAgICAgICAgICAgIHR5cGUgIT0gQVZfT1BUX1RZUEVfSU1BR0VfU0laRSAm JgorICAgICAgICAgICAgICAgICB0eXBlICE9IEFWX09QVF9UWVBFX0RVUkFUSU9OICYmIHR5cGUg IT0gQVZfT1BUX1RZUEVfQ09MT1IgJiYKKyAgICAgICAgICAgICAgICAgdHlwZSAhPSBBVl9PUFRf VFlQRV9CT09MKSkKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLUZGX0VOQUJMRV9E RVBSRUNBVElPTl9XQVJOSU5HUwogCi0gICAgc3dpdGNoIChvLT50eXBlKSB7CisgICAgc3dpdGNo ICh0eXBlKSB7CiAgICAgY2FzZSBBVl9PUFRfVFlQRV9CT09MOgogICAgICAgICByZXR1cm4gc2V0 X3N0cmluZ19ib29sKG9iaiwgbywgdmFsLCBkc3QpOwogICAgIGNhc2UgQVZfT1BUX1RZUEVfU1RS SU5HOgpAQCAtNjA0LDYgKzY1Niw4NSBAQCBGRl9FTkFCTEVfREVQUkVDQVRJT05fV0FSTklOR1MK ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwogfQogCitzdGF0aWMgaW50IG9wdF9zZXRfYXJy YXkodm9pZCAqb2JqLCB2b2lkICp0YXJnZXRfb2JqLCBjb25zdCBBVk9wdGlvbiAqbywKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWwsIHZvaWQgKmRzdCkKK3sKKyAgICBj b25zdCBBVk9wdGlvbkFycmF5RGVmICphcnIgPSBvLT5kZWZhdWx0X3ZhbC5hcnI7CisgICAgY29u c3Qgc2l6ZV90ICAgICAgZWxlbV9zaXplID0gb3B0X2VsZW1fc2l6ZVtUWVBFX0JBU0Uoby0+dHlw ZSldOworICAgIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgIHNlcCA9IG9wdF9hcnJheV9zZXAobyk7 CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAqc3RyID0gTlVMTDsKKworICAgIHZvaWQgICAg ICAgKmVsZW1zID0gTlVMTDsKKyAgICB1bnNpZ25lZCBuYl9lbGVtcyA9IDA7CisgICAgaW50IHJl dDsKKworICAgIGlmICh2YWwgJiYgKnZhbCkgeworICAgICAgICBzdHIgPSBhdl9tYWxsb2Moc3Ry bGVuKHZhbCkgKyAxKTsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworICAgIH0KKworICAgIC8vIHNwbGl0IGFuZCB1bmVzY2FwZSB0aGUgc3Ry aW5nCisgICAgd2hpbGUgKHZhbCAmJiAqdmFsKSB7CisgICAgICAgIHVpbnQ4X3QgKnAgPSBzdHI7 CisgICAgICAgIHZvaWQgKnRtcDsKKworICAgICAgICBpZiAoYXJyICYmIGFyci0+c2l6ZV9tYXgg JiYgbmJfZWxlbXMgPj0gYXJyLT5zaXplX21heCkgeworICAgICAgICAgICAgYXZfbG9nKG9iaiwg QVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJDYW5ub3QgYXNzaWduIG1vcmUgdGhh biAldSBlbGVtZW50cyB0byBhcnJheSBvcHRpb24gJXNcbiIsCisgICAgICAgICAgICAgICAgICAg YXJyLT5zaXplX21heCwgby0+bmFtZSk7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZB TCk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsg KnZhbDsgdmFsKyssIHArKykgeworICAgICAgICAgICAgaWYgKCp2YWwgPT0gJ1xcJyAmJiB2YWxb MV0pCisgICAgICAgICAgICAgICAgdmFsKys7CisgICAgICAgICAgICBlbHNlIGlmICgqdmFsID09 IHNlcCkgeworICAgICAgICAgICAgICAgIHZhbCsrOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgKnAgPSAqdmFsOworICAgICAgICB9CisgICAgICAg ICpwID0gMDsKKworICAgICAgICB0bXAgPSBhdl9yZWFsbG9jX2FycmF5KGVsZW1zLCBuYl9lbGVt cyArIDEsIGVsZW1fc2l6ZSk7CisgICAgICAgIGlmICghdG1wKSB7CisgICAgICAgICAgICByZXQg PSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAg ICAgICAgZWxlbXMgPSB0bXA7CisKKyAgICAgICAgdG1wID0gb3B0X2FycmF5X3BlbGVtKG8sIGVs ZW1zLCBuYl9lbGVtcyk7CisgICAgICAgIG1lbXNldCh0bXAsIDAsIGVsZW1fc2l6ZSk7CisKKyAg ICAgICAgcmV0ID0gb3B0X3NldF9lbGVtKG9iaiwgdGFyZ2V0X29iaiwgbywgc3RyLCB0bXApOwor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgbmJf ZWxlbXMrKzsKKyAgICB9CisgICAgYXZfZnJlZXAoJnN0cik7CisKKyAgICBvcHRfZnJlZV9hcnJh eShvLCBkc3QsIG9wdF9hcnJheV9wY291bnQoZHN0KSk7CisKKyAgICBpZiAoYXJyICYmIG5iX2Vs ZW1zIDwgYXJyLT5zaXplX21pbikgeworICAgICAgICBhdl9sb2cob2JqLCBBVl9MT0dfRVJST1Is CisgICAgICAgICAgICAgICAiQ2Fubm90IGFzc2lnbiBmZXdlciB0aGFuICV1IGVsZW1lbnRzIHRv IGFycmF5IG9wdGlvbiAlc1xuIiwKKyAgICAgICAgICAgICAgIGFyci0+c2l6ZV9taW4sIG8tPm5h bWUpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICAqKCh2b2lkICoqKWRzdCkgICAgICAgID0gZWxlbXM7CisgICAgKm9wdF9h cnJheV9wY291bnQoZHN0KSA9IG5iX2VsZW1zOworCisgICAgcmV0dXJuIDA7CitmYWlsOgorICAg IGF2X2ZyZWVwKCZzdHIpOworICAgIG9wdF9mcmVlX2FycmF5KG8sICZlbGVtcywgJm5iX2VsZW1z KTsKKyAgICByZXR1cm4gcmV0OworfQorCiBpbnQgYXZfb3B0X3NldCh2b2lkICpvYmosIGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCwgaW50IHNlYXJjaF9mbGFncykKIHsKICAgICB2 b2lkICpkc3QsICp0YXJnZXRfb2JqOwpAQCAtNjE5LDcgKzc1MCw4IEBAIGludCBhdl9vcHRfc2V0 KHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsLCBpbnQgc2VhcmNo X2ZsYWdzKQogCiAgICAgZHN0ID0gKCh1aW50OF90ICopdGFyZ2V0X29iaikgKyBvLT5vZmZzZXQ7 CiAKLSAgICByZXR1cm4gb3B0X3NldF9lbGVtKG9iaiwgdGFyZ2V0X29iaiwgbywgdmFsLCBkc3Qp OworICAgIHJldHVybiAoKG8tPnR5cGUgJiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKSA/CisgICAg ICAgICAgICBvcHRfc2V0X2FycmF5IDogb3B0X3NldF9lbGVtKShvYmosIHRhcmdldF9vYmosIG8s IHZhbCwgZHN0KTsKIH0KIAogI2RlZmluZSBPUFRfRVZBTF9OVU1CRVIobmFtZSwgb3B0dHlwZSwg dmFydHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjQ3LDcgKzc3OSw3IEBAIHN0 YXRpYyBpbnQgc2V0X251bWJlcih2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSBu dW0sIGludCBkZW4sIGludDY0X3QKICAgICBpZiAoIW8gfHwgIXRhcmdldF9vYmopCiAgICAgICAg IHJldHVybiBBVkVSUk9SX09QVElPTl9OT1RfRk9VTkQ7CiAKLSAgICBpZiAoby0+ZmxhZ3MgJiBB Vl9PUFRfRkxBR19SRUFET05MWSkKKyAgICBpZiAoKG8tPmZsYWdzICYgQVZfT1BUX0ZMQUdfUkVB RE9OTFkpIHx8IChvLT50eXBlICYgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSkpCiAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7CiAKICAgICBkc3QgPSAoKHVpbnQ4X3QgKil0YXJnZXRfb2Jq KSArIG8tPm9mZnNldDsKQEAgLTczMCw3ICs4NjIsOCBAQCBpbnQgYXZfb3B0X3NldF92aWRlb19y YXRlKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgQVZSYXRpb25hbCB2YWwsIGludCBzZWFy YwogICAgICAgICByZXR1cm4gQVZFUlJPUl9PUFRJT05fTk9UX0ZPVU5EOwogICAgIGlmIChvLT50 eXBlICE9IEFWX09QVF9UWVBFX1ZJREVPX1JBVEUpIHsKICAgICAgICAgYXZfbG9nKG9iaiwgQVZf TE9HX0VSUk9SLAotICAgICAgICAgICAgICAgIlRoZSB2YWx1ZSBzZXQgYnkgb3B0aW9uICclcycg aXMgbm90IGEgdmlkZW8gcmF0ZS5cbiIsIG8tPm5hbWUpOworICAgICAgICAgICAgICAgIlRoZSB2 YWx1ZSBzZXQgYnkgb3B0aW9uICclcycgaXMgbm90IGEgdmlkZW8gcmF0ZS5cbiIsCisgICAgICAg ICAgICAgICBvLT5uYW1lKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9 CiAgICAgaWYgKHZhbC5udW0gPD0gMCB8fCB2YWwuZGVuIDw9IDApCkBAIC04NTIsNyArOTg1LDcg QEAgc3RhdGljIGludCBvcHRfZ2V0X2VsZW0oY29uc3QgQVZPcHRpb24gKm8sIHVpbnQ4X3QgKipw YnVmLCBzaXplX3QgYnVmX2xlbiwKIHsKICAgICBpbnQgcmV0OwogCi0gICAgc3dpdGNoIChvLT50 eXBlKSB7CisgICAgc3dpdGNoIChUWVBFX0JBU0Uoby0+dHlwZSkpIHsKICAgICBjYXNlIEFWX09Q VF9UWVBFX0JPT0w6CiAgICAgICAgIHJldCA9IHNucHJpbnRmKCpwYnVmLCBidWZfbGVuLCAiJXMi LCBnZXRfYm9vbF9uYW1lKCooaW50ICopZHN0KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTQ5LDYg KzEwODIsNjYgQEAgc3RhdGljIGludCBvcHRfZ2V0X2VsZW0oY29uc3QgQVZPcHRpb24gKm8sIHVp bnQ4X3QgKipwYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICByZXR1cm4gcmV0OwogfQogCitzdGF0 aWMgaW50IG9wdF9nZXRfYXJyYXkoY29uc3QgQVZPcHRpb24gKm8sIHZvaWQgKmRzdCwgdWludDhf dCAqKm91dF92YWwpCit7CisgICAgY29uc3QgdW5zaWduZWQgY291bnQgPSAqb3B0X2FycmF5X3Bj b3VudChkc3QpOworICAgIGNvbnN0IHVpbnQ4X3QgICAgc2VwID0gb3B0X2FycmF5X3NlcChvKTsK KworICAgIHVpbnQ4X3QgKnN0ciAgICAgPSBOVUxMOworICAgIHNpemVfdCAgIHN0cl9sZW4gPSAw OworICAgIGludCByZXQ7CisKKyAgICAqb3V0X3ZhbCA9IE5VTEw7CisKKyAgICBmb3IgKHVuc2ln bmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB1aW50OF90IGJ1ZlsxMjhdLCAq b3V0ID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0X2xlbjsKKworICAgICAgICByZXQgPSBvcHRf Z2V0X2VsZW0obywgJm91dCwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcHRfYXJyYXlfcGVsZW0obywgKih2b2lkICoqKWRzdCwgaSksIDApOworICAgICAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBvdXRfbGVuID0gc3Ry bGVuKG91dCk7CisgICAgICAgIGlmIChvdXRfbGVuID4gU0laRV9NQVggLyAyIC0gISFpIHx8Cisg ICAgICAgICAgICAhIWkgKyBvdXRfbGVuICogMiA+IFNJWkVfTUFYIC0gc3RyX2xlbiAtIDEpIHsK KyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRVJBTkdFKTsKKyAgICAgICAgICAgIGdvdG8gZmFp bDsKKyAgICAgICAgfQorCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1p bmF0b3IgICAgIGVzY2FwaW5nICBzZXBhcmF0b3IKKyAgICAgICAgLy8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIOKGkyAgICAgICAgICAgICDihpMgICAgIOKGkworICAgICAgICByZXQg PSBhdl9yZWFsbG9jcCgmc3RyLCBzdHJfbGVuICsgMSArIG91dF9sZW4gKiAyICsgISFpKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgLy8g YWRkIHNlcGFyYXRvciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBzdHJb c3RyX2xlbisrXSA9IHNlcDsKKworICAgICAgICAvLyBlc2NhcGUgdGhlIGVsZW1lbnQKKyAgICAg ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG91dF9sZW47IGorKykgeworICAgICAgICAgICAg dWludDhfdCB2YWwgPSBvdXRbal07CisgICAgICAgICAgICBpZiAodmFsID09IHNlcCB8fCB2YWwg PT0gJ1xcJykKKyAgICAgICAgICAgICAgICBzdHJbc3RyX2xlbisrXSA9ICdcXCc7CisgICAgICAg ICAgICBzdHJbc3RyX2xlbisrXSA9IHZhbDsKKyAgICAgICAgfQorICAgICAgICBzdHJbc3RyX2xl bl0gPSAwOworCitmYWlsOgorICAgICAgICBpZiAob3V0ICE9IGJ1ZikKKyAgICAgICAgICAgIGF2 X2ZyZWVwKCZvdXQpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgYXZfZnJl ZXAoJnN0cik7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisg ICAgKm91dF92YWwgPSBzdHI7CisKKyAgICByZXR1cm4gMDsKK30KKwogaW50IGF2X29wdF9nZXQo dm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLCB1aW50OF90ICoq b3V0X3ZhbCkKIHsKICAgICB2b2lkICpkc3QsICp0YXJnZXRfb2JqOwpAQCAtOTY0LDggKzExNTcs MTkgQEAgaW50IGF2X29wdF9nZXQodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2Vh cmNoX2ZsYWdzLCB1aW50OF90ICoqb3V0X3ZhbCkKIAogICAgIGRzdCA9ICh1aW50OF90ICopdGFy Z2V0X29iaiArIG8tPm9mZnNldDsKIAotICAgIGJ1ZlswXSA9IDA7CisgICAgaWYgKG8tPnR5cGUg JiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKSB7CisgICAgICAgIHJldCA9IG9wdF9nZXRfYXJyYXko bywgZHN0LCBvdXRfdmFsKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1 cm4gcmV0OworICAgICAgICBpZiAoISpvdXRfdmFsICYmICEoc2VhcmNoX2ZsYWdzICYgQVZfT1BU X0FMTE9XX05VTEwpKSB7CisgICAgICAgICAgICAqb3V0X3ZhbCA9IGF2X3N0cmR1cCgiIik7Cisg ICAgICAgICAgICBpZiAoISpvdXRfdmFsKQorICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKKyAgICBidWZb MF0gPSAwOwogICAgIG91dCA9IGJ1ZjsKICAgICByZXQgPSBvcHRfZ2V0X2VsZW0obywgJm91dCwg c2l6ZW9mKGJ1ZiksIGRzdCwgc2VhcmNoX2ZsYWdzKTsKICAgICBpZiAocmV0IDwgMCkKQEAgLTk4 OCw2ICsxMTkyLDggQEAgc3RhdGljIGludCBnZXRfbnVtYmVyKHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqbmFtZSwgZG91YmxlICpudW0sIGludCAqZGVuLCBpbnQ2NF8KICAgICBjb25zdCBBVk9wdGlv biAqbyA9IGF2X29wdF9maW5kMihvYmosIG5hbWUsIE5VTEwsIDAsIHNlYXJjaF9mbGFncywgJnRh cmdldF9vYmopOwogICAgIGlmICghbyB8fCAhdGFyZ2V0X29iaikKICAgICAgICAgcmV0dXJuIEFW RVJST1JfT1BUSU9OX05PVF9GT1VORDsKKyAgICBpZiAoby0+dHlwZSAmIEFWX09QVF9UWVBFX0ZM QUdfQVJSQVkpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAKICAgICBkc3QgPSAo KHVpbnQ4X3QgKil0YXJnZXRfb2JqKSArIG8tPm9mZnNldDsKIApAQCAtMTA0NSw3ICsxMjUxLDcg QEAgaW50IGF2X29wdF9nZXRfaW1hZ2Vfc2l6ZSh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUs IGludCBzZWFyY2hfZmxhZ3MsIGludCAqd18KICAgICAgICAgcmV0dXJuIEFWRVJST1JfT1BUSU9O X05PVF9GT1VORDsKICAgICBpZiAoby0+dHlwZSAhPSBBVl9PUFRfVFlQRV9JTUFHRV9TSVpFKSB7 CiAgICAgICAgIGF2X2xvZyhvYmosIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICJUaGUg dmFsdWUgZm9yIG9wdGlvbiAnJXMnIGlzIG5vdCBhbiBpbWFnZSBzaXplLlxuIiwgbmFtZSk7Cisg ICAgICAgICAgICAgICAiVGhlIHZhbHVlIGZvciBvcHRpb24gJyVzJyBpcyBub3QgYSBpbWFnZSBz aXplLlxuIiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAgICAgfQog CkBAIC0xMjUyLDExICsxNDU4LDE2IEBAIHN0YXRpYyB2b2lkIGxvZ190eXBlKHZvaWQgKmF2X2xv Z19vYmosIGNvbnN0IEFWT3B0aW9uICpvLAogICAgICAgICBbQVZfT1BUX1RZUEVfQ0hMQVlPVVRd ICAgICAgPSAiPGNoYW5uZWxfbGF5b3V0PiIsCiAgICAgICAgIFtBVl9PUFRfVFlQRV9CT09MXSAg ICAgICAgICA9ICI8Ym9vbGVhbj4iLAogICAgIH07CisgICAgY29uc3QgZW51bSBBVk9wdGlvblR5 cGUgdHlwZSA9IFRZUEVfQkFTRShvLT50eXBlKTsKIAotICAgIGlmIChvLT50eXBlID09IEFWX09Q VF9UWVBFX0NPTlNUICYmIHBhcmVudF90eXBlID09IEFWX09QVF9UWVBFX0lOVCkKKyAgICBpZiAo by0+dHlwZSA9PSBBVl9PUFRfVFlQRV9DT05TVCAmJiBUWVBFX0JBU0UocGFyZW50X3R5cGUpID09 IEFWX09QVF9UWVBFX0lOVCkKICAgICAgICAgYXZfbG9nKGF2X2xvZ19vYmosIEFWX0xPR19JTkZP LCAiJS0xMiJQUklkNjQiICIsIG8tPmRlZmF1bHRfdmFsLmk2NCk7Ci0gICAgZWxzZSBpZiAoby0+ dHlwZSA8IEZGX0FSUkFZX0VMRU1TKGRlc2MpICYmIGRlc2Nbby0+dHlwZV0pCi0gICAgICAgIGF2 X2xvZyhhdl9sb2dfb2JqLCBBVl9MT0dfSU5GTywgIiUtMTJzICIsIGRlc2Nbby0+dHlwZV0pOwor ICAgIGVsc2UgaWYgKHR5cGUgPCBGRl9BUlJBWV9FTEVNUyhkZXNjKSAmJiBkZXNjW3R5cGVdKSB7 CisgICAgICAgIGlmIChvLT50eXBlICYgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSkKKyAgICAgICAg ICAgIGF2X2xvZyhhdl9sb2dfb2JqLCBBVl9MT0dfSU5GTywgIlslLTEwc10iLCBkZXNjW3R5cGVd KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXZfbG9nKGF2X2xvZ19vYmosIEFWX0xPR19J TkZPLCAiJS0xMnMgIiwgZGVzY1t0eXBlXSk7CisgICAgfQogICAgIGVsc2UKICAgICAgICAgYXZf bG9nKGF2X2xvZ19vYmosIEFWX0xPR19JTkZPLCAiJS0xMnMgIiwgIiIpOwogfQpAQCAtMTI3NCw2 ICsxNDg1LDEzIEBAIHN0YXRpYyB2b2lkIGxvZ19kZWZhdWx0KHZvaWQgKm9iaiwgdm9pZCAqYXZf bG9nX29iaiwgY29uc3QgQVZPcHRpb24gKm9wdCkKICAgICAgICAgIW9wdC0+ZGVmYXVsdF92YWwu c3RyKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAob3B0LT50eXBlICYgQVZfT1BUX1RZUEVf RkxBR19BUlJBWSkgeworICAgICAgICBjb25zdCBBVk9wdGlvbkFycmF5RGVmICphcnIgPSBvcHQt PmRlZmF1bHRfdmFsLmFycjsKKyAgICAgICAgaWYgKGFyciAmJiBhcnItPmRlZikKKyAgICAgICAg ICAgIGF2X2xvZyhhdl9sb2dfb2JqLCBBVl9MT0dfSU5GTywgIiAoZGVmYXVsdCAlcykiLCBhcnIt PmRlZik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBhdl9sb2coYXZfbG9nX29iaiwg QVZfTE9HX0lORk8sICIgKGRlZmF1bHQgIik7CiAgICAgc3dpdGNoIChvcHQtPnR5cGUpIHsKICAg ICBjYXNlIEFWX09QVF9UWVBFX0JPT0w6CkBAIC0xNDM0LDYgKzE2NTIsMjEgQEAgdm9pZCBhdl9v cHRfc2V0X2RlZmF1bHRzMih2b2lkICpzLCBpbnQgbWFzaywgaW50IGZsYWdzKQogICAgICAgICBp ZiAob3B0LT5mbGFncyAmIEFWX09QVF9GTEFHX1JFQURPTkxZKQogICAgICAgICAgICAgY29udGlu dWU7CiAKKyAgICAgICAgaWYgKG9wdC0+dHlwZSAmIEFWX09QVF9UWVBFX0ZMQUdfQVJSQVkpIHsK KyAgICAgICAgICAgIGNvbnN0IEFWT3B0aW9uQXJyYXlEZWYgKmFyciA9IG9wdC0+ZGVmYXVsdF92 YWwuYXJyOworICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgc2VwID0gb3B0X2Fy cmF5X3NlcChvcHQpOworCisgICAgICAgICAgICBhdl9hc3NlcnQwKHNlcCAmJiBzZXAgIT0gJ1xc JyAmJgorICAgICAgICAgICAgICAgICAgICAgICAoc2VwIDwgJ2EnIHx8IHNlcCA+ICd6JykgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgKHNlcCA8ICdBJyB8fCBzZXAgPiAnWicpICYmCisgICAg ICAgICAgICAgICAgICAgICAgIChzZXAgPCAnMCcgfHwgc2VwID4gJzknKSk7CisKKyAgICAgICAg ICAgIGlmIChhcnIgJiYgYXJyLT5kZWYpCisgICAgICAgICAgICAgICAgb3B0X3NldF9hcnJheShz LCBzLCBvcHQsIGFyci0+ZGVmLCBkc3QpOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgfQorCiAgICAgICAgIHN3aXRjaCAob3B0LT50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIEFW X09QVF9UWVBFX0NPTlNUOgogICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gYmUgZG9uZSBo ZXJlICovCkBAIC0xNjc2LDIzICsxOTA5LDEyIEBAIHZvaWQgYXZfb3B0X2ZyZWUodm9pZCAqb2Jq KQogewogICAgIGNvbnN0IEFWT3B0aW9uICpvID0gTlVMTDsKICAgICB3aGlsZSAoKG8gPSBhdl9v cHRfbmV4dChvYmosIG8pKSkgewotICAgICAgICBzd2l0Y2ggKG8tPnR5cGUpIHsKLSAgICAgICAg Y2FzZSBBVl9PUFRfVFlQRV9TVFJJTkc6Ci0gICAgICAgIGNhc2UgQVZfT1BUX1RZUEVfQklOQVJZ OgotICAgICAgICAgICAgYXZfZnJlZXAoKHVpbnQ4X3QgKilvYmogKyBvLT5vZmZzZXQpOwotICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIHZvaWQgKnBpdGVtID0gKHVpbnQ4X3QgKilvYmogKyBv LT5vZmZzZXQ7CiAKLSAgICAgICAgY2FzZSBBVl9PUFRfVFlQRV9ESUNUOgotICAgICAgICAgICAg YXZfZGljdF9mcmVlKChBVkRpY3Rpb25hcnkgKiopKCgodWludDhfdCAqKW9iaikgKyBvLT5vZmZz ZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVZfT1BUX1RZUEVfQ0hM QVlPVVQ6Ci0gICAgICAgICAgICBhdl9jaGFubmVsX2xheW91dF91bmluaXQoKEFWQ2hhbm5lbExh eW91dCAqKSgoKHVpbnQ4X3QgKilvYmopICsgby0+b2Zmc2V0KSk7Ci0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg ICAgICAgaWYgKG8tPnR5cGUgJiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKQorICAgICAgICAgICAg b3B0X2ZyZWVfYXJyYXkobywgcGl0ZW0sIG9wdF9hcnJheV9wY291bnQocGl0ZW0pKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgb3B0X2ZyZWVfZWxlbShvLCBwaXRlbSk7CiAgICAgfQogfQog CkBAIC0xNzk0LDcgKzIwMTYsOSBAQCBjb25zdCBBVkNsYXNzICphdl9vcHRfY2hpbGRfY2xhc3Nf aXRlcmF0ZShjb25zdCBBVkNsYXNzICpwYXJlbnQsIHZvaWQgKippdGVyKQogdm9pZCAqYXZfb3B0 X3B0cihjb25zdCBBVkNsYXNzICpjbGFzcywgdm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQog ewogICAgIGNvbnN0IEFWT3B0aW9uICpvcHQ9IGF2X29wdF9maW5kMigmY2xhc3MsIG5hbWUsIE5V TEwsIDAsIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkosIE5VTEwpOwotICAgIGlmKCFvcHQpCisKKyAg ICAvLyBubyBkaXJlY3QgYWNjZXNzIHRvIGFycmF5LXR5cGUgb3B0aW9ucworICAgIGlmICghb3B0 IHx8IChvcHQtPnR5cGUgJiBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZKSkKICAgICAgICAgcmV0dXJu IE5VTEw7CiAgICAgcmV0dXJuICh1aW50OF90KilvYmogKyBvcHQtPm9mZnNldDsKIH0KQEAgLTE4 NDQsNiArMjA2OCw0MCBAQCBzdGF0aWMgaW50IG9wdF9jb3B5X2VsZW0odm9pZCAqbG9nY3R4LCBl bnVtIEFWT3B0aW9uVHlwZSB0eXBlLAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9w dF9jb3B5X2FycmF5KHZvaWQgKmxvZ2N0eCwgY29uc3QgQVZPcHRpb24gKm8sCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKipwZHN0LCBjb25zdCB2b2lkICogY29uc3QgKnBzcmMpCit7 CisgICAgdW5zaWduZWQgbmJfZWxlbXMgPSAqb3B0X2FycmF5X3Bjb3VudChwc3JjKTsKKyAgICB2 b2lkICAgICAgICAgKmRzdCA9IE5VTEw7CisgICAgaW50IHJldDsKKworICAgIGlmICgqcGRzdCA9 PSAqcHNyYykgeworICAgICAgICAqcGRzdCAgICAgICAgICAgICAgICAgICA9IE5VTEw7CisgICAg ICAgICpvcHRfYXJyYXlfcGNvdW50KHBkc3QpID0gMDsKKyAgICB9CisKKyAgICBvcHRfZnJlZV9h cnJheShvLCBwZHN0LCBvcHRfYXJyYXlfcGNvdW50KHBkc3QpKTsKKworICAgIGRzdCA9IGF2X2Nh bGxvYyhuYl9lbGVtcywgb3B0X2VsZW1fc2l6ZVtUWVBFX0JBU0Uoby0+dHlwZSldKTsKKyAgICBp ZiAoIWRzdCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBuYl9lbGVtczsgaSsrKSB7CisgICAgICAgIHJldCA9IG9wdF9jb3B5 X2VsZW0obG9nY3R4LCBUWVBFX0JBU0Uoby0+dHlwZSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3B0X2FycmF5X3BlbGVtKG8sIGRzdCwgaSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3B0X2FycmF5X3BlbGVtKG8sICoodm9pZCoqKXBzcmMsIGkpKTsKKyAgICAgICAgaWYg KHJldCA8IDApIHsKKyAgICAgICAgICAgIG9wdF9mcmVlX2FycmF5KG8sICZkc3QsICZuYl9lbGVt cyk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgKnBk c3QgICAgICAgICAgICAgICAgICAgPSBkc3Q7CisgICAgKm9wdF9hcnJheV9wY291bnQocGRzdCkg PSBuYl9lbGVtczsKKworICAgIHJldHVybiAwOworfQorCiBpbnQgYXZfb3B0X2NvcHkodm9pZCAq ZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAgICAgY29uc3QgQVZPcHRpb24gKm8gPSBOVUxMOwpA QCAtMTg2MSw3ICsyMTE5LDkgQEAgaW50IGF2X29wdF9jb3B5KHZvaWQgKmRzdCwgY29uc3Qgdm9p ZCAqc3JjKQogICAgICAgICB2b2lkICpmaWVsZF9kc3QgPSAodWludDhfdCAqKWRzdCArIG8tPm9m ZnNldDsKICAgICAgICAgdm9pZCAqZmllbGRfc3JjID0gKHVpbnQ4X3QgKilzcmMgKyBvLT5vZmZz ZXQ7CiAKLSAgICAgICAgaW50IGVyciA9IG9wdF9jb3B5X2VsZW0oZHN0LCBvLT50eXBlLCBmaWVs ZF9kc3QsIGZpZWxkX3NyYyk7CisgICAgICAgIGludCBlcnIgPSAoby0+dHlwZSAmIEFWX09QVF9U WVBFX0ZMQUdfQVJSQVkpICAgICAgICAgICAgICAgICA/CisgICAgICAgICAgICAgICAgICBvcHRf Y29weV9hcnJheShkc3QsIG8sICAgICAgIGZpZWxkX2RzdCwgZmllbGRfc3JjKSA6CisgICAgICAg ICAgICAgICAgICBvcHRfY29weV9lbGVtIChkc3QsIG8tPnR5cGUsIGZpZWxkX2RzdCwgZmllbGRf c3JjKTsKICAgICAgICAgaWYgKGVyciA8IDApCiAgICAgICAgICAgICByZXQgPSBlcnI7CiAgICAg fQpAQCAtMTk5MCw2ICsyMjUwLDI0IEBAIGludCBhdl9vcHRfaXNfc2V0X3RvX2RlZmF1bHQodm9p ZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbykKIAogICAgIGRzdCA9ICgodWludDhfdCopb2JqKSAr IG8tPm9mZnNldDsKIAorICAgIGlmIChvLT50eXBlICYgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSkg eworICAgICAgICBjb25zdCBjaGFyICpkZWYgPSBvLT5kZWZhdWx0X3ZhbC5hcnIgPyBvLT5kZWZh dWx0X3ZhbC5hcnItPmRlZiA6IE5VTEw7CisgICAgICAgIHVpbnQ4X3QgKnZhbDsKKworICAgICAg ICByZXQgPSBvcHRfZ2V0X2FycmF5KG8sIGRzdCwgJnZhbCk7CisgICAgICAgIGlmIChyZXQgPCAw KQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBpZiAoISF2YWwgIT0gISFkZWYp CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICBlbHNlIGlmICh2YWwpCisgICAgICAgICAg ICByZXQgPSAhc3RyY21wKHZhbCwgZGVmKTsKKworICAgICAgICBhdl9mcmVlcCgmdmFsKTsKKwor ICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKwogICAgIHN3aXRjaCAoby0+dHlwZSkgewogICAg IGNhc2UgQVZfT1BUX1RZUEVfQ09OU1Q6CiAgICAgICAgIHJldHVybiAxOwpkaWZmIC0tZ2l0IGEv bGliYXZ1dGlsL29wdC5oIGIvbGliYXZ1dGlsL29wdC5oCmluZGV4IDgyYmNhOTIwZmIuLmU2MDEz NjYyZjYgMTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9vcHQuaAorKysgYi9saWJhdnV0aWwvb3B0LmgK QEAgLTI1MCw2ICsyNTAsMTcgQEAgZW51bSBBVk9wdGlvblR5cGV7CiAgICAgQVZfT1BUX1RZUEVf Q09MT1IsCiAgICAgQVZfT1BUX1RZUEVfQk9PTCwKICAgICBBVl9PUFRfVFlQRV9DSExBWU9VVCwK KworICAgIC8qKgorICAgICAqIE1heSBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgcmVndWxhciBv cHRpb24gdHlwZSB0byBkZWNsYXJlIGFuIGFycmF5CisgICAgICogb3B0aW9uLgorICAgICAqCisg ICAgICogRm9yIGFycmF5IG9wdGlvbnMsIEByZWYgQVZPcHRpb24ub2Zmc2V0IHNob3VsZCByZWZl ciB0byBhIHBvaW50ZXIKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcHRpb24gdHlwZS4g VGhlIHBvaW50ZXIgc2hvdWxkIGJlIGltbWVkaWF0ZWx5CisgICAgICogZm9sbG93ZWQgYnkgYW4g dW5zaWduZWQgaW50IHRoYXQgd2lsbCBzdG9yZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRo ZQorICAgICAqIGFycmF5LgorICAgICAqLworICAgIEFWX09QVF9UWVBFX0ZMQUdfQVJSQVkgPSAo MSA8PCAxNiksCiB9OwogCiAvKioKQEAgLTI5NSw2ICszMDYsNDAgQEAgZW51bSBBVk9wdGlvblR5 cGV7CiAgKi8KICNkZWZpbmUgQVZfT1BUX0ZMQUdfQ0hJTERfQ09OU1RTICAgICgxIDw8IDE4KQog CisvKioKKyAqIE1heSBiZSBzZXQgYXMgZGVmYXVsdF92YWwgZm9yIEFWX09QVF9UWVBFX0ZMQUdf QVJSQVkgb3B0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQVZPcHRpb25BcnJheURlZiB7Cisg ICAgLyoqCisgICAgICogTmF0aXZlIGFjY2VzcyBvbmx5LgorICAgICAqCisgICAgICogRGVmYXVs dCB2YWx1ZSBvZiB0aGUgb3B0aW9uLCBhcyB3b3VsZCBiZSBzZXJpYWxpemVkIGJ5IGF2X29wdF9n ZXQoKSAoaS5lLgorICAgICAqIHVzaW5nIHRoZSB2YWx1ZSBvZiBzZXAgYXMgdGhlIHNlcGFyYXRv cikuCisgICAgICovCisgICAgY29uc3QgY2hhciAgICAgICAgICpkZWY7CisKKyAgICAvKioKKyAg ICAgKiBNaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuIFdoZW4gdGhpcyBm aWVsZCBpcyBub24temVybywgZGVmCisgICAgICogbXVzdCBiZSBub24tTlVMTCBhbmQgY29udGFp biBhdCBsZWFzdCB0aGlzIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgKi8KKyAgICB1bnNpZ25l ZCAgICAgICAgICAgIHNpemVfbWluOworICAgIC8qKgorICAgICAqIE1heGltdW0gbnVtYmVyIG9m IGVsZW1lbnRzIGluIHRoZSBhcnJheSwgMCB3aGVuIHVubGltaXRlZC4KKyAgICAgKi8KKyAgICB1 bnNpZ25lZCAgICAgICAgICAgIHNpemVfbWF4OworCisgICAgLyoqCisgICAgICogU2VwYXJhdG9y IGJldHdlZW4gYXJyYXkgZWxlbWVudHMgaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiB0aGlz CisgICAgICogb3B0aW9uLCB1c2VkIGJ5IGF2X29wdF9zZXQoKSBhbmQgYXZfb3B0X2dldCgpLiBJ dCBtdXN0IGJlIGEgcHJpbnRhYmxlCisgICAgICogQVNDSUkgY2hhcmFjdGVyLCBleGNsdWRpbmcg YWxwaGFudW1lcmljIGFuZCB0aGUgYmFja3NsYXNoLiBBIGNvbW1hIGlzCisgICAgICogdXNlZCB3 aGVuIHNlcD0wLgorICAgICAqCisgICAgICogVGhlIHNlcGFyYXRvciBhbmQgdGhlIGJhY2tzbGFz aCBtdXN0IGJlIGJhY2tzbGFzaC1lc2NhcGVkIGluIG9yZGVyIHRvCisgICAgICogYXBwZWFyIGlu IHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIG9wdGlvbiB2YWx1ZS4KKyAgICAgKi8KKyAg ICBjaGFyICAgICAgICAgICAgICAgIHNlcDsKK30gQVZPcHRpb25BcnJheURlZjsKKwogLyoqCiAg KiBBVk9wdGlvbgogICovCkBAIC0zMTcsOCArMzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQVZPcHRp b24gewogICAgIGVudW0gQVZPcHRpb25UeXBlIHR5cGU7CiAKICAgICAvKioKLSAgICAgKiBOYXRp dmUgYWNjZXNzIG9ubHkuCi0gICAgICoKKyAgICAgKiBOYXRpdmUgYWNjZXNzIG9ubHksIGV4Y2Vw dCB3aGVuIGRvY3VtZW50ZWQgb3RoZXJ3aXNlLgogICAgICAqIHRoZSBkZWZhdWx0IHZhbHVlIGZv ciBzY2FsYXIgb3B0aW9ucwogICAgICAqLwogICAgIHVuaW9uIHsKQEAgLTMyNyw2ICszNzEsMTQg QEAgdHlwZWRlZiBzdHJ1Y3QgQVZPcHRpb24gewogICAgICAgICBjb25zdCBjaGFyICpzdHI7CiAg ICAgICAgIC8qIFRPRE8gdGhvc2UgYXJlIHVudXNlZCBub3cgKi8KICAgICAgICAgQVZSYXRpb25h bCBxOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIGZvciBBVl9PUFRfVFlQRV9GTEFH X0FSUkFZIG9wdGlvbnMuIE1heSBiZSBOVUxMLgorICAgICAgICAgKgorICAgICAgICAgKiBGb3Jl aWduIGFjY2VzcyB0byBzb21lIG1lbWJlcnMgYWxsb3dlZCwgYXMgbm90ZWQgaW4gQVZPcHRpb25B cnJheURlZgorICAgICAgICAgKiBkb2N1bWVudGF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg Y29uc3QgQVZPcHRpb25BcnJheURlZiAqYXJyOwogICAgIH0gZGVmYXVsdF92YWw7CiAgICAgZG91 YmxlIG1pbjsgICAgICAgICAgICAgICAgIC8vLzwgbWluaW11bSB2YWxpZCB2YWx1ZSBmb3IgdGhl IG9wdGlvbgogICAgIGRvdWJsZSBtYXg7ICAgICAgICAgICAgICAgICAvLy88IG1heGltdW0gdmFs aWQgdmFsdWUgZm9yIHRoZSBvcHRpb24KZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC90ZXN0cy9vcHQu YyBiL2xpYmF2dXRpbC90ZXN0cy9vcHQuYwppbmRleCBlMjU4MmNjOTNkLi4wNGI0OTAxNTc5IDEw MDY0NAotLS0gYS9saWJhdnV0aWwvdGVzdHMvb3B0LmMKKysrIGIvbGliYXZ1dGlsL3Rlc3RzL29w dC5jCkBAIC01Nyw2ICs1NywxNSBAQCB0eXBlZGVmIHN0cnVjdCBUZXN0Q29udGV4dCB7CiAgICAg aW50IGJvb2wzOwogICAgIEFWRGljdGlvbmFyeSAqZGljdDE7CiAgICAgQVZEaWN0aW9uYXJ5ICpk aWN0MjsKKworICAgIGludCAgICAgICAgICAgKiphcnJheV9pbnQ7CisgICAgdW5zaWduZWQgICAg IG5iX2FycmF5X2ludDsKKworICAgIGNoYXIgICAgICAgICAgKiphcnJheV9zdHI7CisgICAgdW5z aWduZWQgICAgIG5iX2FycmF5X3N0cjsKKworICAgIEFWRGljdGlvbmFyeSAgKiphcnJheV9kaWN0 OworICAgIHVuc2lnbmVkICAgICBuYl9hcnJheV9kaWN0OwogfSBUZXN0Q29udGV4dDsKIAogI2Rl ZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVGVzdENvbnRleHQsIHgpCkBAIC02NSw2ICs3NCwxNSBA QCB0eXBlZGVmIHN0cnVjdCBUZXN0Q29udGV4dCB7CiAjZGVmaW5lIFRFU1RfRkxBR19MQU1FIDAy CiAjZGVmaW5lIFRFU1RfRkxBR19NVSAgIDA0CiAKK3N0YXRpYyBjb25zdCBBVk9wdGlvbkFycmF5 RGVmIGFycmF5X3N0ciA9IHsKKyAgICAuc2VwICAgICAgICAgPSAnfCcsCisgICAgLmRlZiAgICAg ICAgID0gInN0cjB8c3RyXFx8MXxzdHJcXFxcMiIsCit9OworCitzdGF0aWMgY29uc3QgQVZPcHRp b25BcnJheURlZiBhcnJheV9kaWN0ID0geworICAgIC5kZWYgICAgICAgICA9ICJrMDA9dlxcXFxc XFxcMDA6azAxPXZcXCwwMSxrMTA9dlxcXFw9MVxcXFw6MCIsCit9OworCiBzdGF0aWMgY29uc3Qg QVZPcHRpb24gdGVzdF9vcHRpb25zW109IHsKICAgICB7Im51bSIsICAgICAgICAic2V0IG51bSIs ICAgICAgICAgICAgT0ZGU0VUKG51bSksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICAg ICAgICAgIHsgLmk2NCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgMTAwLCAx IH0sCiAgICAgeyJ0b2dnbGUiLCAgICAgInNldCB0b2dnbGUiLCAgICAgICAgIE9GRlNFVCh0b2dn bGUpLCAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgICAgICAgICB7IC5pNjQgPSAxIH0sICAg ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgMSwgMSB9LApAQCAtOTMsNiArMTExLDEwIEBA IHN0YXRpYyBjb25zdCBBVk9wdGlvbiB0ZXN0X29wdGlvbnNbXT0gewogICAgIHsiYm9vbDMiLCAg ICAgICJzZXQgYm9vbGVhbiB2YWx1ZSIsICBPRkZTRVQoYm9vbDMpLCAgICAgICAgICBBVl9PUFRf VFlQRV9CT09MLCAgICAgICAgICAgeyAuaTY0ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAw LCAgICAgICAgIDEsIDEgfSwKICAgICB7ImRpY3QxIiwgICAgICAic2V0IGRpY3Rpb25hcnkgdmFs dWUiLCBPRkZTRVQoZGljdDEpLCAgICAgICAgQVZfT1BUX1RZUEVfRElDVCwgICAgICAgICAgIHsg LnN0ciA9IE5VTEx9LCAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAwLCAxIH0sCiAgICAg eyJkaWN0MiIsICAgICAgInNldCBkaWN0aW9uYXJ5IHZhbHVlIiwgT0ZGU0VUKGRpY3QyKSwgICAg ICAgIEFWX09QVF9UWVBFX0RJQ1QsICAgICAgICAgICB7IC5zdHIgPSAiaGFwcHk9JzotKScifSwg ICAgICAgICAgIDAsICAgICAgICAgMCwgMSB9LAorICAgIHsiYXJyYXlfaW50IiwgICJhcnJheSBv ZiBpbnRzIiwgICAgICAgIE9GRlNFVChhcnJheV9pbnQpLCAgICBBVl9PUFRfVFlQRV9JTlQgfCBB Vl9PUFRfVFlQRV9GTEFHX0FSUkFZLCAubWF4ID0gSU5UX01BWCwgICAgICAgICAgIC5mbGFncyA9 IEFWX09QVF9GTEFHX1JVTlRJTUVfUEFSQU0gfSwKKyAgICB7ImFycmF5X3N0ciIsICAiYXJyYXkg b2Ygc3RyaW5ncyIsICAgICBPRkZTRVQoYXJyYXlfc3RyKSwgICAgQVZfT1BUX1RZUEVfU1RSSU5H IHwgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSwgeyAuYXJyID0gJmFycmF5X3N0ciB9LCAuZmxhZ3Mg PSBBVl9PUFRfRkxBR19SVU5USU1FX1BBUkFNIH0sCisgICAgLy8gdGhlcmUgYXJlIHRocmVlIGxl dmVscyBvZiBlc2NhcGluZyAtIEMgc3RyaW5nLCBhcnJheSBvcHRpb24sIGRpY3QgLSBzbyA4IGJh Y2tzbGFzaGVzIGFyZSBuZWVkZWQgdG8gZ2V0IGEgbGl0ZXJhbCBvbmUgaW5zaWRlIGEgZGljdCBr ZXkvdmFsCisgICAgeyJhcnJheV9kaWN0IiwgImFycmF5IG9mIGRpY3RzIiwgICAgICAgT0ZGU0VU KGFycmF5X2RpY3QpLCAgIEFWX09QVF9UWVBFX0RJQ1QgfCBBVl9PUFRfVFlQRV9GTEFHX0FSUkFZ LCB7IC5hcnIgPSAmYXJyYXlfZGljdCB9LCAgLmZsYWdzID0gQVZfT1BUX0ZMQUdfUlVOVElNRV9Q QVJBTSB9LAogICAgIHsgTlVMTCB9LAogfTsKIApAQCAtMTQ2LDYgKzE2OCwxNyBAQCBpbnQgbWFp bih2b2lkKQogICAgICAgICBwcmludGYoImZsdD0lLjZmXG4iLCB0ZXN0X2N0eC5mbHQpOwogICAg ICAgICBwcmludGYoImRibD0lLjZmXG4iLCB0ZXN0X2N0eC5kYmwpOwogCisgICAgICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCB0ZXN0X2N0eC5uYl9hcnJheV9zdHI7IGkrKykKKyAgICAgICAg ICAgIHByaW50ZigiYXJyYXlfc3RyWyV1XT0lc1xuIiwgaSwgdGVzdF9jdHguYXJyYXlfc3RyW2ld KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGVzdF9jdHgubmJfYXJyYXlf ZGljdDsgaSsrKSB7CisgICAgICAgICAgICBBVkRpY3Rpb25hcnkgICAgICAgICAgICAqZCA9IHRl c3RfY3R4LmFycmF5X2RpY3RbaV07CisgICAgICAgICAgICBjb25zdCBBVkRpY3Rpb25hcnlFbnRy eSAqZSA9IE5VTEw7CisKKyAgICAgICAgICAgIHdoaWxlICgoZSA9IGF2X2RpY3RfaXRlcmF0ZShk LCBlKSkpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJhcnJheV9kaWN0WyV1XTogJXNcdCVzXG4i LCBpLCBlLT5rZXksIGUtPnZhbHVlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGF2X29wdF9zaG93 MigmdGVzdF9jdHgsIE5VTEwsIC0xLCAwKTsKIAogICAgICAgICBhdl9vcHRfZnJlZSgmdGVzdF9j dHgpOwpAQCAtMTc3LDYgKzIxMCw5IEBAIGludCBtYWluKHZvaWQpCiAgICAgICAgIFRlc3RDb250 ZXh0IHRlc3RfY3R4ID0geyAwIH07CiAgICAgICAgIFRlc3RDb250ZXh0IHRlc3QyX2N0eCA9IHsg MCB9OwogICAgICAgICBjb25zdCBBVk9wdGlvbiAqbyA9IE5VTEw7CisgICAgICAgIGNoYXIgKnZh bCA9IE5VTEw7CisgICAgICAgIGludCByZXQ7CisKICAgICAgICAgdGVzdF9jdHguY2xhc3MgPSAm dGVzdF9jbGFzczsKICAgICAgICAgdGVzdDJfY3R4LmNsYXNzID0gJnRlc3RfY2xhc3M7CiAKQEAg LTIwOSw2ICsyNDUsMTcgQEAgaW50IG1haW4odm9pZCkKICAgICAgICAgICAgIGF2X2ZyZWUodmFs dWUxKTsKICAgICAgICAgICAgIGF2X2ZyZWUodmFsdWUyKTsKICAgICAgICAgfQorCisgICAgICAg IC8vIGF2X29wdF9zZXQoTlVMTCkgd2l0aCBhbiBhcnJheSBvcHRpb24gcmVzZXRzIGl0CisgICAg ICAgIHJldCA9IGF2X29wdF9zZXQoJnRlc3RfY3R4LCAiYXJyYXlfZGljdCIsIE5VTEwsIDApOwor ICAgICAgICBwcmludGYoImF2X29wdF9zZXQoXCJhcnJheV9kaWN0XCIsIE5VTEwpIC0+ICVkXG4i LCByZXQpOworICAgICAgICBwcmludGYoImFycmF5X2RpY3Q9JXNOVUxMOyBuYl9hcnJheV9kaWN0 PSV1XG4iLAorICAgICAgICAgICAgICAgdGVzdF9jdHguYXJyYXlfZGljdCA/ICJub24tIiA6ICIi LCB0ZXN0X2N0eC5uYl9hcnJheV9kaWN0KTsKKworICAgICAgICAvLyBhdl9vcHRfZ2V0KCkgb24g YW4gZW1wdHkgYXJyYXkgc2hvdWxkIHJldHVybiBhIE5VTEwgc3RyaW5nCisgICAgICAgIHJldCA9 IGF2X29wdF9nZXQoJnRlc3RfY3R4LCAiYXJyYXlfZGljdCIsIEFWX09QVF9BTExPV19OVUxMLCAo dWludDhfdCoqKSZ2YWwpOworICAgICAgICBwcmludGYoImF2X29wdF9nZXQoXCJhcnJheV9kaWN0 XCIpIC0+ICVzXG4iLCB2YWwgPyB2YWwgOiAiTlVMTCIpOworCiAgICAgICAgIGF2X29wdF9mcmVl KCZ0ZXN0X2N0eCk7CiAgICAgICAgIGF2X29wdF9mcmVlKCZ0ZXN0Ml9jdHgpOwogICAgIH0KQEAg LTMwMyw2ICszNTAsOCBAQCBpbnQgbWFpbih2b2lkKQogICAgICAgICAgICAgImJvb2wxPXRydWUi LAogICAgICAgICAgICAgImJvb2wyPWF1dG8iLAogICAgICAgICAgICAgImRpY3QxPSdoYXBweT1c XDotKTpzYWQ9XFw6LSgnIiwKKyAgICAgICAgICAgICJhcnJheV9pbnQ9MCwzMiwyMTQ3NDgzNjQ3 IiwKKyAgICAgICAgICAgICJhcnJheV9pbnQ9MjE0NzQ4MzY0OCIsIC8vIG91dCBvZiByYW5nZSwg c2hvdWxkIGZhaWwKICAgICAgICAgfTsKIAogICAgICAgICB0ZXN0X2N0eC5jbGFzcyA9ICZ0ZXN0 X2NsYXNzOwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVmL2ZhdGUvb3B0IGIvdGVzdHMvcmVmL2ZhdGUv b3B0CmluZGV4IDgzMmY5Y2M4YTkuLmY0ZmNlMWJkNDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3JlZi9m YXRlL29wdAorKysgYi90ZXN0cy9yZWYvZmF0ZS9vcHQKQEAgLTE3LDYgKzE3LDEyIEBAIGJpbmFy eV9zaXplPTQKIG51bTY0PTEKIGZsdD0wLjMzMzMzMwogZGJsPTAuMzMzMzMzCithcnJheV9zdHJb MF09c3RyMAorYXJyYXlfc3RyWzFdPXN0cnwxCithcnJheV9zdHJbMl09c3RyXDIKK2FycmF5X2Rp Y3RbMF06IGswMAl2XDAwCithcnJheV9kaWN0WzBdOiBrMDEJdiwwMQorYXJyYXlfZGljdFsxXTog azEwCXY9MTowCiBUZXN0Q29udGV4dCBBVk9wdGlvbnM6CiAgIC1udW0gICAgICAgICAgICAgICA8 aW50PiAgICAgICAgRS4uLi4uLi4uLi4gc2V0IG51bSAoZnJvbSAwIHRvIDEwMCkgKGRlZmF1bHQg MCkKICAgLXRvZ2dsZSAgICAgICAgICAgIDxpbnQ+ICAgICAgICBFLi4uLi4uLi4uLiBzZXQgdG9n Z2xlIChmcm9tIDAgdG8gMSkgKGRlZmF1bHQgMSkKQEAgLTQ1LDYgKzUxLDkgQEAgVGVzdENvbnRl eHQgQVZPcHRpb25zOgogICAtYm9vbDMgICAgICAgICAgICAgPGJvb2xlYW4+ICAgIEUuLi4uLi4u Li4uIHNldCBib29sZWFuIHZhbHVlIChkZWZhdWx0IGZhbHNlKQogICAtZGljdDEgICAgICAgICAg ICAgPGRpY3Rpb25hcnk+IEUuLi4uLi4uLi4uIHNldCBkaWN0aW9uYXJ5IHZhbHVlCiAgIC1kaWN0 MiAgICAgICAgICAgICA8ZGljdGlvbmFyeT4gRS4uLi4uLi4uLi4gc2V0IGRpY3Rpb25hcnkgdmFs dWUgKGRlZmF1bHQgImhhcHB5PSc6LSknIikKKyAgLWFycmF5X2ludCAgICAgICAgIFs8aW50PiAg ICAgXS4uLi4uLi4uLlQuIGFycmF5IG9mIGludHMKKyAgLWFycmF5X3N0ciAgICAgICAgIFs8c3Ry aW5nPiAgXS4uLi4uLi4uLlQuIGFycmF5IG9mIHN0cmluZ3MgKGRlZmF1bHQgc3RyMHxzdHJcfDF8 c3RyXFwyKQorICAtYXJyYXlfZGljdCAgICAgICAgWzxkaWN0aW9uYXJ5Pl0uLi4uLi4uLi5ULiBh cnJheSBvZiBkaWN0cyAoZGVmYXVsdCBrMDA9dlxcXFwwMDprMDE9dlwsMDEsazEwPXZcXD0xXFw6 MCkKIAogVGVzdGluZyBhdl9vcHRfaXNfc2V0X3RvX2RlZmF1bHQoKQogbmFtZTogICAgICAgbnVt IGRlZmF1bHQ6MSBlcnJvcjoKQEAgLTc0LDYgKzgzLDkgQEAgbmFtZTogICAgIGJvb2wyIGRlZmF1 bHQ6MCBlcnJvcjoKIG5hbWU6ICAgICBib29sMyBkZWZhdWx0OjEgZXJyb3I6CiBuYW1lOiAgICAg ZGljdDEgZGVmYXVsdDoxIGVycm9yOgogbmFtZTogICAgIGRpY3QyIGRlZmF1bHQ6MCBlcnJvcjoK K25hbWU6IGFycmF5X2ludCBkZWZhdWx0OjAgZXJyb3I6CituYW1lOiBhcnJheV9zdHIgZGVmYXVs dDowIGVycm9yOgorbmFtZTphcnJheV9kaWN0IGRlZmF1bHQ6MCBlcnJvcjoKIG5hbWU6ICAgICAg IG51bSBkZWZhdWx0OjEgZXJyb3I6CiBuYW1lOiAgICB0b2dnbGUgZGVmYXVsdDoxIGVycm9yOgog bmFtZTogIHJhdGlvbmFsIGRlZmF1bHQ6MSBlcnJvcjoKQEAgLTEwMSw2ICsxMTMsOSBAQCBuYW1l OiAgICAgYm9vbDIgZGVmYXVsdDoxIGVycm9yOgogbmFtZTogICAgIGJvb2wzIGRlZmF1bHQ6MSBl cnJvcjoKIG5hbWU6ICAgICBkaWN0MSBkZWZhdWx0OjEgZXJyb3I6CiBuYW1lOiAgICAgZGljdDIg ZGVmYXVsdDoxIGVycm9yOgorbmFtZTogYXJyYXlfaW50IGRlZmF1bHQ6MCBlcnJvcjoKK25hbWU6 IGFycmF5X3N0ciBkZWZhdWx0OjEgZXJyb3I6CituYW1lOmFycmF5X2RpY3QgZGVmYXVsdDoxIGVy cm9yOgogCiBUZXN0aW5nIGF2X29wdF9nZXQvYXZfb3B0X3NldCgpCiBuYW1lOiBudW0gICAgICAg ICBnZXQ6IDAgICAgICAgICAgICAgICAgc2V0OiBPSyAgICAgICAgICAgICAgIGdldDogMCAgICAg ICAgICAgICAgICBPSwpAQCAtMTI3LDkgKzE0MiwxNSBAQCBuYW1lOiBib29sMiAgICAgICBnZXQ6 IHRydWUgICAgICAgICAgICAgc2V0OiBPSyAgICAgICAgICAgICAgIGdldDogdHJ1ZQogbmFtZTog Ym9vbDMgICAgICAgZ2V0OiBmYWxzZSAgICAgICAgICAgIHNldDogT0sgICAgICAgICAgICAgICBn ZXQ6IGZhbHNlICAgICAgICAgICAgT0sKIG5hbWU6IGRpY3QxICAgICAgIGdldDogICAgICAgICAg ICAgICAgICBzZXQ6IE9LICAgICAgICAgICAgICAgZ2V0OiAgICAgICAgICAgICAgICAgIE9LCiBu YW1lOiBkaWN0MiAgICAgICBnZXQ6IGhhcHB5PVw6LSkgICAgICAgc2V0OiBPSyAgICAgICAgICAg ICAgIGdldDogaGFwcHk9XDotKSAgICAgICBPSworbmFtZTogYXJyYXlfaW50ICAgZ2V0OiAgICAg ICAgICAgICAgICAgIHNldDogT0sgICAgICAgICAgICAgICBnZXQ6ICAgICAgICAgICAgICAgICAg T0sKK25hbWU6IGFycmF5X3N0ciAgIGdldDogc3RyMHxzdHJcfDF8c3RyXFwyIHNldDogT0sgICAg ICAgICAgICAgICBnZXQ6IHN0cjB8c3RyXHwxfHN0clxcMiBPSworbmFtZTogYXJyYXlfZGljdCAg Z2V0OiBrMDA9dlxcXFwwMDprMDE9dlwsMDEsazEwPXZcXD0xXFw6MCBzZXQ6IE9LICAgICAgICAg ICAgICAgZ2V0OiBrMDA9dlxcXFwwMDprMDE9dlwsMDEsazEwPXZcXD0xXFw6MCBPSworYXZfb3B0 X3NldCgiYXJyYXlfZGljdCIsIE5VTEwpIC0+IDAKK2FycmF5X2RpY3Q9TlVMTDsgbmJfYXJyYXlf ZGljdD0wCithdl9vcHRfZ2V0KCJhcnJheV9kaWN0IikgLT4gTlVMTAogCiBUZXN0IGF2X29wdF9z ZXJpYWxpemUoKQotbnVtPTAsdG9nZ2xlPTEscmF0aW9uYWw9MS8xLHN0cmluZz1kZWZhdWx0LGVz Y2FwZT1cXFw9XCwsZmxhZ3M9MHgwMDAwMDAwMSxzaXplPTIwMHgzMDAscGl4X2ZtdD0wYmdyLHNh bXBsZV9mbXQ9czE2LHZpZGVvX3JhdGU9MjUvMSxkdXJhdGlvbj0wLjAwMSxjb2xvcj0weGZmYzBj YmZmLGNsPWhleGFnb25hbCxiaW49NjI2OTZFMDAsYmluMT0sYmluMj0sbnVtNjQ9MSxmbHQ9MC4z MzMzMzMsZGJsPTAuMzMzMzMzLGJvb2wxPWF1dG8sYm9vbDI9dHJ1ZSxib29sMz1mYWxzZSxkaWN0 MT0sZGljdDI9aGFwcHlcPVxcOi0pCitudW09MCx0b2dnbGU9MSxyYXRpb25hbD0xLzEsc3RyaW5n PWRlZmF1bHQsZXNjYXBlPVxcXD1cLCxmbGFncz0weDAwMDAwMDAxLHNpemU9MjAweDMwMCxwaXhf Zm10PTBiZ3Isc2FtcGxlX2ZtdD1zMTYsdmlkZW9fcmF0ZT0yNS8xLGR1cmF0aW9uPTAuMDAxLGNv bG9yPTB4ZmZjMGNiZmYsY2w9aGV4YWdvbmFsLGJpbj02MjY5NkUwMCxiaW4xPSxiaW4yPSxudW02 ND0xLGZsdD0wLjMzMzMzMyxkYmw9MC4zMzMzMzMsYm9vbDE9YXV0byxib29sMj10cnVlLGJvb2wz PWZhbHNlLGRpY3QxPSxkaWN0Mj1oYXBweVw9XFw6LSksYXJyYXlfaW50PSxhcnJheV9zdHI9c3Ry MHxzdHJcXHwxfHN0clxcXFwyLGFycmF5X2RpY3Q9azAwXD12XFxcXFxcXFwwMDprMDFcPXZcXFws MDFcLGsxMFw9dlxcXFxcPTFcXFxcOjAKIFNldHRpbmcgZW50cnkgd2l0aCBrZXkgJ251bScgdG8g dmFsdWUgJzAnCiBTZXR0aW5nIGVudHJ5IHdpdGgga2V5ICd0b2dnbGUnIHRvIHZhbHVlICcxJwog U2V0dGluZyBlbnRyeSB3aXRoIGtleSAncmF0aW9uYWwnIHRvIHZhbHVlICcxLzEnCkBAIC0xNTQs NyArMTc1LDEwIEBAIFNldHRpbmcgZW50cnkgd2l0aCBrZXkgJ2Jvb2wyJyB0byB2YWx1ZSAndHJ1 ZScKIFNldHRpbmcgZW50cnkgd2l0aCBrZXkgJ2Jvb2wzJyB0byB2YWx1ZSAnZmFsc2UnCiBTZXR0 aW5nIGVudHJ5IHdpdGgga2V5ICdkaWN0MScgdG8gdmFsdWUgJycKIFNldHRpbmcgZW50cnkgd2l0 aCBrZXkgJ2RpY3QyJyB0byB2YWx1ZSAnaGFwcHk9XDotKScKLW51bT0wLHRvZ2dsZT0xLHJhdGlv bmFsPTEvMSxzdHJpbmc9ZGVmYXVsdCxlc2NhcGU9XFxcPVwsLGZsYWdzPTB4MDAwMDAwMDEsc2l6 ZT0yMDB4MzAwLHBpeF9mbXQ9MGJncixzYW1wbGVfZm10PXMxNix2aWRlb19yYXRlPTI1LzEsZHVy YXRpb249MC4wMDEsY29sb3I9MHhmZmMwY2JmZixjbD1oZXhhZ29uYWwsYmluPTYyNjk2RTAwLGJp bjE9LGJpbjI9LG51bTY0PTEsZmx0PTAuMzMzMzMzLGRibD0wLjMzMzMzMyxib29sMT1hdXRvLGJv b2wyPXRydWUsYm9vbDM9ZmFsc2UsZGljdDE9LGRpY3QyPWhhcHB5XD1cXDotKQorU2V0dGluZyBl bnRyeSB3aXRoIGtleSAnYXJyYXlfaW50JyB0byB2YWx1ZSAnJworU2V0dGluZyBlbnRyeSB3aXRo IGtleSAnYXJyYXlfc3RyJyB0byB2YWx1ZSAnc3RyMHxzdHJcfDF8c3RyXFwyJworU2V0dGluZyBl bnRyeSB3aXRoIGtleSAnYXJyYXlfZGljdCcgdG8gdmFsdWUgJ2swMD12XFxcXDAwOmswMT12XCww MSxrMTA9dlxcPTFcXDowJworbnVtPTAsdG9nZ2xlPTEscmF0aW9uYWw9MS8xLHN0cmluZz1kZWZh dWx0LGVzY2FwZT1cXFw9XCwsZmxhZ3M9MHgwMDAwMDAwMSxzaXplPTIwMHgzMDAscGl4X2ZtdD0w YmdyLHNhbXBsZV9mbXQ9czE2LHZpZGVvX3JhdGU9MjUvMSxkdXJhdGlvbj0wLjAwMSxjb2xvcj0w eGZmYzBjYmZmLGNsPWhleGFnb25hbCxiaW49NjI2OTZFMDAsYmluMT0sYmluMj0sbnVtNjQ9MSxm bHQ9MC4zMzMzMzMsZGJsPTAuMzMzMzMzLGJvb2wxPWF1dG8sYm9vbDI9dHJ1ZSxib29sMz1mYWxz ZSxkaWN0MT0sZGljdDI9aGFwcHlcPVxcOi0pLGFycmF5X2ludD0sYXJyYXlfc3RyPXN0cjB8c3Ry XFx8MXxzdHJcXFxcMixhcnJheV9kaWN0PWswMFw9dlxcXFxcXFxcMDA6azAxXD12XFxcLDAxXCxr MTBcPXZcXFxcXD0xXFxcXDowCiAKIFRlc3RpbmcgYXZfc2V0X29wdGlvbnNfc3RyaW5nKCkKIFNl dHRpbmcgb3B0aW9ucyBzdHJpbmcgJycKQEAgLTM3OCw2ICs0MDIsMTMgQEAgT0sgICAgJ2Jvb2wy PWF1dG8nCiBTZXR0aW5nIG9wdGlvbnMgc3RyaW5nICdkaWN0MT0naGFwcHk9XDotKTpzYWQ9XDot KCcnCiBTZXR0aW5nIGVudHJ5IHdpdGgga2V5ICdkaWN0MScgdG8gdmFsdWUgJ2hhcHB5PVw6LSk6 c2FkPVw6LSgnCiBPSyAgICAnZGljdDE9J2hhcHB5PVw6LSk6c2FkPVw6LSgnJworU2V0dGluZyBv cHRpb25zIHN0cmluZyAnYXJyYXlfaW50PTAsMzIsMjE0NzQ4MzY0NycKK1NldHRpbmcgZW50cnkg d2l0aCBrZXkgJ2FycmF5X2ludCcgdG8gdmFsdWUgJzAsMzIsMjE0NzQ4MzY0NycKK09LICAgICdh cnJheV9pbnQ9MCwzMiwyMTQ3NDgzNjQ3JworU2V0dGluZyBvcHRpb25zIHN0cmluZyAnYXJyYXlf aW50PTIxNDc0ODM2NDgnCitTZXR0aW5nIGVudHJ5IHdpdGgga2V5ICdhcnJheV9pbnQnIHRvIHZh bHVlICcyMTQ3NDgzNjQ4JworVmFsdWUgMjE0NzQ4MzY0OC4wMDAwMDAgZm9yIHBhcmFtZXRlciAn YXJyYXlfaW50JyBvdXQgb2YgcmFuZ2UgWzAgLSAyLjE0NzQ4ZSswOV0KK0Vycm9yICdhcnJheV9p bnQ9MjE0NzQ4MzY0OCcKIAogVGVzdGluZyBhdl9vcHRfc2V0X2Zyb21fc3RyaW5nKCkKIFNldHRp bmcgb3B0aW9ucyBzdHJpbmcgJycKLS0gCjIuNDMuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=