From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dkeIs-0005Bz-CA for ptxdist@pengutronix.de; Thu, 24 Aug 2017 00:39:14 +0200 Received: from rhi by dude.hi.pengutronix.de with local (Exim 4.89) (envelope-from ) id 1dkeIs-0007bQ-11 for ptxdist@pengutronix.de; Thu, 24 Aug 2017 00:39:14 +0200 From: Roland Hieber Date: Thu, 24 Aug 2017 00:39:11 +0200 Message-Id: <20170823223911.13784-8-r.hieber@pengutronix.de> In-Reply-To: <20170823223911.13784-1-r.hieber@pengutronix.de> References: <20170823223911.13784-1-r.hieber@pengutronix.de> Subject: [ptxdist] [PATCH 7/7] cups-filters: new package: additional filters and backends for CUPS List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de VXBzdHJlYW0gaXMgdmVyeSByZXNwb25zaXZlLCBtZXJnZWQgc29tZSBwYXRjaGVzIGFuZCBtYWRl IGEgbmV3IHJlbGVhc2UKd2hpbGUgSSB3YXMgc3RpbGwgcGFja2FnaW5nIHRoZSBvbGQgb25lIDop CgpTaWduZWQtb2ZmLWJ5OiBSb2xhbmQgSGllYmVyIDxyLmhpZWJlckBwZW5ndXRyb25peC5kZT4K LS0tCiAuLi4vMDAwMS1jb25maWd1cmUuYWMtY2hlY2stZm9yLUMtMTEtc3VwcG9ydC5wYXRjaCB8 IDEwMTkgKysrKysrKysrKysrKysrKysrKysKIHBhdGNoZXMvY3Vwcy1maWx0ZXJzLTEuMTYuMS9h dXRvZ2VuLnNoICAgICAgICAgICAgIHwgICAgMiArCiBwYXRjaGVzL2N1cHMtZmlsdGVycy0xLjE2 LjEvc2VyaWVzICAgICAgICAgICAgICAgICB8ICAgIDQgKwogcnVsZXMvY3Vwcy1maWx0ZXJzLmlu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY5ICsrCiBydWxlcy9jdXBzLWZpbHRl cnMubWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTYgKysKIDUgZmlsZXMgY2hh bmdlZCwgMTE5MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy9jdXBz LWZpbHRlcnMtMS4xNi4xLzAwMDEtY29uZmlndXJlLmFjLWNoZWNrLWZvci1DLTExLXN1cHBvcnQu cGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBwYXRjaGVzL2N1cHMtZmlsdGVycy0xLjE2LjEvYXV0 b2dlbi5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvY3Vwcy1maWx0ZXJzLTEuMTYuMS9z ZXJpZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBydWxlcy9jdXBzLWZpbHRlcnMuaW4KIGNyZWF0ZSBt b2RlIDEwMDY0NCBydWxlcy9jdXBzLWZpbHRlcnMubWFrZQoKZGlmZiAtLWdpdCBhL3BhdGNoZXMv Y3Vwcy1maWx0ZXJzLTEuMTYuMS8wMDAxLWNvbmZpZ3VyZS5hYy1jaGVjay1mb3ItQy0xMS1zdXBw b3J0LnBhdGNoIGIvcGF0Y2hlcy9jdXBzLWZpbHRlcnMtMS4xNi4xLzAwMDEtY29uZmlndXJlLmFj LWNoZWNrLWZvci1DLTExLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi5hN2QzMDhlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzL2N1cHMtZmls dGVycy0xLjE2LjEvMDAwMS1jb25maWd1cmUuYWMtY2hlY2stZm9yLUMtMTEtc3VwcG9ydC5wYXRj aApAQCAtMCwwICsxLDEwMTkgQEAKK0Zyb206IFJvbGFuZCBIaWViZXIgPHIuaGllYmVyQHBlbmd1 dHJvbml4LmRlPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxMjo1MzoxNCArMDIwMAorU3ViamVj dDogW1BBVENIXSBjb25maWd1cmUuYWM6IGNoZWNrIGZvciBDKysxMSBzdXBwb3J0CisKK1RoZSBm aWx0ZXJzIHBkZnRvb3B2cCwgYmFubmVydG9wZGYgYW5kIHBkZnRvcmFzdGVyIGRlcGVuZCBvbiBm ZWF0dXJlcworb25seSBhdmFpbGFibGUgaW4gQysrMTEsIGluZGlyZWN0bHkgYWxzbyBiZWNhdXNl IHBvcHBsZXIgZG9lcyBub3QgcHV0Cistc3RkPWMrKzExIG9uIGl0cyBwa2ctY29uZmlnIENGTEFH UyAoYnV0IEknbSBub3Qgc3VyZSB3aGV0aGVyIGl0IHNob3VsZAorZXZlbiBkbyB0aGlzKS4gU29s dmUgdGhpcyBwcm9ibGVtcyBieSBhZGRpbmcgLXN0ZD1jKysxIHRvICQoQ1hYKSwgaWYKK25lY2Vz c2FyeSwgb3IgZmFpbCBpZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBDKysxMS4KKwor Rm9yd2FyZGVkOiBodHRwczovL2J1Z3MubGludXhmb3VuZGF0aW9uLm9yZy9zaG93X2J1Zy5jZ2k/ aWQ9MTQwNAorQXBwbGllZC1VcHN0cmVhbTogaHR0cDovL2J6ci5saW51eGZvdW5kYXRpb24ub3Jn L2xvZ2dlcmhlYWQvb3BlbnByaW50aW5nL2N1cHMtZmlsdGVycy9yZXZpc2lvbi83Njc0CitTaWdu ZWQtb2ZmLWJ5OiBSb2xhbmQgSGllYmVyIDxyLmhpZWJlckBwZW5ndXRyb25peC5kZT4KKy0tLQor IGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8ICAgMSArCisgbTQvYXhfY3h4X2NvbXBpbGVf c3RkY3h4Lm00IHwgOTgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5ODMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEw MDY0NCBtNC9heF9jeHhfY29tcGlsZV9zdGRjeHgubTQKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy ZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmNlNjcxZTYwMjZhLi43YWQ1NTkyZTA0MjMgMTAw NjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUyLDYgKzUy LDcgQEAgQUhfQk9UVE9NKFsKKyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIEFDX1BS T0dfQ0MKKyBBQ19QUk9HX0NYWAorK0FYX0NYWF9DT01QSUxFX1NURENYWChbMTFdLFtub2V4dF0s W21hbmRhdG9yeV0pCisgQU1fUFJPR19DQ19DX08KKyBBQ19QUk9HX0NQUAorIEFDX1BST0dfSU5T VEFMTAorZGlmZiAtLWdpdCBhL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eC5tNCBiL200L2F4X2N4 eF9jb21waWxlX3N0ZGN4eC5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAw MDAwMC4uNTAzMmJiYTgwOTFkCistLS0gL2Rldi9udWxsCisrKysgYi9tNC9heF9jeHhfY29tcGls ZV9zdGRjeHgubTQKK0BAIC0wLDAgKzEsOTgyIEBACisrIyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysj ICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY3h4X2Nv bXBpbGVfc3RkY3h4Lmh0bWwKKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyMKKysjIFNZTk9QU0lT CisrIworKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFgoVkVSU0lPTiwgW2V4dHxub2V4dF0sIFtt YW5kYXRvcnl8b3B0aW9uYWxdKQorKyMKKysjIERFU0NSSVBUSU9OCisrIworKyMgICBDaGVjayBm b3IgYmFzZWxpbmUgbGFuZ3VhZ2UgY292ZXJhZ2UgaW4gdGhlIGNvbXBpbGVyIGZvciB0aGUgc3Bl Y2lmaWVkCisrIyAgIHZlcnNpb24gb2YgdGhlIEMrKyBzdGFuZGFyZC4gIElmIG5lY2Vzc2FyeSwg YWRkIHN3aXRjaGVzIHRvIENYWCBhbmQKKysjICAgQ1hYQ1BQIHRvIGVuYWJsZSBzdXBwb3J0LiAg VkVSU0lPTiBtYXkgYmUgJzExJyAoZm9yIHRoZSBDKysxMSBzdGFuZGFyZCkKKysjICAgb3IgJzE0 JyAoZm9yIHRoZSBDKysxNCBzdGFuZGFyZCkuCisrIworKyMgICBUaGUgc2Vjb25kIGFyZ3VtZW50 LCBpZiBzcGVjaWZpZWQsIGluZGljYXRlcyB3aGV0aGVyIHlvdSBpbnNpc3Qgb24gYW4KKysjICAg ZXh0ZW5kZWQgbW9kZSAoZS5nLiAtc3RkPWdudSsrMTEpIG9yIGEgc3RyaWN0IGNvbmZvcm1hbmNl IG1vZGUgKGUuZy4KKysjICAgLXN0ZD1jKysxMSkuICBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwg eW91IGdldCB3aGF0ZXZlciB3b3Jrcywgd2l0aAorKyMgICBwcmVmZXJlbmNlIGZvciBhbiBleHRl bmRlZCBtb2RlLgorKyMKKysjICAgVGhlIHRoaXJkIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQgJ21h bmRhdG9yeScgb3IgaWYgbGVmdCB1bnNwZWNpZmllZCwKKysjICAgaW5kaWNhdGVzIHRoYXQgYmFz ZWxpbmUgc3VwcG9ydCBmb3IgdGhlIHNwZWNpZmllZCBDKysgc3RhbmRhcmQgaXMKKysjICAgcmVx dWlyZWQgYW5kIHRoYXQgdGhlIG1hY3JvIHNob3VsZCBlcnJvciBvdXQgaWYgbm8gbW9kZSB3aXRo IHRoYXQKKysjICAgc3VwcG9ydCBpcyBmb3VuZC4gIElmIHNwZWNpZmllZCAnb3B0aW9uYWwnLCB0 aGVuIGNvbmZpZ3VyYXRpb24gcHJvY2VlZHMKKysjICAgcmVnYXJkbGVzcywgYWZ0ZXIgZGVmaW5p bmcgSEFWRV9DWFgke1ZFUlNJT059IGlmIGFuZCBvbmx5IGlmIGEKKysjICAgc3VwcG9ydGluZyBt b2RlIGlzIGZvdW5kLgorKyMKKysjIExJQ0VOU0UKKysjCisrIyAgIENvcHlyaWdodCAoYykgMjAw OCBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysjICAgQ29weXJpZ2h0IChjKSAy MDEyIFphY2sgV2VpbmJlcmcgPHphY2t3QHBhbml4LmNvbT4KKysjICAgQ29weXJpZ2h0IChjKSAy MDEzIFJveSBTdG9nbmVyIDxyb3lzdGduckBpY2VzLnV0ZXhhcy5lZHU+CisrIyAgIENvcHlyaWdo dCAoYykgMjAxNCwgMjAxNSBHb29nbGUgSW5jLjsgY29udHJpYnV0ZWQgYnkgQWxleGV5IFNva29s b3YgPHNva29sb3ZAZ29vZ2xlLmNvbT4KKysjICAgQ29weXJpZ2h0IChjKSAyMDE1IFBhdWwgTm9y bWFuIDxwZW5vcm1hbkBtYWMuY29tPgorKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgTW9yaXR6IEts YW1tbGVyIDxtb3JpdHpAa2xhbW1sZXIuZXU+CisrIyAgIENvcHlyaWdodCAoYykgMjAxNiBLcnpl c2ltaXIgTm93YWsgPHFkbGFjekBnbWFpbC5jb20+CisrIworKyMgICBDb3B5aW5nIGFuZCBkaXN0 cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUK KysjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRo ZSBjb3B5cmlnaHQgbm90aWNlCisrIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAg VGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisrIyAgIHdhcnJhbnR5Lgor KworKyNzZXJpYWwgNworKworK2RubCAgVGhpcyBtYWNybyBpcyBiYXNlZCBvbiB0aGUgY29kZSBm cm9tIHRoZSBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEgbWFjcm8KKytkbmwgIChzZXJpYWwgdmVy c2lvbiBudW1iZXIgMTMpLgorKworK0FYX1JFUVVJUkVfREVGSU5FRChbQUNfTVNHX1dBUk5dKQor K0FDX0RFRlVOKFtBWF9DWFhfQ09NUElMRV9TVERDWFhdLCBbZG5sCisrICBtNF9pZihbJDFdLCBb MTFdLCBbYXhfY3h4X2NvbXBpbGVfYWx0ZXJuYXRpdmVzPSIxMSAweCJdLAorKyAgICAgICAgWyQx XSwgWzE0XSwgW2F4X2N4eF9jb21waWxlX2FsdGVybmF0aXZlcz0iMTQgMXkiXSwKKysgICAgICAg IFskMV0sIFsxN10sIFtheF9jeHhfY29tcGlsZV9hbHRlcm5hdGl2ZXM9IjE3IDF6Il0sCisrICAg ICAgICBbbTRfZmF0YWwoW2ludmFsaWQgZmlyc3QgYXJndW1lbnQgYCQxJyB0byBBWF9DWFhfQ09N UElMRV9TVERDWFhdKV0pZG5sCisrICBtNF9pZihbJDJdLCBbXSwgW10sCisrICAgICAgICBbJDJd LCBbZXh0XSwgW10sCisrICAgICAgICBbJDJdLCBbbm9leHRdLCBbXSwKKysgICAgICAgIFttNF9m YXRhbChbaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgYCQyJyB0byBBWF9DWFhfQ09NUElMRV9TVERD WFhdKV0pZG5sCisrICBtNF9pZihbJDNdLCBbXSwgW2F4X2N4eF9jb21waWxlX2N4eCQxX3JlcXVp cmVkPXRydWVdLAorKyAgICAgICAgWyQzXSwgW21hbmRhdG9yeV0sIFtheF9jeHhfY29tcGlsZV9j eHgkMV9yZXF1aXJlZD10cnVlXSwKKysgICAgICAgIFskM10sIFtvcHRpb25hbF0sIFtheF9jeHhf Y29tcGlsZV9jeHgkMV9yZXF1aXJlZD1mYWxzZV0sCisrICAgICAgICBbbTRfZmF0YWwoW2ludmFs aWQgdGhpcmQgYXJndW1lbnQgYCQzJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhdKV0pCisrICBB Q19MQU5HX1BVU0goW0MrK10pZG5sCisrICBhY19zdWNjZXNzPW5vCisrICBBQ19DQUNIRV9DSEVD Syh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrJDEgZmVhdHVyZXMgYnkgZGVmYXVsdCwKKysgIGF4 X2N2X2N4eF9jb21waWxlX2N4eCQxLAorKyAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NP VVJDRShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV8kMV0pXSwKKysgICAgW2F4X2N2 X2N4eF9jb21waWxlX2N4eCQxPXllc10sCisrICAgIFtheF9jdl9jeHhfY29tcGlsZV9jeHgkMT1u b10pXSkKKysgIGlmIHRlc3QgeCRheF9jdl9jeHhfY29tcGlsZV9jeHgkMSA9IHh5ZXM7IHRoZW4K KysgICAgYWNfc3VjY2Vzcz15ZXMKKysgIGZpCisrCisrICBtNF9pZihbJDJdLCBbbm9leHRdLCBb XSwgW2RubAorKyAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKysgICAgZm9yIGFs dGVybmF0aXZlIGluICR7YXhfY3h4X2NvbXBpbGVfYWx0ZXJuYXRpdmVzfTsgZG8KKysgICAgICBz d2l0Y2g9Ii1zdGQ9Z251Kyske2FsdGVybmF0aXZlfSIKKysgICAgICBjYWNoZXZhcj1BU19UUl9T SChbYXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDFfJHN3aXRjaF0pCisrICAgICAgQUNfQ0FDSEVfQ0hF Q0sod2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKyQxIGZlYXR1cmVzIHdpdGggJHN3aXRjaCwKKysg ICAgICAgICAgICAgICAgICAgICAkY2FjaGV2YXIsCisrICAgICAgICBbYWNfc2F2ZV9DWFg9IiRD WFgiCisrICAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2giCisrICAgICAgICAgQUNfQ09NUElMRV9J RkVMU0UoW0FDX0xBTkdfU09VUkNFKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XyQx XSldLAorKyAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9eWVzXSwKKysgICAgICAgICAgW2V2YWwg JGNhY2hldmFyPW5vXSkKKysgICAgICAgICBDWFg9IiRhY19zYXZlX0NYWCJdKQorKyAgICAgIGlm IGV2YWwgdGVzdCB4XCQkY2FjaGV2YXIgPSB4eWVzOyB0aGVuCisrICAgICAgICBDWFg9IiRDWFgg JHN3aXRjaCIKKysgICAgICAgIGlmIHRlc3QgLW4gIiRDWFhDUFAiIDsgdGhlbgorKyAgICAgICAg ICBDWFhDUFA9IiRDWFhDUFAgJHN3aXRjaCIKKysgICAgICAgIGZpCisrICAgICAgICBhY19zdWNj ZXNzPXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaV0pCisr CisrICBtNF9pZihbJDJdLCBbZXh0XSwgW10sIFtkbmwKKysgIGlmIHRlc3QgeCRhY19zdWNjZXNz ID0geG5vOyB0aGVuCisrICAgIGRubCBIUCdzIGFDQyBuZWVkcyArc3RkPWMrKzExIGFjY29yZGlu ZyB0bzoKKysgICAgZG5sIGh0dHA6Ly9oMjEwMDcud3d3Mi5ocC5jb20vcG9ydGFsL2Rvd25sb2Fk L2ZpbGVzL3VucHJvdC9hQ3h4L1BERl9SZWxlYXNlX05vdGVzLzc2OTE0OS0wMDEucGRmCisrICAg IGRubCBDcmF5J3MgY3JheUNDIG5lZWRzICItaCBzdGQ9YysrMTEiCisrICAgIGZvciBhbHRlcm5h dGl2ZSBpbiAke2F4X2N4eF9jb21waWxlX2FsdGVybmF0aXZlc307IGRvCisrICAgICAgZm9yIHN3 aXRjaCBpbiAtc3RkPWMrKyR7YWx0ZXJuYXRpdmV9ICtzdGQ9YysrJHthbHRlcm5hdGl2ZX0gIi1o IHN0ZD1jKyske2FsdGVybmF0aXZlfSI7IGRvCisrICAgICAgICBjYWNoZXZhcj1BU19UUl9TSChb YXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDFfJHN3aXRjaF0pCisrICAgICAgICBBQ19DQUNIRV9DSEVD Syh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrJDEgZmVhdHVyZXMgd2l0aCAkc3dpdGNoLAorKyAg ICAgICAgICAgICAgICAgICAgICAgJGNhY2hldmFyLAorKyAgICAgICAgICBbYWNfc2F2ZV9DWFg9 IiRDWFgiCisrICAgICAgICAgICBDWFg9IiRDWFggJHN3aXRjaCIKKysgICAgICAgICAgIEFDX0NP TVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0 Ym9keV8kMV0pXSwKKysgICAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9eWVzXSwKKysgICAgICAg ICAgICBbZXZhbCAkY2FjaGV2YXI9bm9dKQorKyAgICAgICAgICAgQ1hYPSIkYWNfc2F2ZV9DWFgi XSkKKysgICAgICAgIGlmIGV2YWwgdGVzdCB4XCQkY2FjaGV2YXIgPSB4eWVzOyB0aGVuCisrICAg ICAgICAgIENYWD0iJENYWCAkc3dpdGNoIgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQ1hYQ1BQ IiA7IHRoZW4KKysgICAgICAgICAgICBDWFhDUFA9IiRDWFhDUFAgJHN3aXRjaCIKKysgICAgICAg ICAgZmkKKysgICAgICAgICAgYWNfc3VjY2Vzcz15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAg ICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geHllczsg dGhlbgorKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaV0pCisrICBB Q19MQU5HX1BPUChbQysrXSkKKysgIGlmIHRlc3QgeCRheF9jeHhfY29tcGlsZV9jeHgkMV9yZXF1 aXJlZCA9IHh0cnVlOyB0aGVuCisrICAgIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVu CisrICAgICAgQUNfTVNHX0VSUk9SKFsqKiogQSBjb21waWxlciB3aXRoIHN1cHBvcnQgZm9yIEMr KyQxIGxhbmd1YWdlIGZlYXR1cmVzIGlzIHJlcXVpcmVkLl0pCisrICAgIGZpCisrICBmaQorKyAg aWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKysgICAgSEFWRV9DWFgkMT0wCisrICAg IEFDX01TR19OT1RJQ0UoW05vIGNvbXBpbGVyIHdpdGggQysrJDEgc3VwcG9ydCB3YXMgZm91bmRd KQorKyAgZWxzZQorKyAgICBIQVZFX0NYWCQxPTEKKysgICAgQUNfREVGSU5FKEhBVkVfQ1hYJDEs MSwKKysgICAgICAgICAgICAgIFtkZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGJhc2lj IEMrKyQxIHN5bnRheF0pCisrICBmaQorKyAgQUNfU1VCU1QoSEFWRV9DWFgkMSkKKysgIG00X2lm KFskMV0sIFsxN10sIFtBQ19NU0dfV0FSTihbQysrMTcgaXMgbm90IHlldCBzdGFuZGFyZGl6ZWQs IHNvIHRoZSBjaGVja3MgbWF5IGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBhbnl0aW1lXSld KQorK10pCisrCisrCisrZG5sICBUZXN0IGJvZHkgZm9yIGNoZWNraW5nIEMrKzExIHN1cHBvcnQK KysKKyttNF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfMTFdLAorKyAg X0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTEKKyspCisrCisrCisrZG5s ICBUZXN0IGJvZHkgZm9yIGNoZWNraW5nIEMrKzE0IHN1cHBvcnQKKysKKyttNF9kZWZpbmUoW19B WF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfMTRdLAorKyAgX0FYX0NYWF9DT01QSUxFX1NU RENYWF90ZXN0Ym9keV9uZXdfaW5fMTEKKysgIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJv ZHlfbmV3X2luXzE0CisrKQorKworK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90 ZXN0Ym9keV8xN10sCisrICBfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8x MQorKyAgX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTQKKysgIF9BWF9D WFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzE3CisrKQorKworK2RubCAgVGVzdHMg Zm9yIG5ldyBmZWF0dXJlcyBpbiBDKysxMQorKworK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxF X1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTFdLCBbWworKworKy8vIElmIHRoZSBjb21waWxlciBh ZG1pdHMgdGhhdCBpdCBpcyBub3QgcmVhZHkgZm9yIEMrKzExLCB3aHkgdG9ydHVyZSBpdD8KKysv LyBIb3BlZnVsbHksIHRoaXMgd2lsbCBzcGVlZCB1cCB0aGUgdGVzdC4KKysKKysjaWZuZGVmIF9f Y3BsdXNwbHVzCisrCisrI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMrKyBjb21waWxlciIKKysKKysj ZWxpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKysKKysjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysr MTEgY29tcGlsZXIiCisrCisrI2Vsc2UKKysKKytuYW1lc3BhY2UgY3h4MTEKKyt7CisrCisrICBu YW1lc3BhY2UgdGVzdF9zdGF0aWNfYXNzZXJ0CisrICB7CisrCisrICAgIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgorKyAgICBzdHJ1Y3QgY2hlY2sKKysgICAgeworKyAgICAgIHN0YXRpY19hc3NlcnQo c2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKysgICAgfTsKKysK KysgIH0KKysKKysgIG5hbWVzcGFjZSB0ZXN0X2ZpbmFsX292ZXJyaWRlCisrICB7CisrCisrICAg IHN0cnVjdCBCYXNlCisrICAgIHsKKysgICAgICB2aXJ0dWFsIHZvaWQgZigpIHt9CisrICAgIH07 CisrCisrICAgIHN0cnVjdCBEZXJpdmVkIDogcHVibGljIEJhc2UKKysgICAgeworKyAgICAgIHZp cnR1YWwgdm9pZCBmKCkgb3ZlcnJpZGUge30KKysgICAgfTsKKysKKysgIH0KKysKKysgIG5hbWVz cGFjZSB0ZXN0X2RvdWJsZV9yaWdodF9hbmdsZV9icmFja2V0cworKyAgeworKworKyAgICB0ZW1w bGF0ZSA8IHR5cGVuYW1lIFQgPgorKyAgICBzdHJ1Y3QgY2hlY2sge307CisrCisrICAgIHR5cGVk ZWYgY2hlY2s8dm9pZD4gc2luZ2xlX3R5cGU7CisrICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8dm9p ZD4+IGRvdWJsZV90eXBlOworKyAgICB0eXBlZGVmIGNoZWNrPGNoZWNrPGNoZWNrPHZvaWQ+Pj4g dHJpcGxlX3R5cGU7CisrICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Y2hlY2s8Y2hlY2s8dm9pZD4+ Pj4gcXVhZHJ1cGxlX3R5cGU7CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9kZWNsdHlw ZQorKyAgeworKworKyAgICBpbnQKKysgICAgZigpCisrICAgIHsKKysgICAgICBpbnQgYSA9IDE7 CisrICAgICAgZGVjbHR5cGUoYSkgYiA9IDI7CisrICAgICAgcmV0dXJuIGEgKyBiOworKyAgICB9 CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF90eXBlX2RlZHVjdGlvbgorKyAgeworKwor KyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiA+CisrICAgIHN0cnVjdCBp c19zYW1lCisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwor KyAgICB9OworKworKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQgPgorKyAgICBzdHJ1Y3QgaXNf c2FtZTxULCBUPgorKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OworKyAgICB9OworKworKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiA+ CisrICAgIGF1dG8KKysgICAgYWRkKFQxIGExLCBUMiBhMikgLT4gZGVjbHR5cGUoYTEgKyBhMikK KysgICAgeworKyAgICAgIHJldHVybiBhMSArIGEyOworKyAgICB9CisrCisrICAgIGludAorKyAg ICB0ZXN0KGNvbnN0IGludCBjLCB2b2xhdGlsZSBpbnQgdikKKysgICAgeworKyAgICAgIHN0YXRp Y19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKDApPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwor KyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGMpPjo6dmFsdWUgPT0g ZmFsc2UsICIiKTsKKysgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZSh2 KT46OnZhbHVlID09IGZhbHNlLCAiIik7CisrICAgICAgYXV0byBhYyA9IGM7CisrICAgICAgYXV0 byBhdiA9IHY7CisrICAgICAgYXV0byBzdW1pID0gYWMgKyBhdiArICd4JzsKKysgICAgICBhdXRv IHN1bWYgPSBhYyArIGF2ICsgMS4wOworKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQs IGRlY2x0eXBlKGFjKT46OnZhbHVlID09IHRydWUsICIiKTsKKysgICAgICBzdGF0aWNfYXNzZXJ0 KGlzX3NhbWU8aW50LCBkZWNsdHlwZShhdik+Ojp2YWx1ZSA9PSB0cnVlLCAiIik7CisrICAgICAg c3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoc3VtaSk+Ojp2YWx1ZSA9PSB0cnVl LCAiIik7CisrICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoc3VtZik+ Ojp2YWx1ZSA9PSBmYWxzZSwgIiIpOworKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQs IGRlY2x0eXBlKGFkZChjLCB2KSk+Ojp2YWx1ZSA9PSB0cnVlLCAiIik7CisrICAgICAgcmV0dXJu IChzdW1mID4gMC4wKSA/IHN1bWkgOiBhZGQoYywgdik7CisrICAgIH0KKysKKysgIH0KKysKKysg IG5hbWVzcGFjZSB0ZXN0X25vZXhjZXB0CisrICB7CisrCisrICAgIGludCBmKCkgeyByZXR1cm4g MDsgfQorKyAgICBpbnQgZygpIG5vZXhjZXB0IHsgcmV0dXJuIDA7IH0KKysKKysgICAgc3RhdGlj X2Fzc2VydChub2V4Y2VwdChmKCkpID09IGZhbHNlLCAiIik7CisrICAgIHN0YXRpY19hc3NlcnQo bm9leGNlcHQoZygpKSA9PSB0cnVlLCAiIik7CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVz dF9jb25zdGV4cHIKKysgIHsKKysKKysgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBDaGFyVCA+Cisr ICAgIHVuc2lnbmVkIGxvbmcgY29uc3RleHByCisrICAgIHN0cmxlbl9jX3IoY29uc3QgQ2hhclQg KmNvbnN0IHMsIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWNjKSBub2V4Y2VwdAorKyAgICB7CisrICAg ICAgcmV0dXJuICpzID8gc3RybGVuX2NfcihzICsgMSwgYWNjICsgMSkgOiBhY2M7CisrICAgIH0K KysKKysgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBDaGFyVCA+CisrICAgIHVuc2lnbmVkIGxvbmcg Y29uc3RleHByCisrICAgIHN0cmxlbl9jKGNvbnN0IENoYXJUICpjb25zdCBzKSBub2V4Y2VwdAor KyAgICB7CisrICAgICAgcmV0dXJuIHN0cmxlbl9jX3IocywgMFVMKTsKKysgICAgfQorKworKyAg ICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCIiKSA9PSAwVUwsICIiKTsKKysgICAgc3RhdGljX2Fz c2VydChzdHJsZW5fYygiMSIpID09IDFVTCwgIiIpOworKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxl bl9jKCJleGFtcGxlIikgPT0gN1VMLCAiIik7CisrICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2Mo ImFub3RoZXJcMGV4YW1wbGUiKSA9PSA3VUwsICIiKTsKKysKKysgIH0KKysKKysgIG5hbWVzcGFj ZSB0ZXN0X3J2YWx1ZV9yZWZlcmVuY2VzCisrICB7CisrCisrICAgIHRlbXBsYXRlIDwgaW50IE4g PgorKyAgICBzdHJ1Y3QgYW5zd2VyCisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3RleHByIGlu dCB2YWx1ZSA9IE47CisrICAgIH07CisrCisrICAgIGFuc3dlcjwxPiBmKGludCYpICAgICAgIHsg cmV0dXJuIGFuc3dlcjwxPigpOyB9CisrICAgIGFuc3dlcjwyPiBmKGNvbnN0IGludCYpIHsgcmV0 dXJuIGFuc3dlcjwyPigpOyB9CisrICAgIGFuc3dlcjwzPiBmKGludCYmKSAgICAgIHsgcmV0dXJu IGFuc3dlcjwzPigpOyB9CisrCisrICAgIHZvaWQKKysgICAgdGVzdCgpCisrICAgIHsKKysgICAg ICBpbnQgaSA9IDA7CisrICAgICAgY29uc3QgaW50IGMgPSAwOworKyAgICAgIHN0YXRpY19hc3Nl cnQoZGVjbHR5cGUoZihpKSk6OnZhbHVlID09IDEsICIiKTsKKysgICAgICBzdGF0aWNfYXNzZXJ0 KGRlY2x0eXBlKGYoYykpOjp2YWx1ZSA9PSAyLCAiIik7CisrICAgICAgc3RhdGljX2Fzc2VydChk ZWNsdHlwZShmKDApKTo6dmFsdWUgPT0gMywgIiIpOworKyAgICB9CisrCisrICB9CisrCisrICBu YW1lc3BhY2UgdGVzdF91bmlmb3JtX2luaXRpYWxpemF0aW9uCisrICB7CisrCisrICAgIHN0cnVj dCB0ZXN0CisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgaW50IHplcm8ge307CisrICAgICAg c3RhdGljIGNvbnN0IGludCBvbmUgezF9OworKyAgICB9OworKworKyAgICBzdGF0aWNfYXNzZXJ0 KHRlc3Q6Onplcm8gPT0gMCwgIiIpOworKyAgICBzdGF0aWNfYXNzZXJ0KHRlc3Q6Om9uZSA9PSAx LCAiIik7CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9sYW1iZGFzCisrICB7CisrCisr ICAgIHZvaWQKKysgICAgdGVzdDEoKQorKyAgICB7CisrICAgICAgYXV0byBsYW1iZGExID0gW10o KXt9OworKyAgICAgIGF1dG8gbGFtYmRhMiA9IGxhbWJkYTE7CisrICAgICAgbGFtYmRhMSgpOwor KyAgICAgIGxhbWJkYTIoKTsKKysgICAgfQorKworKyAgICBpbnQKKysgICAgdGVzdDIoKQorKyAg ICB7CisrICAgICAgYXV0byBhID0gW10oaW50IGksIGludCBqKXsgcmV0dXJuIGkgKyBqOyB9KDEs IDIpOworKyAgICAgIGF1dG8gYiA9IFtdKCkgLT4gaW50IHsgcmV0dXJuICcwJzsgfSgpOworKyAg ICAgIGF1dG8gYyA9IFs9XSgpeyByZXR1cm4gYSArIGI7IH0oKTsKKysgICAgICBhdXRvIGQgPSBb Jl0oKXsgcmV0dXJuIGM7IH0oKTsKKysgICAgICBhdXRvIGUgPSBbYSwgJmJdKGludCB4KSBtdXRh YmxlIHsKKysgICAgICAgIGNvbnN0IGF1dG8gaWRlbnRpdHkgPSBbXShpbnQgeSl7IHJldHVybiB5 OyB9OworKyAgICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgYTsgKytpKQorKyAgICAgICAgICBh ICs9IGItLTsKKysgICAgICAgIHJldHVybiB4ICsgaWRlbnRpdHkoYSArIGIpOworKyAgICAgIH0o MCk7CisrICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlOworKyAgICB9CisrCisrICAgIGlu dAorKyAgICB0ZXN0MygpCisrICAgIHsKKysgICAgICBjb25zdCBhdXRvIG51bGxhcnkgPSBbXSgp eyByZXR1cm4gMDsgfTsKKysgICAgICBjb25zdCBhdXRvIHVuYXJ5ID0gW10oaW50IHgpeyByZXR1 cm4geDsgfTsKKysgICAgICB1c2luZyBudWxsYXJ5X3QgPSBkZWNsdHlwZShudWxsYXJ5KTsKKysg ICAgICB1c2luZyB1bmFyeV90ID0gZGVjbHR5cGUodW5hcnkpOworKyAgICAgIGNvbnN0IGF1dG8g aGlnaGVyMXN0ID0gW10obnVsbGFyeV90IGYpeyByZXR1cm4gZigpOyB9OworKyAgICAgIGNvbnN0 IGF1dG8gaGlnaGVyMm5kID0gW3VuYXJ5XShudWxsYXJ5X3QgZjEpeworKyAgICAgICAgcmV0dXJu IFt1bmFyeSwgZjFdKHVuYXJ5X3QgZjIpeyByZXR1cm4gZjIodW5hcnkoZjEoKSkpOyB9OworKyAg ICAgIH07CisrICAgICAgcmV0dXJuIGhpZ2hlcjFzdChudWxsYXJ5KSArIGhpZ2hlcjJuZChudWxs YXJ5KSh1bmFyeSk7CisrICAgIH0KKysKKysgIH0KKysKKysgIG5hbWVzcGFjZSB0ZXN0X3Zhcmlh ZGljX3RlbXBsYXRlcworKyAgeworKworKyAgICB0ZW1wbGF0ZSA8aW50Li4uPgorKyAgICBzdHJ1 Y3Qgc3VtOworKworKyAgICB0ZW1wbGF0ZSA8aW50IE4wLCBpbnQuLi4gTjF0b04+CisrICAgIHN0 cnVjdCBzdW08TjAsIE4xdG9OLi4uPgorKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0ZXhwciBh dXRvIHZhbHVlID0gTjAgKyBzdW08TjF0b04uLi4+Ojp2YWx1ZTsKKysgICAgfTsKKysKKysgICAg dGVtcGxhdGUgPD4KKysgICAgc3RydWN0IHN1bTw+CisrICAgIHsKKysgICAgICBzdGF0aWMgY29u c3RleHByIGF1dG8gdmFsdWUgPSAwOworKyAgICB9OworKworKyAgICBzdGF0aWNfYXNzZXJ0KHN1 bTw+Ojp2YWx1ZSA9PSAwLCAiIik7CisrICAgIHN0YXRpY19hc3NlcnQoc3VtPDE+Ojp2YWx1ZSA9 PSAxLCAiIik7CisrICAgIHN0YXRpY19hc3NlcnQoc3VtPDIzPjo6dmFsdWUgPT0gMjMsICIiKTsK KysgICAgc3RhdGljX2Fzc2VydChzdW08MSwgMj46OnZhbHVlID09IDMsICIiKTsKKysgICAgc3Rh dGljX2Fzc2VydChzdW08NSwgNSwgMTE+Ojp2YWx1ZSA9PSAyMSwgIiIpOworKyAgICBzdGF0aWNf YXNzZXJ0KHN1bTwyLCAzLCA1LCA3LCAxMSwgMTM+Ojp2YWx1ZSA9PSA0MSwgIiIpOworKworKyAg fQorKworKyAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzcyODE4NC90 ZW1wbGF0ZS1hbGlhc2VzLWFuZC1zZmluYWUKKysgIC8vIENsYW5nIDMuMSBmYWlscyB3aXRoIGhl YWRlcnMgb2YgbGlic3RkKysgNC44LjMgd2hlbiB1c2luZyBzdGQ6OmZ1bmN0aW9uCisrICAvLyBi ZWNhdXNlIG9mIHRoaXMuCisrICBuYW1lc3BhY2UgdGVzdF90ZW1wbGF0ZV9hbGlhc19zZmluYWUK KysgIHsKKysKKysgICAgc3RydWN0IGZvbyB7fTsKKysKKysgICAgdGVtcGxhdGU8dHlwZW5hbWUg VD4KKysgICAgdXNpbmcgbWVtYmVyID0gdHlwZW5hbWUgVDo6bWVtYmVyX3R5cGU7CisrCisrICAg IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisrICAgIHZvaWQgZnVuYyguLi4pIHt9CisrCisrICAgIHRl bXBsYXRlPHR5cGVuYW1lIFQ+CisrICAgIHZvaWQgZnVuYyhtZW1iZXI8VD4qKSB7fQorKworKyAg ICB2b2lkIHRlc3QoKTsKKysKKysgICAgdm9pZCB0ZXN0KCkgeyBmdW5jPGZvbz4oMCk7IH0KKysK KysgIH0KKysKKyt9ICAvLyBuYW1lc3BhY2UgY3h4MTEKKysKKysjZW5kaWYgIC8vIF9fY3BsdXNw bHVzID49IDIwMTEwM0wKKysKKytdXSkKKysKKysKKytkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVy ZXMgaW4gQysrMTQKKysKKyttNF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJv ZHlfbmV3X2luXzE0XSwgW1sKKysKKysvLyBJZiB0aGUgY29tcGlsZXIgYWRtaXRzIHRoYXQgaXQg aXMgbm90IHJlYWR5IGZvciBDKysxNCwgd2h5IHRvcnR1cmUgaXQ/CisrLy8gSG9wZWZ1bGx5LCB0 aGlzIHdpbGwgc3BlZWQgdXAgdGhlIHRlc3QuCisrCisrI2lmbmRlZiBfX2NwbHVzcGx1cworKwor KyNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysgY29tcGlsZXIiCisrCisrI2VsaWYgX19jcGx1c3Bs dXMgPCAyMDE0MDJMCisrCisrI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMrKzE0IGNvbXBpbGVyIgor KworKyNlbHNlCisrCisrbmFtZXNwYWNlIGN4eDE0CisreworKworKyAgbmFtZXNwYWNlIHRlc3Rf cG9seW1vcnBoaWNfbGFtYmRhcworKyAgeworKworKyAgICBpbnQKKysgICAgdGVzdCgpCisrICAg IHsKKysgICAgICBjb25zdCBhdXRvIGxhbWJkYSA9IFtdKGF1dG8mJi4uLiBhcmdzKXsKKysgICAg ICAgIGNvbnN0IGF1dG8gaXN0aW55ID0gW10oYXV0byB4KXsKKysgICAgICAgICAgcmV0dXJuIChz aXplb2YoeCkgPT0gMVVMKSA/IDEgOiAwOworKyAgICAgICAgfTsKKysgICAgICAgIGNvbnN0IGlu dCBhcmV0aW55W10gPSB7IGlzdGlueShhcmdzKS4uLiB9OworKyAgICAgICAgcmV0dXJuIGFyZXRp bnlbMF07CisrICAgICAgfTsKKysgICAgICByZXR1cm4gbGFtYmRhKDEsIDFMLCAxLjBmLCAnMScp OworKyAgICB9CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9iaW5hcnlfbGl0ZXJhbHMK KysgIHsKKysKKysgICAgY29uc3RleHByIGF1dG8gaXZpaSA9IDBiMDAwMDAwMDAwMDEwMTAxMDsK KysgICAgc3RhdGljX2Fzc2VydChpdmlpID09IDQyLCAid3JvbmcgdmFsdWUiKTsKKysKKysgIH0K KysKKysgIG5hbWVzcGFjZSB0ZXN0X2dlbmVyYWxpemVkX2NvbnN0ZXhwcgorKyAgeworKworKyAg ICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENoYXJUID4KKysgICAgY29uc3RleHByIHVuc2lnbmVkIGxv bmcKKysgICAgc3RybGVuX2MoY29uc3QgQ2hhclQgKmNvbnN0IHMpIG5vZXhjZXB0CisrICAgIHsK KysgICAgICBhdXRvIGxlbmd0aCA9IDBVTDsKKysgICAgICBmb3IgKGF1dG8gcCA9IHM7ICpwOyAr K3ApCisrICAgICAgICArK2xlbmd0aDsKKysgICAgICByZXR1cm4gbGVuZ3RoOworKyAgICB9Cisr CisrICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoIiIpID09IDBVTCwgIiIpOworKyAgICBzdGF0 aWNfYXNzZXJ0KHN0cmxlbl9jKCJ4IikgPT0gMVVMLCAiIik7CisrICAgIHN0YXRpY19hc3NlcnQo c3RybGVuX2MoInRlc3QiKSA9PSA0VUwsICIiKTsKKysgICAgc3RhdGljX2Fzc2VydChzdHJsZW5f YygiYW5vdGhlclwwdGVzdCIpID09IDdVTCwgIiIpOworKworKyAgfQorKworKyAgbmFtZXNwYWNl IHRlc3RfbGFtYmRhX2luaXRfY2FwdHVyZQorKyAgeworKworKyAgICBpbnQKKysgICAgdGVzdCgp CisrICAgIHsKKysgICAgICBhdXRvIHggPSAwOworKyAgICAgIGNvbnN0IGF1dG8gbGFtYmRhMSA9 IFthID0geF0oaW50IGIpeyByZXR1cm4gYSArIGI7IH07CisrICAgICAgY29uc3QgYXV0byBsYW1i ZGEyID0gW2EgPSBsYW1iZGExKHgpXSgpeyByZXR1cm4gYTsgfTsKKysgICAgICByZXR1cm4gbGFt YmRhMigpOworKyAgICB9CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9kaWdpdF9zZXBh cmF0b3JzCisrICB7CisrCisrICAgIGNvbnN0ZXhwciBhdXRvIHRlbl9taWxsaW9uID0gMTAwJzAw MCcwMDA7CisrICAgIHN0YXRpY19hc3NlcnQodGVuX21pbGxpb24gPT0gMTAwMDAwMDAwLCAiIik7 CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9yZXR1cm5fdHlwZV9kZWR1Y3Rpb24KKysg IHsKKysKKysgICAgYXV0byBmKGludCYgeCkgeyByZXR1cm4geDsgfQorKyAgICBkZWNsdHlwZShh dXRvKSBnKGludCYgeCkgeyByZXR1cm4geDsgfQorKworKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1l IFQxLCB0eXBlbmFtZSBUMiA+CisrICAgIHN0cnVjdCBpc19zYW1lCisrICAgIHsKKysgICAgICBz dGF0aWMgY29uc3RleHByIGF1dG8gdmFsdWUgPSBmYWxzZTsKKysgICAgfTsKKysKKysgICAgdGVt cGxhdGUgPCB0eXBlbmFtZSBUID4KKysgICAgc3RydWN0IGlzX3NhbWU8VCwgVD4KKysgICAgewor KyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9IHRydWU7CisrICAgIH07CisrCisr ICAgIGludAorKyAgICB0ZXN0KCkKKysgICAgeworKyAgICAgIGF1dG8geCA9IDA7CisrICAgICAg c3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoZih4KSk+Ojp2YWx1ZSwgIiIpOwor KyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQmLCBkZWNsdHlwZShnKHgpKT46OnZhbHVl LCAiIik7CisrICAgICAgcmV0dXJuIHg7CisrICAgIH0KKysKKysgIH0KKysKKyt9ICAvLyBuYW1l c3BhY2UgY3h4MTQKKysKKysjZW5kaWYgIC8vIF9fY3BsdXNwbHVzID49IDIwMTQwMkwKKysKKytd XSkKKysKKysKKytkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMgaW4gQysrMTcKKysKKyttNF9k ZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzE3XSwgW1sKKysK KysvLyBJZiB0aGUgY29tcGlsZXIgYWRtaXRzIHRoYXQgaXQgaXMgbm90IHJlYWR5IGZvciBDKysx Nywgd2h5IHRvcnR1cmUgaXQ/CisrLy8gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc3BlZWQgdXAgdGhl IHRlc3QuCisrCisrI2lmbmRlZiBfX2NwbHVzcGx1cworKworKyNlcnJvciAiVGhpcyBpcyBub3Qg YSBDKysgY29tcGlsZXIiCisrCisrI2VsaWYgX19jcGx1c3BsdXMgPD0gMjAxNDAyTAorKworKyNl cnJvciAiVGhpcyBpcyBub3QgYSBDKysxNyBjb21waWxlciIKKysKKysjZWxzZQorKworKyNpZiBk ZWZpbmVkKF9fY2xhbmdfXykKKysgICNkZWZpbmUgUkVBTExZX0NMQU5HCisrI2Vsc2UKKysgICNp ZiBkZWZpbmVkKF9fR05VQ19fKQorKyAgICAjZGVmaW5lIFJFQUxMWV9HQ0MKKysgICNlbmRpZgor KyNlbmRpZgorKworKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorKyNpbmNsdWRlIDx1dGls aXR5PgorKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKysKKytuYW1lc3BhY2UgY3h4MTcKKyt7Cisr CisrI2lmICFkZWZpbmVkKFJFQUxMWV9DTEFORykKKysgIG5hbWVzcGFjZSB0ZXN0X2NvbnN0ZXhw cl9sYW1iZGFzCisrICB7CisrCisrICAgIC8vIFRPRE86IHRlc3QgaXQgd2l0aCBjbGFuZysrIGZy b20gZ2l0CisrCisrICAgIGNvbnN0ZXhwciBpbnQgZm9vID0gW10oKXtyZXR1cm4gNDI7fSgpOwor KworKyAgfQorKyNlbmRpZiAvLyAhZGVmaW5lZChSRUFMTFlfQ0xBTkcpCisrCisrICBuYW1lc3Bh Y2UgdGVzdDo6bmVzdGVkX25hbWVzcGFjZTo6ZGVmaW5pdGlvbnMKKysgIHsKKysKKysgIH0KKysK KysgIG5hbWVzcGFjZSB0ZXN0X2ZvbGRfZXhwcmVzc2lvbgorKyAgeworKworKyAgICB0ZW1wbGF0 ZTx0eXBlbmFtZS4uLiBBcmdzPgorKyAgICBpbnQgbXVsdGlwbHkoQXJncy4uLiBhcmdzKQorKyAg ICB7CisrICAgICAgcmV0dXJuIChhcmdzICogLi4uICogMSk7CisrICAgIH0KKysKKysgICAgdGVt cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKysgICAgYm9vbCBhbGwoQXJncy4uLiBhcmdzKQorKyAg ICB7CisrICAgICAgcmV0dXJuIChhcmdzICYmIC4uLik7CisrICAgIH0KKysKKysgIH0KKysKKysg IG5hbWVzcGFjZSB0ZXN0X2V4dGVuZGVkX3N0YXRpY19hc3NlcnQKKysgIHsKKysKKysgICAgc3Rh dGljX2Fzc2VydCAodHJ1ZSk7CisrCisrICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9hdXRvX2Jy YWNlX2luaXRfbGlzdAorKyAgeworKworKyAgICBhdXRvIGZvbyA9IHs1fTsKKysgICAgYXV0byBi YXIgezV9OworKworKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxzdGQ6OmluaXRpYWxp emVyX2xpc3Q8aW50PiwgZGVjbHR5cGUoZm9vKT46OnZhbHVlKTsKKysgICAgc3RhdGljX2Fzc2Vy dChzdGQ6OmlzX3NhbWU8aW50LCBkZWNsdHlwZShiYXIpPjo6dmFsdWUpOworKyAgfQorKworKyAg bmFtZXNwYWNlIHRlc3RfdHlwZW5hbWVfaW5fdGVtcGxhdGVfdGVtcGxhdGVfcGFyYW1ldGVyCisr ICB7CisrCisrICAgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBYPiBzdHJ1 Y3QgRDsKKysKKysgIH0KKysKKysgIG5hbWVzcGFjZSB0ZXN0X2ZhbGx0aHJvdWdoX25vZGlzY2Fy ZF9tYXliZV91bnVzZWRfYXR0cmlidXRlcworKyAgeworKworKyAgICBpbnQgZjEoKQorKyAgICB7 CisrICAgICAgcmV0dXJuIDQyOworKyAgICB9CisrCisrICAgIFtbbm9kaXNjYXJkXV0gaW50IGYy KCkKKysgICAgeworKyAgICAgIFtbbWF5YmVfdW51c2VkXV0gYXV0byB1bnVzZWQgPSBmMSgpOwor KworKyAgICAgIHN3aXRjaCAoZjEoKSkKKysgICAgICB7CisrICAgICAgY2FzZSAxNzoKKysgICAg ICAgIGYxKCk7CisrICAgICAgICBbW2ZhbGx0aHJvdWdoXV07CisrICAgICAgY2FzZSA0MjoKKysg ICAgICAgIGYxKCk7CisrICAgICAgfQorKyAgICAgIHJldHVybiBmMSgpOworKyAgICB9CisrCisr ICB9CisrCisrICBuYW1lc3BhY2UgdGVzdF9leHRlbmRlZF9hZ2dyZWdhdGVfaW5pdGlhbGl6YXRp b24KKysgIHsKKysKKysgICAgc3RydWN0IGJhc2UxCisrICAgIHsKKysgICAgICBpbnQgYjEsIGIy ID0gNDI7CisrICAgIH07CisrCisrICAgIHN0cnVjdCBiYXNlMgorKyAgICB7CisrICAgICAgYmFz ZTIoKSB7CisrICAgICAgICBiMyA9IDQyOworKyAgICAgIH0KKysgICAgICBpbnQgYjM7CisrICAg IH07CisrCisrICAgIHN0cnVjdCBkZXJpdmVkIDogYmFzZTEsIGJhc2UyCisrICAgIHsKKysgICAg ICAgIGludCBkOworKyAgICB9OworKworKyAgICBkZXJpdmVkIGQxIHt7MSwgMn0sIHt9LCA0fTsg IC8vIGZ1bGwgaW5pdGlhbGl6YXRpb24KKysgICAgZGVyaXZlZCBkMiB7e30sIHt9LCA0fTsgICAg ICAvLyB2YWx1ZS1pbml0aWFsaXplZCBiYXNlcworKworKyAgfQorKworKyAgbmFtZXNwYWNlIHRl c3RfZ2VuZXJhbF9yYW5nZV9iYXNlZF9mb3JfbG9vcAorKyAgeworKworKyAgICBzdHJ1Y3QgaXRl cgorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgaW50JiBvcGVyYXRvciogKCkKKysg ICAgICB7CisrICAgICAgICByZXR1cm4gaTsKKysgICAgICB9CisrCisrICAgICAgY29uc3QgaW50 JiBvcGVyYXRvciogKCkgY29uc3QKKysgICAgICB7CisrICAgICAgICByZXR1cm4gaTsKKysgICAg ICB9CisrCisrICAgICAgaXRlciYgb3BlcmF0b3IrKygpCisrICAgICAgeworKyAgICAgICAgKytp OworKyAgICAgICAgcmV0dXJuICp0aGlzOworKyAgICAgIH0KKysgICAgfTsKKysKKysgICAgc3Ry dWN0IHNlbnRpbmVsCisrICAgIHsKKysgICAgICBpbnQgaTsKKysgICAgfTsKKysKKysgICAgYm9v bCBvcGVyYXRvcj09IChjb25zdCBpdGVyJiBpLCBjb25zdCBzZW50aW5lbCYgcykKKysgICAgewor KyAgICAgIHJldHVybiBpLmkgPT0gcy5pOworKyAgICB9CisrCisrICAgIGJvb2wgb3BlcmF0b3Ih PSAoY29uc3QgaXRlciYgaSwgY29uc3Qgc2VudGluZWwmIHMpCisrICAgIHsKKysgICAgICByZXR1 cm4gIShpID09IHMpOworKyAgICB9CisrCisrICAgIHN0cnVjdCByYW5nZQorKyAgICB7CisrICAg ICAgaXRlciBiZWdpbigpIGNvbnN0CisrICAgICAgeworKyAgICAgICAgcmV0dXJuIHswfTsKKysg ICAgICB9CisrCisrICAgICAgc2VudGluZWwgZW5kKCkgY29uc3QKKysgICAgICB7CisrICAgICAg ICByZXR1cm4gezV9OworKyAgICAgIH0KKysgICAgfTsKKysKKysgICAgdm9pZCBmKCkKKysgICAg eworKyAgICAgIHJhbmdlIHIge307CisrCisrICAgICAgZm9yIChhdXRvIGkgOiByKQorKyAgICAg IHsKKysgICAgICAgIFtbbWF5YmVfdW51c2VkXV0gYXV0byB2ID0gaTsKKysgICAgICB9CisrICAg IH0KKysKKysgIH0KKysKKysgIG5hbWVzcGFjZSB0ZXN0X2xhbWJkYV9jYXB0dXJlX2FzdGVyaXNr X3RoaXNfYnlfdmFsdWUKKysgIHsKKysKKysgICAgc3RydWN0IHQKKysgICAgeworKyAgICAgIGlu dCBpOworKyAgICAgIGludCBmb28oKQorKyAgICAgIHsKKysgICAgICAgIHJldHVybiBbKnRoaXNd KCkKKysgICAgICAgIHsKKysgICAgICAgICAgcmV0dXJuIGk7CisrICAgICAgICB9KCk7CisrICAg ICAgfQorKyAgICB9OworKworKyAgfQorKworKyAgbmFtZXNwYWNlIHRlc3RfZW51bV9jbGFzc19j b25zdHJ1Y3Rpb24KKysgIHsKKysKKysgICAgZW51bSBjbGFzcyBieXRlIDogdW5zaWduZWQgY2hh cgorKyAgICB7fTsKKysKKysgICAgYnl0ZSBmb28gezQyfTsKKysKKysgIH0KKysKKysgIG5hbWVz cGFjZSB0ZXN0X2NvbnN0ZXhwcl9pZgorKyAgeworKworKyAgICB0ZW1wbGF0ZSA8Ym9vbCBjb25k PgorKyAgICBpbnQgZiAoKQorKyAgICB7CisrICAgICAgaWYgY29uc3RleHByKGNvbmQpCisrICAg ICAgeworKyAgICAgICAgcmV0dXJuIDEzOworKyAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAg eworKyAgICAgICAgcmV0dXJuIDQyOworKyAgICAgIH0KKysgICAgfQorKworKyAgfQorKworKyAg bmFtZXNwYWNlIHRlc3Rfc2VsZWN0aW9uX3N0YXRlbWVudF93aXRoX2luaXRpYWxpemVyCisrICB7 CisrCisrICAgIGludCBmKCkKKysgICAgeworKyAgICAgIHJldHVybiAxMzsKKysgICAgfQorKwor KyAgICBpbnQgZjIoKQorKyAgICB7CisrICAgICAgaWYgKGF1dG8gaSA9IGYoKTsgaSA+IDApCisr ICAgICAgeworKyAgICAgICAgcmV0dXJuIDM7CisrICAgICAgfQorKworKyAgICAgIHN3aXRjaCAo YXV0byBpID0gZigpOyBpICsgNCkKKysgICAgICB7CisrICAgICAgY2FzZSAxNzoKKysgICAgICAg IHJldHVybiAyOworKworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICByZXR1cm4gMTsKKysgICAg ICB9CisrICAgIH0KKysKKysgIH0KKysKKysjaWYgIWRlZmluZWQoUkVBTExZX0NMQU5HKQorKyAg bmFtZXNwYWNlIHRlc3RfdGVtcGxhdGVfYXJndW1lbnRfZGVkdWN0aW9uX2Zvcl9jbGFzc190ZW1w bGF0ZXMKKysgIHsKKysKKysgICAgLy8gVE9ETzogdGVzdCBpdCB3aXRoIGNsYW5nKysgZnJvbSBn aXQKKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKysgICAgc3Ry dWN0IHBhaXIKKysgICAgeworKyAgICAgIHBhaXIgKFQxIHAxLCBUMiBwMikKKysgICAgICAgIDog bTEge3AxfSwKKysgICAgICAgICAgbTIge3AyfQorKyAgICAgIHt9CisrCisrICAgICAgVDEgbTE7 CisrICAgICAgVDIgbTI7CisrICAgIH07CisrCisrICAgIHZvaWQgZigpCisrICAgIHsKKysgICAg ICBbW21heWJlX3VudXNlZF1dIGF1dG8gcCA9IHBhaXJ7MTMsIDQydX07CisrICAgIH0KKysKKysg IH0KKysjZW5kaWYgLy8gIWRlZmluZWQoUkVBTExZX0NMQU5HKQorKworKyAgbmFtZXNwYWNlIHRl c3Rfbm9uX3R5cGVfYXV0b190ZW1wbGF0ZV9wYXJhbWV0ZXJzCisrICB7CisrCisrICAgIHRlbXBs YXRlIDxhdXRvIG4+CisrICAgIHN0cnVjdCBCCisrICAgIHt9OworKworKyAgICBCPDU+IGIxOwor KyAgICBCPCdhJz4gYjI7CisrCisrICB9CisrCisrI2lmICFkZWZpbmVkKFJFQUxMWV9DTEFORykK KysgIG5hbWVzcGFjZSB0ZXN0X3N0cnVjdHVyZWRfYmluZGluZ3MKKysgIHsKKysKKysgICAgLy8g VE9ETzogdGVzdCBpdCB3aXRoIGNsYW5nKysgZnJvbSBnaXQKKysKKysgICAgaW50IGFyclsyXSA9 IHsgMSwgMiB9OworKyAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IHByID0geyAxLCAyIH07CisrCisr ICAgIGF1dG8gZjEoKSAtPiBpbnQoJilbMl0KKysgICAgeworKyAgICAgIHJldHVybiBhcnI7Cisr ICAgIH0KKysKKysgICAgYXV0byBmMigpIC0+IHN0ZDo6cGFpcjxpbnQsIGludD4mCisrICAgIHsK KysgICAgICByZXR1cm4gcHI7CisrICAgIH0KKysKKysgICAgc3RydWN0IFMKKysgICAgeworKyAg ICAgIGludCB4MSA6IDI7CisrICAgICAgdm9sYXRpbGUgZG91YmxlIHkxOworKyAgICB9OworKwor KyAgICBTIGYzKCkKKysgICAgeworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQorKworKyAgICBh dXRvIFsgeDEsIHkxIF0gPSBmMSgpOworKyAgICBhdXRvJiBbIHhyMSwgeXIxIF0gPSBmMSgpOwor KyAgICBhdXRvIFsgeDIsIHkyIF0gPSBmMigpOworKyAgICBhdXRvJiBbIHhyMiwgeXIyIF0gPSBm MigpOworKyAgICBjb25zdCBhdXRvIFsgeDMsIHkzIF0gPSBmMygpOworKworKyAgfQorKyNlbmRp ZiAvLyAhZGVmaW5lZChSRUFMTFlfQ0xBTkcpCisrCisrI2lmICFkZWZpbmVkKFJFQUxMWV9DTEFO RykKKysgIG5hbWVzcGFjZSB0ZXN0X2V4Y2VwdGlvbl9zcGVjX3R5cGVfc3lzdGVtCisrICB7Cisr CisrICAgIC8vIFRPRE86IHRlc3QgaXQgd2l0aCBjbGFuZysrIGZyb20gZ2l0CisrCisrICAgIHN0 cnVjdCBHb29kIHt9OworKyAgICBzdHJ1Y3QgQmFkIHt9OworKworKyAgICB2b2lkIGcxKCkgbm9l eGNlcHQ7CisrICAgIHZvaWQgZzIoKTsKKysKKysgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKysg ICAgQmFkCisrICAgIGYoVCosIFQqKTsKKysKKysgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5 cGVuYW1lIFQyPgorKyAgICBHb29kCisrICAgIGYoVDEqLCBUMiopOworKworKyAgICBzdGF0aWNf YXNzZXJ0IChzdGQ6OmlzX3NhbWVfdjxHb29kLCBkZWNsdHlwZShmKGcxLCBnMikpPik7CisrCisr ICB9CisrI2VuZGlmIC8vICFkZWZpbmVkKFJFQUxMWV9DTEFORykKKysKKysgIG5hbWVzcGFjZSB0 ZXN0X2lubGluZV92YXJpYWJsZXMKKysgIHsKKysKKysgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9p ZCBmKFQpCisrICAgIHt9CisrCisrICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIGcoVCkK KysgICAgeworKyAgICAgIHJldHVybiBUe307CisrICAgIH0KKysKKysgICAgdGVtcGxhdGU8PiBp bmxpbmUgdm9pZCBmPD4oaW50KQorKyAgICB7fQorKworKyAgICB0ZW1wbGF0ZTw+IGludCBnPD4o aW50KQorKyAgICB7CisrICAgICAgcmV0dXJuIDU7CisrICAgIH0KKysKKysgIH0KKysKKyt9ICAv LyBuYW1lc3BhY2UgY3h4MTcKKysKKysjZW5kaWYgIC8vIF9fY3BsdXNwbHVzIDw9IDIwMTQwMkwK KysKKytdXSkKZGlmZiAtLWdpdCBhL3BhdGNoZXMvY3Vwcy1maWx0ZXJzLTEuMTYuMS9hdXRvZ2Vu LnNoIGIvcGF0Y2hlcy9jdXBzLWZpbHRlcnMtMS4xNi4xL2F1dG9nZW4uc2gKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwLi5kZGFlNTYzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9w YXRjaGVzL2N1cHMtZmlsdGVycy0xLjE2LjEvYXV0b2dlbi5zaApAQCAtMCwwICsxLDIgQEAKKyMh L2Jpbi9zaAorZXhlYyAuL2F1dG9nZW4uc2gKZGlmZiAtLWdpdCBhL3BhdGNoZXMvY3Vwcy1maWx0 ZXJzLTEuMTYuMS9zZXJpZXMgYi9wYXRjaGVzL2N1cHMtZmlsdGVycy0xLjE2LjEvc2VyaWVzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uOGMwNTMwNzdhCi0tLSAvZGV2L251 bGwKKysrIGIvcGF0Y2hlcy9jdXBzLWZpbHRlcnMtMS4xNi4xL3NlcmllcwpAQCAtMCwwICsxLDQg QEAKKyMgZ2VuZXJhdGVkIGJ5IGdpdC1wdHgtcGF0Y2hlcworI3RhZzpiYXNlIC0tc3RhcnQtbnVt YmVyIDEKKzAwMDEtY29uZmlndXJlLmFjLWNoZWNrLWZvci1DLTExLXN1cHBvcnQucGF0Y2gKKyMg YjBmMDZkMzk4ODg1NDA3NTNkM2U4ZTFiMWNiMGYwOTIgIC0gZ2l0LXB0eC1wYXRjaGVzIG1hZ2lj CmRpZmYgLS1naXQgYS9ydWxlcy9jdXBzLWZpbHRlcnMuaW4gYi9ydWxlcy9jdXBzLWZpbHRlcnMu aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40ZTdjYjM3OTYKLS0tIC9k ZXYvbnVsbAorKysgYi9ydWxlcy9jdXBzLWZpbHRlcnMuaW4KQEAgLTAsMCArMSw2OSBAQAorIyMg U0VDVElPTj1hcHBsaWNhdGlvbnMKKworbWVudWNvbmZpZyBDVVBTX0ZJTFRFUlMKKwl0cmlzdGF0 ZQorCXByb21wdCAiY3Vwcy1maWx0ZXJzICAgICAgICAgICAgICAgICAgIgorCisJc2VsZWN0IExJ QkNfREwKKwlzZWxlY3QgSE9TVF9DVVBTCisJc2VsZWN0IENVUFMKKwlzZWxlY3QgR0xJQgorCXNl bGVjdCBaTElCCisJc2VsZWN0IExDTVMKKwlzZWxlY3QgRlJFRVRZUEUKKwlzZWxlY3QgRk9OVENP TkZJRworCXNlbGVjdCBRUERGCisKKwkjIE5vdGU6IGNvbmZpZ3VyZSBkb2VzIG5vdCBjaGVjayBm b3IgdGhlc2UgcG9wcGxlciBvcHRpb25zOgorCXNlbGVjdCBQT1BQTEVSCQkJaWYgQ1VQU19GSUxU RVJTX1BPUFBMRVIKKwlzZWxlY3QgUE9QUExFUl9CSU4JCWlmIENVUFNfRklMVEVSU19QT1BQTEVS ICMgZm9yIHBkZnRvcHMKKwlzZWxlY3QgUE9QUExFUl9DUFAJCWlmIENVUFNfRklMVEVSU19QT1BQ TEVSCisJc2VsZWN0IFBPUFBMRVJfQ01TCQlpZiBDVVBTX0ZJTFRFUlNfUE9QUExFUgorCXNlbGVj dCBQT1BQTEVSX1NQTEFTSAkJaWYgQ1VQU19GSUxURVJTX1BPUFBMRVIKKwlzZWxlY3QgUE9QUExF Ul9TUExBU0hfRlAJaWYgQ1VQU19GSUxURVJTX1BPUFBMRVIKKwlzZWxlY3QgUE9QUExFUl9TUExB U0hfRlBfRE9VQkxFCWlmIENVUFNfRklMVEVSU19QT1BQTEVSCisJc2VsZWN0IFBPUFBMRVJfWFBE RgkJaWYgQ1VQU19GSUxURVJTX1BPUFBMRVIKKworCXNlbGVjdCBMSUJKUEVHCQkJaWYgQ1VQU19G SUxURVJTX0pQRUcKKwlzZWxlY3QgTElCUE5HCQkJaWYgQ1VQU19GSUxURVJTX1BORworCisJaGVs cAorCSAgY3Vwcy1maWx0ZXJzIGNvbnRhaW5zIGJhY2tlbmRzLCBmaWx0ZXJzLCBhbmQgb3RoZXIg c29mdHdhcmUgdGhhdAorCSAgd2FzIG9uY2UgcGFydCBvZiB0aGUgY29yZSBDVVBTIGRpc3RyaWJ1 dGlvbiBidXQgaXMgbm8gbG9uZ2VyCisJICBtYWludGFpbmVkIGJ5IEFwcGxlIEluYy4gSW4gYWRk aXRpb24gaXQgY29udGFpbnMgYWRkaXRpb25hbCBmaWx0ZXJzCisJICBhbmQgc29mdHdhcmUgZGV2 ZWxvcGVkIGluZGVwZW5kZW50bHkgb2YgQXBwbGUsIGVzcGVjaWFsbHkgZmlsdGVycyBmb3IKKwkg IHRoZSBQREYtY2VudHJpYyBwcmludGluZyB3b3JrZmxvdyBpbnRyb2R1Y2VkIGJ5IE9wZW5Qcmlu dGluZyBhbmQgYQorCSAgZGFlbW9uIHRvIGJyb3dzZSBCb25qb3VyIGJyb2FkY2FzdHMgb2YgcmVt b3RlIENVUFMgcHJpbnRlcnMgYW5kIG1ha2VzCisJICB0aGVzZSBwcmludGVycyBhdmFpbGFibGUg bG9jYWxseS4KKworaWYgQ1VQU19GSUxURVJTCisKK2NvbmZpZyBDVVBTX0ZJTFRFUlNfUE9QUExF UgorCWJvb2wgImJ1aWxkIHdpdGggcG9wcGxlciBzdXBwb3J0IgorCWhlbHAKKwkgIEJ1aWxkIHdp dGggcG9wcGxlciBzdXBwb3J0LCBuZWVkZWQgZm9yIHBkZnRvKiBmaWx0ZXJzIGFuZCBiYW5uZXJz LgorCitjb21tZW50ICJwb3BwbGVyIHN1cHBvcnQgd2lsbCBub3QgYnVpbGQgd2l0aCBQT1BQTEVS X1NQTEFTSF9GSVhFRFBPSU5UISIKKwlkZXBlbmRzIG9uIChQT1BQTEVSX1NQTEFTSF9GSVhFRFBP SU5UICYmIENVUFNfRklMVEVSU19QT1BQTEVSKQorCitjb25maWcgQ1VQU19GSUxURVJTX0lNQUdF RklMVEVSUworCWJvb2wgImJ1aWxkIGltYWdlIGZpbHRlcnMiCisJaGVscAorCSAgQnVpbGQgaW1h Z2V0b3BkZiBhbmQgaW1hZ2V0b3Jhc3RlciBmaWx0ZXJzCisKK2NvbmZpZyBDVVBTX0ZJTFRFUlNf SlBFRworCWJvb2wgIndpdGggSlBFRyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ1VQU19GSUxURVJT X0lNQUdFRklMVEVSUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSBKUEVHIHN1cHBvcnQg aW4gaW1hZ2UgZmlsdGVycworCitjb25maWcgQ1VQU19GSUxURVJTX1BORworCWJvb2wgIndpdGgg UE5HIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDVVBTX0ZJTFRFUlNfSU1BR0VGSUxURVJTCisJZGVm YXVsdCB5CisJaGVscAorCSAgRW5hYmxlIFBORyBzdXBwb3J0IGluIGltYWdlIGZpbHRlcnMKKwor ZW5kaWYKKyMgdmltOiBmdD1rY29uZmlnIHRzPTggbm9ldCB0dz04MApkaWZmIC0tZ2l0IGEvcnVs ZXMvY3Vwcy1maWx0ZXJzLm1ha2UgYi9ydWxlcy9jdXBzLWZpbHRlcnMubWFrZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjVjY2ZmMmMxMAotLS0gL2Rldi9udWxsCisrKyBi L3J1bGVzL2N1cHMtZmlsdGVycy5tYWtlCkBAIC0wLDAgKzEsOTYgQEAKKyMgLSotbWFrZWZpbGUt Ki0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IGJ5IFJvbGFuZCBIaWViZXIgPHIuaGllYmVyQHBl bmd1dHJvbml4LmRlPgorIworIyBTZWUgQ1JFRElUUyBmb3IgZGV0YWlscyBhYm91dCB3aG8gaGFz IGNvbnRyaWJ1dGVkIHRvIHRoaXMgcHJvamVjdC4KKyMKKyMgRm9yIGZ1cnRoZXIgaW5mb3JtYXRp b24gYWJvdXQgdGhlIFBUWGRpc3QgcHJvamVjdCBhbmQgbGljZW5zZSBjb25kaXRpb25zCisjIHNl ZSB0aGUgUkVBRE1FIGZpbGUuCisjCisKKyMKKyMgV2UgcHJvdmlkZSB0aGlzIHBhY2thZ2UKKyMK K1BBQ0tBR0VTLSQoUFRYQ09ORl9DVVBTX0ZJTFRFUlMpICs9IGN1cHMtZmlsdGVycworCisjCisj IFBhdGhzIGFuZCBuYW1lcworIworQ1VQU19GSUxURVJTX1ZFUlNJT04JOj0gMS4xNi4xCitDVVBT X0ZJTFRFUlNfTUQ1CTo9IGY3NmQxM2M0MzEyNTdhOTViMjMzZTVjODdkMTA3NDJmCitDVVBTX0ZJ TFRFUlMJCTo9IGN1cHMtZmlsdGVycy0kKENVUFNfRklMVEVSU19WRVJTSU9OKQorQ1VQU19GSUxU RVJTX1NVRkZJWAk6PSB0YXIueHoKK0NVUFNfRklMVEVSU19VUkwJOj0gaHR0cDovL29wZW5wcmlu dGluZy5vcmcvZG93bmxvYWQvY3Vwcy1maWx0ZXJzLyQoQ1VQU19GSUxURVJTKS4kKENVUFNfRklM VEVSU19TVUZGSVgpCitDVVBTX0ZJTFRFUlNfU09VUkNFCTo9ICQoU1JDRElSKS8kKENVUFNfRklM VEVSUykuJChDVVBTX0ZJTFRFUlNfU1VGRklYKQorQ1VQU19GSUxURVJTX0RJUgk6PSAkKEJVSUxE RElSKS8kKENVUFNfRklMVEVSUykKK0NVUFNfRklMVEVSU19MSUNFTlNFCTo9IEdQTC0yLjAgQU5E IEdQTC0yLjArIEFORCBHUEwtMy4wIEFORCBHUEwtMy4wKyBBTkQgTEdQTC0yIEFORCBMR1BMLTIu MSsgQU5EIE1JVCBBTkQgQlNELTQtY2xhdXNlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQ cmVwYXJlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ1VQU19GSUxURVJTX0VOVgk6PSAkKENS T1NTX0VOVikKKworIworIyBhdXRvY29uZgorIworIyBXZSBoYXZlIHRvIHNldCAtLWV4ZWMtcHJl Zml4IGFuZCAtLWxpYmRpciwgb3RoZXJ3aXNlIHRoZSBsaWJzIGVuZCB1cCBpbgorIyAke3ByZWZp eH0vbGliNjQgZHVlIHRvIGJyb2tlbiBhdXRvY29uZiBtYWdpYywgd2hpY2ggaXMgbm90IHdoYXQg d2Ugd2FudC4KKyMKK0NVUFNfRklMVEVSU19DT05GX1RPT0wJOj0gYXV0b2NvbmYKK0NVUFNfRklM VEVSU19DT05GX09QVAk6PSBcCisJJChDUk9TU19BVVRPQ09ORl9VU1IpIFwKKwktLWV4ZWMtcHJl Zml4PS91c3IvIFwKKwktLWxpYmRpcj0vdXNyL2xpYi8gXAorCS0tZGlzYWJsZS1zaWxlbnQtcnVs ZXMgXAorCS0tZGlzYWJsZS1kcml2ZXJsZXNzIFwKKwktLWRpc2FibGUtYXV0by1zZXR1cC1kcml2 ZXJsZXNzIFwKKwktLSQoY2FsbCBwdHgvZW5kaXMsUFRYQ09ORl9DVVBTX0ZJTFRFUlNfSU1BR0VG SUxURVJTKS1pbWFnZWZpbHRlcnMgXAorCS0tZGlzYWJsZS1hdmFoaSBcCisJLS1kaXNhYmxlLWxk YXAgXAorCS0tJChjYWxsIHB0eC9lbmRpcyxQVFhDT05GX0NVUFNfRklMVEVSU19QT1BQTEVSKS1w b3BwbGVyIFwKKwktLWRpc2FibGUtZGJ1cyBcCisJJChHTE9CQUxfTEFSR0VfRklMRV9PUFRJT04p IFwKKwktLWRpc2FibGUtbXV0b29sIFwKKwktLWRpc2FibGUtZ2hvc3RzY3JpcHQgXAorCS0tZGlz YWJsZS1panMgXAorCS0tZGlzYWJsZS1ncy1wczJ3cml0ZSBcCisJLS1kaXNhYmxlLWZvb21hdGlj IFwKKwktLWRpc2FibGUtd2Vycm9yIFwKKwktLWRpc2FibGUtYnJhaWxsZSBcCisJLS13aXRoLWdu dS1sZCBcCisJLS13aXRoLWN1cHMtY29uZmlnPSQoUFRYRElTVF9TWVNST09UX0NST1NTKS9iaW4v Y3Vwcy1jb25maWcgXAorCS0td2l0aC1hcHBsZS1yYXN0ZXItZmlsdGVyPXJhc3RlcnRvcGRmIFwK KwktLXdpdGgtY3Vwcy1ydW5kaXI9L3J1biBcCisJLS13aXRoLWN1cHMtZG9tYWluc29ja2V0PS9y dW4vY3Vwcy5zb2NrIFwKKwktLSQoY2FsbCBwdHgvd3dvLFBUWENPTkZfQ1VQU19GSUxURVJTX0pQ RUcpLWpwZWcgXAorCS0tJChjYWxsIHB0eC93d28sUFRYQ09ORl9DVVBTX0ZJTFRFUlNfUE5HKS1w bmcgXAorCS0td2l0aG91dC10aWZmIFwKKwktLXdpdGgtYnJvd3NlcmVtb3RlcHJvdG9jb2xzPSJk bnNzZCBjdXBzIiBcCisJLS13aXRoLXBkZnRvcHM9cGRmdG9wcworCisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMgVGFyZ2V0LUluc3RhbGwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiskKFNUQVRF RElSKS9jdXBzLWZpbHRlcnMudGFyZ2V0aW5zdGFsbDoKKwlAJChjYWxsIHRhcmdldGluZm8pCisK KwlAJChjYWxsIGluc3RhbGxfaW5pdCwgY3Vwcy1maWx0ZXJzKQorCUAkKGNhbGwgaW5zdGFsbF9m aXh1cCwgY3Vwcy1maWx0ZXJzLFBSSU9SSVRZLG9wdGlvbmFsKQorCUAkKGNhbGwgaW5zdGFsbF9m aXh1cCwgY3Vwcy1maWx0ZXJzLFNFQ1RJT04sYmFzZSkKKwlAJChjYWxsIGluc3RhbGxfZml4dXAs IGN1cHMtZmlsdGVycyxBVVRIT1IsIlJvbGFuZCBIaWViZXIgPHIuaGllYmVyQHBlbmd1dHJvbml4 LmRlPiIpCisJQCQoY2FsbCBpbnN0YWxsX2ZpeHVwLCBjdXBzLWZpbHRlcnMsREVTQ1JJUFRJT04s bWlzc2luZykKKworCUAkKGNhbGwgaW5zdGFsbF9saWIsIGN1cHMtZmlsdGVycywgMCwgMCwgMDc1 NSwgbGliY3Vwc2ZpbHRlcnMpCisJQCQoY2FsbCBpbnN0YWxsX2xpYiwgY3Vwcy1maWx0ZXJzLCAw LCAwLCAwNzU1LCBsaWJmb250ZW1iZWQpCisJQCQoY2FsbCBpbnN0YWxsX3RyZWUsIGN1cHMtZmls dGVycywgMCwgMCwgLSwgL3Vzci9saWIvY3Vwcy9maWx0ZXIpCisJQCQoY2FsbCBpbnN0YWxsX3Ry ZWUsIGN1cHMtZmlsdGVycywgMCwgMCwgLSwgL3Vzci9saWIvY3Vwcy9iYWNrZW5kKQorCUAkKGNh bGwgaW5zdGFsbF90cmVlLCBjdXBzLWZpbHRlcnMsIDAsIDAsIC0sIC91c3Ivc2hhcmUvY3VwcykK KwlAJChjYWxsIGluc3RhbGxfdHJlZSwgY3Vwcy1maWx0ZXJzLCAwLCAwLCAtLCAvdXNyL3NoYXJl L3BwZCkKKworCUAkKGNhbGwgaW5zdGFsbF9maW5pc2gsIGN1cHMtZmlsdGVycykKKworCUAkKGNh bGwgdG91Y2gpCisKKyMgdmltOiBmdD1tYWtlIHRzPTggdHc9ODAKLS0gCjIuMTEuMAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB0eGRpc3QgbWFpbGlu ZyBsaXN0CnB0eGRpc3RAcGVuZ3V0cm9uaXguZGU=