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 EC4EA4AEFD for ; Thu, 23 May 2024 20:01:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 98B0068D4E9; Thu, 23 May 2024 23:01:47 +0300 (EEST) Received: from alt2.a-painless.mh.aa.net.uk (alt2.a-painless.mh.aa.net.uk [81.187.30.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2AE0968D274 for ; Thu, 23 May 2024 23:01:40 +0300 (EEST) Received: from 0.b.4.b.7.4.0.8.c.4.a.5.d.8.b.2.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:2b8d:5a4c:8047:b4b0] helo=andrews-2024-laptop.lan) by painless-a.thn.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1sAEd9-002Q1U-0a; Thu, 23 May 2024 21:01:39 +0100 From: Andrew Sayers To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 May 2024 21:00:40 +0100 Message-ID: <20240523200116.740461-2-ffmpeg-devel@pileofstuff.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240523200116.740461-1-ffmpeg-devel@pileofstuff.org> References: <20240523200116.740461-1-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 1/4] doc: Explain what "context" means 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 Cc: Andrew Sayers 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: RGVyaXZlZCBmcm9tIGV4cGxhbmF0aW9ucyBraW5kbHkgcHJvdmlkZWQgYnkgU3RlZmFubyBTYWJh dGluaSBhbmQgb3RoZXJzOgpodHRwczovL2ZmbXBlZy5vcmcvcGlwZXJtYWlsL2ZmbXBlZy1kZXZl bC8yMDI0LUFwcmlsLzMyNTkwMy5odG1sCi0tLQogZG9jL2NvbnRleHQubWQgfCA0MzkgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5n ZWQsIDQzOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2NvbnRleHQubWQK CmRpZmYgLS1naXQgYS9kb2MvY29udGV4dC5tZCBiL2RvYy9jb250ZXh0Lm1kCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIxNDY5YTZlNTgKLS0tIC9kZXYvbnVsbAorKysg Yi9kb2MvY29udGV4dC5tZApAQCAtMCwwICsxLDQzOSBAQAorQHBhZ2UgQ29udGV4dCBJbnRyb2R1 Y3Rpb24gdG8gY29udGV4dHMKKworQHRhYmxlb2Zjb250ZW50cworCivigJxDb250ZXh04oCdIGlz IGEgbmFtZSBmb3IgYSB3aWRlbHktdXNlZCBwcm9ncmFtbWluZyBpZGlvbS4KK1RoaXMgZG9jdW1l bnQgZXhwbGFpbnMgdGhlIGdlbmVyYWwgaWRpb20gYW5kIHNvbWUgY29udmVudGlvbnMgdXNlZCBi eSBGRm1wZWcuCisKK1RoaXMgZG9jdW1lbnQgdXNlcyBvYmplY3Qtb3JpZW50ZWQgYW5hbG9naWVz IGZvciByZWFkZXJzIGZhbWlsaWFyIHdpdGgKK1tvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmdd KGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09iamVjdC1vcmllbnRlZF9wcm9ncmFtbWlu ZykuCitCdXQgY29udGV4dHMgY2FuIGFsc28gYmUgdXNlZCBvdXRzaWRlIG9mIE9PUCwgYW5kIGV2 ZW4gaW4gc2l0dWF0aW9ucyB3aGVyZSBPT1AKK2lzbid0IGhlbHBmdWwuICBTbyB0aGVzZSBhbmFs b2dpZXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIHJvdWdoIGd1aWRlLgorCitAc2VjdGlvbiBD b250ZXh0X2dlbmVyYWwg4oCcQ29udGV4dOKAnSBhcyBhIGdlbmVyYWwgY29uY2VwdAorCitNYW55 IHByb2plY3RzIHVzZSBzb21lIGtpbmQgb2Yg4oCcY29udGV4dOKAnSBpZGlvbS4gIFlvdSBjYW4g c2FmZWx5IHNraXAgdGhpcworc2VjdGlvbiBpZiB5b3UgaGF2ZSB1c2VkIGNvbnRleHRzIGluIGFu b3RoZXIgcHJvamVjdC4gIFlvdSBtaWdodCBhbHNvIHByZWZlciB0bworcmVhZCBAcmVmIENvbnRl eHRfY29tcGFyaXNvbiBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBkb2N1 bWVudC4KKworQHN1YnNlY3Rpb24gQ29udGV4dF90aGluayDigJxDb250ZXh04oCdIGFzIGEgd2F5 IHRvIHRoaW5rIGFib3V0IGNvZGUKKworQSBjb250ZXh0IGlzIGFueSBkYXRhIHN0cnVjdHVyZSB0 aGF0IGlzIHBhc3NlZCB0byBzZXZlcmFsIGZ1bmN0aW9ucworKG9yIHNldmVyYWwgaW5zdGFuY2Vz IG9mIHRoZSBzYW1lIGZ1bmN0aW9uKSB0aGF0IGFsbCBvcGVyYXRlIG9uIHRoZSBzYW1lIGVudGl0 eS4KK0ZvciBleGFtcGxlLCBbb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nXShodHRwczovL2Vu Lndpa2lwZWRpYS5vcmcvd2lraS9PYmplY3Qtb3JpZW50ZWRfcHJvZ3JhbW1pbmcpCitsYW5ndWFn ZXMgdXN1YWxseSBwcm92aWRlIG1lbWJlciBmdW5jdGlvbnMgd2l0aCBhIGB0aGlzYCBvciBgc2Vs ZmAgdmFsdWU6CisKK2BgYHB5dGhvbgorIyBQeXRob24gbWV0aG9kcyAoZnVuY3Rpb25zIHdpdGhp biBjbGFzc2VzKSBtdXN0IHN0YXJ0IHdpdGggYW4gb2JqZWN0IGFyZ3VtZW50LAorIyB3aGljaCBk b2VzIGEgc2ltaWxhciBqb2IgdG8gYSBjb250ZXh0OgorY2xhc3MgTXlDbGFzczoKKyAgICBkZWYg bXlfZnVuYyhzZWxmKToKKyAgICAgICAgLi4uCitgYGAKKworQ29udGV4dHMgY2FuIGFsc28gYmUg dXNlZCBpbiBDLXN0eWxlIHByb2NlZHVyYWwgY29kZS4gIElmIHlvdSBoYXZlIGV2ZXIgd3JpdHRl bgorYSBjYWxsYmFjayBmdW5jdGlvbiwgeW91IGhhdmUgcHJvYmFibHkgdXNlZCBhIGNvbnRleHQ6 CisKK2BgYGMKK3N0cnVjdCBGaWxlUmVhZGVyIHsKKyAgICBGSUxFKiBmaWxlOworfTsKKworaW50 IG15X2NhbGxiYWNrKHZvaWQgKm15X3Zhcl8sIHVpbnQ4X3QqIGJ1ZiwgaW50IGJ1Zl9zaXplKSB7 CisKKyAgICAvLyBteV92YXIgcHJvdmlkZXMgY29udGV4dCBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0 aW9uOgorICAgIHN0cnVjdCBGaWxlUmVhZGVyICpteV92YXIgPSAoc3RydWN0IEZpbGVSZWFkZXIg KilteV92YXJfOworCisgICAgcmV0dXJuIHJlYWQobXlfdmFyLT5maWxlLCBzaXplb2YoKmJ1Ziks IGJ1Zl9zaXplKTsKK30KKwordm9pZCBpbml0KCkgeworCisgICAgc3RydWN0IEZpbGVSZWFkZXIg bXlfdmFyOworICAgIG15X3Zhci0+ZmlsZSA9IGZvcGVuKCJteS1maWxlIiwgInJiIik7CisKKyAg ICByZWdpc3Rlcl9jYWxsYmFjayhteV9jYWxsYmFjaywgJm15X3Zhcik7CisKKyAgICAuLi4KKwor ICAgIGZjbG9zZSggbXlfdmFyLT5maWxlICk7CisKK30KK2BgYAorCitJbiB0aGUgYnJvYWRlc3Qg c2Vuc2UsIGEgY29udGV4dCBpcyBqdXN0IGEgd2F5IHRvIHRoaW5rIGFib3V0IHNvbWUgY29kZS4K K1lvdSBjYW4gZXZlbiB1c2UgaXQgdG8gdGhpbmsgYWJvdXQgY29kZSB3cml0dGVuIGJ5IHBlb3Bs ZSB3aG8gaGF2ZSBuZXZlcgoraGVhcmQgdGhlIHRlcm0sIG9yIHdobyB3b3VsZCBkaXNhZ3JlZSB3 aXRoIHlvdSBhYm91dCB3aGF0IGl0IG1lYW5zLgorQnV0IHdoZW4gRkZtcGVnIGRldmVsb3BlcnMg c2F5IOKAnGNvbnRleHTigJ0sIHRoZXkncmUgdXN1YWxseSB0YWxraW5nIGFib3V0CithIG1vcmUg c3BlY2lmaWMgc2V0IG9mIGNvbnZlbnRpb25zLgorCitAc3Vic2VjdGlvbiBDb250ZXh0X2NvbW11 bmljYXRpb24g4oCcQ29udGV4dOKAnSBhcyBhIHRvb2wgb2YgY29tbXVuaWNhdGlvbgorCivigJxD b250ZXh04oCcIGNhbiBqdXN0IGJlIGEgd29yZCB0byB1bmRlcnN0YW5kIGNvZGUgaW4geW91ciBv d24gaGVhZCwKK2J1dCBpdCBjYW4gYWxzbyBiZSBhIHRlcm0geW91IHVzZSB0byBleHBsYWluIHlv dXIgaW50ZXJmYWNlcy4KK0hlcmUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjayBleGFtcGxl IHRoYXQgbWFrZXMgdGhlIGNvbnRleHQgZXhwbGljaXQ6CisKK2BgYGMKK3N0cnVjdCBGaWxlUmVh ZGVyQ29udGV4dCB7CisgICAgRklMRSAqZmlsZTsKK307CisKK2ludCBteV9jYWxsYmFjayh2b2lk ICpjdHhfLCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkgeworCisgICAgLy8gY3R4IHByb3Zp ZGVzIGNvbnRleHQgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbjoKKyAgICBzdHJ1Y3QgRmlsZVJl YWRlckNvbnRleHQgKmN0eCA9IChzdHJ1Y3QgRmlsZVJlYWRlckNvbnRleHQgKiljdHhfOworCisg ICAgcmV0dXJuIHJlYWQoY3R4LT5maWxlLCBzaXplb2YoKmJ1ZiksIGJ1Zl9zaXplKTsKK30KKwor dm9pZCBpbml0KCkgeworCisgICAgc3RydWN0IEZpbGVSZWFkZXIgY3R4OworICAgIGN0eC0+Zmls ZSA9IGZvcGVuKCJteS1maWxlIiwgInJiIik7CisKKyAgICByZWdpc3Rlcl9jYWxsYmFjayhteV9j YWxsYmFjaywgJmN0eCk7CisKKyAgICAuLi4KKworICAgIGZjbG9zZSggY3R4LT5maWxlICk7CisK K30KK2BgYAorCitUaGUgZGlmZmVyZW5jZSBoZXJlIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudC4g IElmIGEgcGllY2Ugb2YgY29kZQorKmFwcGVhcnMgY29tcGF0aWJsZSB3aXRoIGNvbnRleHRzKiwg dGhlbiB5b3UgYXJlICphbGxvd2VkIHRvIHRoaW5rCit0aGF0IHdheSosIGJ1dCBpZiBhIHBpZWNl IG9mIGNvZGUgKmV4cGxpY2l0bHkgc3RhdGVzIGl0IHVzZXMKK2NvbnRleHRzKiwgdGhlbiB5b3Ug YXJlICpyZXF1aXJlZCB0byBmb2xsb3cgdGhhdCBhcHByb2FjaCouCisKK0ZvciBleGFtcGxlLCB0 YWtlIGEgbG9vayBhdCBhdmlvX2FsbG9jX2NvbnRleHQoKS4KK1RoZSBmdW5jdGlvbiBuYW1lIGFu ZCByZXR1cm4gdmFsdWUgYm90aCBzdGF0ZSBpdCB1c2VzIGNvbnRleHRzLAorc28gZmFpbGluZyB0 byBmb2xsb3cgdGhhdCBhcHByb2FjaCBpcyBhIGJ1ZyB5b3UgY2FuIHJlcG9ydC4KK0J1dCBpdHMg YXJndW1lbnRzIGFyZSBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBtZXJlbHkgYXBwZWFyIGNvbXBh dGlibGUgd2l0aAorY29udGV4dHMsIHNvIGl0J3MgZmluZSB0byB3cml0ZSBhIGByZWFkX3BhY2tl dGAgZnVuY3Rpb24gdGhhdCBqdXN0IHJlYWRzCitmcm9tIHN0YW5kYXJkIGlucHV0LgorCitXaGVu IGEgcHJvZ3JhbW1lciBzYXlzIHRoZWlyIGNvZGUgaXMgImEgY29udGV4dCIsIHRoZXkncmUgZ3Vh cmFudGVlaW5nCit0byBmb2xsb3cgYSBzZXQgb2YgY29udmVudGlvbnMgZW5mb3JjZWQgYnkgdGhl aXIgY29tbXVuaXR5IC0gZm9yIGV4YW1wbGUsCit0aGUgRkZtcGVnIGNvbW11bml0eSBlbmZvcmNl cyB0aGF0IGNvbnRleHRzIGhhdmUgc2VwYXJhdGUgYWxsb2NhdGlvbiwKK2NvbmZpZ3VyYXRpb24s IGFuZCBpbml0aWFsaXphdGlvbiBzdGVwcy4gIFRoYXQncyBkaWZmZXJlbnQgZnJvbSBzYXlpbmcK K3RoZWlyIGNvZGUgaXMgImFuIG9iamVjdCIsIHdoaWNoIG5vcm1hbGx5IGd1YXJhbnRlZXMgdG8g Zm9sbG93IGNvbnZlbnRpb25zCitlbmZvcmNlZCBieSB0aGVpciBwcm9ncmFtbWluZyBsYW5ndWFn ZSAoZS5nLiB1c2luZyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uKS4KKworQHNlY3Rpb24gQ29udGV4 dF9mZm1wZWcgRkZtcGVnIGNvbnRleHRzCisKK1RoaXMgc2VjdGlvbiBkaXNjdXNzZXMgc3BlY2lm aWMgY29udGV4dC1yZWxhdGVkIGNvbnZlbnRpb25zIHVzZWQgaW4gRkZtcGVnLgorU29tZSBvZiB0 aGVzZSBhcmUgdXNlZCBpbiBvdGhlciBwcm9qZWN0cywgb3RoZXJzIGFyZSB1bmlxdWUgdG8gdGhp cyBwcm9qZWN0LgorCitAc3Vic2VjdGlvbiBDb250ZXh0X25hbWluZyBOYW1pbmc6IOKAnENvbnRl eHTigJ0gYW5kIOKAnGN0eOKAnQorCitgYGBjCisvLyBDb250ZXh0IHN0cnVjdCBuYW1lcyB1c3Vh bGx5IGVuZCB3aXRoIGBDb250ZXh0YDoKK3N0cnVjdCBBVlNvbWVDb250ZXh0IHsKKyAgLi4uCit9 OworCisvLyBGdW5jdGlvbnMgYXJlIHVzdWFsbHkgbmFtZWQgYWZ0ZXIgdGhlaXIgY29udGV4dCwK Ky8vIGNvbnRleHQgcGFyYW1ldGVycyB1c3VhbGx5IGNvbWUgZmlyc3QgYW5kIGFyZSBvZnRlbiBj YWxsZWQgYGN0eGA6Cit2b2lkIGF2X3NvbWVfZnVuY3Rpb24oQVZTb21lQ29udGV4dCAqY3R4LCAu Li4pOworYGBgCisKK0lmIGFuIEZGbXBlZyBzdHJ1Y3QgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBh IGNvbnRleHQsIGl0cyBuYW1lIHVzdWFsbHkKK21ha2VzIHRoYXQgY2xlYXIuICBFeGNlcHRpb25z IHRvIHRoaXMgcnVsZSBpbmNsdWRlIEFWTUQ1LCB3aGljaCBpcyBvbmx5CitpZGVudGlmaWVkIGFz IGEgY29udGV4dCBieSBAcmVmIGxpYmF2dXRpbC9tZDUuYyAidGhlIGZ1bmN0aW9ucyB0aGF0IGNh bGwgaXQiLgorCitJZiBhIGZ1bmN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRleHQsIGl0 cyBuYW1lIHVzdWFsbHkKK2JlZ2lucyB3aXRoIHNvbWUgdmFyaWFudCBvZiB0aGUgY29udGV4dCBu YW1lIChlLmcuIGF2X21kNV9hbGxvYygpCitvciBhdmNvZGVjX2FsbG9jX2NvbnRleHQzKCkpLiAg RXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUgaW5jbHVkZQorQHJlZiBhdmZvcm1hdC5oICJBVkZvcm1h dENvbnRleHQncyBmdW5jdGlvbnMiLCBtYW55IG9mIHdoaWNoCitiZWdpbiB3aXRoIGp1c3QgYGF2 X2AuCisKK0lmIGEgZnVuY3Rpb24gaGFzIGEgY29udGV4dCBwYXJhbWV0ZXIsIGl0IHVzdWFsbHkg Y29tZXMgZmlyc3QgYW5kIGl0cyBuYW1lCitvZnRlbiBjb250YWlucyBgY3R4YC4gIEV4Y2VwdGlv bnMgaW5jbHVkZSBhdl9ic2ZfYWxsb2MoKSwgd2hpY2ggcHV0cyB0aGUKK2NvbnRleHQgYXJndW1l bnQgc2Vjb25kIHRvIGVtcGhhc2lzZSBpdCdzIGFuIG91dCB2YXJpYWJsZS4KKworU29tZSBmdW5j dGlvbnMgZml0IGF3a3dhcmRseSB3aXRoaW4gRkZtcGVnJ3MgY29udGV4dCBpZGlvbS4gIEZvciBl eGFtcGxlLAorYXZfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50X2NyZWF0ZV9zaWRlX2RhdGEo KSBjcmVhdGVzIGFuCitBVkFtYmllbnRWaWV3aW5nRW52aXJvbm1lbnQgY29udGV4dCwgdGhlbiBh ZGRzIGl0IHRvIHRoZSBzaWRlLWRhdGEgb2YgYW4KK0FWRnJhbWUgY29udGV4dC4gIElmIHlvdSBm aW5kIGNvbnRleHRzIGEgdXNlZnVsIG1ldGFwaG9yIGluIHRoZXNlIGNhc2VzLAoreW91IG1pZ2h0 IHByZWZlciB0byB0aGluayBvZiB0aGVzZSBmdW5jdGlvbnMgYXMgInJlY2VpdmluZyIgYW5kICJw cm9kdWNpbmciCitjb250ZXh0cy4KKworQHN1YnNlY3Rpb24gQ29udGV4dF9kYXRhX2hpZGluZyBE YXRhIGhpZGluZzogcHJpdmF0ZSBjb250ZXh0cworCitgYGBjCisvLyBDb250ZXh0IHN0cnVjdHMg b2Z0ZW4gaGlkZSBwcml2YXRlIGNvbnRleHQ6CitzdHJ1Y3QgQVZTb21lQ29udGV4dCB7CisgIHZv aWQgKnByaXZfZGF0YTsgLy8gc29tZXRpbWVzIGp1c3QgY2FsbGVkICJpbnRlcm5hbCIKK307Citg YGAKKworQ29udGV4dHMgcHJlc2VudCBhIHB1YmxpYyBpbnRlcmZhY2UsIHNvIGNoYW5naW5nIGEg Y29udGV4dCdzIG1lbWJlcnMgZm9yY2VzCitldmVyeW9uZSB0aGF0IHVzZXMgdGhlIGxpYnJhcnkg dG8gYXQgbGVhc3QgcmVjb21waWxlIHRoZWlyIHByb2dyYW0sCitpZiBub3QgcmV3cml0ZSBpdCB0 byByZW1haW4gY29tcGF0aWJsZS4gIE1hbnkgY29udGV4dHMgcmVkdWNlIHRoaXMgcHJvYmxlbQor YnkgaW5jbHVkaW5nIGEgcHJpdmF0ZSBjb250ZXh0IHdpdGggYSB0eXBlIHRoYXQgaXMgbm90IGV4 cG9zZWQgaW4gdGhlIHB1YmxpYworaW50ZXJmYWNlLiAgSGlkaW5nIGluZm9ybWF0aW9uIHRoaXMg d2F5IGVuc3VyZXMgaXQgY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQKK2FmZmVjdGluZyBkb3duc3Ry ZWFtIHNvZnR3YXJlLgorCitQcml2YXRlIGNvbnRleHRzIG9mdGVuIHN0b3JlIHZhcmlhYmxlcyB1 c2VycyBhcmVuJ3Qgc3VwcG9zZWQgdG8gc2VlCisoc2ltaWxhciB0byBhbiBPT1AgcHJpdmF0ZSBi bG9jayksIGJ1dCBjYW4gYWxzbyBzdG9yZSBpbmZvcm1hdGlvbiBzaGFyZWQgYmV0d2Vlbgorc29t ZSBidXQgbm90IGFsbCBpbnN0YW5jZXMgb2YgYSBjb250ZXh0IChlLmcuIGNvZGVjLXNwZWNpZmlj IGZ1bmN0aW9uYWxpdHkpLAorYW5kIEByZWYgQ29udGV4dF9hdm9wdGlvbnMgIkFWT3B0aW9ucy1l bmFibGVkIHN0cnVjdHMiIGNhbiBpbmNsdWRlIG9wdGlvbnMKK3RoYXQgYXJlIGFjY2Vzc2libGUg dGhyb3VnaCB0aGUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBBUEkiLgorT2JqZWN0LW9yaWVu dGVkIHByb2dyYW1tZXJzIHRoaW5raW5nIGFib3V0IHByaXZhdGUgY29udGV4dHMgc2hvdWxkIHJl bWVtYmVyCit0aGF0IEZGbXBlZyBpc24ndCAqbGFyZ2UgZW5vdWdoKiB0byBuZWVkIHNvbWUgY29t bW9uIG9iamVjdC1vcmllbnRlZCB0ZWNobmlxdWVzLAorZXZlbiB0aG91Z2ggaXQncyBzb2x2aW5n IGEgcHJvYmxlbSAqY29tcGxleCBlbm91Z2gqIHRvIGJlbmVmaXQgZnJvbQorc29tZSByYXJlciB0 ZWNobmlxdWVzLgorCitAc3Vic2VjdGlvbiBDb250ZXh0X2xpZmV0aW1lIE1hbmFnZSBsaWZldGlt ZTogYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIGZyZWUKKworYGBgYwordm9pZCBteV9mdW5jdGlv biggLi4uICkgeworCisgICAgLy8gQ29udGV4dCBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdGhlbiBp bml0aWFsaXplZCB3aXRoIGFzc29jaWF0ZWQgZnVuY3Rpb25zOgorCisgICAgQVZTb21lQ29udGV4 dCAqY3R4ID0gYXZfc29tZV9jb250ZXh0X2FsbG9jKC4uLik7CisKKyAgICAvLyAuLi4gY29uZmln dXJlIGN0eCAuLi4KKworICAgIGF2X3NvbWVfY29udGV4dF9pbml0KGN0eCwgLi4uKTsKKworICAg IC8vIC4uLiB1c2UgY3R4IC4uLgorCisgICAgLy8gQ29udGV4dCBzdHJ1Y3RzIGFyZSBmcmVlZCB3 aXRoIGFzc29jaWF0ZWQgZnVuY3Rpb25zOgorCisgICAgYXZfc29tZV9jb250ZXh0X2Nsb3NlKGN0 eCk7CisgICAgYXZfc29tZV9jb250ZXh0X2ZyZWUoY3R4KTsKKworfQorYGBgCisKK0ZGbXBlZyBj b250ZXh0cyBnbyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RhZ2VzIG9mIGxpZmU6CisKKzEuIGFs bG9jYXRpb24gKG9mdGVuIGEgZnVuY3Rpb24gdGhhdCBlbmRzIHdpdGggYF9hbGxvY2ApCisgICAq IGEgcmFuZ2Ugb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdXNlIGJ5IHRoZSBzdHJ1Y3R1cmUK KyAgICogbWVtb3J5IGlzIGFsbG9jYXRlZCBvbiBib3VuZGFyaWVzIHRoYXQgaW1wcm92ZSBjYWNo aW5nCisgICAqIG1lbW9yeSBpcyByZXNldCB0byB6ZXJvZXMsIHNvbWUgaW50ZXJuYWwgc3RydWN0 dXJlcyBtYXkgYmUgaW5pdGlhbGl6ZWQKKzIuIGNvbmZpZ3VyYXRpb24gKGltcGxlbWVudGVkIGJ5 IHNldHRpbmcgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0KQorICAgKiBubyBmdW5jdGlv biBmb3IgdGhpcyAtIGNhbGxpbmcgY29kZSBwb3B1bGF0ZXMgdGhlIHN0cnVjdHVyZSBkaXJlY3Rs eQorICAgKiBtZW1vcnkgaXMgcG9wdWxhdGVkIHdpdGggdXNlZnVsIHZhbHVlcworICAgKiBzaW1w bGUgY29udGV4dHMgY2FuIHNraXAgdGhpcyBzdGFnZQorMy4gaW5pdGlhbGl6YXRpb24gKG9mdGVu IGEgZnVuY3Rpb24gdGhhdCBlbmRzIHdpdGggYF9pbml0YCkKKyAgICogc2V0dXAgYWN0aW9ucyBh cmUgcGVyZm9ybWVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIChlLmcuIG9wZW5pbmcgZmls ZXMpCis1LiBub3JtYWwgdXNhZ2UKKyAgICogbW9zdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0 aGlzIHN0YWdlCisgICAqIGRvY3VtZW50YXRpb24gaW1wbGllcyBzb21lIG1lbWJlcnMgYXJlIG5v dyByZWFkLW9ubHkgKG9yIG5vdCB1c2VkIGF0IGFsbCkKKyAgICogc29tZSBjb250ZXh0cyBhbGxv dyByZS1pbml0aWFsaXphdGlvbgorNi4gY2xvc2luZyAob2Z0ZW4gYSBmdW5jdGlvbiB0aGF0IGVu ZHMgd2l0aCBgX2Nsb3NlKClgKQorICAgKiB0ZWFyZG93biBhY3Rpb25zIGFyZSBwZXJmb3JtZWQg KGUuZy4gY2xvc2luZyBmaWxlcykKKzcuIGRlYWxsb2NhdGlvbiAob2Z0ZW4gYSBmdW5jdGlvbiB0 aGF0IGVuZHMgd2l0aCBgX2ZyZWUoKWApCisgICAqIG1lbW9yeSBpcyByZXR1cm5lZCB0byB0aGUg cG9vbCBvZiBhdmFpbGFibGUgbWVtb3J5CisKK1RoaXMgY2FuIG1pc2xlYWQgb2JqZWN0LW9yaWVu dGVkIHByb2dyYW1tZXJzLCB3aG8gZXhwZWN0IHNvbWV0aGluZyBtb3JlIGxpa2U6CisKKzEuIGFs bG9jYXRpb24gKHVzdWFsbHkgYSBgbmV3YCBrZXl3b3JkKQorICAgKiBhIHJhbmdlIG9mIG1lbW9y eSBpcyBhbGxvY2F0ZWQgZm9yIHVzZSBieSB0aGUgc3RydWN0dXJlCisgICAqIG1lbW9yeSAqbWF5 KiBiZSByZXNldCAoZS5nLiBmb3Igc2VjdXJpdHkgcmVhc29ucykKKzIuIGluaXRpYWxpemF0aW9u ICh1c3VhbGx5IGEgY29uc3RydWN0b3IpCisgICAqIG1lbW9yeSBpcyBwb3B1bGF0ZWQgd2l0aCB1 c2VmdWwgdmFsdWVzCisgICAqIHJlbGF0ZWQgc2V0dXAgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGJh c2VkIG9uIGFyZ3VtZW50cyAoZS5nLiBvcGVuaW5nIGZpbGVzKQorMy4gbm9ybWFsIHVzYWdlCisg ICAqIG1vc3QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gdGhpcyBzdGFnZQorICAgKiBjb21waWxl ciBlbmZvcmNlcyB0aGF0IHNvbWUgbWVtYmVycyBhcmUgcmVhZC1vbmx5IChvciBwcml2YXRlKQor ICAgKiBubyBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzdGFnZQorNC4gZmluYWxpemF0aW9u ICh1c3VhbGx5IGEgZGVzdHJ1Y3RvcikKKyAgICogdGVhcmRvd24gYWN0aW9ucyBhcmUgcGVyZm9y bWVkIChlLmcuIGNsb3NpbmcgZmlsZXMpCis1LiBkZWFsbG9jYXRpb24gKHVzdWFsbHkgYSBgZGVs ZXRlYCBrZXl3b3JkKQorICAgKiBtZW1vcnkgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wgb2YgYXZh aWxhYmxlIG1lbW9yeQorCitGRm1wZWcncyBhbGxvY2F0aW9uIHN0YWdlIGlzIGJyb2FkbHkgc2lt aWxhciB0byB0aGUgT09QIHN0YWdlIG9mIHRoZSBzYW1lIG5hbWUuCitCb3RoIHNldCBhc2lkZSBz b21lIG1lbW9yeSBmb3IgdXNlIGJ5IGEgbmV3IGVudGl0eSwgYnV0IEZGbXBlZydzIHN0YWdlIGNh biBhbHNvCitkbyBzb21lIGhpZ2hlci1sZXZlbCBvcGVyYXRpb25zLiAgRm9yIGV4YW1wbGUsIEBy ZWYgQ29udGV4dF9hdm9wdGlvbnMKKyJBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3RzIiBzZXQgdGhl aXIgQVZDbGFzcyBtZW1iZXIgZHVyaW5nIGFsbG9jYXRpb24uCisKK0ZGbXBlZydzIGNvbmZpZ3Vy YXRpb24gc3RhZ2UgaW52b2x2ZXMgc2V0dGluZyBhbnkgdmFyaWFibGVzIHlvdSB3YW50IHRvIGJl Zm9yZQoreW91IHN0YXJ0IHVzaW5nIHRoZSBjb250ZXh0LiAgQ29tcGxpY2F0ZWQgRkZtcGVnIHN0 cnVjdHVyZXMgbGlrZSBBVkNvZGVjQ29udGV4dAordGVuZCB0byBoYXZlIG1hbnkgbWVtYmVycyB5 b3UgKmNvdWxkKiBzZXQsIGJ1dCBpbiBwcmFjdGljZSBtb3N0IHByb2dyYW1zIHNldAorZmV3IGlm IGFueSBvZiB0aGVtLiAgVGhlIGZyZWVmb3JtIGNvbmZpZ3VyYXRpb24gc3RhZ2Ugd29ya3MgYmV0 dGVyIHRoYW4gYnVuZGxpbmcKK3RoZXNlIGludG8gdGhlIGluaXRpbGl6YXRpb24gc3RhZ2UsIHdo aWNoIHdvdWxkIGxlYWQgdG8gZnVuY3Rpb25zIHdpdGgKK2ltcHJhY3RpY2FsbHkgbWFueSBwYXJh bWV0ZXJzLCBhbmQgd291bGQgbWVhbiBlYWNoIG5ldyBvcHRpb24gd2FzIGFuCitpbmNvbXBhdGli bGUgY2hhbmdlIHRvIHRoZSBBUEkuCisKK0ZGbXBlZydzIGluaXRpYWxpemF0aW9uIHN0YWdlIGlu dm9sdmVzIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIGNvbnRleHQKK3VwIGJhc2Vk IG9uIHlvdXIgY29uZmlndXJhdGlvbi4KKworRkZtcGVnJ3MgZmlyc3QgdGhyZWUgc3RhZ2VzIGRv IHRoZSBzYW1lIGpvYiBhcyBPT1AncyBmaXJzdCB0d28gc3RhZ2VzLgorVGhpcyBjYW4gbWlzbGVh ZCBvYmplY3Qtb3JpZW50ZWQgZGV2ZWxvcGVycywgd2hvIGV4cGVjdCB0byBkbyBsZXNzIHdvcmsg aW4gdGhlCithbGxvY2F0aW9uIHN0YWdlLCBhbmQgbW9yZSB3b3JrIGluIHRoZSBpbml0aWFsaXph dGlvbiBzdGFnZS4gIFRvIHNpbXBsaWZ5IHRoaXMsCittb3N0IEZGbXBlZyBjb250ZXh0cyBwcm92 aWRlIGEgY29tYmluZWQgYWxsb2NhdG9yIGFuZCBpbml0aWFsaXplciBmdW5jdGlvbi4KK0ZvciBo aXN0b3JpY2FsIHJlYXNvbnMsIHN1ZmZpeGVzIGxpa2UgYF9hbGxvY2AsIGBfaW5pdGAsIGBfYWxs b2NfY29udGV4dGAgYW5kCitldmVuIGBfb3BlbmAgY2FuIGluZGljYXRlIHRoZSBmdW5jdGlvbiBk b2VzIGFueSBjb21iaW5hdGlvbiBvZiBhbGxvY2F0aW9uIGFuZAoraW5pdGlhbGl6YXRpb24uCisK K0ZGbXBlZydzICJjbG9zaW5nIiBzdGFnZSBpcyBicm9hZGx5IHNpbWlsYXIgdG8gT09QJ3MgImZp bmFsaXphdGlvbiIgc3RhZ2UsCitidXQgc29tZSBjb250ZXh0cyBhbGxvdyByZS1pbml0aWFsaXph dGlvbiBhZnRlciBmaW5hbGl6YXRpb24uICBGb3IgZXhhbXBsZSwKK1N3ckNvbnRleHQgbGV0cyB5 b3UgY2FsbCBzd3JfY2xvc2UoKSB0aGVuIHN3cl9pbml0KCkgdG8gcmV1c2UgYSBjb250ZXh0Lgor QmUgYXdhcmUgdGhhdCBzb21lIEZGbXBlZyBmdW5jdGlvbnMgaGFwcGVuIHRvIHVzZSB0aGUgd29y ZCAiZmluYWxpemUiIGluIGEgd2F5Cit0aGF0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIE9P UCBzdGFnZSAoZS5nLiBhdl9ic2ZfbGlzdF9maW5hbGl6ZSgpKS4KKworRkZtcGVnJ3MgImRlYWxs b2NhdGlvbiIgc3RhZ2UgaXMgYnJvYWRseSBzaW1pbGFyIHRvIE9PUCwgYnV0IGNhbiBwZXJmb3Jt IHNvbWUKK2hpZ2hlci1sZXZlbCBmdW5jdGlvbnMgKHNpbWlsYXIgdG8gdGhlIGFsbG9jYXRpb24g c3RhZ2UpLgorCitDbG9zaW5nIGZ1bmN0aW9ucyB1c3VhbGx5IGVuZCB3aXRoICJfY2xvc2UiLCB3 aGlsZSBkZWFsbG9jYXRpb24KK2Z1bmN0aW9ucyB1c3VhbGx5IGVuZCB3aXRoICJfZnJlZSIuICBW ZXJ5IGZldyBjb250ZXh0cyBuZWVkIHRoZSBmbGV4aWJpbGl0eSBvZgorc2VwYXJhdGUgImNsb3Np bmciIGFuZCAiZGVhbGxvY2F0aW9uIiBzdGFnZXMsIHNvIG1hbnkgIl9mcmVlIiBmdW5jdGlvbnMK K2ltcGxpY2l0bHkgY2xvc2UgdGhlIGNvbnRleHQgZmlyc3QuCisKK0BzdWJzZWN0aW9uIENvbnRl eHRfYXZvcHRpb25zIFJlZmxlY3Rpb246IEFWT3B0aW9ucy1lbmFibGVkIHN0cnVjdHMKKworT2Jq ZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIHB1dHMgbW9yZSBmb2N1cyBvbiBkYXRhIGhpZGluZyB0 aGFuIEZGbXBlZyBuZWVkcywKK2J1dCBpdCBhbHNvIHB1dHMgbGVzcyBmb2N1cyBvbgorW3JlZmxl Y3Rpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlZmxlY3Rpb25fKGNvbXB1dGVy X3Byb2dyYW1taW5nKSkuCisKK1RvIHVuZGVyc3RhbmQgRkZtcGVnJ3MgcmVmbGVjdGlvbiByZXF1 aXJlbWVudHMsIHJ1biBgZmZtcGVnIC1oIGZ1bGxgIG9uIHRoZQorY29tbWFuZC1saW5lLCB0aGVu IGFzayB5b3Vyc2VsZiBob3cgeW91IHdvdWxkIGltcGxlbWVudCBhbGwgdGhvc2Ugb3B0aW9ucwor d2l0aCB0aGUgQyBzdGFuZGFyZCBbYGdldG9wdGAgZnVuY3Rpb25dKGh0dHBzOi8vZW4ud2lraXBl ZGlhLm9yZy93aWtpL0dldG9wdCkuCitZb3UgY2FuIGFsc28gYXNrIHRoZSBzYW1lIHF1ZXN0aW9u IGZvciBhbnkgb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHlvdSBrbm93LgorW1B5dGhvbidz IGFyZ3BhcnNlIG1vZHVsZV0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3Bh cnNlLmh0bWwpCitpcyBhIGdvb2QgZXhhbXBsZSAtIGl0cyBhcHByb2FjaCB3b3JrcyB3ZWxsIHdp dGggZmFyIG1vcmUgY29tcGxleCBwcm9ncmFtcwordGhhbiBgZ2V0b3B0YCwgYnV0IHdvdWxkIHlv dSBsaWtlIHRvIG1haW50YWluIGFuIGFyZ3BhcnNlIGltcGxlbWVudGF0aW9uCit3aXRoIDE1LDAw MCBvcHRpb25zIGFuZCBncm93aW5nPworCitNb3N0IHNvbHV0aW9ucyBhc3N1bWUgeW91IGNhbiBq dXN0IHB1dCBhbGwgb3B0aW9ucyBpbiBhIHNpbmdsZSBibG9jaywKK3doaWNoIGlzIHVud29ya2Fi bGUgYXQgRkZtcGVnJ3Mgc2NhbGUuICBJbnN0ZWFkLCB3ZSBzcGxpdCBjb25maWd1cmF0aW9uCith Y3Jvc3MgbWFueSAqQVZPcHRpb25zLWVuYWJsZWQgc3RydWN0cyosIHdoaWNoIHVzZSB0aGUgQHJl ZiBhdm9wdGlvbnMKKyJBVk9wdGlvbnMgQVBJIiB0byByZWZsZWN0IGluZm9ybWF0aW9uIGFib3V0 IHRoZWlyIHVzZXItY29uZmlndXJhYmxlIG1lbWJlcnMsCitpbmNsdWRpbmcgbWVtYmVycyBpbiBw cml2YXRlIGNvbnRleHRzLgorCitBVk9wdGlvbnMtYWNjZXNzaWJsZSBtZW1iZXJzIG9mIGEgY29u dGV4dCBzaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUKK0ByZWYgYXZvcHRpb25zICJBVk9w dGlvbnMgQVBJIiB3aGVuZXZlciBwb3NzaWJsZSwgZXZlbiBpZiB0aGV5J3JlIG5vdCBoaWRkZW4K K2luIGEgcHJpdmF0ZSBjb250ZXh0LiAgVGhhdCBlbnN1cmVzIHZhbHVlcyBhcmUgdmFsaWRhdGVk IGFzIHRoZXkncmUgc2V0LCBhbmQKK21lYW5zIHlvdSB3b24ndCBoYXZlIHRvIGRvIGFzIG11Y2gg d29yayBpZiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEZGbXBlZyBjaGFuZ2VzCit0aGUgYWxsb3dlZCB2 YWx1ZXMuICBUaGlzIGlzIGJyb2FkbHkgc2ltaWxhciB0byB0aGUgd2F5IG9iamVjdC1vcmllbnRl ZCBwcm9ncmFtcworcmVjb21tZW5kIGdldHRlcnMgYW5kIHNldHRlcnMgb3ZlciBkaXJlY3QgYWNj ZXNzLgorCitPYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1lcnMgbWF5IGJlIHRlbXB0ZWQgdG8gY29t cGFyZSBBVk9wdGlvbnMtYWNjZXNzaWJsZQorbWVtYmVycyBvZiBhIHB1YmxpYyBjb250ZXh0IHRv IHByb3RlY3RlZCBtZW1iZXJzIG9mIGEgY2xhc3MuICBCb3RoIHByb3ZpZGUKK2dsb2JhbCBhY2Nl c3MgdGhyb3VnaCBhbiBBUEksIGFuZCB1bnJlc3RyaWN0ZWQgYWNjZXNzIGZvciB0cnVzdGVkIGZy aWVuZHMuCitCdXQgdGhpcyBpcyBqdXN0IGEgaGFwcHkgYWNjaWRlbnQsIG5vdCBhIGd1YXJhbnRl ZS4KKworQHN1YnNlY3Rpb24gQ29udGV4dF9sb2dnaW5nIExvZ2dpbmc6IEFWQ2xhc3MgY29udGV4 dCBzdHJ1Y3R1cmVzCisKK0ZGbXBlZydzIEByZWYgbGF2dV9sb2cgImxvZ2dpbmcgZmFjaWxpdHki IG5lZWRzIHRvIGJlIHNpbXBsZSB0byB1c2UsCitidXQgZmxleGlibGUgZW5vdWdoIHRvIGxldCBw ZW9wbGUgZGVidWcgcHJvYmxlbXMuICBBbmQgbXVjaCBsaWtlIHJlZmxlY3Rpb24sCitpdCBuZWVk cyB0byB3b3JrIHRoZSBzYW1lIGFjcm9zcyBhIHdpZGUgdmFyaWV0eSBvZiB1bnJlbGF0ZWQgc3Ry dWN0cy4KKworRkZtcGVnIHN0cnVjdHMgdGhhdCBzdXBwb3J0IHRoZSBsb2dnaW5nIGZyYW1ld29y ayBhcmUgY2FsbGVkICpAcmVmIEFWQ2xhc3MKK2NvbnRleHQgc3RydWN0dXJlcyouICBUaGUgbmFt ZSBAcmVmIEFWQ2xhc3Mgd2FzIGNob3NlbiBlYXJseSBpbiBGRm1wZWcncworZGV2ZWxvcG1lbnQs IGJ1dCBpbiBwcmFjdGljZSBpdCBvbmx5IGNhbWUgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQK K2xvZ2dpbmcsIGFuZCBhYm91dCBpbnRyb3NwZWN0aW9uLgorCitAc2VjdGlvbiBDb250ZXh0X2Z1 cnRoZXIgRnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBjb250ZXh0cworCitTbyBmYXIsIHRoaXMg ZG9jdW1lbnQgaGFzIHByb3ZpZGVkIGEgdGhlb3JldGljYWwgZ3VpZGUgdG8gRkZtcGVnIGNvbnRl eHRzLgorVGhpcyBmaW5hbCBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYWx0ZXJuYXRpdmUgYXBwcm9h Y2hlcyB0byB0aGUgdG9waWMsCit3aGljaCBtYXkgaGVscCByb3VuZCBvdXQgeW91ciB1bmRlcnN0 YW5kaW5nLgorCitAc3Vic2VjdGlvbiBDb250ZXh0X2V4YW1wbGUgTGVhcm5pbmcgYnkgZXhhbXBs ZTogY29udGV4dCBmb3IgYSBjb2RlYworCitJdCBjYW4gaGVscCB0byBsZWFybiBjb250ZXh0cyBi eSBkb2luZyBhIGRlZXAgZGl2ZSBpbnRvIGEgc3BlY2lmaWMgc3RydWN0LgorVGhpcyBzZWN0aW9u IHdpbGwgZGlzY3VzcyBBVkNvZGVjQ29udGV4dCAtIGFuIEFWT3B0aW9ucy1lbmFibGVkIHN0cnVj dAordGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBlbmNvZGluZyBvciBkZWNvZGluZyBv bmUgc3RyZWFtIG9mIGRhdGEKKyhlLmcuIHRoZSB2aWRlbyBpbiBhIG1vdmllKS4KKworVGhlIG5h bWUgIkFWQ29kZWNDb250ZXh0IiB0ZWxscyB1cyB0aGlzIGlzIGEgY29udGV4dC4gIE1hbnkgb2YK K0ByZWYgbGliYXZjb2RlYy9hdmNvZGVjLmggIml0cyBmdW5jdGlvbnMiIHN0YXJ0IHdpdGggYW4g YGF2Y3R4YCBwYXJhbWV0ZXIsCitpbmRpY2F0aW5nIHRoaXMgcGFyYW1ldGVyIHByb3ZpZGVzIGNv bnRleHQgZm9yIHRoYXQgZnVuY3Rpb24uCisKK0FWQ29kZWNDb250ZXh0OjppbnRlcm5hbCBjb250 YWlucyB0aGUgcHJpdmF0ZSBjb250ZXh0LiAgRm9yIGV4YW1wbGUsCitjb2RlYy1zcGVjaWZpYyBp bmZvcm1hdGlvbiBtaWdodCBiZSBzdG9yZWQgaGVyZS4KKworQVZDb2RlY0NvbnRleHQgaXMgYWxs b2NhdGVkIHdpdGggYXZjb2RlY19hbGxvY19jb250ZXh0MygpLCBpbml0aWFsaXplZCB3aXRoCith dmNvZGVjX29wZW4yKCksIGFuZCBmcmVlZCB3aXRoIGF2Y29kZWNfZnJlZV9jb250ZXh0KCkuICBN b3N0IG9mIGl0cyBtZW1iZXJzCithcmUgY29uZmlndXJlZCB3aXRoIHRoZSBAcmVmIGF2b3B0aW9u cyAiQVZPcHRpb25zIEFQSSIsIGJ1dCBmb3IgZXhhbXBsZSB5b3UKK2NhbiBzZXQgQVZDb2RlY0Nv bnRleHQ6Om9wYXF1ZSBvciBBVkNvZGVjQ29udGV4dDo6ZHJhd19ob3Jpel9iYW5kKCkgaWYgeW91 cgorcHJvZ3JhbSBoYXBwZW5zIHRvIG5lZWQgdGhlbS4KKworQVZDb2RlY0NvbnRleHQgcHJvdmlk ZXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlIHRvIG1hbnkgZGlmZmVyZW50ICpjb2RlY3MqLgorT3B0 aW9ucyBzdXBwb3J0ZWQgYnkgbWFueSBjb2RlY3MgKGUuZy4gImJpdHJhdGUiKSBhcmUga2VwdCBp biBBVkNvZGVjQ29udGV4dAorYW5kIHJlZmxlY3RlZCBhcyBBVk9wdGlvbnMuICBPcHRpb25zIHRo YXQgYXJlIHNwZWNpZmljIHRvIG9uZSBjb2RlYyBhcmUKK3N0b3JlZCBpbiB0aGUgcHJpdmF0ZSBj b250ZXh0LCBhbmQgcmVmbGVjdGVkIGZyb20gdGhlcmUuCisKK0FWQ29kZWNDb250ZXh0Ojphdl9j bGFzcyBjb250YWlucyBsb2dnaW5nIG1ldGFkYXRhIHRvIGVuc3VyZSBhbGwgY29kZWMtcmVsYXRl ZAorZXJyb3IgbWVzc2FnZXMgbG9vayB0aGUgc2FtZSwgcGx1cyBpbXBsZW1lbnRhdGlvbiBkZXRh aWxzIGFib3V0IG9wdGlvbnMuCisKK1RvIHN1cHBvcnQgYSBzcGVjaWZpYyBjb2RlYywgQVZDb2Rl Y0NvbnRleHQncyBwcml2YXRlIGNvbnRleHQgaXMgc2V0IHRvCithbiBlbmNvZGVyLXNwZWNpZmlj IGRhdGEgdHlwZS4gIEZvciBleGFtcGxlLCB0aGUgdmlkZW8gY29kZWMKK1tILjI2NF0oaHR0cHM6 Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWR2YW5jZWRfVmlkZW9fQ29kaW5nKSBpcyBzdXBwb3J0 ZWQgdmlhCitbdGhlIHgyNjQgbGlicmFyeV0oaHR0cHM6Ly93d3cudmlkZW9sYW4ub3JnL2RldmVs b3BlcnMveDI2NC5odG1sKSwgYW5kCitpbXBsZW1lbnRlZCBpbiBYMjY0Q29udGV4dC4gIEFsdGhv dWdoIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCBYMjY0Q29udGV4dAoraXMgbm90IHBh cnQgb2YgdGhlIHB1YmxpYyBBUEkuICBUaGF0IG1lYW5zIEZGbXBlZydzIEByZWYgZmZtcGVnX3Zl cnNpb25pbmcKKyJzdHJpY3QgcnVsZXMgYWJvdXQgY2hhbmdpbmcgcHVibGljIHN0cnVjdHMiIGFy ZW4ndCBhcyBpbXBvcnRhbnQgaGVyZSwgc28gYQordmVyc2lvbiBvZiBGRm1wZWcgY291bGQgbW9k aWZ5IFgyNjRDb250ZXh0IG9yIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIHR5cGUKK2FsdG9nZXRo ZXIuICBBbiBhZHZlcnNlIGxlZ2FsIHJ1bGluZyBvciBzZWN1cml0eSBwcm9ibGVtIGNvdWxkIGV2 ZW4gZm9yY2UgdXMgdG8KK3N3aXRjaCB0byBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGxpYnJhcnkg d2l0aG91dCBhIG1ham9yIHZlcnNpb24gYnVtcC4KKworVGhlIGRlc2lnbiBvZiBBVkNvZGVjQ29u dGV4dCBwcm92aWRlcyBzZXZlcmFsIGltcG9ydGFudCBndWFyYW50ZWVzOgorCistIGxldHMgeW91 IHVzZSB0aGUgc2FtZSBpbnRlcmZhY2UgZm9yIGFueSBjb2RlYworLSBzdXBwb3J0cyBjb21tb24g ZW5jb2RlciBvcHRpb25zIGxpa2UgImJpdHJhdGUiIHdpdGhvdXQgZHVwbGljYXRpbmcgY29kZQor LSBzdXBwb3J0cyBlbmNvZGVyLXNwZWNpZmljIG9wdGlvbnMgbGlrZSAicHJvZmlsZSIgd2l0aG91 dCBidWxraW5nIG91dCB0aGUgcHVibGljIGludGVyZmFjZQorLSByZWZsZWN0cyBib3RoIHR5cGVz IG9mIG9wdGlvbnMgdG8gdXNlcnMsIHdpdGggaGVscCB0ZXh0IGFuZCBkZXRlY3Rpb24gb2YgbWlz c2luZyBvcHRpb25zCistIHByb3ZpZGVzIHVuaWZvcm0gbG9nZ2luZyBvdXRwdXQKKy0gaGlkZXMg aW1wbGVtZW50YXRpb24gZGV0YWlscyAoZS5nLiBpdHMgZW5jb2RpbmcgYnVmZmVyKQorCitAc3Vi c2VjdGlvbiBDb250ZXh0X2NvbXBhcmlzb24gTGVhcm5pbmcgYnkgY29tcGFyaXNvbjogRkZtcGVn IHZzLiBDdXJsIGNvbnRleHRzCisKK0l0IGNhbiBoZWxwIHRvIGxlYXJuIGNvbnRleHRzIGJ5IGNv bXBhcmluZyBob3cgZGlmZmVyZW50IHByb2plY3RzIHRhY2tsZQorc2ltaWxhciBwcm9ibGVtcy4g IFRoaXMgc2VjdGlvbiB3aWxsIGNvbXBhcmUgQHJlZiBBVk1ENSAiRkZtcGVnJ3MgTUQ1IGNvbnRl eHQiCit3aXRoIFtjdXJsIDguOC4wJ3MgZXF1aXZhbGVudF0oaHR0cHM6Ly9naXRodWIuY29tL2N1 cmwvY3VybC9ibG9iL2N1cmwtOF84XzAvbGliL21kNS5jI0w0OCkuCisKK1RoZSBbTUQ1IGFsZ29y aXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUQ1KSBwcm9kdWNlcworYSBmaXhl ZC1sZW5ndGggZGlnZXN0IGZyb20gYXJiaXRyYXJ5LWxlbmd0aCBkYXRhLiAgSXQgZG9lcyB0aGlz IGJ5IGNhbGN1bGF0aW5nCit0aGUgZGlnZXN0IGZvciBhIHByZWZpeCBvZiB0aGUgZGF0YSwgdGhl biBsb2FkaW5nIHRoZSBuZXh0IHBhcnQgYW5kIGFkZGluZyBpdAordG8gdGhlIHByZXZpb3VzIGRp Z2VzdCwgYW5kIHNvIG9uLgorCitgYGBjCisvLyBGRm1wZWcncyBNRDUgY29udGV4dCBsb29rcyBs aWtlIHRoaXM6Cit0eXBlZGVmIHN0cnVjdCBBVk1ENSB7CisgICAgdWludDY0X3QgbGVuOworICAg IHVpbnQ4X3QgIGJsb2NrWzY0XTsKKyAgICB1aW50MzJfdCBBQkNEWzRdOworfSBBVk1ENTsKKwor Ly8gQ3VybCA4LjguMCdzIE1ENSBjb250ZXh0IGxvb2tzIGxpa2UgdGhpczoKK3N0cnVjdCBNRDVf Y29udGV4dCB7CisgIGNvbnN0IHN0cnVjdCBNRDVfcGFyYW1zICptZDVfaGFzaDsgICAgLyogSGFz aCBmdW5jdGlvbiBkZWZpbml0aW9uICovCisgIHZvaWQgICAgICAgICAgICAgICAgICAqbWQ1X2hh c2hjdHg7ICAgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0ICovCit9OworYGBgCisKK0N1cmwncyBz dHJ1Y3QgbmFtZSBlbmRzIHdpdGggYF9jb250ZXh0YCwgZ3VhcmFudGVlaW5nIGNvbnRleHRzIGFy ZSB0aGUgY29ycmVjdAoraW50ZXJwcmV0YXRpb24uICBGRm1wZWcncyBzdHJ1Y3QgZG9lcyBub3Qg ZXhwbGljaXRseSBzYXkgaXQncyBhIGNvbnRleHQsIGJ1dAorQHJlZiBsaWJhdnV0aWwvbWQ1LmMg Iml0cyBmdW5jdGlvbnMgZG8iIHNvIHdlIGNhbiByZWFzb25hYmx5IGFzc3VtZQoraXQncyB0aGUg aW50ZW5kZWQgaW50ZXJwcmV0YXRpb24uCisKK0N1cmwncyBzdHJ1Y3QgdXNlcyBgdm9pZCAqbWQ1 X2hhc2hjdHhgIHRvIGF2b2lkIGd1YXJhbnRlZWluZworaW1wbGVtZW50YXRpb24gZGV0YWlscyBp biB0aGUgcHVibGljIGludGVyZmFjZSwgd2hlcmVhcyBGRm1wZWcgbWFrZXMKK2V2ZXJ5dGhpbmcg YWNjZXNzaWJsZS4gIFRoaXMgZGlzYWdyZWVtZW50IGFib3V0IGRhdGEgaGlkaW5nIGlzIGEgZ29v ZCBleGFtcGxlCitvZiBob3cgY29udGV4dHMgY2FuIGJlIHVzZWQgZGlmZmVyZW50bHkuICBIaWRp bmcgdGhlIGRhdGEgbWVhbnMgY2hhbmdpbmcgdGhlCitsYXlvdXQgaW4gYSBmdXR1cmUgdmVyc2lv biBvZiBjdXJsIHdvbid0IGJyZWFrIGRvd25zdHJlYW0gcHJvZ3JhbXMgdGhhdCB1c2VkCit0aGF0 IGRhdGEuICBCdXQgdGhlIE1ENSBhbGdvcml0aG0gaGFzIGJlZW4gc3RhYmxlIGZvciAzMCB5ZWFy cywgYW5kIG1ha2luZyB0aGUKK2RhdGEgcHVibGljIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxl IHRvIGZvbGxvdyBhIGJ1ZyBpbiB0aGVpciBvd24gY29kZS4KKworQ3VybCdzIHN0cnVjdCBpcyBk ZWNsYXJlZCBhcyBgc3RydWN0IDx0eXBlPiB7IC4uLiB9YCwgd2hlcmVhcyBGRm1wZWcgdXNlcwor YHR5cGVkZWYgc3RydWN0IDx0eXBlPiB7IC4uLiB9IDx0eXBlPmAuICBUaGVzZSBjb252ZW50aW9u cyBhcmUgdXNlZCB3aXRoIGJvdGgKK2NvbnRleHQgYW5kIG5vbi1jb250ZXh0IHN0cnVjdHMsIHNv IGRvbid0IHNheSBhbnl0aGluZyBhYm91dCBjb250ZXh0cyBhcyBzdWNoLgorU3BlY2lmaWNhbGx5 LCBGRm1wZWcncyBjb252ZW50aW9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYW4gaXNzdWUgd2l0aCBD IGdyYW1tYXI6CisKK2BgYGMKK3ZvaWQgbXlfZnVuY3Rpb24oIC4uLiApIHsKKyAgaW50ICAgICAg ICAgICAgICAgIG15X3ZhcjsgICAgICAgIC8vIGdvb2QKKyAgTUQ1X2NvbnRleHQgICAgICAgIG15 X2N1cmxfY3R4OyAgIC8vIGVycm9yOiBDIG5lZWRzIHlvdSB0byBleHBsaWNpdGx5IHNheSAic3Ry dWN0IgorICBzdHJ1Y3QgTUQ1X2NvbnRleHQgbXlfY3VybF9jdHg7ICAgLy8gZ29vZDogYWRkZWQg InN0cnVjdCIKKyAgQVZNRDUgICAgICAgICAgICAgIG15X2ZmbXBlZ19jdHg7IC8vIGdvb2Q6IHR5 cGVkZWYncyBhdm9pZCB0aGUgbmVlZCBmb3IgInN0cnVjdCIKK30KK2BgYAorCitCb3RoIE1ENSBp bXBsZW1lbnRhdGlvbnMgYXJlIGxvbmctdGVzdGVkLCB3aWRlbHktdXNlZCBleGFtcGxlcyBvZiBj b250ZXh0cworaW4gdGhlIHJlYWwgd29ybGQuICBUaGV5IHNob3cgaG93IGNvbnRleHRzIGNhbiBz b2x2ZSB0aGUgc2FtZSBwcm9ibGVtCitpbiBkaWZmZXJlbnQgd2F5cy4KLS0gCjIuNDMuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=