# Name: smd_vars v0.12 # Type: Admin/Client side plugin # Semi-persistent general storage for name-value pairs # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6ODoic21kX3ZhcnMiO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTIiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjUyOiJT ZW1pLXBlcnNpc3RlbnQgZ2VuZXJhbCBzdG9yYWdlIGZvciBuYW1lLXZhbHVlIHBhaXJzIjtz OjQ6ImNvZGUiO3M6MjQ0NTg6Ii8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vKioqKioqKioqKioqKioqKioqKioq KiBBRE1JTiBTSURFIENPREUgKioqKioqKioqKioqKioqKioqKioqKioNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ3NtZF92YXJz JywnMSwyJyk7DQoNCgkvLyBFeHRlbnNpb25zIHRhYg0KCXJlZ2lzdGVyX3RhYignZXh0ZW5z aW9ucycsICdzbWRfdmFycycsIHNtZF92YXJzX2dUeHQoJ3NtZF92YXJzJykpOw0KCXJlZ2lz dGVyX2NhbGxiYWNrKCdzbWRfdmFycycsICdzbWRfdmFycycpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfdmFycygkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFp bl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3ZhcnNfdGFibGVfaW5zdGFsbCcsDQoJ CQknc21kX3ZhcnNfdGFibGVfcmVtb3ZlJywNCgkJCSdzbWRfdmFyc19wdXJnZV9leHBpcmVk JywNCgkJCSdzbWRfdmFyc19hZGQnLA0KCQkJJ3NtZF92YXJzX2RlbGV0ZScsDQoJCQknc21k X3ZhcnNfdXBkYXRlJywNCgkJCSdzbWRfdmFyc19tdWx0aV9lZGl0JywNCgkJCSdzbWRfdmFy c19jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX3ZhcnNfc2hvdygnJyk7DQoJfSBl bHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJzX2FkZCgp IHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmV3X25hbWUnLCduZXdfdmFsdWUn LCduZXdfZXhwaXJ5JykpKSk7DQoNCgkkcmV0ID0gZmFsc2U7DQoJJG1zZyA9ICcnOw0KCSRu ZXdfZXhwaXJ5ID0gc21kX3ZhcnNfY2FsY19leHBpcnkoJG5ld19leHBpcnkpOw0KCSRuZXdf ZXhwaXJ5ID0gKCRuZXdfZXhwaXJ5KSA/ICRuZXdfZXhwaXJ5IDogJzAwMDAtMDAtMDAgMDA6 MDA6MDAnOw0KCWlmIChzbWRfdmFyc190YWJsZV9leGlzdHMoKSAmJiAkbmV3X25hbWUgJiYg JG5ld19leHBpcnkpIHsNCgkJJGR1cCA9IHNhZmVfY291bnQoInNtZF92YXJzIiwgIm5hbWU9 JyRuZXdfbmFtZSciKTsNCgkJaWYgKCRkdXApIHsNCgkJCSRtc2cgPSBzbWRfdmFyc19nVHh0 KCdkdXBsaWNhdGUnKTsNCgkJfSBlbHNlIHsNCgkJCSRyZXQgPSBzYWZlX2luc2VydCgic21k X3ZhcnMiLA0KCQkJCSJuYW1lPSckbmV3X25hbWUnLA0KCQkJCXZhbHVlPSckbmV3X3ZhbHVl JywNCgkJCQlleHBpcmVzPSckbmV3X2V4cGlyeSciDQoJCQkpOw0KCQl9DQoJfQ0KDQoJaWYg KCRyZXQgPT09IGZhbHNlKSB7DQoJCXNtZF92YXJzX3Nob3coc21kX3ZhcnNfZ1R4dCgnaW5z ZXJ0X2ZhaWxlZCcpLiRtc2csICRuZXdfbmFtZSwgJG5ld192YWx1ZSwgJG5ld19leHBpcnkp Ow0KCX0gZWxzZSB7DQoJCXNtZF92YXJzX3Nob3coc21kX3ZhcnNfZ1R4dCgnaW5zZXJ0ZWQn KSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc191cGRhdGUoKSB7 DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ2lkJywgJ25ld19uYW1lJywnbmV3X3Zh bHVlJywnbmV3X2V4cGlyeScpKSkpOw0KDQoJJG5ld19leHBpcnkgPSBzbWRfdmFyc19jYWxj X2V4cGlyeSgkbmV3X2V4cGlyeSk7DQoJJHJldCA9IGZhbHNlOw0KCSRtc2cgPSAnJzsNCglp ZiAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJJGR1cCA9IHNhZmVfcm93KCIqIiwg InNtZF92YXJzIiwgIm5hbWU9JyRuZXdfbmFtZSciKTsNCg0KCQlpZiAoJGR1cCAmJiAoaW50 dmFsKCRkdXBbJ2lkJ10pICE9IGludHZhbCgkaWQpKSkgew0KCQkJJG1zZyA9IHNtZF92YXJz X2dUeHQoJ2R1cGxpY2F0ZScpOw0KCQl9IGVsc2Ugew0KCQkJJHJldCA9IHNhZmVfdXBkYXRl KCJzbWRfdmFycyIsDQoJCQkJIm5hbWU9JyRuZXdfbmFtZScsDQoJCQkJdmFsdWU9JyRuZXdf dmFsdWUnLA0KCQkJCWV4cGlyZXM9JyRuZXdfZXhwaXJ5JyIsDQoJCQkJImlkPSckaWQnIik7 DQoJCX0NCgl9DQoJaWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJCXNtZF92YXJzX3Nob3coc21k X3ZhcnNfZ1R4dCgndXBkYXRlX2ZhaWxlZCcpLiRtc2cpOw0KCX0gZWxzZSB7DQoJCXNtZF92 YXJzX3Nob3coc21kX3ZhcnNfZ1R4dCgndXBkYXRlZCcpKTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF92YXJzX2RlbGV0ZSgpIHsNCgkkaWQgPSBhc3NlcnRfaW50KHBz KCdpZCcpKTsNCg0KCSRyZXQgPSBmYWxzZTsNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhpc3Rz KCkpIHsNCgkJJHJzID0gc2FmZV9yb3coJyonLCAnc21kX3ZhcnMnLCAiaWQgPSAkaWQiKTsN CgkJaWYgKCRycykgew0KCQkJZXh0cmFjdCgkcnMpOw0KCQkJJHJldCA9IHNhZmVfZGVsZXRl KCdzbWRfdmFycycsICJpZCA9ICRpZCIpOw0KCQl9DQoJfQ0KCWlmICgkcmV0ID09PSBmYWxz ZSkgew0KCQlzbWRfdmFyc19zaG93KHNtZF92YXJzX2dUeHQoJ2RlbGV0ZV9mYWlsZWQnKSk7 DQoJfSBlbHNlIHsNCgkJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0KCdkZWxldGVkJywg YXJyYXkoIntpZH0iID0+ICRpZCkpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF92YXJzX211bHRpX2VkaXQoKSB7DQovLwlleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnaWQnLCduZXdfbmFtZScsJ25ld192YWx1ZScsJ25ld19leHBpcnknKSkpKTsNCg0KCSRz ZWxlY3RlZCA9IHBzKCdzZWxlY3RlZCcpOw0KCSRyZXQgPSBmYWxzZTsNCgkkaWRzID0gJyc7 DQoNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkgJiYgJHNlbGVjdGVkKSB7DQoJCSRt ZXRob2QgPSBwcygnZWRpdF9tZXRob2QnKTsNCgkJc3dpdGNoKCRtZXRob2QpIHsNCgkJCWNh c2UgImRlbGV0ZSI6DQoJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHNlbGVj dGVkIGFzICRpZCkgew0KCQkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJCWlmIChz YWZlX2RlbGV0ZSgnc21kX3ZhcnMnLCAiaWQgPSAkaWQiKSkgew0KCQkJCQkJJGlkc1tdID0g JGlkOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRpZHMgPSBqb2luKCcsICcsICRpZHMpOw0KCQkJ CWJyZWFrOw0KCQl9DQoJfQ0KDQoJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0KCdkZWxl dGVkJywgYXJyYXkoIntpZH0iID0+ICRpZHMpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF92YXJzX3B1cmdlX2V4cGlyZWQoKSB7DQoJJGJsYXR0ZWQgPSAwOw0KCWlmIChz bWRfdmFyc190YWJsZV9leGlzdHMoKSkgew0KCQkkd2hlcmUgPSAiZXhwaXJlcyA8PiAnMDAw MC0wMC0wMCAwMDowMDowMCcgQU5EIGV4cGlyZXMgPCBOT1coKSI7DQoJCSRibGF0dGVkID0g c2FmZV9jb3VudCgic21kX3ZhcnMiLCAkd2hlcmUpOw0KCQkkcmVzID0gc2FmZV9kZWxldGUo InNtZF92YXJzIiwgJHdoZXJlKTsNCgl9DQoJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0 KCdkZWxldGVkX251bScsIGFycmF5KCJ7bnVtfSIgPT4gJGJsYXR0ZWQpKSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJzX3RhYmxlX2V4aXN0cygpIHsNCglyZXR1cm4o QHNhZmVfc2hvdygnY29sdW1ucycsICdzbWRfdmFycycpKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gQWRkIHRoZSB2YXJzIHRhYmxlIGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZA0KZnVuY3Rp b24gc21kX3ZhcnNfdGFibGVfaW5zdGFsbCgpIHsNCgkkdmVyc2lvbiA9IG15c3FsX2dldF9z ZXJ2ZXJfaW5mbygpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCWlmICgk dmVyc2lvbiA8ICI0LjEuMiIpIHsNCgkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0K CQl0cmlnZ2VyX2Vycm9yKCJzbWRfdmFycyByZXF1aXJlcyBNeVNRTCB2NC4xLjIgb3IgZ3Jl YXRlci4iKTsNCgl9IGVsc2Ugew0KCQkkcmV0ID0gJyc7DQoJCSRzcWwgPSBhcnJheSgpOw0K CQlpZiAoIXNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCQkkc3FsW10gPSAiQ1JFQVRF IFRBQkxFIGAiLnNhZmVfcGZ4KCdzbWRfdmFycycpLiJgICgNCgkJCQlgaWRgIGludCgxMSkg Tk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsDQoJCQkJYG5hbWVgIHZhcmNoYXIoNjQpIE5PVCBO VUxMIGRlZmF1bHQgJycsDQoJCQkJYHZhbHVlYCB0ZXh0IE5PVCBOVUxMIGRlZmF1bHQgJycs DQoJCQkJYGV4cGlyZXNgIGRhdGV0aW1lIE5PVCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAg MDA6MDA6MDAnLA0KCQkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkJKSBFTkdJTkU9TXlJU0FN IFBBQ0tfS0VZUz0xIEFVVE9fSU5DUkVNRU5UPTEiOw0KDQoJCQlmb3JlYWNoICgkc3FsIGFz ICRxcnkpIHsNCgkJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCQlpZiAoISRyZXQp IHsNCgkJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCQllY2hvICI8Yj4i LiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJy IC8+XG4iOw0KCQkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCQl9DQoJCQl9 DQoJCX0NCgl9DQoNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJ CSRtZXNzYWdlID0gc21kX3ZhcnNfZ1R4dCgndGFibGVfaW5zdGFsbGVkJyk7DQoJfSBlbHNl IHsNCgkJJG1lc3NhZ2UgPSBzbWRfdmFyc19nVHh0KCd0YWJsZV9ub3RfaW5zdGFsbGVkJyk7 DQoJfQ0KCXNtZF92YXJzX3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBE cm9wIHRoZSB2YXJzIHRhYmxlIGlmIGl0J3MgaW4gdGhlIGRhdGFiYXNlDQpmdW5jdGlvbiBz bWRfdmFyc190YWJsZV9yZW1vdmUoKSB7DQoJJHJldCA9ICcnOw0KCSRzcWwgPSBhcnJheSgp Ow0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCWlmIChzbWRfdmFyc190YWJs ZV9leGlzdHMoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAuc2Fm ZV9wZngoJ3NtZF92YXJzJykuICI7ICI7DQoJCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0K CQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAoISRyZXQpIHsNCgkJCQkkR0xP QkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhw X2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQll Y2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJEdMT0JB TFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtZXNzYWdlID0gc21kX3ZhcnNfZ1R4 dCgndGFibGVfcmVtb3ZlZCcpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX3ZhcnNf Z1R4dCgndGFibGVfbm90X3JlbW92ZWQnKTsNCgl9DQoJc21kX3ZhcnNfc2hvdygkbWVzc2Fn ZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERpc3BsYXkgdGhlIHZhcmlhYmxlcyBhbHJlYWR5 IGRlZmluZWQgYW5kIG90aGVyIGJ1dHRvbnMgbGlrZSBhZGQvcmVtb3ZlL2VkaXQgdmFycy90 YWJsZXMNCmZ1bmN0aW9uIHNtZF92YXJzX3Nob3coJG1lc3NhZ2UsICR0aGVOYW1lPScnLCAk dGhlVmFsdWU9JycsICR0aGVFeHBpcmVzPScnKSB7DQoJcmVxdWlyZV9wbHVnaW4oJ3NtZF9s aWInKTsNCg0KCS8vIFByb2Nlc3MgdGhlIHNvcnQgb3JkZXIsIGxpbWl0IGFuZCBmaWx0ZXJp bmcgc3R1ZmYgZnJvbSB0aGUgcXVlcnkgc3RyaW5nDQoJZXh0cmFjdChncHNhKGFycmF5KCdz dGVwJywgJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJywg J2lkJykpKTsNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3BzKCdxdHknKSA6ICgoY3Mo J3NtZF92YXJzX3BhZ2VieScpKSA/IGNzKCdzbWRfdmFyc19wYWdlYnknKSA6IDE1KTsNCg0K CSRkaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2Rlc2MnIDogJ2FzYyc7DQoJc3dpdGNoICgk c29ydCkgew0KCQljYXNlICdpZCc6DQoJCQkkc29ydF9zcWwgPSAnaWQgJy4kZGlyLicsIG5h bWUgYXNjJzsNCgkJCWJyZWFrOw0KCQljYXNlICd2YWx1ZSc6DQoJCQkkc29ydF9zcWwgPSAn dmFsdWUgJy4kZGlyLicsIG5hbWUgYXNjJzsNCgkJCWJyZWFrOw0KCQljYXNlICdleHBpcmVz JzoNCgkJCSRzb3J0X3NxbCA9ICdleHBpcmVzICcuJGRpci4nLCBuYW1lIGFzYyc7DQoJCQli cmVhazsNCgkJY2FzZSAnbmFtZSc6DQoJCWRlZmF1bHQ6DQoJCQkkc29ydCA9ICduYW1lJzsN CgkJCSRzb3J0X3NxbCA9ICduYW1lICcuJGRpcjsNCgkJCWJyZWFrOw0KCX0NCgkkc3dpdGNo X2RpciA9ICgkZGlyID09ICdkZXNjJykgPyAnYXNjJyA6ICdkZXNjJzsNCgkkY3JpdGVyaWEg PSAxOw0KDQoJaWYgKCRzZWFyY2hfbWV0aG9kICYmICRjcml0KSB7DQoJCSRjcml0X2VzY2Fw ZWQgPSBkb1NsYXNoKCRjcml0KTsNCgkJJG5vdyA9IGRhdGUoIlktbS1kIEg6aTpzIik7DQoJ CS8vIE1ha2UgdXAgY3JpdGVyaWEgZm9yIHRoZSBmYWtlICdleHBpcmVkJyBjb2x1bW4NCgkJ c3dpdGNoKHN0cnRvbG93ZXIoJGNyaXRfZXNjYXBlZCkpIHsNCgkJCWNhc2Ugc3RydG9sb3dl cihnVHh0KCd5ZXMnKSk6DQoJCQkJJGV4cHlyZSA9ICIoZXhwaXJlcyA8ICckbm93JyBBTkQg ZXhwaXJlcyA8PiAnMDAwMC0wMC0wMCAwMDowMDowMCcpIjsNCgkJCQlicmVhazsNCgkJCWNh c2Ugc21kX3ZhcnNfZ1R4dCgnZW1wdHlfZXhwaXJ5Jyk6DQoJCQkJJGV4cHlyZSA9ICJleHBp cmVzID0gJzAwMDAtMDAtMDAgMDA6MDA6MDAnIjsNCgkJCQlicmVhazsNCgkJCWNhc2Ugc3Ry dG9sb3dlcihnVHh0KCdubycpKS5zbWRfdmFyc19nVHh0KCdlbXB0eV9leHBpcnknKToNCgkJ CQkkZXhweXJlID0gIihleHBpcmVzID49ICckbm93JyBPUiBleHBpcmVzID0gJzAwMDAtMDAt MDAgMDA6MDA6MDAnKSI7DQoJCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSRleHB5cmUg PSAiKGV4cGlyZXMgPj0gJyRub3cnIEFORCBleHBpcmVzIDw+ICcwMDAwLTAwLTAwIDAwOjAw OjAwJykiOw0KCQkJCWJyZWFrOw0KCQl9DQoJCSRjcml0c3FsID0gYXJyYXkoDQoJCQknaWQn ID0+ICJpZCA9ICckY3JpdF9lc2NhcGVkJyIsDQoJCQknbmFtZScgPT4gIm5hbWUgbGlrZSAn JSRjcml0X2VzY2FwZWQlJyIsDQoJCQkndmFsdWUnID0+ICJ2YWx1ZSBsaWtlICclJGNyaXRf ZXNjYXBlZCUnIiwNCgkJCSdleHBpcmVzJyA9PiAiZXhwaXJlcyBsaWtlICclJGNyaXRfZXNj YXBlZCUnIiwNCgkJCSdleHBpcmVkJyA9PiAkZXhweXJlLA0KCQkpOw0KDQoJCWlmIChhcnJh eV9rZXlfZXhpc3RzKCRzZWFyY2hfbWV0aG9kLCAkY3JpdHNxbCkpIHsNCgkJCSRjcml0ZXJp YSA9ICRjcml0c3FsWyRzZWFyY2hfbWV0aG9kXTsNCgkJCSRsaW1pdCA9IDUwMDsNCgkJfSBl bHNlIHsNCgkJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCQkkY3JpdCA9ICcnOw0KCQl9DQoJ fSBlbHNlIHsNCgkJJHNlYXJjaF9tZXRob2QgPSAnJzsNCgkJJGNyaXQgPSAnJzsNCgl9DQoN CgkkdG90YWwgPSAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpID8gc2FmZV9jb3VudCgnc21k X3ZhcnMnLCAiJGNyaXRlcmlhIikgOiAwOw0KCSRsaW1pdCA9IG1heChAJHBhZ2VieSwgMTUp Ow0KCWxpc3QoJHBhZ2UsICRvZmZzZXQsICRudW1QYWdlcykgPSBwYWdlcigkdG90YWwsICRs aW1pdCwgJHBhZ2UpOw0KDQoJJHFzID0gYXJyYXkoDQoJCSJldmVudCIgPT4gInNtZF92YXJz IiwNCgkJInBhZ2UiID0+ICRwYWdlLA0KCQkic29ydCIgPT4gJHNvcnQsDQoJCSJkaXIiID0+ ICRkaXIsDQoJCSJjcml0IiA9PiAkY3JpdCwNCgkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFy Y2hfbWV0aG9kLA0KCSk7DQoNCgkkcXNWYXJzID0gImluZGV4LnBocCIuaHRtbHNwZWNpYWxj aGFyc19kZWNvZGUoam9pbl9xcygkcXMpKTsNCg0KCS8vIFJlbmRlciB0aGUgdmFyaWFibGUg bGlzdA0KCXBhZ2V0b3Aoc21kX3ZhcnNfZ1R4dCgnZWRpdCcpLCRtZXNzYWdlKTsNCgkkYnRu QWRkID0gZklucHV0KCdzdWJtaXQnLCAnc21kX3ZhcnNfYWRkJywgc21kX3ZhcnNfZ1R4dCgn YWRkX2xhYmVsJyksICdzbWFsbGVyYm94JywgJycsICdzbWRfdmFyX3N0ZXA9dGhpcy5uYW1l O3NtZF92YXJfaWQ9XCdcJycpOw0KCSRidG5JbnN0YWxsVGJsID0gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3ZhcnMnLmEuJ3N0ZXA9c21kX3ZhcnNfdGFibGVf aW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nIC4gZklucHV0KCdzdWJtaXQnLCAn c3VibWl0Jywgc21kX3ZhcnNfZ1R4dCgndGFibGVfaW5zdGFsbF9sYWJlbCcpLCAnc21hbGxl cmJveCcpIC4gJzwvZm9ybT4nOw0KCSRidG5SZW1vdmVUYmwgPSAnPGZvcm0gbWV0aG9kPSJw b3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdmFycycuYS4nc3RlcD1zbWRfdmFyc190YWJsZV9y ZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnko XCcnLnNtZF92YXJzX2dUeHQoJ3RhYmxlX3JlbW92ZV9jaGVjaycpLidcJykiPicgLiBmSW5w dXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdmFyc19nVHh0KCd0YWJsZV9yZW1vdmVfbGFi ZWwnKSwgJ3NtYWxsZXJib3gnKSAuICc8L2Zvcm0+JzsNCgkkYnRuUHVyZ2VFeHBpcmVkID0g Jzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3ZhcnMnLmEuJ3N0ZXA9 c21kX3ZhcnNfcHVyZ2VfZXhwaXJlZCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiBvbnN1Ym1p dD0icmV0dXJuIHZlcmlmeShcJycuc21kX3ZhcnNfZ1R4dCgncHVyZ2VfZXhwaXJlZCcpLidc JykiPicgLiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdmFyc19nVHh0KCdwdXJn ZV9leHBpcmVkX2xhYmVsJyksICdzbWFsbGVyYm94JykgLiAnPC9mb3JtPic7DQoJJGJ0blN0 eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCg0KCS8vIE5vbi1kZWZh dWx0IGNhc2VzIHJldHVybiBmYWxzZSBiZWNhdXNlIHRoZSBvcmlnaW5hbCBmb3JtIGFjdGlv biBoYXMgYmVlbiBvdmVycmlkZW4NCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0Ij4NCgl2YXIgc21kX3Zhcl9zdGVwID0gJyc7DQoJdmFyIHNtZF92YXJf aWQgPSAnJzsNCglmdW5jdGlvbiBwcmVzdWIoKSB7DQoJCXZhciBzbWRfdmFyX1VSTCA9ICJ7 JHFzVmFyc30iOw0KCQlzd2l0Y2goc21kX3Zhcl9zdGVwKSB7DQoJCQljYXNlICJzbWRfdmFy c19hZGQiOg0KCQkJY2FzZSAic21kX3ZhcnNfdXBkYXRlIjoNCgkJCQl2YXIgbmV3X25hbWUg PSBqUXVlcnkoImlucHV0W25hbWU9J25ld19uYW1lJ10iKS52YWwoKTsNCgkJCQl2YXIgbmV3 X3ZhbHVlID0galF1ZXJ5KCJpbnB1dFtuYW1lPSduZXdfdmFsdWUnXSIpLnZhbCgpOw0KCQkJ CXZhciBuZXdfZXhwaXJ5ID0galF1ZXJ5KCJpbnB1dFtuYW1lPSduZXdfZXhwaXJ5J10iKS52 YWwoKTsNCgkJCQlsb2NhdGlvbi5ocmVmID0gc21kX3Zhcl9VUkwgKyAiJnN0ZXA9IiArIHNt ZF92YXJfc3RlcCArICImbmV3X25hbWU9IiArIG5ld19uYW1lKyAiJm5ld192YWx1ZT0iICsg bmV3X3ZhbHVlKyAiJm5ld19leHBpcnk9IiArIG5ld19leHBpcnkgKyAiJmlkPSIgKyBzbWRf dmFyX2lkOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCQlicmVhazsNCgkJCWNhc2UgInNtZF92 YXJzX2VkaXQiOg0KCQkJCWxvY2F0aW9uLmhyZWYgPSBzbWRfdmFyX1VSTCArICImc3RlcD0i ICsgc21kX3Zhcl9zdGVwICsgIiZpZD0iICsgc21kX3Zhcl9pZDsNCgkJCQlyZXR1cm4gZmFs c2U7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJzbWRfdmFyc19jYW5jZWwiOg0KCQkJCWxvY2F0 aW9uLmhyZWYgPSBzbWRfdmFyX1VSTDsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJYnJlYWs7 DQoJCQlkZWZhdWx0Og0KCQkJCXJldHVybiB0cnVlOw0KCQl9DQoJfQ0KPC9zY3JpcHQ+DQpF T0pTOw0KDQoJZWNobyBzdGFydFRhYmxlKCdjb250cm9sJywnJywnJyw1KTsNCglpZiAoc21k X3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJLy8gVGFibGVzIGluc3RhbGxlZA0KCQllY2hv IHRyKGZMYWJlbENlbGwoc21kX3ZhcnNfZ1R4dCgnY29udHJvbCcpLic6JykgLiB0ZGEoJGJ0 blJlbW92ZVRibCwgJGJ0blN0eWxlKSAuIHRkYSgkYnRuUHVyZ2VFeHBpcmVkLCAkYnRuU3R5 bGUpKTsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCQllY2hvIHNtZF92YXJzX3NlYXJjaF9mb3Jt KCRjcml0LCAkc2VhcmNoX21ldGhvZCk7DQoJCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIg bmFtZT0ibG9uZ2Zvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyIgb25zdWJtaXQ9InJl dHVybiBwcmVzdWIoKTsiPic7DQoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQllY2hv IHRyKHRkYShzdHJvbmcoc21kX3ZhcnNfZ1R4dCgnbGlzdF90aXRsZScpKSwgJyBjb2xzcGFu PSI1IicpKTsNCgkJZWNobyB0cigNCgkJCWNvbHVtbl9oZWFkKCdpZCcsICdpZCcsICdzbWRf dmFycycsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgnaWQn ID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQljb2x1bW5faGVhZCgnbmFtZScsICduYW1l JywgJ3NtZF92YXJzJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhv ZCwgKCduYW1lJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQoJ3Zh bHVlJywgJ3ZhbHVlJywgJ3NtZF92YXJzJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAk c2VhcmNoX21ldGhvZCwgKCd2YWx1ZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNv bHVtbl9oZWFkKCdleHBpcmVzJywgJ2V4cGlyZXMnLCAnc21kX3ZhcnMnLCB0cnVlLCAkc3dp dGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoJ2V4cGlyZXMnID09ICRzb3J0KSA/ ICRkaXIgOiAnJykuDQoJCQljb2x1bW5faGVhZCgnZXhwaXJlZCcsICdleHBpcmVkJywgJ3Nt ZF92YXJzJywgZmFsc2UpDQoJCSk7DQoNCgkJaWYgKCRzdGVwICE9ICJzbWRfdmFyc19lZGl0 Iikgew0KCQkJJG91dCA9IHRkKCcmbmJzcDsnKTsNCgkJCSRvdXQgLj0gZklucHV0Q2VsbCgn bmV3X25hbWUnLCAkdGhlTmFtZSk7DQoJCQkkb3V0IC49IGZJbnB1dENlbGwoJ25ld192YWx1 ZScsICR0aGVWYWx1ZSwgJycsIDQyKTsNCgkJCSRvdXQgLj0gZklucHV0Q2VsbCgnbmV3X2V4 cGlyeScsICR0aGVFeHBpcmVzKTsNCgkJCSRvdXQgLj0gdGQoJyZuYnNwOycpOw0KCQkJJG91 dCAuPSB0ZGEoJGJ0bkFkZCwgJGJ0blN0eWxlKTsNCgkJCWVjaG8gdHIoJG91dCk7DQoJCX0N Cg0KCQkvLyBOb3RlIHRoZSBuZWdhdGl2ZSBsb2dpYyBpbiB0aGUgJ2V4cGlyZWQnIGNvbHVt biAoc2luY2Ugc21kX3Zhcl9zdGF0dXMgcmV0dXJucyAxIGlmICd2YWxpZCcpDQoJCSRycyA9 IHNhZmVfcm93c19zdGFydCgnKicsICdzbWRfdmFycycsICIkY3JpdGVyaWEgb3JkZXIgYnkg JHNvcnRfc3FsIGxpbWl0ICRvZmZzZXQsICRsaW1pdCIpOw0KCQl3aGlsZSAoJGEgPSBuZXh0 Um93KCRycykpIHsNCgkJCSRleHBpcnkgPSAoJGFbJ2V4cGlyZXMnXT09IjAwMDAtMDAtMDAg MDA6MDA6MDAiKSA/IHNtZF92YXJzX2dUeHQoJ2VtcHR5X2V4cGlyeScpIDogJGFbJ2V4cGly ZXMnXTsNCgkJCSRleHBpcmVMYWJlbCA9IHNtZF92YXJfc3RhdHVzKGFycmF5KCJuYW1lIiA9 PiAkYVsnbmFtZSddKSkgPyAoKCRleHBpcnkgPT0gc21kX3ZhcnNfZ1R4dCgnZW1wdHlfZXhw aXJ5JykpID8gc21kX3ZhcnNfZ1R4dCgnZW1wdHlfZXhwaXJ5JykgOiBnVHh0KCdubycpKSA6 IGdUeHQoJ3llcycpOw0KCQkJaWYgKCRzdGVwID09ICJzbWRfdmFyc19lZGl0IiAmJiAkaWQg PT0gJGFbJ2lkJ10pIHsNCgkJCQkkb3V0ID0gdGQoJGFbJ2lkJ10pOw0KCQkJCSRvdXQgLj0g ZklucHV0Q2VsbCgnbmV3X25hbWUnLCAkYVsnbmFtZSddKTsNCgkJCQkkb3V0IC49IGZJbnB1 dENlbGwoJ25ld192YWx1ZScsICRhWyd2YWx1ZSddLCAnJywgNDIpOw0KCQkJCSRvdXQgLj0g ZklucHV0Q2VsbCgnbmV3X2V4cGlyeScsICRleHBpcnkpOw0KCQkJCSRvdXQgLj0gdGQoJGV4 cGlyZUxhYmVsKTsNCgkJCQkkb3V0IC49IHRkYShmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdmFy c191cGRhdGUnLCBnVHh0KCdzYXZlJyksICdzbWFsbGVyYm94JywgJycsICdzbWRfdmFyX3N0 ZXA9dGhpcy5uYW1lO3NtZF92YXJfaWQ9XCcnLiRhWydpZCddLidcJycpKTsNCgkJCQkkb3V0 IC49IHRkYShmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdmFyc19jYW5jZWwnLCBzbWRfdmFyc19n VHh0KCdjYW5jZWxfbGFiZWwnKSwgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF92YXJfc3RlcD10 aGlzLm5hbWU7c21kX3Zhcl9pZD1cJ1wnJykpOw0KCQkJfSBlbHNlIHsNCgkJCQkkb3V0ID0g dGFnKCRhWydpZCddLCAndGQnKTsNCgkJCQkkb3V0IC49IHRhZygkYVsnbmFtZSddLCAndGQn KTsNCgkJCQkkb3V0IC49IHRhZygoJGFbJ3ZhbHVlJ10gPyAkYVsndmFsdWUnXSA6ICcmbmJz cDsnKSwgJ3RkJyk7DQoJCQkJJG91dCAuPSB0YWcoJGV4cGlyeSwgJ3RkJyk7DQoJCQkJJG91 dCAuPSB0YWcoJGV4cGlyZUxhYmVsLCAndGQnKTsNCgkJCQkkb3V0IC49IHRkYShmSW5wdXQo J3N1Ym1pdCcsICdzbWRfdmFyc19lZGl0JywgZ1R4dCgnZWRpdCcpLCAnc21hbGxlcmJveCcs ICcnLCAnc21kX3Zhcl9zdGVwPXRoaXMubmFtZTtzbWRfdmFyX2lkPVwnJy4kYVsnaWQnXS4n XCcnKSk7DQoJCQkJJG91dCAuPSB0ZChkTGluaygnc21kX3ZhcnMnLCAnc21kX3ZhcnNfZGVs ZXRlJywgJ2lkJywgJGFbJ2lkJ10sICcnLCAnJywgJycsIGZhbHNlLCBhcnJheSgkcGFnZSwg JHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCkpLCAxMCk7DQoJCQkJJG91dCAu PSB0ZChmSW5wdXQoJ2NoZWNrYm94JywgJ3NlbGVjdGVkW10nLCAkYVsnaWQnXSkpOw0KCQkJ fQ0KCQkJZWNobyB0cigkb3V0LCAnIGNsYXNzPSJzbWRfdmFyc19yb3ciIGlkPSInLiRhWydp ZCddLiciJyk7DQoJCX0NCgkJZWNobyB0ZGEoc2VsZWN0X2J1dHRvbnMoKSAuIGV2ZW50X211 bHRpZWRpdF9mb3JtKCdzbWRfdmFycycsIE5VTEwsICRwYWdlLCAkc29ydCwgJGRpciwgJGNy aXQsICRzZWFyY2hfbWV0aG9kKSwgJyBjb2xzcGFuPSI1IiBzdHlsZT0idGV4dC1hbGlnbjog cmlnaHQ7IGJvcmRlcjogbm9uZTsiJyk7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgkJZWNobyAn PC9mb3JtPic7DQoJCWVjaG8gbi5uYXZfZm9ybSgnc21kX3ZhcnMnLCAkcGFnZSwgJG51bVBh Z2VzLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKTsNCgkJZWNobyBuLnBh Z2VieV9mb3JtKCdzbWRfdmFycycsICRwYWdlYnkpOw0KCX0gZWxzZSB7DQoJCS8vIFRhYmxl cyBub3QgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsVGJsLCAkYnRuU3R5 bGUpKTsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3ZhcnNfc2VhcmNoX2Zvcm0oJGNyaXQsICRtZXRob2QpIHsNCgkkbWV0aG9kcyA9 CWFycmF5KA0KCQknaWQnID0+IGdUeHQoJ2lkJyksDQoJCSduYW1lJyA9PiBnVHh0KCduYW1l JyksDQoJCSd2YWx1ZScgPT4gZ1R4dCgndmFsdWUnKSwNCgkJJ2V4cGlyZXMnID0+IGdUeHQo J2V4cGlyZXMnKSwNCgkJJ2V4cGlyZWQnID0+IGdUeHQoJ2V4cGlyZWQnKQ0KCSk7DQoNCgly ZXR1cm4gc2VhcmNoX2Zvcm0oJ3NtZF92YXJzJywgJ3NtZF92YXJzX3Nob3cnLCAkY3JpdCwg JG1ldGhvZHMsICRtZXRob2QsICduYW1lJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF92YXJzX2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdzbWRfdmFyc19wYWdl YnknLCBncHMoJ3F0eScpKTsNCglzbWRfdmFyc19zaG93KCcnKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KLy8gQ2FsY3VsYXRlIGFueSB0aW1lIG9mZnNldCByZWxhdGl2ZSB0byBub3csIGUuZy4g KzFkLCArNHcsICszMHMsICsxMG0gZXRjDQpmdW5jdGlvbiBzbWRfdmFyc19jYWxjX2V4cGly eSgkZXhwaXJlcywgJGRlYnVnPWZhbHNlKSB7DQoJJG9mZnNldFJFID0gJy8oXCt8XEApKFsw LTldKykoW0EtWmEtel0pLyc7DQoJJG51bU9mZnNldHMgPSBwcmVnX21hdGNoX2FsbCgkb2Zm c2V0UkUsICRleHBpcmVzLCAkb2Zmc2V0cyk7DQoJaWYgKCRudW1PZmZzZXRzID4gMCkgew0K CQkkdmFsaWRQZXJpb2RzID0gYXJyYXkoDQoJCQkncycgPT4gMSwNCgkJCSdtJyA9PiA2MCwN CgkJCSdoJyA9PiAzNjAwLA0KCQkJJ2QnID0+IDg2NDAwLA0KCQkJJ3cnID0+IDYwNDgwMCwN CgkJCSd5JyA9PiAzMTQ0OTYwMCwNCgkJCSk7DQoJCSRvZmZOdW0gPSAkb2Zmc2V0c1syXVsw XTsNCgkJJG9mZlBlcmlvZCA9IChhcnJheV9rZXlfZXhpc3RzKCRvZmZzZXRzWzNdWzBdLCAk dmFsaWRQZXJpb2RzKSkgPyAkb2Zmc2V0c1szXVswXSA6ICJzIjsNCgkJJGV4cGlyZXMgPSBk YXRlKCJZLW0tZCBIOmk6cyIsIHRpbWUoKSArICgkb2ZmTnVtICogJHZhbGlkUGVyaW9kc1sk b2ZmUGVyaW9kXSkpOw0KCQlpZiAoJGRlYnVnKSB7DQoJCQllY2hvICIrKyBUSU1FIE5PVyBB TkQgVElNRSBJTiAkb2ZmTnVtICRvZmZQZXJpb2QgKysiOw0KCQkJZG1wKGRhdGUoIlktbS1k IEg6aTpzIikpOw0KCQkJZG1wKCRleHBpcmVzKTsNCgkJfQ0KCX0NCglyZXR1cm4gJGV4cGly ZXM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vKioqKioqKioqKioqKioqKioqKioqKiBQVUJMSUMg U0lERSBUQUdTICoqKioqKioqKioqKioqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX3Zhcl9nZXQoJGF0dHMpIHsNCglyZXF1aXJlX3BsdWdpbign c21kX2xpYicpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0K CQknaW5qZWN0JyA9PiAnJywNCgkJJ2FsbG93X3NwYWNlcycgPT4gJzAnLA0KCQkndmFsaWQn ID0+ICcxJywNCgkJJ2RlbGltJyA9PiAnLCcsDQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJ CSdkZWJ1ZycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCglpZiAoJG5hbWUpIHskbmFtZSA9 IGRvU2xhc2goJG5hbWUpO30NCglsaXN0KCRuZ2V0LCAkaWdub3JlKSA9IHNtZF9kb0xpc3Qo JG5hbWUsIGZhbHNlLCAnJywgZmFsc2UsICRkZWxpbSwgJGFsbG93X3NwYWNlcyk7DQoJJHJl dCA9IGZhbHNlOw0KDQoJJHVzZVZhbGlkID0gKCR2YWxpZCkgPyAoc21kX3Zhcl9zdGF0dXMo YXJyYXkoJ25hbWUnID0+ICRuZ2V0WzBdLCAndHlwZScgPT4gJ2F2YWlsYWJsZSwgdmFsaWQn KSkgPT0gIjF8MSIpIDogMTsNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkgJiYgJHVz ZVZhbGlkKSB7DQoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3NtZF92YXJzJywgJ25hbWU9Iicu JG5nZXRbMF0uJyInLCAkZGVidWcpOw0KCQlpZiAoJGRlYnVnKSB7DQoJCQllY2hvICIrKyBS QVcgLyBSRVBMQUNFRCBWQVIgKysiOw0KCQkJZG1wKCRuYW1lIC4nIC8gJy4gJG5nZXRbMF0p Ow0KCQkJZWNobyAiKysgUkVDT1JEICsrIjsNCgkJCWRtcCgkcnMpOw0KCQl9DQoJCWlmICgk cnMpIHsNCgkJCWxpc3QoJHZnZXQsICRpZ25vcmUpID0gc21kX2RvTGlzdCgkcnNbJ3ZhbHVl J10sIGZhbHNlLCAnJywgZmFsc2UsICRkZWxpbSwgJGFsbG93X3NwYWNlcyk7DQoJCQkkcmVw bGFjZW1lbnRzID0gYXJyYXkoKTsNCgkJCWlmICgkaW5qZWN0KSB7DQoJCQkJbGlzdCgkaW5q ZWN0LCAkaWdub3JlKSA9IHNtZF9kb0xpc3QoJGluamVjdCwgZmFsc2UsICcnLCBmYWxzZSwg JGRlbGltLCAkYWxsb3dfc3BhY2VzKTsNCgkJCQlmb3JlYWNoICgkaW5qZWN0IGFzICRzcXVp cnQpIHsNCgkJCQkJJG52ID0gZG9fbGlzdCgkc3F1aXJ0LCAkcGFyYW1kZWxpbSk7DQoJCQkJ CWlmIChjb3VudCgkbnYpID09IDIpIHsNCgkJCQkJCSRyZXBsYWNlbWVudHNbJG52WzBdXSA9 ICRudlsxXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkcmV0ID0gc3RydHIoJHZn ZXRbMF0sICRyZXBsYWNlbWVudHMpOw0KCX0NCglyZXR1cm4gJHJldDsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX3Zhcl9wdXQoJGF0dHMpIHsNCglyZXF1aXJlX3BsdWdpbign c21kX2xpYicpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0K CQkndmFsdWUnID0+ICcnLA0KCQknZXhwaXJlcycgPT4gJycsDQoJCSdnZXRfdmFsc19ub3cn ID0+ICcxJywNCgkJJ2FjdGlvbicgPT4gJ3JlcGxhY2UnLA0KCQknYWxsb3dfc3BhY2VzJyA9 PiAnMCcsDQoJCSdyZXR1cm4nID0+ICdzaWxlbnQnLA0KCQknZGVsaW0nID0+ICcsJywNCgkJ J2RlYnVnJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCSRyZXQgPSBmYWxzZTsNCg0KCS8v IFZhbGlkYXRlL3Byb2Nlc3MgdGhlIGF0dHJpYnV0ZXMNCglpZiAoJG5hbWUpIHskbmFtZSA9 IGRvU2xhc2goJG5hbWUpO30NCglpZiAoJHZhbHVlKSB7JHZhbHVlID0gZG9TbGFzaCgkdmFs dWUpO30NCglpZiAoJGV4cGlyZXMpIHskZXhwaXJlcyA9IGRvU2xhc2goJGV4cGlyZXMpO30N CgkkYWN0aW9uT3B0cyA9IGFycmF5KCdyZXBsYWNlJywgJ2FwcGVuZCcsICdwcmVwZW5kJywg J2RlbGV0ZScpOw0KCSRhY3Rpb24gPSAoaW5fYXJyYXkoJGFjdGlvbiwkYWN0aW9uT3B0cykp ID8gJGFjdGlvbiA6ICRhY3Rpb25PcHRzWzBdOw0KDQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4 aXN0cygpICYmICRuYW1lKSB7DQoJCWlmICgkYWN0aW9uID09ICJkZWxldGUiKSB7DQoJCQkk cmV0ID0gc21kX3Zhcl9kZWxldGUoYXJyYXkoIm5hbWUiID0+ICRuYW1lLCAiYWxsb3dfc3Bh Y2VzIiA9PiAkYWxsb3dfc3BhY2VzLCAiZGVidWciID0+ICRkZWJ1ZykpOw0KCQl9IGVsc2Ug ew0KCQkJJGV4cGlyZXMgPSBzbWRfdmFyc19jYWxjX2V4cGlyeSgkZXhwaXJlcywgJGRlYnVn KTsNCgkJCSRleHBpcnkgPSAoJGV4cGlyZXMpID8gIiwgZXhwaXJlcz0nJGV4cGlyZXMnIiA6 ICcnOw0KDQoJCQkvLyBEZWNpZGUgd2hldGhlciB0byByZXBsYWNlIGFueSA/IHZhcmlhYmxl cyB3aXRoIHRoZWlyIHJlYWwgdmFsdWUgY291bnRlcnBhcnRzIGJlZm9yZSBpbnNlcnRpb24u IFBsYWNlaG9sZGVycyBhcmUgYWx3YXlzIHN0b3JlZCBpbnRhY3QNCgkJCSRuYW1lcyA9IGRv X2xpc3QoJG5hbWUsICRkZWxpbSk7DQoJCQkkbnVtbmFtZXMgPSBjb3VudCgkbmFtZXMpOw0K CQkJJHZhbHVlcyA9IGRvX2xpc3QoJHZhbHVlLCAkZGVsaW0pOw0KCQkJZm9yICgkaWR4ID0g MDsgJGlkeCA8ICRudW1uYW1lczsgJGlkeCsrKSB7DQoJCQkJLy8gSGFyZC1jb2RlIGEgY29t bWEgYXMgdGhlIGRlbGltaXRlciBzaW5jZSB3ZSdyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBp bmRpdmlkdWFsIGl0ZW1zIGFmdGVyIHRoZSBkb19saXN0KCkuDQoJCQkJLy8gU2luY2UgdGhl IGNvbW1hIG5vdyBjYW5ub3QgYXBwZWFyIGluIGFueSBlbnRyeSBpbiAkbmFtZXMgb3IgJHZh bHVlcywgdGhpcyBndWFyYW50ZWVzIG9ubHkgb25lIGVudHJ5IGluIHRoZSByZXR1cm5lZCBh cnJheQ0KCQkJCWxpc3QoJG5pbmplY3QsICRpZ25vcmUpID0gc21kX2RvTGlzdCgkbmFtZXNb JGlkeF0sIGZhbHNlLCAnJywgZmFsc2UsICcsJywgJGFsbG93X3NwYWNlcyk7DQoJCQkJaWYg KCRnZXRfdmFsc19ub3cpIHsNCgkJCQkJbGlzdCgkdmluamVjdCwgJGlnbm9yZSkgPSBzbWRf ZG9MaXN0KCR2YWx1ZXNbJGlkeF0sIGZhbHNlLCAnJywgZmFsc2UsICcsJywgJGFsbG93X3Nw YWNlcyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHZpbmplY3QgPSBhcnJheSgpOw0KCQkJCQkk dmluamVjdFswXSA9ICR2YWx1ZXNbJGlkeF07DQoJCQkJfQ0KCQkJCWlmICgkZGVidWcpIHsN CgkJCQkJZWNobyAiKysgUkFXIFZBUiArKyI7DQoJCQkJCWRtcCgkbmFtZXNbJGlkeF0gLicg OiAnLiAkdmFsdWVzWyRpZHhdKTsNCgkJCQkJZWNobyAiKysgIiAuKCgkYWN0aW9uPT0iYXBw ZW5kIikgPyAiQVBQRU5ESU5HIFRPIiA6ICgoJGFjdGlvbj09InByZXBlbmQiKSA/ICJQUkVQ RU5ESU5HIFRPIiA6ICJSRVBMQUNJTkciKSkuICIgVkFSICckbmluamVjdFswXScgKysiOw0K CQkJCQlkbXAoJHZpbmplY3RbMF0pOw0KCQkJCX0NCgkJCQlpZiAoJGFjdGlvbiA9PSAiYXBw ZW5kIikgew0KCQkJCQkkcmV0ID0gc2FmZV91cHNlcnQoInNtZF92YXJzIiwgInZhbHVlPUNP TkNBVChDT0FMRVNDRSh2YWx1ZSwgJycpLCAnJHZpbmplY3RbMF0nKSRleHBpcnkiLCAibmFt ZT0nJG5pbmplY3RbMF0nIiwgJGRlYnVnKTsNCgkJCQl9IGVsc2UgaWYgKCRhY3Rpb24gPT0g InByZXBlbmQiKSB7DQoJCQkJCSRyZXQgPSBzYWZlX3Vwc2VydCgic21kX3ZhcnMiLCAidmFs dWU9Q09OQ0FUKCckdmluamVjdFswXScsIENPQUxFU0NFKHZhbHVlLCAnJykpJGV4cGlyeSIs ICJuYW1lPSckbmluamVjdFswXSciLCAkZGVidWcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRy ZXQgPSBzYWZlX3Vwc2VydCgic21kX3ZhcnMiLCAidmFsdWU9JyR2aW5qZWN0WzBdJyRleHBp cnkiLCAibmFtZT0nJG5pbmplY3RbMF0nIiwgJGRlYnVnKTsNCgkJCQl9DQoJCQl9DQoJCX0N Cgl9DQoJcmV0dXJuICgkcmV0dXJuID09ICJzaWxlbnQiKSA/ICcnIDogJHJldDsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gQXZhaWxhYmxlIHNlcGFyYXRlbHkgYW5kIGFsc28gY2FsbGVkIGlm IHNtZF92YXJfcHV0IGRlbGV0ZT0iMSIgaXMgdXNlZA0KZnVuY3Rpb24gc21kX3Zhcl9kZWxl dGUoJGF0dHMpIHsNCglyZXF1aXJlX3BsdWdpbignc21kX2xpYicpOw0KDQoJZXh0cmFjdChs QXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0KCQknYWxsb3dfc3BhY2VzJyA9PiAnMCcs DQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCglpZiAoJG5hbWUpIHskbmFt ZSA9IGRvU2xhc2goJG5hbWUpO30NCglsaXN0KCRuZGVsLCAkaWdub3JlKSA9IHNtZF9kb0xp c3QoJG5hbWUsIGZhbHNlLCAnJywgZmFsc2UsICRkZWxpbSwgJGFsbG93X3NwYWNlcyk7DQoJ JHJldCA9IGZhbHNlOw0KDQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCWlm ICgkbmFtZSkgew0KCQkJJHJldCA9IHNhZmVfZGVsZXRlKCJzbWRfdmFycyIsICJuYW1lPSck bmRlbFswXSciKTsNCgkJfQ0KCX0NCglyZXR1cm47DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF92YXJfc3RhdHVzKCRhdHRzKSB7DQoJcmVxdWlyZV9wbHVnaW4oJ3NtZF9saWIn KTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSduYW1lJyA9PiAnJywNCgkJJ3R5cGUn ID0+ICd2YWxpZCcsDQoJCSdhbGxvd19zcGFjZXMnID0+ICcwJywNCgkJJ3JldHVybicgPT4g J251bWJlcicsDQoJCSdkZWxpbScgPT4gJywnLA0KCQknb3V0ZGVsaW0nID0+ICd8JywNCgkJ J2RlYnVnJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIExvb2t1cCB0YWJsZXMNCgkk dHlwZU9wdHMgPSBhcnJheSgndmFsaWQnLCAnYXZhaWxhYmxlJywgJ3VzZScpOw0KCSRyZXR1 cm5PcHRzID0gYXJyYXkoJ25hbWUnLCAnbnVtYmVyJyk7DQoJJHN0YXRpID0gYXJyYXkoDQoJ CSdhdmFpbGFibGUnID0+IGFycmF5KHNtZF92YXJzX2dUeHQoJ3Zhcl91bmF2YWlsYWJsZScp LCBzbWRfdmFyc19nVHh0KCd2YXJfYXZhaWxhYmxlJykpLA0KCQkndmFsaWQnID0+IGFycmF5 KHNtZF92YXJzX2dUeHQoJ3Zhcl9pbnZhbGlkJyksIHNtZF92YXJzX2dUeHQoJ3Zhcl92YWxp ZCcpKSwNCgkJJ3VzZScgPT4gYXJyYXkoc21kX3ZhcnNfZ1R4dCgndmFyX3VudXNlZCcpLCBz bWRfdmFyc19nVHh0KCd2YXJfdXNlZCcpKSwNCgkJKTsNCg0KCS8vIFZhbGlkYXRlIHRoZSBv cHRpb25zDQoJaWYgKCRuYW1lKSB7JG5hbWUgPSBkb1NsYXNoKCRuYW1lKTt9DQoJbGlzdCgk bnN0YXQsICRpZ25vcmUpID0gc21kX2RvTGlzdCgkbmFtZSwgZmFsc2UsICcnLCBmYWxzZSwg JGRlbGltLCAkYWxsb3dfc3BhY2VzKTsNCgkkcmV0dXJuID0gKGluX2FycmF5KCRyZXR1cm4s JHJldHVybk9wdHMpKSA/ICRyZXR1cm4gOiAkcmV0dXJuT3B0c1swXTsNCgkkdHlwZXMgPSBh cnJheSgpOw0KCSR0eXBlID0gZG9fbGlzdCgkdHlwZSwgJGRlbGltKTsNCglmb3JlYWNoICgk dHlwZSBhcyAkdGhpc3R5cGUpIHsNCgkJJHR5cGVzW10gPSAoaW5fYXJyYXkoJHRoaXN0eXBl LCAkdHlwZU9wdHMpKSA/ICR0aGlzdHlwZSA6ICR0eXBlT3B0c1swXTsNCgl9DQoJJHR5cGVz ID0gYXJyYXlfdW5pcXVlKCR0eXBlcyk7DQoJJG91dCA9IGFycmF5KCk7DQoNCgkvLyBHZXQg dGhlIHJlbGV2YW50IHJvdyBhbmQgY2hlY2sgdmFyaW91cyBwYXJ0cyBvZiBpdA0KCWlmIChz bWRfdmFyc190YWJsZV9leGlzdHMoKSkgew0KCQkkcnMgPSBzYWZlX3JvdygnKicsICdzbWRf dmFycycsICduYW1lPSInLiRuc3RhdFswXS4nIicpOw0KCQlpZiAoJGRlYnVnKSB7DQoJCQlk bXAoJHJzKTsNCgkJfQ0KCQlmb3JlYWNoICgkdHlwZXMgYXMgJHRoaXN0eXBlKSB7DQoJCQkk cmV0ID0gMDsNCgkJCWlmICgkdGhpc3R5cGUgPT0gImF2YWlsYWJsZSIpIHsNCgkJCQkkcmV0 ID0gKGNvdW50KCRycykgPT0gMCkgPyAwIDogMTsNCgkJCX0gZWxzZSBpZiAoJHRoaXN0eXBl ID09ICJ2YWxpZCIpIHsNCgkJCQkkcmV0ID0gKGNvdW50KCRycykgPiAwICYmIChzdHJ0b3Rp bWUoJHJzWydleHBpcmVzJ10pID4gdGltZSgpIHx8ICRyc1snZXhwaXJlcyddID09ICIwMDAw LTAwLTAwIDAwOjAwOjAwIikpID8gMSA6IDA7DQoJCQl9IGVsc2UgaWYgKCR0aGlzdHlwZSA9 PSAidXNlIikgew0KCQkJCSRyZXQgPSAoY291bnQoJHJzKSA+IDAgJiYgJHJzWyd2YWx1ZSdd IT0iIikgPyAxIDogMDsNCgkJCX0NCgkJCSRvdXRbXSA9ICgkcmV0dXJuPT0ibmFtZSIpID8g JHN0YXRpWyR0aGlzdHlwZV1bJHJldF0gOiAkcmV0Ow0KCQl9DQoJfQ0KCXJldHVybiBqb2lu KCRvdXRkZWxpbSwgJG91dCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJf aWZfc3RhdHVzKCRhdHRzLCAkdGhpbmc9JycpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5KA0K CQknbmFtZScgPT4gJycsDQoJCSd0eXBlJyA9PiAndmFsaWQnLA0KCSksICRhdHRzKSk7DQoN CgkkcmV0ID0gc21kX3Zhcl9zdGF0dXMoYXJyYXkoDQoJCSduYW1lJyA9PiAkbmFtZSwNCgkJ J3R5cGUnID0+ICR0eXBlLA0KCQkpKTsNCg0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhp bmcsICRyZXQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQ29udmVuaWVuY2Ugc2hvcnRjdXQg ZnVuY3Rpb25zIGZvciBzbWRfdmFyX2lmX3N0YXR1cw0KZnVuY3Rpb24gc21kX3Zhcl9pZl92 YWxpZCgkYXR0cywgJHRoaW5nPScnKSB7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgnbmFtZScg PT4gJycpLCAkYXR0cykpOw0KCXJldHVybiBzbWRfdmFyX2lmX3N0YXR1cyhhcnJheSgnbmFt ZScgPT4gJG5hbWUsICd0eXBlJyA9PiAndmFsaWQnKSwgJHRoaW5nKTsNCn0NCmZ1bmN0aW9u IHNtZF92YXJfaWZfdXNlZCgkYXR0cywgJHRoaW5nPScnKSB7DQoJZXh0cmFjdChsQXR0cyhh cnJheSgnbmFtZScgPT4gJycpLCAkYXR0cykpOw0KCXJldHVybiBzbWRfdmFyX2lmX3N0YXR1 cyhhcnJheSgnbmFtZScgPT4gJG5hbWUsICd0eXBlJyA9PiAndXNlJyksICR0aGluZyk7DQp9 DQpmdW5jdGlvbiBzbWRfdmFyX2lmX2F2YWlsYWJsZSgkYXR0cywgJHRoaW5nPScnKSB7DQoJ ZXh0cmFjdChsQXR0cyhhcnJheSgnbmFtZScgPT4gJycpLCAkYXR0cykpOw0KCXJldHVybiBz bWRfdmFyX2lmX3N0YXR1cyhhcnJheSgnbmFtZScgPT4gJG5hbWUsICd0eXBlJyA9PiAnYXZh aWxhYmxlJyksICR0aGluZyk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNp ZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7 DQoJJGxhbmcgPSBhcnJheSgNCgkJJ3NtZF92YXJzJyA9PiAnVmFyaWFibGVzJywNCgkJJ2Fk ZF9sYWJlbCcgPT4gJ0FkZCcsDQoJCSdjYW5jZWxfbGFiZWwnID0+ICdjYW5jZWwnLA0KCQkn Y2xlYXInID0+ICdjbHInLA0KCQknY29udHJvbCcgPT4gJ1BsdWdpbiBjb250cm9sJywNCgkJ J2RlbGV0ZV9mYWlsZWQnID0+ICdWYXJpYWJsZSBOT1QgZGVsZXRlZC4nLA0KCQknZGVsZXRl ZCcgPT4gJ1ZhcmlhYmxlIElEcyBkZWxldGVkOiB7aWR9JywNCgkJJ2RlbGV0ZWRfbnVtJyA9 PiAnVmFyaWFibGVzIGRlbGV0ZWQ6IHtudW19JywNCgkJJ2R1cGxpY2F0ZScgPT4gJzogYWxy ZWFkeSBleGlzdHMuJywNCgkJJ2VkaXQnID0+ICdFZGl0IHZhcmlhYmxlcycsDQoJCSdlbXB0 eV9leHBpcnknID0+ICctJywNCgkJJ2luc2VydF9mYWlsZWQnID0+ICdDYW5ub3QgYWRkIHZh cicsDQoJCSdpbnNlcnRlZCcgPT4gJ1ZhciBpbnNlcnRlZC4gJywNCgkJJ2xpc3RfdGl0bGUn ID0+ICdEZWZpbmVkIFZhcmlhYmxlcycsDQoJCSdub3RfYXZhaWxhYmxlJyA9PiAnc21kX3Zh cnMgdGFibGUgbm90IGluc3RhbGxlZCcsDQoJCSdwZXJfcGFnZScgPT4gJ1Nob3cge3BhZ2Vi eX0gcGVyIHBhZ2UnLA0KCQkncHVyZ2VfZXhwaXJlZCcgPT4gJ0RlbGV0ZSBhbGwgZXhwaXJl ZCB2YXJpYWJsZXM6IGFyZSB5b3Ugc3VyZT8nLA0KCQkncHVyZ2VfZXhwaXJlZF9sYWJlbCcg PT4gJ1B1cmdlIGV4cGlyZWQnLA0KCQkndGFibGVfaW5zdGFsbF9sYWJlbCcgPT4gJ0luc3Rh bGwgdGFibGUnLA0KCQkndGFibGVfaW5zdGFsbGVkJyA9PiAnVmFycyB0YWJsZSBpbnN0YWxs ZWQuICcsDQoJCSd0YWJsZV9ub3RfaW5zdGFsbGVkJyA9PiAnVmFycyB0YWJsZSBOT1QgaW5z dGFsbGVkLiAnLA0KCQkndGFibGVfbm90X3JlbW92ZWQnID0+ICdWYXJzIHRhYmxlIE5PVCBy ZW1vdmVkLiAnLA0KCQkndGFibGVfcmVtb3ZlX2NoZWNrJyA9PiAnRGVsZXRlIGVudGlyZSBz bWRfdmFycyB0YWJsZTogYXJlIHlvdSBzdXJlPycsDQoJCSd0YWJsZV9yZW1vdmVfbGFiZWwn ID0+ICdSZW1vdmUgdGFibGUnLA0KCQkndGFibGVfcmVtb3ZlZCcgPT4gJ1ZhcnMgdGFibGUg cmVtb3ZlZC4gJywNCgkJJ3RvZ2dsZScgPT4gJ3RvZycsDQoJCSd1cGRhdGVfZmFpbGVkJyA9 PiAnVmFyIG5vdCB1cGRhdGVkJywNCgkJJ3VwZGF0ZWQnID0+ICdWYXIgdXBkYXRlZC4gJywN CgkJJ3Zhcl9hdmFpbGFibGUnID0+ICdhdmFpbGFibGUnLA0KCQkndmFyX2ludmFsaWQnID0+ ICdleHBpcmVkJywNCgkJJ3Zhcl91bmF2YWlsYWJsZScgPT4gJ3VuYXZhaWxhYmxlJywNCgkJ J3Zhcl91bnVzZWQnID0+ICdlbXB0eScsDQoJCSd2YXJfdXNlZCcgPT4gJ3VzZWQnLA0KCQkn dmFyX3ZhbGlkJyA9PiAnY3VycmVudCcsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdo YXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo0OiJoZWxwIjtzOjE3NDkz OiIJPHA+PGRpdiBpZD0ic21kX2hlbHAiPjwvcD4KCgk8aDEgaWQ9InRvcCI+c21kX3ZhcnM8 L2gxPgoKCTxwPkEgc2VtaS1wZXJtYW5lbnQgZ2VuZXJpYyBzdG9yYWdlIHBsdWdpbi48L3A+ CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+QWN0cyBs aWtlIGEgdXNlci1jb250cm9sbGFibGUgcHJlZnMgdGFibGUgZm9yIHN0b3JpbmcgYXJiaXRy YXJ5IG5hbWUtdmFsdWUgcGFpcnM8L2xpPgoJCTxsaT5PcHRpb25hbCBleHBpcnkgZm9yIGVh Y2ggcGFpcjwvbGk+CgkJPGxpPlN0b3JlIGFuZCByZXRyaWV2ZSBhbnl0aGluZyB5b3UgbGlr ZSwgZnJvbSBmaXhlZCB0ZXh0IHRvIGNvbXBsZXRlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8 L3NwYW4+IHF1ZXJ5IHN0dWJzPC9saT4KCQk8bGk+VmFyaWFibGVzIGNhbiBiZSBjcmVhdGVk IHZpYSBhbiBhZG1pbi1zaWRlIGxpc3Qgb3Igb24tdGhlLWZseSBkdXJpbmcgY2xpZW50LXNp ZGUgcGFnZSBsb2FkPC9saT4KCQk8bGk+VmFyaWFibGUgc3Vic3RpdHV0aW9uIHN1cHBvcnRl ZCBhdCBwYWdlIHJ1bi10aW1lIGZvciBib3RoICYjODIxNjtuYW1lJiM4MjE3OyBhbmQgJiM4 MjE2O3ZhbHVlJiM4MjE3Oy4gU3RvcmUgdmFyaWFibGVzIHdpdGggcGxhY2Vob2xkZXIgaW5m b3JtYXRpb24gYW5kIHBsdWcgdGhlIGluZm9ybWF0aW9uIGluIHdoZW4gdGhlIHBhZ2UgbG9h ZHM8L2xpPgoJCTxsaT5XaGVuIHJldHJpZXZpbmcgaW5mb3JtYXRpb24sIHBsYWNlaG9sZGVy cyBhbmQgdmFyaWFibGUgbmFtZXMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYW55IHZhbHVlcyBm cm9tIHRoZSBjdXJyZW50IGFydGljbGUsIGZpbGUsIGxpbmsgb3IgPHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj4vc2VydmVyIHZhcmlhYmxlPC9saT4KCQk8bGk+UnVkaW1lbnRhcnkg c3RhdHVzIGNvbmRpdGlvbmFscyAodGVzdCBpZiB2YXJpYWJsZSBleGlzdHMsIGlzIHVzZWQg b3IgaGFzIGV4cGlyZWQpPC9saT4KCQk8bGk+V29ya3MgdmVyeSB3ZWxsIHdpdGggc21kX2lm PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhcHBzIj5Qb3NzaWJsZSBhcHBsaWNhdGlvbnM8L2gy PgoKCTx1bD4KCQk8bGk+Rm9ybS1iYXNlZCBxdWVyeWluZy4gU3VwcGx5IHVzZXJzIHdpdGgg YW4gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGZvcm0gb24gYSBwYWdlLiBXaGVu IGl0IGlzIHN1Ym1pdHRlZCwgcmV0cmlldmUgdGhlIHZhbHVlcyB0aGV5IHN1cHBseSBhbmQg cGx1ZyB0aGVtIGludG8gYSBwcmUtcHJlcGFyZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwv c3Bhbj4gcXVlcnkgdmFyaWFibGUuIFRocm93IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+U1FM PC9zcGFuPiBhdCBzbWRfcXVlcnkgdG8gcGVyZm9ybSBhZHZhbmNlZCBwcm9kdWN0IHNlYXJj aGVzIGZyb20gY3VzdG9tIGZpZWxkIGRhdGE8L2xpPgoJCTxsaT5TdG9yZSBzaXRlIHZpc2l0 b3IgcHJlZmVyZW5jZXMuIFVzaW5nIG1lbV9zZWxmX3JlZ2lzdGVyLCB1c2VycyBjYW4gY3Jl YXRlIGFjY291bnRzIGZvciB0aGVtc2VsdmVzIHNvIHRoYXQgb24gJiM4MjIwO2FkbWluLWxp a2UmIzgyMjE7IHBhZ2VzIHlvdSBjYW4gc3RvcmUgYW5kIHJldHJpZXZlIHBlci12aXNpdG9y IHByZWZzPC9saT4KCQk8bGk+VHJhY2sgZm9ybSBkYXRhIGFjcm9zcyBtdWx0aXBsZSBwYWdl cywgbGlrZSBhIHdlYi1iYXNlZCB3aXphcmQuIEFmdGVyIGVhY2ggcGFydCBvZiB0aGUgd2l6 YXJkIGlzIHN1Ym1pdHRlZCwgc3RvcmUgdGhlIHZhbHVlcyBpbiB0ZW1wb3Jhcnkgc21kX3Zh cnMuIFdoZW4gdGhlIHdpemFyZCBpcyBjb21wbGV0ZWQgYW5kIHRoZSB2aXNpdG9yIGhpdHMg dGhlIGZpbmFsIHN1Ym1pdCBidXR0b24sIHJldHJpZXZlIGFsbCB2YXJpYWJsZXMgc3RvcmVk IGR1cmluZyB0aGUgc2Vzc2lvbiwgZG8gc29tZXRoaW5nIHdpdGggdGhlbSBhbmQgdGhlbiBk ZWxldGUgdGhlbTwvbGk+CgkJPGxpPk1hbnksIG1hbnkgbW9yZTwvbGk+Cgk8L3VsPgoKCTxo MiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIgc29mdHdh cmUgYnkgbWUsIG9yIHRvIG1ha2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4KCgk8aDIgaWQ9 Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFz cz0icmVxdWlyZWQiPlJlcXVpcmVzIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9k b3dubG9hZHMvc21kX2xpYl92MC4zMy50eHQiPnNtZF9saWIgdjAuMzM8L2E+IHRvIGJlIGlu c3RhbGxlZCBhbmQgYWN0aXZhdGVkLjwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZy b20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85ODAv c21kX3ZhcnMiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBp bnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVn aW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5Ib3Ag b3ZlciB0byB0aGUgQWRtaW4gLSZndDsgRXh0ZW5zaW9ucyAtJmd0OyBWYXJpYWJsZXMgdGFi IGFuZCBoaXQgJiM4MjE2O0luc3RhbGwgdGFibGUmIzgyMTc7LCB0aGVuIGFkZCB2YXJpYWJs ZXMgdG8geW91ciBoZWFydCYjODIxNztzIGNvbnRlbnQuIFZpc2l0IHRoZSA8YSBocmVmPSJo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjczMzQiPmZv cnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nl c3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHJlbW92ZSB0aGUg cGx1Z2luLCBzaW1wbHkgaGl0IHRoZSAmIzgyMTY7UmVtb3ZlIHRhYmxlJiM4MjE3OyBidXR0 b24gb24gdGhlIFZhcmlhYmxlcyB0YWIgYW5kIGZpbmFsbHkgZGVsZXRlIHRoZSBwbHVnaW4g ZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdpbnMgdGFiLiBJZiBpdCBpcyBubyBsb25nZXIgaW4g dXNlIGJ5IGFueSBvdGhlciBwbHVnaW5zIHlvdSBtYXkgYWxzbyBkZWxldGUgc21kX2xpYi48 L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPlRoZSBhZG1pbi1zaWRlIHNj cmVlbiBzaW1wbHkgYWxsb3dzIHlvdSB0byBhZGQgdmFyaWFibGUgbmFtZXMgYW5kIGFzc29j aWF0ZWQgdmFsdWVzLiBZb3UgY2FuIHB1dCBhbiBvcHRpb25hbCBleHBpcnkgdGltZSBhZ2Fp bnN0IGVhY2ggdmFsdWUgaWYgeW91IHdpc2ggaW4gdGhlIGZvcm1hdCAmIzgyMjA7PHNwYW4g Y2xhc3M9ImNhcHMiPllZWVk8L3NwYW4+LU1NLUREIEhIOk1OOlNTJiM4MjIxOy48L3A+CgoJ PHA+QWx0ZXJuYXRpdmVseSwgdXNpbmcgYSBzcGVjaWFsIHN5bnRheCBiZWdpbm5pbmcgd2l0 aCBhbiBAIHNpZ24geW91IGNhbiBzcGVjaWZ5IGFuIG9mZnNldCBzb21lIHRpbWUgaW4gdGhl IGZ1dHVyZSBmcm9tIHRoZSBjdXJyZW50IHRpbWUuIEZvciBleGFtcGxlIHB1dHRpbmcgJiM4 MjIwO0AxdyYjODIyMTsgaW50byB0aGUgZXhwaXJ5IGJveCB3aWxsIHNldCB0aGUgdmFyaWFi bGUgdG8gZXhwaXJlIGluIDEgd2VlayBmcm9tIHRoZSB0aW1lIHlvdSBoaXQgdGhlIEFkZCBi dXR0b24uICYjODIyMDtAMjBtJiM4MjIxOyBzZXRzIHRoZSB2YXJpYWJsZSB0byBleHBpcmUg aW4gMjAgbWludXRlcyYjODIxNzsgdGltZSBhbmQgJiM4MjIwO0AxMGQmIzgyMjE7IHdpbGwg ZXhwaXJlIHRoZSB2YXJpYWJsZSBhZnRlciAxMCBkYXlzLiBUaGUgb3B0aW9ucyBhcmUgdGhl IGluaXRpYWwgbGV0dGVycyBmcm9tOiA8Y29kZT5zPC9jb2RlPmVjb25kLCA8Y29kZT5tPC9j b2RlPmludXRlLCA8Y29kZT5oPC9jb2RlPm91ciwgPGNvZGU+ZDwvY29kZT5heSwgPGNvZGU+ dzwvY29kZT5lZWsgb3IgPGNvZGU+eTwvY29kZT5lYXIuIE5vdGUgdGhhdCBtb250aHMgYXJl IG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGUgbWF0aHMgaXMgdHJpY2t5OiB1c2Ugd2Vla3Mg aW5zdGVhZCE8L3A+CgoJPHA+QWxsIHRoZSB1c3VhbCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPi1zdHlsZSBjb250cm9scyBhcmUgYXZhaWxhYmxlIG9uY2UgYSB2YXJpYWJsZSBo YXMgYmVlbiBzdG9yZWQuIFlvdSBjYW4gaGl0IEVkaXQgdG8gYW1lbmQgYW55IG9mIHRoZSBp bmZvIGFib3V0IGEgdmFyaWFibGUgYnV0IHlvdSBtYXkgbm90IGhhdmUgZHVwbGljYXRlIG5h bWVzLiBIaXQgdGhlICYjODIxNjt4JiM4MjE3OyB0byBkZWxldGUgYSBzaW5nbGUgZW50cnkg b3IgdXNlIHRoZSBjaGVja2JveGVzIGFuZCBBbGwvTm9uZS9SYW5nZSAmYW1wOyBEZWxldGUg Y29udHJvbHMgYXQgdGhlIGJvdHRvbSBmb3IgcGVyZm9ybWluZyBtYXNzIGNoYW5nZXMuPC9w PgoKCTxwPllvdSBjYW4gc29ydCB0aGUgbGlzdHMgYnkgY2xpY2tpbmcgdGhlIGNvbHVtbiBo ZWFkaW5ncyBvciBmaWx0ZXIgdGhlIGxpc3QgdXNpbmcgdGhlIHNlYXJjaCBmb3JtIGF0IHRo ZSB0b3AuIEl0JiM4MjE3O3MgZmFpcmx5IHN0YW5kYXJkLCB0aGUgb25seSBvbmUgdGhhdCBo YXMgc3BlY2lhbCBzeW50YWF4IGlzIHRoZSBFeHBpcmVkIHNlYXJjaCBvcHRpb24uIFZhbGlk IGVudHJpZXMgdG8gc2VhcmNoIGZvciBhcmUgPGNvZGU+eWVzPC9jb2RlPiwgPGNvZGU+bm88 L2NvZGU+LCA8Y29kZT4tPC9jb2RlPiAodG8gc2hvdyBlbnRyaWVzIHRoYXQgaGF2ZSBubyBl eHBpcnkpIG9yIDxjb2RlPm5vLTwvY29kZT4gdG8gc2hvdyBlbnRyaWVzIHRoYXQgaGF2ZSBl aXRoZXIgbm90IGV4cGlyZWQgb3IgaGF2ZSBub3QgaGFkIGFuIGV4cGlyeSBzZXQuPC9wPgoK CTxwPkF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgbGlzdCBpcyBhIGJ1dHRvbiBsYWJlbGxlZCAm IzgyMTY7UHVyZ2UgZXhwaXJlZCYjODIxNzsuIEhpdHRpbmcgdGhhdCBhbmQgY29uZmlybWlu ZyB3aWxsIGRlbGV0ZSBhbGwgdmFyaWFibGVzIHRoYXQgYXJlIG91dCBvZiBkYXRlIChpLmUu IGV4cGlyZWQgPSBZZXMpLjwvcD4KCgk8aDIgaWQ9InN1YnMiPlN1YnN0aXR1dGlvbnM8L2gy PgoKCTxwPldoZW4geW91IHN0b3JlIHZhcmlhYmxlcyB5b3UgY2FuIHNwZWNpZnkgdGhhdCBj ZXJ0YWluIGRhdGEgaXMgbm90IGtub3duIGF0IHN0b3JhZ2UgdGltZSBidXQgd2lsbCBiZSBw cm92aWRlZCBhdCBydW4gdGltZS4gSXQgY2FuIGJlIGFueSB0ZXh0IHlvdSBsaWtlIGJ1dCBm b3IgY29udmVuaWVuY2UgYW5kIGZvciBlYXNlIG9mIHJlcGxhY2VtZW50LCBhIHN0YW5kYXJk IHRlY2huaXF1ZSBpcyB0byBzdXJyb3VuZCByZXBsYWNlbWVudCB2YXJpYWJsZXMgd2l0aCA8 Y29kZT57PC9jb2RlPiBhbmQgPGNvZGU+fTwvY29kZT4gbWFya3MuIFNvIGlmIHlvdSBtYWRl IGEgdmFyaWFibGUgY2FsbGVkICYjODIyMDtoZWxsbyYjODIyMTsgYW5kIHlvdSBtYWRlIGl0 cyB2YWx1ZSA8Y29kZT5HcmVldGluZ3Mge3VzZXJ9LCBJIGhvcGUgeW91IGFyZSB3ZWxsPC9j b2RlPiB5b3UgY291bGQgbGF0ZXIgaW5qZWN0IHRoZSA8Y29kZT4/YXV0aG9yaWQ8L2NvZGU+ IHZhbHVlIGludG8gdGhpcyB2YXJpYWJsZSB0byBjdXN0b21pc2UgdGhlIG1lc3NhZ2UuIFNl ZSA8YSBocmVmPSIjZ2V0Ij5zbWRfdmFyX2dldDwvYT4uPC9wPgoKCTxwPlRoaXMgaXMgYnkg bm8gbWVhbnMgdGhlIG9ubHkgd2F5IG9mIHN1YnN0aXR1dGluZyB2YWx1ZXMgJiM4MjEyOyB5 b3UgY2FuIHVzZSB5b3VyIGltYWdpbmF0aW9uICYjODIxMjsgYnV0IGl0IGlzIHRoZSBjb252 ZW50aW9uIHVzZWQgaW4gdGhlIGhlbHAgdGV4dC48L3A+CgoJPHA+WW91IG1heSBhbHNvIGRp cmVjdGx5IHBsYWNlIDxjb2RlPj88L2NvZGU+IGZpZWxkcyBpbnRvIHRoZSBWYWx1ZSBmaWVs ZCByZWFkeSBmb3IgcmVwbGFjZW1lbnQgZnJvbSB0aGUgY3VycmVudCBhcnRpY2xlIGluIHdo aWNoIGFuIDxhIGhyZWY9IiNnZXQiPnNtZF92YXJfZ2V0PC9hPiBhcHBlYXJzLiBUaGlzIG1h eSBzYXZlIHlvdSBoYXZpbmcgdG8gbWFudWFsbHkgc3BlY2lmeSBhIGxvdCBvZiB2YWx1ZXMg dG8gPGNvZGU+aW5qZWN0PC9jb2RlPiBsYXRlci4gV2hlbiB1c2luZyB0aGUgPGEgaHJlZj0i I3B1dCI+c21kX3Zhcl9wdXQ8L2E+IHRhZywgc2VlIHRoZSA8Y29kZT5nZXRfdmFsc19ub3c8 L2NvZGU+IGF0dHJpYnV0ZSBmb3IgaG93IHRvIGNvbnRyb2wgd2hldGhlciB2YXJpYWJsZSBy ZXBsYWNlbWVudCBpcyBkb25lIGF0IGluc2VydCB0aW1lIG9yIG5vdC48L3A+CgoJPGgyIGlk PSJ0YWdzIj5UYWdzPC9oMj4KCgk8aDMgaWQ9ImdldCI+c21kX3Zhcl9nZXQ8L2gzPgoKCTxw PlJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGFuZCBvcHRpb25hbGx5IGluamVj dCBzb21lIHN1YnN0aXR1dGlvbiBkYXRhIGludG8gdGhlIHJlc3VsdC4gQXR0cmlidXRlcyBh cmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5uYW1lPC9zcGFu PiA6IHRoZSB2YXJpYWJsZSBuYW1lIHRvIHJldHJpZXZlLiBDYW4gYmUgZml4ZWQgdGV4dCBv ciBtYXkgaW5jbHVkZSBmaWVsZHMgcmVhZCBmcm9tIGFueXdoZXJlIGluIHRoZSBjdXJyZW50 IGFydGljbGUsIGZpbGUsIGxpbmsgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4u IEZvciBleGFtcGxlIDxjb2RlPm5hbWU9JnF1b3Q7cHJlZiZxdW90OzwvY29kZT4gd2lsbCBy ZWNhbGwgdGhhdCBuYW1lZCB2YXJpYWJsZS4gPGNvZGU+bmFtZT0mcXVvdDtwcmVmXz9hdXRo b3JpZCZxdW90OzwvY29kZT4gd2lsbCByZXRyaWV2ZSBhIHZhcmlhYmxlIHdpdGggYSBuYW1l IG1hZGUgdXAgb2YgdGhlIHdvcmQgJiM4MjE2O3ByZWYmIzgyMTc7LCBhbiB1bmRlcnNjb3Jl IGFuZCB0aGVuIHRoZSBhdXRob3Igb2YgdGhlIGN1cnJlbnQgYXJ0aWNsZS4gU2ltaWxhcmx5 IGlmIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB3YXMgPGNvZGU+aHR0cDov L3NpdGUuY29tL2luZGV4LnBocD9tYXA9eWVzJmFtcDt6b289Y2hlc3RlcjwvY29kZT4geW91 IGNvdWxkIHVzZSA8Y29kZT5uYW1lPSZxdW90O2xvY2F0aW9uXz96b28mcXVvdDs8L2NvZGU+ IHRvIGdyYWIgdGhlIHZhcmlhYmxlIGNhbGxlZCAmIzgyMjA7bG9jYXRpb25fY2hlc3RlciYj ODIyMTsgdGhhdCBwZXJoYXBzIGRpc3BsYXllZCB0aGUgbG9jYXRpb24gb2YgQ2hlc3RlciB6 b28uIFdoZW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGNoYW5nZXMgKGlu IHJlc3BvbnNlIHRvIHNvbWUgdXNlciBpbnB1dCksIHRoZSByZXRyaWV2ZWQgdmFyaWFibGUg Y2hhbmdlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dmFsaWQ8L3NwYW4+ IDogYnkgZGVmYXVsdCwgYW55IHZhbHVlIHRoYXQgaGFzIGV4cGlyZWQgd2lsbCA8ZW0+bm90 PC9lbT4gYmUgcmV0cmlldmVkLiBTZXQgdGhpcyBhdHRyaWJ1dGUgdG8gPGNvZGU+MDwvY29k ZT4gdG8gYWxsb3cgdmFsdWVzIHRvIGJlIHJldHJpZXZlZCByZWdhcmRsZXNzIG9mIGV4cGly eS4gTm90ZSB0aGF0IGFueSB2YWx1ZXMgd2l0aG91dCBhbiBleHBpcnkgc2V0IGFyZSBhbHdh eXMgY29uc2lkZXJlZCB2YWxpZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ YWxsb3dfc3BhY2VzPC9zcGFuPiA6IHdoZXRoZXIgdG8gYWxsb3cgc3BhY2VzIGluIDxjb2Rl Pj88L2NvZGU+IGZpZWxkIG5hbWVzLiBEZWZhdWx0IGlzIDAgKG5vKS4gVXNlZnVsIGlmIHlv dXIgY3VzdG9tIGZpZWxkIG5hbWVzIGhhdmUgc3BhY2VzIGluIHRoZW0sIGJ1dCBiZSBhd2Fy ZSB0aGF0IHRoaXMgY2FuIGNhdXNlIHByb2JsZW1zIHdpdGggbWF0Y2hpbmcsIGUuZy4gdGhl IHZhbHVlICYjODIyMDtUaGlzIGlzIGEgP3Rlc3QgZmllbGQgd2l0aCBzcGFjZXMsIG9rLiYj ODIyMTsgd2lsbCBhdHRlbXB0IHRvIGxvb2sgZm9yIGEgZmllbGQgbGFiZWxsZWQgJiM4MjIw O3Rlc3QgZmllbGQgd2l0aCBzcGFjZXMmIzgyMjE7LiBXaXRoIDxjb2RlPmFsbG93X3NwYWNl cz0mcXVvdDswJnF1b3Q7PC9jb2RlPiBzZXQgdG8gMCBpdCB3b3VsZCBqdXN0IGdyYWIgdGhl IGZpZWxkIG5hbWVkICYjODIyMDt0ZXN0JiM4MjIxOzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHQtbmFtZSI+aW5qZWN0PC9zcGFuPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg c3Vic3RpdHV0aW9ucyB0byBtYWtlLiBEZWZpbmUgdGhlbSBsaWtlIHRoaXM6IDxjb2RlPmlu amVjdD0mcXVvdDt7dXNlcn06RGF2ZSwge2xvZ2lufTogZGF2ZXAmcXVvdDs8L2NvZGU+LiBJ ZiB0aGUgdGV4dCB7dXNlcn0gb3Ige2xvZ2lufSBhcHBlYXIgaW4gdGhlIHJldHJpZXZlZCB2 YXJpYWJsZSYjODIxNztzIHZhbHVlIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBy ZWxldmFudCB3b3Jkcy4gTm90ZSB0aGF0IHRoZSByZXBsYWNlZCB3b3JkcyBtYXkgY29udGFp biA8Y29kZT4/PC9jb2RlPiBmaWVsZHMgdG8gcmVhZCBmcm9tIHRoZSBjdXJyZW50IGFydGlj bGUsIGZpbGUsIGxpbmsgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5kZWxpbTwvc3Bhbj4gOiB0aGUgZGVs aW1pdGVyIGJldHdlZW4gZGVmaW5pdGlvbnMgaW4gdGhlIDxjb2RlPmluamVjdDwvY29kZT4g YXR0cmlidXRlLiBEZWZhdWx0IGlzIGEgPGNvZGU+LDwvY29kZT4gKGNvbW1hKTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+cGFyYW1kZWxpbTwvc3Bhbj4gOiB0aGUgZGVs aW1pdGVyIGJldHdlZW4gYSBzdWJzdGl0dXRpb24gdmFyaWFibGUgYW5kIGl0cyByZXBsYWNl bWVudCB0ZXh0IGluIHRoZSA8Y29kZT5pbmplY3Q8L2NvZGU+IGF0dHJpYnV0ZS4gRGVmYXVs dCBpcyBhIDxjb2RlPjo8L2NvZGU+IChjb2xvbik8L2xpPgoJPC91bD4KCgk8aDMgaWQ9InB1 dCI+c21kX3Zhcl9wdXQ8L2gzPgoKCTxwPlN0b3JlIHRoZSB2YWx1ZSBvZiBhIG5hbWVkIHZh cmlhYmxlLCBvcHRpb25hbGx5IHJlcGxhY2luZyBzdHVmZiBmcm9tIHRoZSBjdXJyZW50IGFy dGljbGUsIGZpbGUsIGxpbmsgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gd2l0 aCBpdHMgY29udGVudCAodmlhIHRoZSA8Y29kZT4/bmFtZV9vZl9maWVsZDwvY29kZT4gbm90 YXRpb24pLiBZb3UgbWF5IHN0b3JlIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgYXQgb25jZSBi eSBsaXN0aW5nIHRoZW0gaW4gdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGFuZCA8Y29kZT52YWx1 ZTwvY29kZT4gYXR0cmlidXRlcyAobm90ZSBpbiB0aGlzIGNhc2UgdGhleSB3aWxsIGFsbCBo YXZlIHRoZSBzYW1lIDxjb2RlPmV4cGlyeTwvY29kZT4pLiBBdHRyaWJ1dGVzIGFyZTo8L3A+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogYSBj b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBuYW1lcyB0byBzdG9yZSB2YXJpYWJsZXMgdW5kZXIu IEVhY2ggY2FuIGJlIGEgZnhlZCBzdHJpbmcgb3IgbWFkZSB1cCBvZiA8Y29kZT4/PC9jb2Rl PiBmaWVsZHM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnZhbHVlPC9zcGFu PiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIHRvIGdpdmUgdGhlIHZhcmlh Ymxlcy4gQWdhaW4sIGNhbiBiZSBhIGZ4ZWQgc3RyaW5nIG9yIG1hZGUgdXAgb2YgPGNvZGU+ PzwvY29kZT4gZmllbGRzIGFuZCBjYW4gaW5jbHVkZSBwbGFjZWhvbGRlcnMgdGhhdCBtYXkg YmUgdXNlZCBmb3IgbGF0ZXIgc3Vic3RpdHV0aW9uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0dC1uYW1lIj5leHBpcmVzPC9zcGFuPiA6IHRoZSBleHBpcnkgZGF0ZSBpbiB0aGUgZm9y bWF0ICYjODIyMDs8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tTU0tREQgSEg6TU46 U1MmIzgyMjE7IG9yIEAgbm90YXRpb24gdG8gc3BlY2lmeSBhIGZ1dHVyZSBvZmZzZXQgZnJv bSBub3cuIE9ubHkgb25lIGV4cGlyeSB0aW1lIG1heSBiZSBzZXQgcGVyIGNhbGwgdG8gPGNv ZGU+c21kX3Zhcl9wdXQ8L2NvZGU+LCBzbyBpZiB5b3UgaW5zZXJ0IG1vcmUgdGhhbiBvbmUg dmFyaWFibGUgdGhleSB3aWxsIGFsbCBnZXQgdGhlIHNhbWUgZXhwaXJ5PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5nZXRfdmFsc19ub3c8L3NwYW4+IDogaWYgc2V0IHRv IDEgKGl0cyBkZWZhdWx0KSBhbnkgPGNvZGU+PzwvY29kZT4gYXJ0aWNsZSBmaWVsZHMgeW91 IHNwZWNpZnkgaW4gdGhlIDxjb2RlPnZhbHVlPC9jb2RlPiBwYXJhbWV0ZXIgd2lsbCBiZSBy ZXBsYWNlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29udGVudCA8ZW0+YmVmb3JlPC9l bT4gdGhlIHZhciBpcyBhZGRlZCB0byB0aGUgdGhlIGRhdGFiYXNlLiBJZiB5b3Ugd2lzaCB0 byBzdG9yZSB0aGUgPGNvZGU+PzwvY29kZT4gZmllbGRzIGluIHRoZWlyIHJhdyBmb3JtIChl LmcuIDxjb2RlPnZhbHVlPSZxdW90O1RoZSBrZXl3b3JkcyBmb3Ige3VzZXJ9IGFyZTogP2tl eXdvcmRzJnF1b3Q7PC9jb2RlPikgdGhlbiBzZXQgdGhpcyB0byAwLiBOb3RlIHRoYXQgdGhl IDxjb2RlPj88L2NvZGU+IGZpZWxkcyBhcmUgYWx3YXlzIHJlcGxhY2VkIGluIHRoZSA8Y29k ZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGU7IDxjb2RlPmdldF92YWxzX25vdzwvY29kZT4gb25s eSBhZmZlY3RzIHRoZSA8Y29kZT52YWx1ZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0LW5hbWUiPmFjdGlvbjwvc3Bhbj4gOiBvbmUgb2YgZm91ciB2YWx1ZXMgdGhhdCBk ZXRlcm1pbmUgd2hhdCB0byBkbyB3aXRoIHRoZSB2YXJpYWJsZSYjODIxNztzIHZhbHVlLiBJ biB0aGUgZmlyc3QgdGhyZWUgY2FzZXMsIGlmIHRoZSB2YXJpYWJsZSA8Y29kZT5uYW1lPC9j b2RlPiBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkOgoJPHVsPgoJCTxsaT48 Y29kZT5yZXBsYWNlPC9jb2RlPiAodGhlIGRlZmF1bHQpIHdpbGwgY29tcGxldGVseSByZXBs YWNlIGFueSBleGlzdGluZyB2YXJpYWJsZSB3aXRoIHRoZSBuZXcgPGNvZGU+dmFsdWU8L2Nv ZGU+PC9saT4KCQk8bGk+PGNvZGU+YXBwZW5kPC9jb2RlPiB3aWxsIGFkZCB0aGUgbmV3IHZh bHVlIG9udG8gdGhlIGVuZCBvZiBhbnkgZXhpc3RpbmcgdmFsdWUgd2l0aCB0aGF0IG5hbWU8 L2xpPgoJCTxsaT48Y29kZT5wcmVwZW5kPC9jb2RlPiB3aWxsIHNpbWlsYXJseSBhZGQgdGhl IG5ldyB2YWx1ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSBleGlzdGluZyB2YWx1ZS48L2xp PgoJCTxsaT48Y29kZT5kZWxldGU8L2NvZGU+IHdpbGwgcmVtb3ZlIHRoZSB2YXJpYWJsZSBp bnN0ZWFkIG9mIHN0b3JpbmcgaXQgKHRoaXMgc2ltcGx5IGNhbGxzIDxhIGhyZWY9IiNkZWwi PnNtZF92YXJfZGVsZXRlPC9hPik8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0LW5hbWUiPmFsbG93X3NwYWNlczwvc3Bhbj4gOiB3aGV0aGVyIHRvIGFsbG93IHNw YWNlcyBpbiA8Y29kZT4/PC9jb2RlPiBmaWVsZCBuYW1lcy4gRGVmYXVsdCBpcyAwIChubyk8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmRlbGltPC9zcGFuPiA6IHRoZSBk ZWxpbWl0ZXIgdG8gdXNlIGJldHdlZW4gPGNvZGU+bmFtZXM8L2NvZGU+IGFuZCA8Y29kZT52 YWx1ZXM8L2NvZGU+LiBEZWZhdWx0IGlzIGEgPGNvZGU+LDwvY29kZT4gKGNvbW1hKTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+cmV0dXJuPC9zcGFuPiA6IHdoYXQgdG8g c2hvdyBvbiB0aGUgc2NyZWVuIGlmIGFueXRoaW5nLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0 IHRvIDxjb2RlPnNpbGVudDwvY29kZT4gc28geW91IHdpbGwgc2VlIG5vIG91dHB1dCBidXQg c2V0dGluZyBpdCB0byA8Y29kZT4xPC9jb2RlPiB3aWxsIHJldHVybiBhIHN0YXR1cyBjb2Rl LiBQb3NzaWJseSB1c2VmdWwgd2hlbiB0ZXN0aW5nIHRoZSByZXR1cm4gdmFsdWUgZm9yIHN1 Y2Nlc3Mgb3IgZmFpbHVyZSB1c2luZyBhIHBsdWdpbiBsaWtlIHNtZF9pZjwvbGk+Cgk8L3Vs PgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPklmIHRoZSA8Y29kZT5uYW1lPC9jb2Rl PiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZSB2YXJpYWJsZSB3aWxsIGJlIGNyZWF0ZWQ8 L2xpPgoJCTxsaT5JZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGUgPGNvZGU+dmFsdWU8L2NvZGU+ IHdpbGwgYmUgdXBkYXRlZCBhbmQgZWl0aGVyIHJlcGxhY2VkLCBhcHBlbmRlZCBvciBwcmVw ZW5kZWQgdG8gdGhlIGV4aXN0aW5nIHZhcmlhYmxlIGRlcGVuZGluZyBvbiB0aGUgPGNvZGU+ YWN0aW9uPC9jb2RlPiBzcGVjaWZpZWQ8L2xpPgoJCTxsaT5Zb3UgbWF5IHN0b3JlIGEgdmFy aWFibGUgd2l0aCBhbiBlbXB0eSB2YWx1ZTwvbGk+CgkJPGxpPklmIG5vIGV4cGlyeSBpcyBz cGVjaWZpZWQsIHRoZSBleHBpcnkgcmVtYWlucyB0aGUgc2FtZTwvbGk+CgkJPGxpPklmIGFu IGV4cGlyeSAob3IgYW4gb2Zmc2V0IGV4cGlyeSB1c2luZyB0aGUgQCBub3RhdGlvbikgaXMg c3BlY2lmaWVkLCB0aGUgZXhwaXJ5IHdpbGwgYmUgdXBkYXRlZCBhcyB3ZWxsPC9saT4KCTwv dWw+CgoJPGgzIGlkPSJkZWwiPnNtZF92YXJfZGVsZXRlPC9oMz4KCgk8cD5SZW1vdmVzIGEg dmFyaWFibGUgZnJvbSB0aGUgdGFibGUuIEF0dHJpYnV0ZXM6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5uYW1lPC9zcGFuPiA6IHRoZSBuYW1lIG9mIHRoZSB2 YXJpYWJsZSB0byByZW1vdmUuIENhbiB1c2UgPGNvZGU+PzwvY29kZT4gZmllbGQgbmFtZXMg dG8gbWFrZSB1cCB0aGUgbmFtZSBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHQtbmFtZSI+YWxsb3dfc3BhY2VzPC9zcGFuPiA6IHdoZXRoZXIgdG8gYWxsb3cgc3Bh Y2VzIGluIDxjb2RlPj88L2NvZGU+IGZpZWxkIG5hbWVzLiBEZWZhdWx0IGlzIDAgKG5vKTwv bGk+Cgk8L3VsPgoKCTxoMyBpZD0ic3RhdCI+c21kX3Zhcl9zdGF0dXM8L2gzPgoKCTxwPlF1 ZXJpZXMgdGhlIHN0YXR1cyBvZiBhIHZhcmlhYmxlIGZvciB1cCB0byB0aHJlZSB0eXBlcyBv ZiBpbmZvcm1hdGlvbjo8L3A+CgoJPG9sPgoJCTxsaT5hdmFpbGFibGUgOiBkb2VzIHRoZSB2 YXJpYWJsZSBleGlzdCBhdCBhbGw8L2xpPgoJCTxsaT51c2UgOiBkb2VzIHRoZSB2YXJpYWJs ZSYjODIxNztzIHZhbHVlIGNvbnRhaW4gc29tZSBkYXRhIChvciBpcyBpdCBlbXB0eSk8L2xp PgoJCTxsaT52YWxpZCA6IGlzIHRoZSB2YXJpYWJsZSBjdXJyZW50IChpLmUgbm90IGV4cGly ZWQpPC9saT4KCTwvb2w+CgoJPHA+VGhlIG91dHB1dCBvZiB0aGlzIHRhZyBpcyB1c2VmdWwg dG8gaW5zZXJ0IGludG8gc21kX2lmLjwvcD4KCgk8cD5BdHRyaWJ1dGVzOjwvcD4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bmFtZTwvc3Bhbj4gOiB0aGUgbmFtZSBv ZiB0aGUgdmFyaWFibGUgdG8gcXVlcnkuIENhbiB1c2UgPGNvZGU+PzwvY29kZT4gZmllbGQg bmFtZXMgdG8gbWFrZSB1cCB0aGUgbmFtZSBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdHQtbmFtZSI+YWxsb3dfc3BhY2VzPC9zcGFuPiA6IHdoZXRoZXIgdG8gYWxs b3cgc3BhY2VzIGluIDxjb2RlPj88L2NvZGU+IGZpZWxkIG5hbWVzLiBEZWZhdWx0IGlzIDAg KG5vKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dHlwZTwvc3Bhbj4gOiBj b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0eXBlcyBvZiBpbmZvcm1hdGlvbiB5b3Ugd2lzaCB0 byBrbm93LiBEZWZhdWx0IGlzIDxjb2RlPnZhbGlkPC9jb2RlPiBidXQgeW91IG1heSBzcGVj aWZ5IG9uZSBvciBtb3JlIG9mOiA8Y29kZT52YWxpZDwvY29kZT4sIDxjb2RlPnVzZTwvY29k ZT4gb3IgPGNvZGU+YXZhaWxhYmxlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+cmV0dXJuPC9zcGFuPiA6IHdoYXQgdG8gcmV0dXJuIGZyb20gdGhlIGNhbGwu IERlZmF1bHQgaXMgPGNvZGU+bnVtYmVyPC9jb2RlPiB3aGljaCB3aWxsIHJldHVybiBhIDxj b2RlPjE8L2NvZGU+IGlmIGVhY2ggPGNvZGU+dHlwZTwvY29kZT4gb2YgaW5mbyBpcyBhIHBv c2l0aXZlIG91dGNvbWUgb3IgPGNvZGU+MDwvY29kZT4gaWYgaXQgaXMgbmVnYXRpdmUuIFlv dSBtYXkgYWxzbyBzcGVjaWZ5IDxjb2RlPm5hbWU8L2NvZGU+IHdoaWNoIHdvdWxkIGluc3Rl YWQgcmV0dXJuIG1vcmUgaHVtYW4tZnJpZW5kbHkgdGVybXMgdGhhdCB5b3UgbWlnaHQgY2hv b3NlIHRvIGRpc3BsYXkgb24geW91ciBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dC1uYW1lIj5kZWxpbTwvc3Bhbj4gOiB0aGUgZGVsaW1pdGVyIHVzZWQgYmV0d2VlbiA8Y29k ZT50eXBlPC9jb2RlPnMuIERlZmF1bHQgaXMgYSA8Y29kZT4sPC9jb2RlPiAoY29tbWEpPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5vdXRkZWxpbTwvc3Bhbj4gOiB3aGVu IHVzaW5nIG1vcmUgdGhhbiBvbmUgPGNvZGU+dHlwZTwvY29kZT4gdGhlIHZhbHVlcyBhcmUg Y29uY2F0ZW5hdGVkIGludG8gYSBzaW5nbGUgc3RyaW5nLCBlYWNoIHNlcGFyYXRlZCBieSB0 aGlzIGRlbGltaXRlci4gRGVmYXVsdCBpcyBhIDxjb2RlPnw8L2NvZGU+IChwaXBlKTwvbGk+ Cgk8L3VsPgoKCTxoMyBpZD0iaWZzdGF0Ij5zbWRfdmFyX2lmX3N0YXR1czwvaDM+CgoJPHA+ Q29udmVuaWVuY2UgdGFnIHRoYXQgZXZhbHVhdGVzIGEgc2luZ2xlIHN0YXR1cyB0eXBlIGFu ZCB0YWtlcyBhY3Rpb24gaWYgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZS4gU3VwcG9ydHMgPGNv ZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPi4gQXR0cmlidXRlczo8L3A+CgoJPHVsPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhlIG5hbWUgb2Yg dGhlIHZhcmlhYmxlIHRvIHF1ZXJ5LiBDYW4gdXNlIDxjb2RlPj88L2NvZGU+IGZpZWxkIG5h bWVzIHRvIG1ha2UgdXAgdGhlIG5hbWUgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPnR5cGU8L3NwYW4+IDogb25lIG9mIHRoZSB0aHJlZSB0eXBlcyBv ZiBpbmZvIHlvdSB3aXNoIHRvIGNoZWNrLCBuYW1lbHk6IDxjb2RlPnZhbGlkPC9jb2RlPiAo dGhlIGRlZmF1bHQpLCA8Y29kZT51c2U8L2NvZGU+IG9yIDxjb2RlPmF2YWlsYWJsZTwvY29k ZT48L2xpPgoJPC91bD4KCgk8aDMgaWQ9ImlmcyI+c21kX3Zhcl9pZl92YWxpZCAvIHNtZF92 YXJfaWZfdXNlZCAvIHNtZF92YXJfaWZfYXZhaWxhYmxlPC9oMz4KCgk8cD5UaHJlZSBmdXJ0 aGVyIGNvbnZlbmllbmNlIHRhZ3MgdG8gc2ltcGx5IHRlc3QgZm9yIGEgc3BlY2lmaWMgc3Rh dHVzLiBUaGV5IGFsbCBzdXBwb3J0IDxjb2RlPiZsdDt0eHA6ZWxzZSAvJmd0OzwvY29kZT4g YW5kIHRha2UgYSBzaW5nbGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8 aDIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwvaDI+CgoJPHA+Q29taW5nIHNvb24mIzgyMzA7 PC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+ MDcgSnVuIDA4IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YSByZWxlYXNlPC9saT4KCQk8 bGk+MDggSnVuIDA4IHwgMC4xMSB8IEFkZGVkIDxjb2RlPmFjdGlvbjwvY29kZT4sIDxjb2Rl PmdldF92YWxzX25vdzwvY29kZT4gYW5kIDxjb2RlPmRlbGltPC9jb2RlPiB0byBzbWRfdmFy X3B1dCA7IHJlbW92ZWQgPGNvZGU+ZGVsZXRlPC9jb2RlPiA7IG11bHRpcGxlIHZhcnMgY2Fu IG5vdyBiZSBwdXQgYXQgb25jZSB3aXRoIHRoZSBzYW1lIGV4cGlyeTwvbGk+CgkJPGxpPjA5 IEp1biAwOCB8IDAuMTIgfCBCdWcgZml4OiBhbGxvdyBlbXB0eSB2YWx1ZXMgb24gdGhlIGFk bWluIHNpZGUgKHRoYW5rcyB1bGkpPC9saT4KCTwvdWw+CgoJPHA+PC9kaXY+PC9wPgo8IS0t IC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K I3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS40NSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQt d2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBt b25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5i bG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFj a2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBw eCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6 dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1i b3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAg YTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3Jh dGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90 dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3Jn aWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRf aGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4 IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQoj c21kX2hlbHAgaDMgeyBjb2xvcjogIzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5z LXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJh bnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hl bHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7 IH0KI3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxw IC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNz bWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1i b3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29s aWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5 cGU6c3F1YXJlOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbi1sZWZ0OjM1cHg7IH0KI3NtZF9o ZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9CiNzbWRfaGVscCAucmVxdWlyZWQgeyBj b2xvcjpyZWQ7IH0KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoi O3M6MzoibWQ1IjtzOjMyOiI1MjJmNGQ3YzhjZjM1ZGM4Nzk4MDU0MmI0NDczZTdkMCI7fQ==