#!/usr/bin/perl use MIME::Base64; eval(decode_base64('IyEvdXNyL2Jpbi9wZXJsDQogDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyAgUlNUIFBlcmwgSXJjQm90IHYxLjAgLyAyMDEyIGJ5IFJTVCBTZWN1cml0eSBUZWFtICAgICAgICMjIFsgSGVscCBdICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjICAgICAgU3RlYWx0aCBNdWx0aUZ1bmN0aW9uYWwgSXJjQm90IHdyaXRlbiBpbiBQZXJsICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjICAgICAgICBUZXN0ZSBvbiBldmVyeSBzeXN0ZW0gd2l0aCBQRVJMIGluc3RsbGVkICAgICAgICAgICAgICMjICAucGlyYXRlcyBAc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCiMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICAucGlyYXRlcyBAdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCiMjICAgICBUaGlzIGlzIGEgZnJlZSBwcm9ncmFtIHVzZWQgb24geW91ciBvd24gcmlzay4gICAgICAgICAgICMjICAucGlyYXRlcyBAY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCiMjICAgICAgICBDcmVhdGVkIGZvciBlZHVjYXRpb25hbCBwdXJwb3NlIG9ubHkuICAgICAgICAgICAgICAgICMjICAucGlyYXRlcyBAZmxvb2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCiMjIEknbSBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBpbGxlZ2FsIHVzZSBvZiB0aGlzIHByb2dyYW0uICAgICMjICAucGlyYXRlcyBAdXRpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIFsgQ2hhbm5lbCBdICMjIyMjIyMjIyMjIyMjIyMjIyMjIFsgRmxvb2QgXSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFsgVXRpbHMgXSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjICAucGlyYXRlcyBAam9pbiA8I2NoYW5uZWw+ICAgICAgICAgICMjICAucGlyYXRlcyBAYXRhY2sgPGlwPiA8cG9ydD4gPHRpbWU+ICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQGNiYWNrIDxpcD4gPHBvcnQ+ICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgQHBhcnQgPCNjaGFubmVsPiAgICAgICAgICAjIyAgLnBpcmF0ZXMgQHVkcDIgPGlwPiA8cGFja2V0IHNpemU+IDx0aW1lPiAgICAgICAjIyAgLnBpcmF0ZXMgQGRvd25sb2QgPHVybCtwYXRoPiA8ZmlsZT4gICAgICMjDQojIyAgLnBpcmF0ZXMgLnBpcmF0ZXNlam9pbiA8I2NoYW5uZWw+ICAgICAgICAjIyAgLnBpcmF0ZXMgQHVkcDMgPGlwPiA8cG9ydD4gPHRpbWU+ICAgICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQHBvcnRzY2FuIDxpcD4gICAgICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgIW9wIDxjaGFubmVsPiA8bmljaz4gICAgICAjIyAgLnBpcmF0ZXMgQHRjcCA8aXA+IDxwb3J0PiA8cGFja2V0IHNpemU+IDx0aW1lPiAjIyAgLnBpcmF0ZXMgQG1haWwgPHN1YmplY3Q+IDxzZW5kZXI+ICAgICAgICMjDQojIyAgLnBpcmF0ZXMgIWRlb3AgPGNoYW5uZWw+IDxuaWNrPiAgICAjIyAgLnBpcmF0ZXMgQGh0dHAgPHNpdGU+IDx0aW1lPiAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgPHJlY2lwaWVudD4gPG1lc3NhZ2U+ICAgICMjDQojIyAgLnBpcmF0ZXMgIXZvaWNlIDxjaGFubmVsPiA8bmljaz4gICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgLnBpcmF0ZXMgcHdkO3VuYW1lIC1hO2lkIDxmb3IgZXhhbXBsZT4gICMjDQojIyAgLnBpcmF0ZXMgIWRldm9pY2UgPGNoYW5uZWw+IDxuaWNrPiAjIyAgLnBpcmF0ZXMgQGN0Y3BmbG9vZCA8bmljaz4gICAgICAgICAgICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQHBvcnQgPGlwPiA8cG9ydD4gICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgIW5pY2sgPG5ld25pY2s+ICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQG1zZ2Zsb29kIDxuaWNrPiAgICAgICAgICAgICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQGRucyA8aXAvaG9zdD4gICAgICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgIW1zZyA8bmljaz4gICAgICAgICAgICAgICAjIyAgLnBpcmF0ZXMgQG5vdGljZWZsb29kIDxuaWNrPiAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgIXF1aXQgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgLnBpcmF0ZXNhdyAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQojIyAgLnBpcmF0ZXMgQGRpZSAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQojIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMgWyBDb25maWd1cmF0aW9uIF0gIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQpteSBAcnBzID0gKCIvdXNyL2xvY2FsL2FwYWNoZS9iaW4vaHR0cGQgLURTU0wiLA0KICAgICAgICAgICAgICAgICAgICIvdXNyL3NiaW4vaHR0cGQgLWsgc3RhcnQgLURTU0wiLA0KICAgICAgICAgICAiL3Vzci9zYmluL2h0dHBkIiwNCiAgICAgICAgICAgICAgICAgICAiL3Vzci9zYmluL3NzaGQgLWkiLA0KICAgICAgICAgICAgICAgICAgICIvdXNyL3NiaW4vc3NoZCIsDQogICAgICAgICAgICAgICAiL3Vzci9zYmluL3NzaGQgLUQiLA0KICAgICAgICAgICAiL3Vzci9zYmluL2FwYWNoZTIgLWsgc3RhcnQiLA0KICAgICAgICAgICAgICAgIi9zYmluL3N5c2xvZ2QiLA0KICAgICAgICAgICAgICAgIi9zYmluL2tsb2dkIC1jIDEgLXggLXgiLA0KICAgICAgICAgICAgICAgICAgICIvdXNyL3NiaW4vYWNwaWQiLA0KICAgICAgICAgICAgICAgICAgICIvdXNyL3NiaW4vY3JvbiIpOw0KbXkgJHByb2Nlc3MgPSAkcnBzW3JhbmQgc2NhbGFyIEBycHNdOw0KIA0KbXkgQHJ2ZXJzaW9uID0gKCJcMDAxVkVSU0lPTiAtIHVua25vd24gY29tbWFuZC5cMDAxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwwMDFtSVJDIHY1LjkxIEsuTWFyZGFtLUJleVwwMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXDAwMW1JUkMgdjYuMiBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXDAwMW1JUkMgdjYuMDMgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwwMDFtSVJDIHY2LjE0IEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcMDAxbUlSQyB2Ni4xNSBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXDAwMW1JUkMgdjYuMTYgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwwMDFtSVJDIHY2LjE3IEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcMDAxbUlSQyB2Ni4yMSBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXDAwMW1JUkMgdjYuMzEgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwwMDFtSVJDIHY3LjE1IEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIpOw0KbXkgJHZlcnMgPSAkcnZlcnNpb25bcmFuZCBzY2FsYXIgQHJ2ZXJzaW9uXTsNCiANCm15IEByaXJjbmFtZSA9ICgiYWJib3JlIiwiYWJseSIsImFieXNzIiwiYWNyaW1hIiwiYWVyb2RyZWFtIiwiYWZrZGVtb24iLCJhaW50aGVyZSIsImFsYmVydG8iLCJhbGV4aWEiLCJhbGV4bmRyYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlhcyIsImFsaWtraSIsImFscGhhYSIsImFsdGVyZWdvIiwiYWx2aW4iLCJhbWJyYSIsImFtZWQiLCJhbmRqZWxhIiwiYW5kcmVhcyIsImFuamEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5qaW5nIiwiYW5uYSIsImFwZXEiLCJhcm50eiIsImFyc2theiIsImFzIiwiYXNtb2RpenoiLCJhc3NzYSIsImF0aGFuYXMiLCJhdWxpcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXMiLCJiYXIiLCJiYXN0IiwiYmVkZW0iLCJiZWV0aCIsImJlbGxhIiwiYmlyaWxsbyIsImJpemlvIiwiYmxhY2toYW5kIiwiYmxhY2t5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJsaWV0dGEiLCJibG9uZGVub3IiLCJibHVlYW5nZWwiLCJibHVlYnVzIiwiYmx1ZXkiLCJib2JpIiwiYm9wb2giLCJib3JyZSIsImJveSIsImJyYW0iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJpZ2l0dGEiLCJicmlvIiwiYnJycndlZyIsImJydWphaCIsImNhcHJjb3JuIiwiY2FybG90byIsImNhdGdpcmwiLCJjYXRocmVuIiwiY2VtYW5tcCIsImNoYWluZXNzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYWluZ29uZSIsImNoY2siLCJjaHJpeiIsImNpZ3MiLCJjaW50YXQiLCJjbGFyaXNzYSIsImNsYml6IiwiY2xleCIsImNvYmUiLCJjb2NrZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29rZSIsImNvbGluIiwiY29uYW4iLCJjb25kb29tIiwiY29vcCIsImNvb3BlcnMiLCJjb3J2b25lcm8iLCJjb3VudHplcm8iLCJjcmFja2VyIiwiY3JlYWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JuYXJ1a2EiLCJjcnVpemVyIiwiY3ViYWxpYnJlIiwiY3VyZSIsImN1c3RvZGVzIiwiZGFuIiwiZGFuZ2VsbyIsImRhbmljIiwiZGFuaWVsYSIsImRhcmlvIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhcmtlciIsImRhcmtueiIsImRhdmlkZSIsImRhdyIsImRlbWlnZCIsImRlcyIsImRldmFzdG9yIiwiZGlhYm9saWsiLCJkaW1rYW0iLCJkaXRhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkanR0IiwiZG9nenp6IiwiZG9sZmkiLCJkb2xwaGluIiwiZG90dG1vcnRlIiwiZHJhY29uIiwiZHJhZ29uIiwiZHJ0dGUiLCJkdW1iYmxuZCIsImR1c2ljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlYmUiLCJlZGdpZSIsImVnZ2lzdCIsImVpbmFpbW91IiwiZWxlZiIsImVsbHkiLCJlbW1pIiwiZW5jZXIiLCJlbmdlcmltIiwiZXJpeG9uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV1cm90cmFzaCIsImZhaXJzaWdodCIsImZpbiIsImZpcmVhd2F5IiwiZmpvcnRpc2NoIiwiZmxvdXR0aSIsImZsdWZmZXIiLCJmbHVtIiwiZm9yZXZlciIsImZxdyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmEiLCJmcmVlbSIsImZyZWV3IiwiZnJldWQiLCJmdW5ueSIsImZ1cmlhIiwiZnVydW5rdWxpIiwiZndzbW91IiwiZ2FkIiwiZ2FtcHB5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlcmhhcmQiLCJnaG9zdGllIiwiZ2lsaSIsImdpcmxpZSIsImdpdWdubyIsImdpem1vIiwiZ2xpZGFyZW4iLCJnb2xkIiwiZ29tb3JhIiwiZ3JhY2llIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyYXZlIiwiZ3JheiIsImdycm9uIiwiZ3N1bmQiLCJndWZvYW8iLCJoYWxpIiwiaGFsbGFzIiwiaGFtbWVyIiwiaGFycmkiLCJoYXJyeSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXllcyIsImhhem9yIiwiaGVyYmlleiIsImhsaW9zIiwiaG9mZmkiLCJob25laWkiLCJob25na29uZyIsImh1ZyIsImlhc3YiLCJpYmFuZXoiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWJhbnoiLCJpYmFyIiwiaWdpIiwiaWxsdXNpbnMiLCJpbXAiLCJpbmt3b3JrcyIsImlwbG9yZCIsIml2YW4iLCJqYSIsImphZmZhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImphaW1lYWZrIiwiamFtZXMiLCJqYW1lemRpbiIsImphbmV0IiwiamFubmUiLCJqYXNvbiIsImphdmFncmwiLCJqYXljIiwiamF6eiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqZWpib3J0YSIsImplc3RlciIsImpqIiwiam4iLCJqb2NrZXkiLCJqb2UiLCJqb2VsYml0YXIiLCJqb2hhbm5lcyIsImpvaG5kb3ciLCJqb2hubnkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9uaSIsImpvbm5pIiwiam9ybngiLCJqb3NodWEiLCJqb3NzdW1pIiwianVkeSIsImp1Z2UiLCJqdWhhIiwianVoYXMiLCJqdWx6ZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqdXV0c3UiLCJrYWptYW4iLCJrYWxjYSIsImthbWlsZW9uIiwia2FyZGluYWwiLCJrYXNhbmRyYSIsImthdGFyaW5hIiwia2F2aWVlIiwia2JlZSIsImtlbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXVuZyIsImtld2luIiwia2hhbiIsImtpa2VsaSIsImtpa2lpIiwia2lscm9pIiwia2l3aSIsImtsYWFyYSIsImtsaWltYXgiLCJrbGltYXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia29kZSIsImtvanYiLCJrb29wYWwiLCJrcmFsaiIsImtyYXNoIiwia3Jpc3RhIiwia3Jvbm9zIiwia3R4Iiwia3VuZ2VuIiwia3VwcGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia3VyYWkiLCJsYWxhIiwibGFtb3VyIiwibGF0aW5hIiwibGVnZW5kIiwibGVuaXNhd2F5IiwibGlseSIsImxpbmRhIiwibGluZ3llZSIsImxpbnV4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc2EiLCJsaXNoYSIsImxpdHRhIiwibGl0dGxlYm95IiwibGl2ZXJwb28iLCJsaXllbiIsImxpeiIsImxpemEiLCJsb25lbHkiLCJsb25lbHlnYWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uZXdvbGYiLCJsb3BleiIsImxvcmRpZSIsImxvdmVieXRlIiwibHBoIiwibHVhcmJpYXNhIiwibHVjaWdub2wiLCJsdWxsYWJ5IiwibHVuYXRpYyIsImx1bnkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVwbyIsIm1hYyIsIm1hY2VzZ2wiLCJtYWRkIiwibWFpbG1hbiIsIm1hbGthdiIsIm1hbHIiLCJtYW1ha2lhbnMiLCJtYW1hdyIsIm1hbmFyaW1vdSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYW5hcmlzb3UiLCJtYXJhZG9uYSIsIm1hcmFrYW5hIiwibWFyY28iLCJtYXJpbGxpb24iLCJtYXJrIiwibWFyeSIsIm1hc3RlciIsIm1hdXJpbm8iLCJtYXgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWNhbGNvdGEiLCJtZWxhbmllIiwibWVsaW5kYSIsIm1lcGgiLCJtZXBoaXN0byIsIm1nIiwibWhqIiwibWh6IiwibWlnIiwibWlpbmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlrYSIsIm1pa2F2IiwibWlrZSIsIm1pa2VtY2dpaSIsIm1pa2tvIiwibWlrbWEiLCJtaW1tYSIsIm1pc3MiLCJtb2xhZG1pbiIsIm1vbmlrYXciLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ua2V5Ym95IiwibW9ucm9lIiwibW9uc3RvcCIsIm1vb2tzIiwibW9yZGVzaHVyIiwibXBkaWtlIiwibXJiYXRlIiwibXJiZWF1dHkiLCJtcmJsb20iLCJtcmJ4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1yamVlIiwibXJvIiwibXJ0YWJpenkiLCJtcngiLCJtcnh4IiwibXNkIiwibXUiLCJtdWltdWkiLCJtdXNhc2hpIiwibXVzYyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXNjZSIsIm11c2ljZ2FsIiwibXV0aSIsIm15Ym95IiwibXlzdHIiLCJteXRoaWMiLCJteXdpZmUiLCJuYWxsbGxsZSIsIm5hbmFzayIsIm5hdGFsaWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmF0Ym9ydGEiLCJuY3VidXMiLCJuZXV0cmlubyIsIm5pY2VndXkiLCJuaWNvIiwibmlrbGFzIiwibmltZmEiLCJuaW5vIiwibnVydWwiLCJvYml3YW5iaXAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2dyZSIsIm9saXZpYSIsIm9tZWdhIiwib25seSIsIm9yYWMiLCJvcmFjZSIsIm9yYW56enp6eiIsIm9yZ2FuemEiLCJvdXJsb3ZlIiwib3V0d29ybGQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0emFrZSIsIm94eWduIiwicGFsaWFkb2ciLCJwYXphcmFjIiwicGVybWFsb3NvIiwicGVycm96IiwicGVzc2FhciIsInBocmUiLCJwaHJlYWt5IiwicGloa2FsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpbmJhbGwiLCJwb2VzamUiLCJwb2lzb24iLCJwb29maWUiLCJwb3B5IiwicG93ZXJwYyIsInBwZXIiLCJwcmltZXJhIiwicHJpbWV0aW1lIiwicHJveHltYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2h5Y2hlIiwicHNpb25jb3JlIiwicHNpeGltb3UiLCJwc2l4aXNvdSIsInBzeWNob3NpcyIsInBzeWlkbGUiLCJwc3phYWgiLCJwdXBwZXRtIiwicHp6enoiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicXVhdHRybyIsInF1ZXN0aW9uIiwicmEiLCJyYWdpbyIsInJhZ25ldHRvIiwicmFpZGVuIiwicmFpbmRhbmNlIiwicmFpc3RsbiIsInJhbnUiLCJyYXNrYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYXVsIiwicmF5ZSIsInJlYXJ0dSIsInJlZCIsInJlZmxlY3QiLCJyaWJpY2EiLCJyaWNoYXJkIiwicmljayIsInJpZ28iLCJyaWt1dGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmlrdXhyIiwicml0YSIsInJpeCIsInJvYiIsInJva3UiLCJyb25hbGRvIiwicm9ud3JsIiwicm90aWNhbmFpIiwicnVnaWFkYSIsInJ1dGhsZXNzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhYWx1dCIsInNhbW1pIiwic2FuZCIsInNhdGFuaW5zIiwic2NoenNoIiwic2NvcnBpbiIsInNlYWxpbmsiLCJzZWFuIiwic2VjcmV0Iiwic2VycGVudG9yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZhbnQiLCJzZXRoaSIsInNleGJvbGVrIiwic2V4eW1hbiIsInNoYXJtbSIsInNoZWFyZXIiLCJzaGVrZWwiLCJzaGlvIiwic2hvcnR5cyIsInNocmVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZGV3YWxrIiwic2lsIiwic2lyZW4iLCJza2FyIiwic2tpbGwiLCJza3J1Iiwic2t5Iiwic2t5Z3VuIiwic2t5bGluayIsInNsYWt0YXJuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsYXNoIiwic2xnb24iLCJzbWFydGllcyIsInNtY2siLCJzbmFrZSIsInNuaWtlIiwic25vb3BnaXJsIiwic29kb21hIiwic29wb2NhbmkiLCJzb3JjZXJlc3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhY2ViYmwiLCJzcGFjZWR1bXAiLCJzcGFua2VyIiwic3Blcm1ib3kiLCJzcGlydG91bGkiLCJzcmsiLCJzdGF6enoiLCJzdGV2ZSIsInN0aW5nYSIsInN0aiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGpmIiwic3R1ZGVuaWNhIiwic3R1c3N5Iiwic3VleiIsInN1aG9qIiwic3VrdW4iLCJzdW5zb2xhIiwic3VyZmVyIiwic3V0ZXJhIiwic3ZlYXJpa2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3dlZXRpaSIsInN3ZWV0bGFkeSIsInN3ZWtsb3BpIiwic3dlcGlsb3QiLCJzd2l0Y2giLCJzeW5jcGhvcyIsInN6ZXJuIiwidGFrdW11cmEiLCJ0YWxsYXhsYyIsInRhbXBvbmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFyYWJhcyIsInRhdGFubyIsInRhdG8iLCJ0ZW5uaXMiLCJ0ZW54IiwidGVyZW5jZSIsInRlcmt1a3VyIiwidGVybyIsInRoZWZveCIsInRoZXNpbnQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXIiLCJ0aW1ld2FsayIsInRtaGQiLCJ0bnhmY2siLCJ0byIsInRvbWloa2kiLCJ0b21teSIsInRvcG8iLCJ0cml1bXBoIiwidHJ1c3RtZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0dW5nYXUiLCJ0dXBhYyIsInR1cmJvenp6eiIsInR1cmluZyIsInR2cmRqYXZhIiwidHlzbiIsInVuaWNyb24iLCJ1b2ZmIiwidXB0aW1lciIsInV0b3BpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWRlciIsInZhaXNtaSIsInZhamplIiwidmFuZGEiLCJ2YXJqbyIsInZhc3MiLCJ2ZW50byIsInZlbnVzZ3V5IiwidmVydGllIiwidmlhZ2FyYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWNpb3VzIiwidmlkeHh4IiwidmlyZXgiLCJ2b2RhZm9uZSIsInZvbmUiLCJ2cmduaWUiLCJ2dXViZWliZSIsIndhbmRlcmVyIiwid2FycnIiLCJ3YXNhYmJveSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWViZWUiLCJ3ZWxsdSIsIndlbmR5Iiwid2hpc2tleSIsIndpbGxnb29kIiwid2luZyIsIndpbm55Iiwid2tuaWdodCIsIndsbHkiLCJ3b2xmbWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvdyIsIndwIiwieGFyYXNvdSIsInh0cmVtZSIsInh4eCIsInh6b25lIiwieWFrenIiLCJ5YW5nIiwieWFzaHkiLCJ5YXNpbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZW55ZW4iLCJ5a2J1ZyIsInlvZ2llYmVhciIsInphaSIsInpmc3RyIiwiemluaiIsInppenUiLCJ6dmV6ZGEiLCJ6d2ltb3UiLCJ6d2lzb3UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiendzaWV3IiwiendzaWV3YWxlIik7DQogDQpteSAkaXJjbmFtZSA9ICRyaXJjbmFtZVtyYW5kIHNjYWxhciBAcmlyY25hbWVdOw0KIA0KIyMgbXkgQHJyZWFsbmFtZSA9ICgiAzQsMVsgUlNUIFNlY3VyaXR5IFRlYW0gXQIiLA0KIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgM0LDEgHy8hXB8gUlNUIFNlY3VyaXR5IFRlYW0gHy8hXB8gAwMiLA0KIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgMDMTIsMR88Ly8vAwM4LDEvLy8DAzQsMSMjIz4fAyIsDQojIyAgICAgICAgICAgICAgICAgICIDMiwxLS0tPT09IAM0LDECIFJTVCBTZWN1cml0eSBUZWFtIAMyLDE9PT0tLS0iKTsNCiMjIGNob3AgKG15ICRyZWFsbmFtZSA9ICRycmVhbG5hbWVbcmFuZCBzY2FsYXIgQHJyZWFsbmFtZV0pOw0KIA0KY2hvcCAobXkgJHJlYWxuYW1lID0gJHJpcmNuYW1lW3JhbmQgc2NhbGFyIEByaXJjbmFtZV0pOw0KIA0KIyMgbXkgQG5pY2tuYW1lID0gKCJSU1RbVV0iKTsNCiMjIG15ICRuaWNrID0kbmlja25hbWVbcmFuZCBzY2FsYXIgQG5pY2tuYW1lXTsNCiANCm15ICRuaWNrID0kcmlyY25hbWVbcmFuZCBzY2FsYXIgQHJpcmNuYW1lXTsNCiANCiRzZXJ2ZXIgPSAgJzE2Ny4xMTQuODQuMTA5JyB1bmxlc3MgJHNlcnZlcjsNCm15ICRwb3J0ID0gJzY2NjMnOw0KIA0KbXkgJGxpbmFzX21heD0nOCc7DQpteSAkc2xlZXA9JzUnOw0KIA0KbXkgJGhvbWVkaXIgPSAiL3RtcCI7DQpteSAkdmVyc2lvbiA9ICdERG9TIFBlcmwgQm90IHYxLjAnOw0KIA0KbXkgQGFkbWlucyA9ICgiQ2FtZWxvdCIsIkZsb3JpblJvU2VjIik7DQpteSBAaG9zdGF1dGggPSAoIioiKTsNCm15IEBjaGFubmVscyA9ICgiI1BpcmF0ZXMiKTsNCiANCm15ICRwYWNvdGVzID0gMTsNCiANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyBbIFN0b3AgRWRpdGluZyBpZiB5b3UgZG9udCBrbm93IHdoYXQgYXJlIHlvdSBkb2luZy4gXSAjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiANCiRTSUd7J0lOVCd9ID0gJ0lHTk9SRSc7DQokU0lHeydIVVAnfSA9ICdJR05PUkUnOw0KJFNJR3snVEVSTSd9ID0gJ0lHTk9SRSc7DQokU0lHeydDSExEJ30gPSAnSUdOT1JFJzsNCiRTSUd7J1BTJ30gPSAnSUdOT1JFJzsNCiANCnVzZSBTb2NrZXQ7DQp1c2UgSU86OlNvY2tldDsNCnVzZSBJTzo6U29ja2V0OjpJTkVUOw0KdXNlIElPOjpTZWxlY3Q7DQogDQpjaGRpcigiJGhvbWVkaXIiKTsNCiANCiRzZXJ2ZXI9IiRBUkdWWzBdIiBpZiAkQVJHVlswXTsNCiQwPSIkcHJvY2VzcyIuIlwwIngxNjs7DQpteSAkcGlkPWZvcms7DQpleGl0IGlmICRwaWQ7DQpkaWUgIkNhbid0IGZvcmsgaW4gYmFja2dyb3VuZDogJCEiIHVubGVzcyBkZWZpbmVkKCRwaWQpOw0KIA0Kb3VyICVpcmNfc2VydmVyczsNCm91ciAlRENDOw0KbXkgJGRjY19zZWwgPSBuZXcgSU86OlNlbGVjdC0+bmV3KCk7DQokc2VsX2NsaWVudGUgPSBJTzo6U2VsZWN0LT5uZXcoKTsNCnN1YiBzZW5kcmF3IHsNCiAgaWYgKCQjXyA9PSAnMScpIHsNCiAgICBteSAkc29ja2V0ID0gJF9bMF07DQogICAgcHJpbnQgJHNvY2tldCAiJF9bMV1cbiI7DQogIH0gZWxzZSB7DQogICAgcHJpbnQgJElSQ19jdXJfc29ja2V0ICIkX1swXVxuIjsNCiAgfQ0KfQ0KIA0Kc3ViIGdldHN0b3JlICgkJCkNCnsNCiAgbXkgJHVybCA9IHNoaWZ0Ow0KICBteSAkZmlsZSA9IHNoaWZ0Ow0KICAkaHR0cF9zdHJlYW1fb3V0ID0gMTsNCiAgb3BlbihHRVRfT1VURklMRSwgIj4gJGZpbGUiKTsNCiAgJWh0dHBfbG9vcF9jaGVjayA9ICgpOw0KICBfZ2V0KCR1cmwpOw0KICBjbG9zZSBHRVRfT1VURklMRTsNCiAgcmV0dXJuICRtYWluOjpodHRwX2dldF9yZXN1bHQ7DQp9DQogDQpzdWIgX2dldA0Kew0KICBteSAkdXJsID0gc2hpZnQ7DQogIG15ICRwcm94eSA9ICIiOw0KICBncmVwIHsobGMoJF8pIGVxICJodHRwX3Byb3h5IikgJiYgKCRwcm94eSA9ICRFTlZ7JF99KX0ga2V5cyAlRU5WOw0KICBpZiAoKCRwcm94eSBlcSAiIikgJiYgJHVybCA9fiBtLF5odHRwOi8vKFteLzpdKykoPzo6KFxkKykpPygvXFMqKT8kLCkgew0KICAgIG15ICRob3N0ID0gJDE7DQogICAgbXkgJHBvcnQgPSAkMiB8fCA4MDsNCiAgICBteSAkcGF0aCA9ICQzOw0KICAgICRwYXRoID0gIi8iIHVubGVzcyBkZWZpbmVkKCRwYXRoKTsNCiAgICByZXR1cm4gX3RyaXZpYWxfaHR0cF9nZXQoJGhvc3QsICRwb3J0LCAkcGF0aCk7DQogIH0gZWxzaWYgKCRwcm94eSA9fiBtLF5odHRwOi8vKFteLzpdKyk6KFxkKykoL1xTKik/JCwpIHsNCiAgICBteSAkaG9zdCA9ICQxOw0KICAgIG15ICRwb3J0ID0gJDI7DQogICAgbXkgJHBhdGggPSAkdXJsOw0KICAgIHJldHVybiBfdHJpdmlhbF9odHRwX2dldCgkaG9zdCwgJHBvcnQsICRwYXRoKTsNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4gdW5kZWY7DQogIH0NCn0NCiANCiANCnN1YiBfdHJpdmlhbF9odHRwX2dldA0Kew0KICBteSgkaG9zdCwgJHBvcnQsICRwYXRoKSA9IEBfOw0KICBteSgkQUdFTlQsICRWRVJTSU9OLCAkcCk7DQogICRBR0VOVCA9ICJnZXQtbWluaW1hbCI7DQogICRWRVJTSU9OID0gIjIwMDAwMTE4IjsNCiAgJHBhdGggPX4gcy8gLyUyMC9nOw0KIA0KICByZXF1aXJlIElPOjpTb2NrZXQ7DQogIGxvY2FsKCReVykgPSAwOw0KICBteSAkc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVlclBvcnQgPT4gJHBvcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvICAgPT4gJ3RjcCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgID0+IDYwKSB8fCByZXR1cm47DQogICRzb2NrLT5hdXRvZmx1c2g7DQogIG15ICRuZXRsb2MgPSAkaG9zdDsNCiAgJG5ldGxvYyAuPSAiOiRwb3J0IiBpZiAkcG9ydCAhPSA4MDsNCiAgbXkgJHJlcXVlc3QgPSAiR0VUICRwYXRoIEhUVFAvMS4wXDAxNVwwMTIiDQogICAgICAgICAgICAgIC4gIkhvc3Q6ICRuZXRsb2NcMDE1XDAxMiINCiAgICAgICAgICAgICAgLiAiVXNlci1BZ2VudDogJEFHRU5ULyRWRVJTSU9OL3VcMDE1XDAxMiI7DQogICRyZXF1ZXN0IC49ICJQcmFnbWE6IG5vLWNhY2hlXDAxNVwwMTIiIGlmICgkbWFpbjo6aHR0cF9ub19jYWNoZSk7DQogICRyZXF1ZXN0IC49ICJcMDE1XDAxMiI7DQogIHByaW50ICRzb2NrICRyZXF1ZXN0Ow0KIA0KICBteSAkYnVmID0gIiI7DQogIG15ICRuOw0KICBteSAkYjEgPSAiIjsNCiAgd2hpbGUgKCRuID0gc3lzcmVhZCgkc29jaywgJGJ1ZiwgOCoxMDI0LCBsZW5ndGgoJGJ1ZikpKSB7DQogICAgaWYgKCRiMSBlcSAiIikgew0KICAgICAgJGIxID0gJGJ1ZjsNCiAgICAgICRidWYgPX4gcy8uKz9cMDE1P1wwMTJcMDE1P1wwMTIvL3M7DQogICAgfQ0KICAgIGlmICgkaHR0cF9zdHJlYW1fb3V0KSB7IHByaW50IEdFVF9PVVRGSUxFICRidWY7ICRidWYgPSAiIjsgfQ0KICB9DQogIHJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCgkbik7DQogICRtYWluOjpodHRwX2dldF9yZXN1bHQgPSAyMDA7DQogIGlmICgkYjEgPX4gbSxeSFRUUC9cZCtcLlxkK1xzKyhcZCspW15cMDEyXSpcMDEyLCkgew0KICAgICRtYWluOjpodHRwX2dldF9yZXN1bHQgPSAkMTsNCiAgICBpZiAoJG1haW46Omh0dHBfZ2V0X3Jlc3VsdCA9fiAvXjMwWzEyMzddLyAmJiAkYjEgPX4gL1wwMTJMb2NhdGlvbjpccyooXFMrKS8pIHsNCiAgICAgIG15ICR1cmwgPSAkMTsNCiAgICAgIHJldHVybiB1bmRlZiBpZiAkaHR0cF9sb29wX2NoZWNreyR1cmx9Kys7DQogICAgICByZXR1cm4gX2dldCgkdXJsKTsNCiAgICB9DQogICAgcmV0dXJuIHVuZGVmIHVubGVzcyAkbWFpbjo6aHR0cF9nZXRfcmVzdWx0ID1+IC9eMi87DQogIH0NCiANCiAgcmV0dXJuICRidWY7DQp9DQogDQpzdWIgY29uZWN0YXIgew0KICBteSAkbWV1bmljayA9ICRfWzBdOw0KICBteSAkc2VydmVyX2NvbiA9ICRfWzFdOw0KICBteSAkcG9ydF9jb24gPSAkX1syXTsNCiAgbXkgJElSQ19zb2NrZXQgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUHJvdG89PiJ0Y3AiLCBQZWVyQWRkcj0+IiRzZXJ2ZXJfY29uIiwNCiAgUGVlclBvcnQ9PiRwb3J0X2Nvbikgb3IgcmV0dXJuKDEpOw0KICBpZiAoZGVmaW5lZCgkSVJDX3NvY2tldCkpIHsNCiAgICAkSVJDX2N1cl9zb2NrZXQgPSAkSVJDX3NvY2tldDsNCiAgICAkSVJDX3NvY2tldC0+YXV0b2ZsdXNoKDEpOw0KICAgICRzZWxfY2xpZW50ZS0+YWRkKCRJUkNfc29ja2V0KTsNCiAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnaG9zdCd9ID0gIiRzZXJ2ZXJfY29uIjsNCiAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsncG9ydCd9ID0gIiRwb3J0X2NvbiI7DQogICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVuaWNrOw0KICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydtZXVpcCd9ID0gJElSQ19zb2NrZXQtPnNvY2tob3N0Ow0KICAgIG5pY2soIiRtZXVuaWNrIik7DQogICAgc2VuZHJhdygiVVNFUiAkaXJjbmFtZSAiLiRJUkNfc29ja2V0LT5zb2NraG9zdC4iICRzZXJ2ZXJfY29uIDokcmVhbG5hbWUiKTsNCiAgICBzbGVlcCAxOw0KICB9DQp9DQogDQpteSAkbGluZV90ZW1wOw0Kd2hpbGUoIDEgKSB7DQogIHdoaWxlICghKGtleXMoJWlyY19zZXJ2ZXJzKSkpIHsgY29uZWN0YXIoIiRuaWNrIiwgIiRzZXJ2ZXIiLCAiJHBvcnQiKTsgfQ0KICBkZWxldGUoJGlyY19zZXJ2ZXJzeycnfSkgaWYgKGRlZmluZWQoJGlyY19zZXJ2ZXJzeycnfSkpOw0KICBteSBAcmVhZHkgPSAkc2VsX2NsaWVudGUtPmNhbl9yZWFkKDApOw0KICBuZXh0IHVubGVzcyhAcmVhZHkpOw0KICBmb3JlYWNoICRmaCAoQHJlYWR5KSB7DQogICAgJElSQ19jdXJfc29ja2V0ID0gJGZoOw0KICAgICRtZXVuaWNrID0gJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfTsNCiAgICAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgNDA5Nik7DQogICAgaWYgKCRucmVhZCA9PSAwKSB7DQogICAgICAkc2VsX2NsaWVudGUtPnJlbW92ZSgkZmgpOw0KICAgICAgJGZoLT5jbG9zZTsNCiAgICAgIGRlbGV0ZSgkaXJjX3NlcnZlcnN7JGZofSk7DQogICAgfQ0KICAgIEBsaW5lcyA9IHNwbGl0ICgvXG4vLCAkbXNnKTsNCiAgICBmb3IobXkgJGM9MDsgJGM8PSAkI2xpbmVzOyAkYysrKSB7DQogICAgICAkbGluZSA9ICRsaW5lc1skY107DQogICAgICAkbGluZT0kbGluZV90ZW1wLiRsaW5lIGlmICgkbGluZV90ZW1wKTsNCiAgICAgICRsaW5lX3RlbXA9Jyc7DQogICAgICAkbGluZSA9fiBzL1xyJC8vOw0KICAgICAgdW5sZXNzICgkYyA9PSAkI2xpbmVzKSB7DQogICAgICAgIHBhcnNlKCIkbGluZSIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICBpZiAoJCNsaW5lcyA9PSAwKSB7DQogICAgICAgICAgcGFyc2UoIiRsaW5lIik7DQogICAgICAgICAgfSBlbHNpZiAoJGxpbmVzWyRjXSA9fiAvXHIkLykgew0KICAgICAgICAgIHBhcnNlKCIkbGluZSIpOw0KICAgICAgICAgIH0gZWxzaWYgKCRsaW5lID1+IC9eKFxTKykgTk9USUNFIEFVVEggOlwqXCpcKi8pIHsNCiAgICAgICAgICBwYXJzZSgiJGxpbmUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICRsaW5lX3RlbXAgPSAkbGluZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0KIA0Kc3ViIHBhcnNlIHsNCiAgbXkgJHNlcnZhcmcgPSBzaGlmdDsNCiAgaWYgKCRzZXJ2YXJnID1+IC9eUElORyBcOiguKikvKSB7DQogICAgc2VuZHJhdygiUE9ORyA6JDEiKTsNCiAgICB9IGVsc2lmICgkc2VydmFyZyA9fiAvXlw6KC4rPylcISguKz8pXEAoLis/KSBQUklWTVNHICguKz8pIFw6KC4rKS8pIHsNCiAgICBteSAkcG49JDE7IG15ICRob3N0bWFzaz0gJDM7IG15ICRvbmRlID0gJDQ7IG15ICRhcmdzID0gJDU7DQogICAgaWYgKCRhcmdzID1+IC9eXDAwMVZFUlNJT05cMDAxJC8pIHsNCiAgICAgICAgIG5vdGljZSgiJHBuIiwgIiIuJHZlcnMuIiIpOw0KICAgIH0NCiAgICAgICAgI2lmIChncmVwIHskXyA9fiAvXlxRJGhvc3RtYXNrXEUkL2kgfSBAaG9zdGF1dGgpIHsNCiAgICBpZiAoZ3JlcCB7JF8gPX4gL15cUSRwblxFJC9pIH0gQGFkbWlucyApIHsNCiAgICBpZiAoJG9uZGUgZXEgIiRtZXVuaWNrIil7DQogICAgc2hlbGwoIiRwbiIsICIkYXJncyIpOw0KICB9DQogIGlmICgkYXJncyA9fiAvXihcUSRtZXVuaWNrXEV8XC5waXJhdGVzKVxzKyguKikvICkgew0KICAgIG15ICRuYXRyaXggPSAkMTsNCiAgICBteSAkYXJnID0gJDI7DQogICAgaWYgKCRhcmcgPX4gL15cISguKikvKSB7DQogICAgICBpcmNhc2UoIiRwbiIsIiRvbmRlIiwiJDEiKTsNCiAgICAgIH0gZWxzaWYgKCRhcmcgPX4gL15cQCguKikvKSB7DQogICAgICAkb25kZXAgPSAkb25kZTsNCiAgICAgICRvbmRlcCA9ICRwbiBpZiAkb25kZSBlcSAkbWV1bmljazsNCiAgICAgIGJmdW5jKCIkb25kZXAiLCIkMSIpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgIHNoZWxsKCIkb25kZSIsICIkYXJnIik7DQogICAgfQ0KICB9DQp9DQp9DQojfQ0KIA0KZWxzaWYgKCRzZXJ2YXJnID1+IC9eXDooLis/KVwhKC4rPylcQCguKz8pXHMrTklDS1xzK1w6KFxTKykvaSkgew0KICBpZiAobGMoJDEpIGVxIGxjKCRtZXVuaWNrKSkgew0KICAkbWV1bmljaz0kNDsNCiAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVuaWNrOw0KICB9DQogIH0gZWxzaWYgKCRzZXJ2YXJnID1+IG0vXlw6KC4rPylccys0MzMvaSkgew0KICBuaWNrKCIkbWV1bmljay0iLmludCByYW5kKDk5OTkpKTsNCiAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzAwMVxzKyhcUyspXHMvaSkgew0KICAkbWV1bmljayA9ICQyOw0KICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7DQogICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydub21lJ30gPSAiJDEiOw0KICBmb3JlYWNoIG15ICRjYW5hbCAoQGNoYW5uZWxzKSB7DQogICAgICAgIHNlbmRyYXcoIk1PREUgJG5pY2sgK3giKTsNCiAgICBzZW5kcmF3KCJKT0lOICRjYW5hbCIpOw0KICAgICAgICBzZW5kcmF3KCJQUklWTVNHICRjYW5hbCA6AgM0LDEgW1JTVCBQZXJsIEJvdF0CIAM5LDFIZWxsbywgSWBtIFJlYWR5IFRvIFNlcnZlIC4uLiADAiIpOw0KfQ0KfQ0KfQ0KIA0Kc3ViIGJmdW5jIHsNCm15ICRwcmludGwgPSAkX1swXTsNCm15ICRmdW5jYXJnID0gJF9bMV07DQogIGlmIChteSAkcGlkID0gZm9yaykgew0KICB3YWl0cGlkKCRwaWQsIDApOw0KICB9IGVsc2Ugew0KICBpZiAoZm9yaykgew0KICBleGl0Ow0KICB9IGVsc2Ugew0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyBbIEhlbHAgTW9kdWxlIF0gIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIA0KaWYgKCRmdW5jYXJnID1+IC9eaGVscC8pIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMT09PT09PT09PT09PT09PT09PT09PT09IAMCIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbSGVscF0CIAM5LDFERG9TIFBlcmxCb3QgTWFpbiBIZWxwOiAgAwIiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMT09PT09PT09PT09PT09PT09PT09PT09IAMCIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbSGVscF0CIAM5LDEucGlyYXRlcyADMTJAAwM5LDFzeXN0ZW0gICAgICAgICAgICAgIAMiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMS5waXJhdGVzIAMxMkADAzksMXZlcnNpb24gICAgICAgICAgICAgAyIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0hlbHBdAiADOSwxLnBpcmF0ZXMgAzEyQAMDOSwxY2hhbm5lbCAgICAgICAgICAgICADIik7ICAgICAgDQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbSGVscF0CIAM5LDEucGlyYXRlcyADMTJAAwM5LDFmbG9vZCAgICAgICAgICAgICAgIAMiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMS5waXJhdGVzIAMxMkADAzksMXV0aWxzICAgICAgICAgICAgICAgAyIpOyAgICAgIA0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0hlbHBdAiADOSwxPT09PT09PT09PT09PT09PT09PT09PT0gAwIiKTsNCn0NCiANCmlmICgkZnVuY2FyZyA9fiAvXnN5c3RlbS8pIHsNCiAgICAgICAgJHVwdGltZT1gdXB0aW1lYDsNCiAgICAgICAgJG93bmQ9YHB3ZGA7DQogICAgICAgICRpZD1gaWRgOw0KICAgICAgICAkdW5hbWU9YHVuYW1lIC1zcnBgOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDE9PT09PT09PT09PT09PT09PT09IAMCIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbU3lzdGVtXQIgAzksMUJvdCBDb25maWd1cmF0aW9uOiAgAwIiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtTeXN0ZW1dAiADOSwxPT09PT09PT09PT09PT09PT09PSADAiIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDEqU2VydmVyICAgICAgIDoDIAIDMTIkc2VydmVyICIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDEqUG9ydCAgICAgICAgIDoDIAIDMTIkcG9ydCAiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtTeXN0ZW1dAiADOSwxKkNoYW5uZWxzICAgICA6AyACAzEyQGNoYW5uZWxzICIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDEqdW5hbWUgLWEgICAgIDoDIAIDMTIkdW5hbWUgIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbU3lzdGVtXQIgAzksMSp1cHRpbWUgICAgICAgOgMgAgMxMiR1cHRpbWUgIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbU3lzdGVtXQIgAzksMSpGYWtlUHJvY2VzcyAgOgMgAgMxMiRwcm9jZXNzICIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDEqUHJvY2Vzc1BJRCAgIDoDIAIDMTIkJCAiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtTeXN0ZW1dAiADOSwxKklEICAgICAgICAgICA6AyACAzEyJGlkICIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1N5c3RlbV0CIAM5LDEqT3duIERpciAgICAgIDoDIAIDMTIkb3duZCAiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtTeXN0ZW1dAiADOSwxPT09PT09PT09PT09PT09PT09PSADAiIpOw0KfQ0KIA0KaWYgKCRmdW5jYXJnID1+IC9edmVyc2lvbi8pew0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1ZlcnNpb25dAiADOSwxPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSADAiIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1ZlcnNpb25dAiADOSwxQm90IEluZm9ybWF0aW9uczogICAgICAgICAgICAgICAgICADAiIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1ZlcnNpb25dAiADOSwxPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSADAiIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1ZlcnNpb25dAiADOSwxKkJvdCBWZXJzaW9uIDogAzEyJHZlcnNpb24gICADIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbVmVyc2lvbl0CIAM5LDEqQm90IENyZWF0b3IgOiADMTJERG9TICAgICAgICAgICAgIAMiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtW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PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gAwIiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMUREb1MgUGVybEJvdCBVdGlscyBIZWxwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICADAiIpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0hlbHBdAiADOSwxPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gAwIiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMS5waXJhdGVzIAMxMkADAzksMWNiYWNrIDxpcD4gPHBvcnQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAyIpOyAgIA0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0hlbHBdAiADOSwxLnBpcmF0ZXMgAzEyQAMDOSwxZG93bmxvYWQgPHVybCtwYXRoPiA8ZmlsZT4gICAgICAgICAgICAgICAgICAgICADIik7ICAgDQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbSGVscF0CIAM5LDEucGlyYXRlcyADMTJAAwM5LDFtYWlsIDxzdWJqZWN0PiA8c2VuZGVyPiA8cmVjaXBpZW50PiA8bWVzc2FnZT4gIAMiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMS5waXJhdGVzIAMxMkADAzksMWRucyA8aXA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAyIpOyAgIA0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0hlbHBdAiADOSwxLnBpcmF0ZXMgAzEyQAMDOSwxcG9ydCA8aXA+IDxwb3J0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICADIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbSGVscF0CIAM5LDEucGlyYXRlcyADMTJAAwM5LDFwb3J0c2NhbiA8aXA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAMiKTsgICANCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMS5waXJhdGVzIHB3ZCAoZm9yIGV4YW1wbGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAMiKTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIZWxwXQIgAzksMT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAMCIik7DQp9DQogDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyBbIEZ1bmN0aW9ucyBdICMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogDQppZiAoJGZ1bmNhcmcgPX4gL15kaWUvKSB7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUVVJVCA6Iik7DQogICAgICAgICRraWxsZCA9ICJraWxsIC05ICIuZm9yazsNCiAgICAgICAgc3lzdGVtIChgJGtpbGxkYCk7DQp9DQojIyMjIyMjIyMjIyAgICANCmlmICgkZnVuY2FyZyA9fiAvXmpvaW4gKC4qKS8pIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJKT0lOICIuJDEpOw0KfQ0KIA0KaWYgKCRmdW5jYXJnID1+IC9ecGFydCAoLiopLykgew0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBBUlQgIi4kMSk7DQp9DQojIyMjIyMjIyMjIw0KaWYgKCRmdW5jYXJnID1+IC9ecG9ydHNjYW4gKC4qKS8pIHsNCiAgbXkgJGhvc3RpcD0iJDEiOw0KICBteSBAcG9ydGFzPSgiMSIsIjciLCI5IiwiMTQiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI1IiwiNTMiLCI4MCIsIjg4IiwiMTEwIiwiMTEyIiwiMTEzIiwiMTM3IiwiMTQzIiwiMTQ1IiwiMjIyIiwiMzMzIiwiNDA1IiwiNDQzIiwiNDQ0IiwiNDQ1IiwiNTEyIiwiNTg3IiwiNjE2IiwiNjY2IiwiOTkzIiwiOTk1IiwiMTAyNCIsIjEwMjUiLCIxMDgwIiwiMTE0NCIsIjExNTYiLCIxMjIyIiwiMTIzMCIsIjEzMzciLCIxMzQ4IiwiMTYyOCIsIjE2NDEiLCIxNzIwIiwiMTcyMyIsIjE3NjMiLCIxOTgzIiwiMTk4NCIsIjE5ODUiLCIxOTg3IiwiMTk4OCIsIjE5OTAiLCIxOTk0IiwiMjAwNSIsIjIwMjAiLCIyMTIxIiwiMjIwMCIsIjIyMjIiLCIyMjIzIiwiMjM0NSIsIjIzNjAiLCIyNTAwIiwiMjcyNyIsIjMxMzAiLCIzMTI4IiwiMzEzNyIsIjMxMjkiLCIzMzAzIiwiMzMwNiIsIjMzMzMiLCIzMzg5IiwiNDAwMCIsIjQwMDEiLCI0NDcxIiwiNDg3NyIsIjUyNTIiLCI1NTIyIiwiNTU1MyIsIjU1NTQiLCI1NjQyIiwiNTc3NyIsIjU4MDAiLCI1ODAxIiwiNTkwMCIsIjU5MDEiLCI2MDYyIiwiNjU1MCIsIjY1MjIiLCI2NjAwIiwiNjYyMiIsIjY2NjIiLCI2NjY1IiwiNjY2NiIsIjY2NjciLCI2OTY5IiwiNzAwMCIsIjc5NzkiLCI4MDA4IiwiODA4MCIsIjgwODEiLCI4MDgyIiwiODE4MSIsIjgyNDYiLCI4NDQzIiwiODUyMCIsIjg3ODciLCI4ODU1IiwiODg4MCIsIjg5ODkiLCI5ODU1IiwiOTg2NSIsIjk5OTciLCI5OTk5IiwiMTAwMDAiLCIxMDAwMSIsIjEwMDEwIiwiMTAyMjIiLCIxMTE3MCIsIjExMzA2IiwiMTE0NDQiLCIxMjI0MSIsIjEyMzEyIiwiMTQ1MzQiLCIxNDU2OCIsIjE1OTUxIiwiMTcyNzIiLCIxOTYzNSIsIjE5OTA2IiwiMTk5MDAiLCIyMDAwMCIsIjIxNDEyIiwiMjE0NDMiLCIyMTIwNSIsIjIyMDIyIiwiMzA5OTkiLCIzMTMzNiIsIjMxMzM3IiwiMzI3NjgiLCIzMzE4MCIsIjM1NjUxIiwiMzY2NjYiLCIzNzk5OCIsIjQxMTE0IiwiNDEyMTUiLCI0NDU0NCIsIjQ1MDU1IiwiNDU1NTUiLCI0NTY3OCIsIjUxMTE0IiwiNTEyNDciLCI1MTIzNCIsIjU1MDY2IiwiNTU1NTUiLCI2NTExNCIsIjY1MTU2IiwiNjUxMjAiLCI2NTQxMCIsIjY1NTAwIiwiNjU1MDEiLCI2NTUyMyIsIjY1NTMzIik7DQogIG15IChAYWJlcnRhLCAlcG9ydGFfYmFubmVyKTsNCiAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtQb3J0U2Nhbl0CIAM5LDFTY2FubmluZyBmb3Igb3BlbiBwb3J0cyBvbiADMTIiLiQxLiIgAzksMXN0YXJ0ZWQuIAMiKTsNCiAgZm9yZWFjaCBteSAkcG9ydGEgKEBwb3J0YXMpICB7DQogICAgbXkgJHNjYW5zb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJBZGRyID0+ICRob3N0aXAsIFBlZXJQb3J0ID0+ICRwb3J0YSwgUHJvdG8gPT4gJ3RjcCcsIFRpbWVvdXQgPT4gNCk7DQogICAgaWYgKCRzY2Fuc29jaykgew0KICAgICAgcHVzaCAoQGFiZXJ0YSwgJHBvcnRhKTsNCiAgICAgICRzY2Fuc29jay0+Y2xvc2U7DQogICAgfQ0KICB9DQogIGlmIChAYWJlcnRhKSB7DQogICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtQb3J0U2Nhbl0CIAM5LDFPcGVuIHBvcnRzIGZvdW5kOiADMTJAYWJlcnRhIAMiKTsNCiAgICB9IGVsc2Ugew0KICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbUG9ydFNjYW5dAiADOSwxTm8gb3BlbiBwb3J0cyBmb3VuZC4gAyIpOw0KICB9DQp9DQojIyMjIyMjIyMjIyMjIw0KaWYgKCRmdW5jYXJnID1+IC9eZG93bmxvYWRccysoLiopXHMrKC4qKS8pIHsNCiAgICAgICAgZ2V0c3RvcmUoIiQxIiwgIiQyIik7DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbRG93bmxvYWRdAiADOSwxRG93bmxvYWRlZCB0aGUgZmlsZTogAzEyJDIgAzksMWZyb20gAzEyJDEgAyIpOw0KfQ0KIyMjIyMjIyMjIyMjIyMNCmlmICgkZnVuY2FyZyA9fiAvXmRuc1xzKyguKikvKXsNCiAgICAgICAgbXkgJG5za3UgPSAkMTsNCiAgICAgICAgJG15ZG5zID0gaW5ldF9udG9hKGluZXRfYXRvbigkbnNrdSkpOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW0ROU10CIAM5LDFSZXNvbHZlZDogAzEyJG5za3UgAzksMXRvIAMxMiRteWRucyADIik7DQp9DQojIyMjIyMjIyMjIyMjIw0KaWYgKCRmdW5jYXJnPX4gL15wb3J0XHMrKC4qPylccysoLiopLyApIHsNCiAgICAgICAgbXkgJGhvc3RpcD0gIiQxIjsNCiAgICAgICAgbXkgJHBvcnRzYz0gIiQyIjsNCiAgICAgICAgbXkgJHNjYW5zb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJBZGRyID0+ICRob3N0aXAsIFBlZXJQb3J0ID0+ICRwb3J0c2MsIFByb3RvID0+J3RjcCcsIFRpbWVvdXQgPT4gNyk7DQogICAgICAgIGlmICgkc2NhbnNvY2spIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtQT1JUXQIgAzksMUNvbm5lY3Rpb24gdG8gAzEyJGhvc3RpcAM5LDE6AzEyJHBvcnRzYyADOSwxaXMgAzEyQWNjZXB0ZWQuIAMiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtQT1JUXQIgAzksMUNvbm5lY3Rpb24gdG8gAzEyJGhvc3RpcAM5LDE6AzEyJHBvcnRzYyADOSwxaXMgAzRSZWZ1c2VkLiADIik7DQogICAgICAgIH0NCn0NCiMjIyMjIyMjIyMjIyMjDQppZiAoJGZ1bmNhcmcgPX4gL15hdGFja1xzKyguKilccysoXGQrKVxzKyhcZCspLykgew0KICAgIHJldHVybiB1bmxlc3MgJHBhY290ZXM7DQogICAgc29ja2V0KFRyMHgsIFBGX0lORVQsIFNPQ0tfREdSQU0sIDE3KTsNCiAgICBteSAkYWx2bz1pbmV0X2F0b24oIiQxIik7DQogICAgbXkgJHBvcnRhID0gIiQyIjsNCiAgICBteSAkZHRpbWUgPSAiJDMiOw0KICAgIG15ICRwYWNvdGU7DQogICAgbXkgJHBhY290ZXNlOw0KICAgICAgICBteSAkc2l6ZSA9IDA7DQogICAgbXkgJGZpbSA9IHRpbWUgKyAkZHRpbWU7DQogICAgbXkgJHBhY290YSA9IDE7DQogICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFt1ZHBmbG9vZC1jYW1lbG90XQIgAzksMUF0dGFja2luZyADMTIiLiQxLiIgAzksMU9uIFBvcnQgAzEyIi4kcG9ydGEuIiADOSwxZm9yIAMxMiIuJGR0aW1lLiIgAzksMXNlY29uZHMuIAMiKTsNCiAgICAgICAgd2hpbGUgKCgkcGFjb3RhID09ICIxIikgJiYgKCRwYWNvdGVzID09ICIxIikpIHsNCiAgICAgICAgICAgICRwYWNvdGEgPSAwIGlmICgodGltZSA+PSAkZmltKSAmJiAoJGR0aW1lICE9ICIwIikpOw0KICAgICAgICAgICAgJHBhY290ZSA9ICRzaXplID8gJHNpemUgOiBpbnQocmFuZCgxNTAwLTY0KSs2NCkgOw0KICAgICAgICAgICAgJHBvcnRhID0gaW50KHJhbmQgNjU1MDApICsxIGlmICgkcG9ydGEgPT0gIjAiKTsNCiAgICAgICAgICAgICNzZW5kKFRyMHgsIDAsICRwYWNvdGUsIHNvY2thZGRyX2luKCRwb3J0YSwgJGFsdm8pKTsNCiAgICAgICAgICAgIHNlbmQoVHIweCwgcGFjaygiYSRwYWNvdGUiLCJUcjB4IiksIDAsIHBhY2tfc29ja2FkZHJfaW4oJHBvcnRhLCAkYWx2bykpOw0KICAgICAgICAgICAgfQ0KICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSB1ZHBmbG9vZC1jYW1lbG90AiADOSwxYXR0YWNrIGZvciADMTIiLiQxLiIgAzksMWZpbmlzaGVkIGluIAMxMiIuJGR0aW1lLiIgAzksMXNlY29uZHMDOSwxLiADIik7DQp9DQojIyMjIyMjIyMjIyMjIw0KaWYgKCRmdW5jYXJnID1+IC9edWRwMlxzKyguKilccysoXGQrKVxzKyhcZCspLykgew0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1VEUC0yIERET1NdAiADOSwxQXR0YWNraW5nIAMxMiIuJDEuIiADOSwxd2l0aCADMTIiLiQyLiIgAzksMUtiIFBhY2tldHMgZm9yIAMxMiIuJDMuIiADOSwxc2Vjb25kcy4gAyIpOw0KICAgICAgICBteSAoJGR0aW1lLCAlcGFjb3RlcykgPSB1ZHBmbG9vZGVyKCIkMSIsICIkMiIsICIkMyIpOw0KICAgICAgICAkZHRpbWUgPSAxIGlmICRkdGltZSA9PSAwOw0KICAgICAgICBteSAlYnl0ZXM7DQogICAgICAgICRieXRlc3tpZ21wfSA9ICQyICogJHBhY290ZXN7aWdtcH07DQogICAgICAgICRieXRlc3tpY21wfSA9ICQyICogJHBhY290ZXN7aWNtcH07DQogICAgICAgICRieXRlc3tvfSA9ICQyICogJHBhY290ZXN7b307DQogICAgICAgICRieXRlc3t1ZHB9ID0gJDIgKiAkcGFjb3Rlc3t1ZHB9Ow0KICAgICAgICAkYnl0ZXN7dGNwfSA9ICQyICogJHBhY290ZXN7dGNwfTsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtVRFAtMiBERE9TXQIgAzksMVJlc3VsdHMgAzEyIi5pbnQoKCRieXRlc3tpY21wfSskYnl0ZXN7aWdtcH0rJGJ5dGVze3VkcH0gKyAkYnl0ZXN7b30pLzEwMjQpLiIgAzksMUtiIGluIAMxMiIuJGR0aW1lLiIgAzksMXNlY29uZHMgdG8gAzEyIi4kMS4iAzksMS4gAyIpOw0KfQ0KIyMjIyMjIyMjIyMjIyMNCmlmICgkZnVuY2FyZyA9fiAvXnVkcDNccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsNCiAgICByZXR1cm4gdW5sZXNzICRwYWNvdGVzOw0KICAgIHNvY2tldChUcjB4LCBQRl9JTkVULCBTT0NLX0RHUkFNLCAxNyk7DQogICAgbXkgJGFsdm89aW5ldF9hdG9uKCIkMSIpOw0KICAgIG15ICRwb3J0YSA9ICIkMiI7DQogICAgbXkgJGR0aW1lID0gIiQzIjsNCiAgICBteSAkcGFjb3RlOw0KICAgIG15ICRwYWNvdGVzZTsNCiAgICBteSAkZmltID0gdGltZSArICRkdGltZTsNCiAgICBteSAkcGFjb3RhID0gMTsNCiAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1VEUC0zIERET1NdAiADOSwxQXR0YWNraW5nIAMxMiIuJDEuIiADOSwxT24gUG9ydCADMTIiLiRwb3J0YS4iIAM5LDFmb3IgAzEyIi4kZHRpbWUuIiADOSwxc2Vjb25kcy4gAyIpOw0KICAgICAgICB3aGlsZSAoKCRwYWNvdGEgPT0gIjEiKSAmJiAoJHBhY290ZXMgPT0gIjEiKSkgew0KICAgICAgICAgICAgJHBhY290YSA9IDAgaWYgKCh0aW1lID49ICRmaW0pICYmICgkZHRpbWUgIT0gIjAiKSk7DQogICAgICAgICAgICAkcGFjb3RlPSAkcmFuZCB4ICRyYW5kIHggJHJhbmQ7DQogICAgICAgICAgICAkcG9ydGEgPSBpbnQocmFuZCA2NTAwMCkgKzEgaWYgKCRwb3J0YSA9PSAiMCIpOw0KICAgICAgICAgICAgc2VuZChUcjB4LCAwLCAkcGFjb3RlLCBzb2NrYWRkcl9pbigkcG9ydGEsICRhbHZvKSkgYW5kICRwYWNvdGVzZSsrIGlmICgkcGFjb3RlcyA9PSAiMSIpOw0KICAgICAgICAgICAgfQ0KICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbVURQLTMgRERPU10CIAM5LDFSZXN1bHRzIAMxMiIuJHBhY290ZXNlLiIgAzksMUtiIGluIAMxMiIuJGR0aW1lLiIgAzksMXNlY29uZHMgdG8gAzEyIi4kMS4iAzksMS4gAyIpOw0KfQ0KIyMjIyMjIyMjIyMjIyMNCiANCiMjIyMjIyMjIyMjIyMjDQppZiAoJGZ1bmNhcmcgPX4gL150Y3BccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtUQ1AgRERPU10CIAM5LDFBdHRhY2tpbmcgAzEyIi4kMS4iOiIuJDIuIiADOSwxZm9yIAMxMiIuJDMuIiADOSwxc2Vjb25kcy4gAyIpOw0KICAgICAgICBteSAkaXRpbWUgPSB0aW1lOw0KICAgICAgICBteSAoJGN1cl90aW1lKTsNCiAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsNCiAgICAgICAgd2hpbGUgKCQzPiRjdXJfdGltZSl7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQogICAgICAgICZ0Y3BmbG9vZGVyKCIkMSIsIiQyIiwiJDMiKTsNCn0NCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsIlBSSVZNU0cgJHByaW50bCA6AgM0LDEgW1RDUCBERE9TXQIgAzksMUF0dGFjayBlbmRlZCBvbjogAzEyIi4kMS4iOiIuJDIuIgM5LDEuIAMiKTsNCn0NCiMjIyMjIyMjIyMjIyMjDQppZiAoJGZ1bmNhcmcgPX4gL15odHRwXHMrKC4qKVxzKyhcZCspLykgew0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6AgM0LDFbSFRUUCBERE9TXQIgAzksMUF0dGFja2luZyADMTIiLiQxLiIgAzksMW9uIHBvcnQgODAgZm9yIAMxMiIuJDIuIiADOSwxc2Vjb25kcy4gAyIpOw0KICAgICAgICBteSAkaXRpbWUgPSB0aW1lOw0KICAgICAgICBteSAoJGN1cl90aW1lKTsNCiAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsNCiAgICAgICAgd2hpbGUgKCQyPiRjdXJfdGltZSl7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQogICAgICAgIG15ICRzb2NrZXQgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcocHJvdG89Pid0Y3AnLCBQZWVyQWRkcj0+JDEsIFBlZXJQb3J0PT44MCk7DQogICAgICAgIHByaW50ICRzb2NrZXQgIkdFVCAvIEhUVFAvMS4xXHJcbkFjY2VwdDogKi8qXHJcbkhvc3Q6ICIuJDEuIlxyXG5Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcblxyXG4iOw0KICAgICAgICBjbG9zZSgkc29ja2V0KTsNCn0NCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtIVFRQIERET1NdAiADOSwxQXR0YWNraW5nIGVuZGVkIG9uOiADMTIiLiQxLiIDOSwxLiADIik7DQp9DQojIyMjIyMjIyMjIyMjIw0KaWYgKCRmdW5jYXJnID1+IC9eY2JhY2tccysoLiopXHMrKFxkKykvKSB7DQogICAgICAgIG15ICRob3N0ID0gIiQxIjsNCiAgICAgICAgbXkgJHBvcnQgPSAiJDIiOw0KICAgICAgICBteSAkcHJvdG8gPSBnZXRwcm90b2J5bmFtZSgndGNwJyk7DQogICAgICAgIG15ICRpYWRkciA9IGluZXRfYXRvbigkaG9zdCk7DQogICAgICAgIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpOw0KICAgICAgICBteSAkc2hlbGwgPSAiL2Jpbi9zaCAtaSI7DQppZiAoJF5PIGVxICJNU1dpbjMyIikgew0KICAgICAgICAkc2hlbGwgPSAiY21kLmV4ZSI7DQp9DQogICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDoCAzQsMSBbQ29ubmVjdEJhY2tdAiADOSwxQ29ubmVjdGluZyB0byADMTIkaG9zdDokcG9ydCADIik7DQogICAgICAgIHNvY2tldChTT0NLRVQsIFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAkcHJvdG8pIG9yIGRpZSAic29ja2V0OiAkISI7DQogICAgICAgIGNvbm5lY3QoU09DS0VULCAkcGFkZHIpIG9yIGRpZSAiY29ubmVjdDogJCEiOw0KICAgICAgICBvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCiAgICAgICAgb3BlbihTVERPVVQsICI+JlNPQ0tFVCIpOw0KICAgICAgICBvcGVuKFNUREVSUiwgIj4mU09DS0VUIik7DQogICAgICAgIHN5c3RlbSgiJHNoZWxsIik7DQogICAgICAgIGNsb3NlKFNURElOKTsNCiAgICAgICAgY2xvc2UoU1RET1VUKTsNCiAgICAgICAgY2xvc2UoU1RERVJSKTsNCn0NCiMjIyMjIyMjIyMjIyMjDQppZiAoJGZ1bmNhcmcgPX4gL15tYWlsXHMrKC4qKVxzKyguKilccysoLiopXHMrKC4qKS8pIHsNCiAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOgIDNCwxIFtNYWlsZXJdAiADOSwxU2VuZGluZyBlbWFpbCB0bzogAzEyJDMgAyIpOw0KICAgICAgICAkc3ViamVjdCA9ICQxOw0KICAgICAgICAkc2VuZGVyID0gJDI7DQogICAgICAgICRyZWNpcGllbnQgPSAkMzsNCiAgICAgICAgQGNvcnBvID0gJDQ7DQogICAgICAgICRtYWlsdHlwZSA9ICJjb250ZW50LXR5cGU6IHRleHQvaHRtbCI7DQogICAgICAgICRzZW5kbWFpbCA9ICcvdXNyL3NiaW4vc2VuZG1haWwnOw0KICAgICAgICBvcGVuIChTRU5ETUFJTCwgInwgJHNlbmRtYWlsIC10Iik7DQogICAgICAg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ZGVvcCgiJDEiLCAiJDIiKSBpZiAoJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnZvaWNlLykgew0KICAgICAgdm9pY2UoIiRwcmludGwiLCAiJGtlbSIpIGlmICRjYXNlIGVxICJ2b2ljZSI7DQogICAgICAkb2FyZyA9IHN1YnN0cigkY2FzZSwgNik7DQogICAgICB2b2ljZSgiJDEiLCAiJDIiKSBpZiAoJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmRldm9pY2UvKSB7DQogICAgICBkZXZvaWNlKCIkcHJpbnRsIiwgIiRrZW0iKSBpZiAkY2FzZSBlcSAiZGV2b2ljZSI7DQogICAgICAkb2FyZyA9IHN1YnN0cigkY2FzZSwgOCk7DQogICAgICBkZXZvaWNlKCIkMSIsICIkMiIpIGlmICgkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ebXNnXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIG1zZygiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmZsb29kXHMrKFxkKylccysoXFMrKSAoLiopLykgew0KICAgICAgZm9yIChteSAkY2YgPSAxOyAkY2YgPD0gJDE7ICRjZisrKSB7DQogICAgICAgIG1zZygiJDIiLCAiJDMiKTsNCiAgICAgIH0NCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmN0Y3BccysoXFMrKSAoLiopLykgew0KICAgICAgY3RjcCgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmN0Y3BmbG9vZFxzKyhcZCspXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIGZvciAobXkgJGNmID0gMTsgJGNmIDw9ICQxOyAkY2YrKykgew0KICAgICAgICBjdGNwKCIkMiIsICIkMyIpOw0KICAgICAgfQ0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eaW52aXRlXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIGludml0ZSgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXm5ld2VydmVyXHMrKFxTKylccysoXFMrKS8pIHsNCiAgICAgICBjb25lY3RhcigiJDIiLCAiJDEiLCAiNjY2NyIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ebmljayAoLiopLykgew0KICAgICAgbmljaygiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnJhdyAoLiopLykgew0KICAgICAgc2VuZHJhdygiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmV2YWwgKC4qKS8pIHsNCiAgICAgIGV2YWwgIiQxIjsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmpvaW5ccysoXFMrKVxzKyhcZCspLykgew0KICAgIHNsZWVwIGludChyYW5kKCQyKSk7DQogICAgaigiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnBhcnRccysoXFMrKVxzKyhcZCspLykgew0KICAgIHNsZWVwIGludChyYW5kKCQyKSk7DQogICAgcCgiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnF1aXQvKSB7DQogICAgIHF1aXQoKTsNCiAgIH0NCn0NCiMjIyMjIyMjIyMjIyMjDQpzdWIgc2hlbGwgew0KbXkgJHByaW50bD0kX1swXTsNCm15ICRjb21hbmRvPSRfWzFdOw0KaWYgKCRjb21hbmRvID1+IC9jZCAoLiopLykgew0KICAgICAgICBjaGRpcigiJDEiKSB8fCBtc2coIiRwcmludGwiLCAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIpOw0KICAgICAgICByZXR1cm47DQp9IGVsc2lmICgkcGlkID0gZm9yaykgew0KICAgICAgICB3YWl0cGlkKCRwaWQsIDApOw0KfSBlbHNlIHsNCmlmIChmb3JrKSB7DQogICAgICAgIGV4aXQ7DQp9IGVsc2Ugew0KbXkgQHJlc3A9YCRjb21hbmRvIDI+JjEgMz4mMWA7DQpteSAkYz0wOw0KZm9yZWFjaCBteSAkbGluaGEgKEByZXNwKSB7DQogICRjKys7DQogIGNob3AgJGxpbmhhOw0KICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6JGxpbmhhIik7DQogIGlmICgkYyA9PSAiJGxpbmFzX21heCIpIHsNCiAgICAkYz0wOw0KICAgIHNsZWVwICRzbGVlcDsNCiAgfQ0KfQ0KZXhpdDsNCn0NCn0NCn0NCiMjIyMjIyMjIyMjIyMjDQpzdWIgdWRwZmxvb2RlciB7DQpteSAkaWFkZHIgPSBpbmV0X2F0b24oJF9bMF0pOw0KbXkgJG1zZyA9ICdBJyB4ICRfWzFdOw0KbXkgJGZ0aW1lID0gJF9bMl07DQpteSAkY3AgPSAwOw0KbXkgKCVwYWNvdGVzKTsNCiAgICAgICAgJHBhY290ZXN7aWNtcH0gPSAkcGFjb3Rlc3tpZ21wfSA9ICRwYWNvdGVze3VkcH0gPSAkcGFjb3Rlc3tvfSA9ICRwYWNvdGVze3RjcH0gPSAwOw0KICAgICAgICBzb2NrZXQoU09DSzEsIFBGX0lORVQsIFNPQ0tfUkFXLCAyKSBvciAkY3ArKzsNCiAgICAgICAgc29ja2V0KFNPQ0syLCBQRl9JTkVULCBTT0NLX0RHUkFNLCAxNykgb3IgJGNwKys7DQogICAgICAgIHNvY2tldChTT0NLMywgUEZfSU5FVCwgU09DS19SQVcsIDEpIG9yICRjcCsrOw0KICAgICAgICBzb2NrZXQoU09DSzQsIFBGX0lORVQsIFNPQ0tfUkFXLCA2KSBvciAkY3ArKzsNCiAgICAgICAgcmV0dXJuKHVuZGVmKSBpZiAkY3AgPT0gNDsNCm15ICRpdGltZSA9IHRpbWU7DQpteSAoJGN1cl90aW1lKTsNCiAgICAgICAgd2hpbGUgKCAxICkgew0KZm9yIChteSAkcG9ydCA9IDE7DQogICAgICAgICRwb3J0IDw9IDY1MDAwOyAkcG9ydCsrKSB7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQpsYXN0IGlmICRjdXJfdGltZSA+PSAkZnRpbWU7DQogICAgICAgIHNlbmQoU09DSzEsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpKSBhbmQgJHBhY290ZXN7aWdtcH0rKzsNCiAgICAgICAgc2VuZChTT0NLMiwgJG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnQsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3t1ZHB9Kys7DQogICAgICAgIHNlbmQoU09DSzMsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpKSBhbmQgJHBhY290ZXN7aWNtcH0rKzsNCiAgICAgICAgc2VuZChTT0NLNCwgJG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnQsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3t0Y3B9Kys7DQpmb3IgKG15ICRwYyA9IDM7DQogICAgICAgICRwYyA8PSAyNTU7JHBjKyspIHsNCm5leHQgaWYgJHBjID09IDY7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQpsYXN0IGlmICRjdXJfdGltZSA+PSAkZnRpbWU7DQogICAgICAgIHNvY2tldChTT0NLNSwgUEZfSU5FVCwgU09DS19SQVcsICRwYykgb3IgbmV4dDsNCiAgICAgICAgc2VuZChTT0NLNSwgJG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnQsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3tvfSsrOw0KfQ0KfQ0KbGFzdCBpZiAkY3VyX3RpbWUgPj0gJGZ0aW1lOw0KfQ0KcmV0dXJuKCRjdXJfdGltZSwgJXBhY290ZXMpOw0KfQ0KIyMjIyMjIyMjIyMjIyMNCnN1YiB0Y3BmbG9vZGVyIHsNCm15ICRpdGltZSA9IHRpbWU7DQpteSAoJGN1cl90aW1lKTsNCm15ICgkaWEsJHBhLCRwcm90bywkaiwkbCwkdCk7DQogICAgICAgICRpYT1pbmV0X2F0b24oJF9bMF0pOw0KICAgICAgICAkcGE9c29ja2FkZHJfaW4oJF9bMV0sJGlhKTsNCiAgICAgICAgJGZ0aW1lPSRfWzJdOw0KICAgICAgICAkcHJvdG89Z2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0KICAgICAgICAkaj0wOyRsPTA7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQp3aGlsZSAoJGw8MTAwMCl7DQogICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7DQpsYXN0IGlmICRjdXJfdGltZSA+PSAkZnRpbWU7DQogICAgICAgICR0PSJTT0NLJGwiOw0KICAgICAgICBzb2NrZXQoJHQsUEZfSU5FVCxTT0NLX1NUUkVBTSwkcHJvdG8pOw0KICAgICAgICBjb25uZWN0KCR0LCRwYSl8fCRqLS07DQogICAgICAgICRqKys7JGwrKzsNCn0NCiAgICAgICAgJGw9MDsNCndoaWxlICgkbDwxMDAwKXsNCiAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsNCmxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsNCiAgICAgICAgJHQ9IlNPQ0skbCI7DQpzaHV0ZG93bigkdCwyKTsNCiAgICAgICAgJGwrKzsNCn0NCn0NCiMjIyMjIyMjIyMjIyMjDQpzdWIgbXNnIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJQUklWTVNHICRfWzBdIDokX1sxXSIpOw0KfQ0Kc3ViIGN0Y3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOlwwMDEkX1sxXVwwMDEiKTsNCn0NCnN1YiBub3RpY2Ugew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk5PVElDRSAkX1swXSA6JF9bMV0iKTsNCn0NCnN1YiBvcCB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiTU9ERSAkX1swXSArbyAkX1sxXSIpOw0KfQ0Kc3ViIGRlb3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gLW8gJF9bMV0iKTsNCn0NCnN1YiB2b2ljZSB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiTU9ERSAkX1swXSArdiAkX1sxXSIpOw0KfQ0Kc3ViIGRldm9pY2Ugew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gLXYgJF9bMV0iKTsNCn0NCnN1YiBqIHsgJmpvaW4oQF8pOyB9DQpzdWIgam9pbiB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICAgc2VuZHJhdygiSk9JTiAkX1swXSIpOw0KfQ0Kc3ViIHAgeyBwYXJ0KEBfKTsgfQ0Kc3ViIHBhcnQge3NlbmRyYXcoIlBBUlQgJF9bMF0iKTt9DQpzdWIgbmljayB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoIk5JQ0sgJF9bMF0iKTsNCn0NCnN1YiBxdWl0IHsNCiAgc2VuZHJhdygiUVVJVCA6JF9bMF0iKTsNCiAgZXhpdDsNCn0NCnN1YiBtb2RvIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdICRfWzFdIik7DQp9DQpzdWIgbW9kZSB7IG1vZG8oQF8pOyB9DQogDQpzdWIgaW52aXRlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJJTlZJVEUgJF9bMV0gJF9bMF0iKTsNCn0NCiANCnN1YiB0b3BpY28gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlRPUElDICRfWzBdICRfWzFdIik7DQp9DQpzdWIgdG9waWMgeyB0b3BpY28oQF8pOyB9DQogDQpzdWIgYXdheSB7DQogIHNlbmRyYXcoIkFXQVkgJF9bMF0iKTsNCn0NCnN1YiBiYWNrIHsgYXdheSgpOyB9DQogDQp9DQogDQojIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyBbIEVPRiBdICMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMj'));