# Name: smd_prognostics v0.11 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in TXP # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjU3Nzk1OiJnbG9iYWwgJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXMsICRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdDsNCiRzbWRf cHJvZ25vc3RpY3NfY2hlY2tzdW1zID0gcnRyaW0oZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19kaXInLCB0eHBhdGgsIDEpLCBEUykgLiBEUyAuIGdldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfcHJlZml4JywgJycpLidzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLnR4dCc7DQokaGRy b24gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJywgJycpOw0KJHNt ZF9wcm9nbm9zdGljc19zcWxwcm90ID0gbmV3IHNtZF9wcm9nX1BoUHJvdGVjdG9yKGZhbHNl KTsNCg0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAkc21kX3By b2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkdHhwX3VzZXI7DQoN Cgkkc21kX3Byb2dub3N0aWNzX2V2ZW50ID0gJ3NtZF9wcm9nbm9zdGljcyc7DQoJJHNtZF9w cm9nbm9zdGljc19wcml2cyA9ICcxLDInOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3Mg PSBncHMoJ3NtZF9wcm9nbm9zdGljc19zdXBwcmVzcycpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUgPSBhcnJheSgNCgkJJ21zZycgPT4NCiAgICAgICAgICcuc21kX3Byb2dfd2FybiB7 IG1hcmdpbjowIGF1dG8gMTBweDsgd2lkdGg6NTAwcHg7IGJhY2tncm91bmQ6I2ZmYzsgYm9y ZGVyOjJweCBkYXNoZWQgcmVkOyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0NDQ7IH0NCiAgICAg ICAgICAuc21kX3Byb2dfd2FybiBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Izk2Mzsg fQ0KICAgICAgICAgIC5zbWRfcHJvZ193YXJuIHNwYW4geyBmb250LXdlaWdodDpib2xkOyB9 DQogICAgICAgICAgLnNtZF9wcm9nX3dhcm4gZGl2IHsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFk ZGluZy1ib3R0b206MTBweDsgfScsDQoJCSdzZXR1cCcgPT4NCiAgICAgICAgICcuc21kX2xh YmVsIHsgdGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRs ZTsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ19idG5zIGZvcm0geyBkaXNwbGF5OmlubGluZTsg fQ0KICAgICAgICAgIC5zbWRfcHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBtYXJnaW46MjVweCAw IDA7IH0nLA0KCQknbWV0ZXInID0+DQogICAgICAgICAnI3NtZF9wcm9nX21ldGVyIHsgbWFy Z2luOjAgYXV0bzsgYm9yZGVyOjFweCBzb2xpZCAjY2NjOyB3aWR0aDozNjBweDsgcGFkZGlu Zzo1cHg7IGZvbnQtc2l6ZToxMjAlOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3Bhc3Nfc3Ry ZW5ndGggeyBjb2xvcjpncmVlbjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScsDQoJCSdhZHZpY2Un ID0+DQogICAgICAgICAnLnNtZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1MHB4OyB9DQogICAg ICAgICAgI2xpc3Quc21kX3Byb2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1cHg7IH0NCiAgICAg ICAgICAuc21kX3Byb2dfYnRucyB7IHdpZHRoOjE0MHB4OyB9JywNCgkpOw0KDQoJYWRkX3By aXZzKCRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfcHJpdnMpOw0K CWFkZF9wcml2cygncGx1Z2luX3ByZWZzLicuJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNt ZF9wcm9nbm9zdGljc19wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNt ZF9wcm9nbm9zdGljc19ldmVudCwgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9z dGljcycpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3NldHVwJywg J3BsdWdpbl9wcmVmcy4nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfZGlzcGF0Y2hlcicsICRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfY2hyb25vc3Ry ZW5ndGgnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCWlmICgkaGRyb24pIHsNCgkJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAn YWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCX0NCglpZiAoc3RycG9zKGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICcnKSwgJ2FkbWluJykgIT09IGZhbHNlKSB7 DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICdh ZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJfQ0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgi cHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIici KTsNCg0KCS8vIEFkbWluIHNpZGUgY2FsbGJhY2sNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZzLCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3Nf cHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2Fk bWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsNCgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNh bGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX3do ZXJlJywgJycpLCAncHVibGljJykgIT09IGZhbHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJl dGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9p bmplY3QnLCAnJyksICdwdWJsaWMnKSAhPT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19kaXNw YXRjaGVyKCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJy YXkoDQoJCQknc21kX3Byb2dub3N0aWNzX2ZpbGVzJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nf c2V0dXAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19hZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9z dGljc19hY2snLA0KCQkpKSkgew0KCQlzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJycpOw0KCX0g ZWxzZSAkc3RwKCk7DQp9DQoNCi8vIFN0dWIgdG8gY2FsbCB0aGUgdmVyaWZpY2F0aW9uIGNv ZGUgZnJvbSB0aGUgVVJMDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3MoJGV2dCwgJHN0cCkg ew0KCXJldHVybiBzbWRfZG9fcHJvZ25vc3RpY3MoKTsNCn0NCg0KLy8gVmVyaWZ5IHRoZSBm aWxlIGNoZWNrc3Vtcw0KLy8gJG1vZGUgPSAwOiBub3JtYWwgLyAxOiBubyB1cGRhdGUgKHJl dHVybiBhcnJheXMgb25seSkgLyAyOiBzaWxlbnQgdXBkYXRlDQpmdW5jdGlvbiBzbWRfZG9f cHJvZ25vc3RpY3MoJG1vZGU9MCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50 LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsN Cg0KCSRub3cgPSB0aW1lKCk7DQoJJG5vayA9ICRtaXNzID0gJGFkZGVkID0gJGFsbGZpbGVz ID0gJGhhc2hkb3duID0gJGhhc2htb2QgPSBhcnJheSgpOw0KCSR0ZGlmZiA9ICgkbW9kZT09 MSB8fCAoJG5vdyAtIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGNoZWNrJywgMCkg PiBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAzNjAwKSkpID8gdHJ1 ZSA6IGZhbHNlOw0KCSRzdW1oYXNoID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1o YXNoJywgTlVMTCwgKCRtb2RlPT0xID8gMSA6IDApKTsNCg0KCSRsb29rYXQgPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicsICcnKTsNCgkkYWRkcyA9IChzdHJwb3Mo JGxvb2thdCwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGRlbHMgPSAoc3RycG9zKCRsb29rYXQs ICdkZWxldGUnKSAhPT0gZmFsc2UpOw0KCSRtb2RzID0gKHN0cnBvcygkbG9va2F0LCAnbW9k aWZ5JykgIT09IGZhbHNlKTsNCg0KCS8vIFBhcnRzIHNoYW1lbGVzc2x5IHBsYWdpYXJpc2Vk IGZyb20gdHhwX2RpYWcNCglpZiAoJHRkaWZmKSB7DQoJCWlmICgkY3MgPSBAZmlsZSgkc21k X3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCSRoYXNoID0gbWQ1KHNtZF9wcm9nbm9z dGljc19wcmVwX2ZpbGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKTsNCgkJCWlmICgk aGFzaCAhPSAkc3VtaGFzaCkgew0KCQkJCSRoYXNobW9kW10gPSAkc21kX3Byb2dub3N0aWNz X2NoZWNrc3VtczsNCgkJCX0gZWxzZSB7DQoJCQkJZm9yZWFjaCAoJGNzIGFzICRjKSB7DQoJ CQkJCWlmIChwcmVnX21hdGNoKCdAXihcUyspOiBcKCguKilcKSRAJywgdHJpbSgkYyksICRt KSkgew0KCQkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJCWlmICgkZGVscyAm JiAhZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJG1pc3NbXSA9ICRmaWxlOw0KCQkJ CQkJfSBlbHNlIGlmICgkbW9kcyAmJiAkbWQ1ICE9ICdOVUxMJykgew0KCQkJCQkJCWlmIChm aWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3Rp Y3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkJaWYgKChtZDUoJGNvbnRlbnQpICE9ICRt ZDUpICYmICgkZmlsZSAhPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCQkJ CQkJCSRub2tbXSA9ICRmaWxlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJ CQkJJGFsbGZpbGVzW10gPSAkZmlsZTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkYWRk cykgew0KCQkJCQkkZmlsZWxpc3QgPSBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCk7DQoJ CQkJCSRhZGRlZCA9IGFycmF5X2RpZmYoJGZpbGVsaXN0LCAkYWxsZmlsZXMpOw0KCQkJCX0N Cg0KCQkJCWlmICgkbW9kZSAhPSAxKSB7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfbGFzdGNoZWNrJywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0 X2lucHV0Jyk7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJLy8gRmlsZSBkb2Vzbid0 IGV4aXN0DQoJCQkkaGFzaGRvd25bXSA9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0K CQl9DQoJfQ0KDQoJLy8gQXNzZW1ibGUgbWVzc2FnZQ0KCWlmICgkbm9rIHx8ICRtaXNzIHx8 ICRhZGRlZCB8fCAkaGFzaGRvd24gfHwgJGhhc2htb2QpIHsNCgkJaWYgKCRtb2RlPT0xKSB7 DQoJCQlyZXR1cm4gYXJyYXkoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhhc2hkb3duLCAkaGFz aG1vZCk7DQoJCX0gZWxzZSB7DQoJCQkkdmlhID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19ub3RpZnlfdmlhJywgJycpOw0KCQkJJGRldGVjdCA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfbGFzdGRldGVjdCcsICcnKTsNCgkJCSRsYXN0cyA9IGV4cGxvZGUoJywnLCBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAwKSk7DQoJCQkkZnJlcXMgPSBleHBs b2RlKCcsJywgZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywgODY0MDAp KTsNCgkJCWlmICghaXNzZXQoJGxhc3RzWzFdKSkgew0KCQkJCSRsYXN0c1sxXSA9ICRsYXN0 c1swXTsNCgkJCX0NCgkJCWlmICghaXNzZXQoJGZyZXFzWzFdKSkgew0KCQkJCSRmcmVxc1sx XSA9ICRmcmVxc1swXTsNCgkJCX0NCg0KCQkJJGxhc3RhY3RfdHhwID0gKCRtb2RlIDwgMiAm JiAoJG5vdyAtICRsYXN0c1swXSA+ICRmcmVxc1swXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJ JGxhc3RhY3RfbWFpbCA9ICgkbW9kZSA8IDIgJiYgKCRub3cgLSAkbGFzdHNbMV0gPiAkZnJl cXNbMV0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRsYXN0bXNnID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19sYXN0bXNnJywgJycpOw0KDQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9z dGljc19nVHh0KCdzdWJqZWN0Jyk7DQoJCQkkbXNnID0gam9pbignfCcsIGFycmF5X21lcmdl KCRoYXNoZG93biwgJGhhc2htb2QsICRub2ssICRtaXNzLCAkYWRkZWQpKTsNCg0KCQkJaWYg KEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJyAmJiBzdHJwb3MoJHZpYSwgJ3R4cCcpICE9PSBm YWxzZSkgew0KCQkJCWlmICgkbGFzdGFjdF90eHAgfHwgKCRsYXN0bXNnICE9IG1kNSgkbXNn KSkpIHsNCgkJCQkJJG91dCA9ICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicuJHNtZF9wcm9n bm9zdGljc19zdHlsZVsnbXNnJ10uJzwvc3R5bGU+PGRpdiBjbGFzcz0ic21kX3Byb2dfd2Fy biI+PGRpdj4nLiRzdWJqZWN0Lic8L2Rpdj4nLg0KCQkJCQkJKCgkaGFzaGRvd24pID8gJzxw Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykuJzwvcD48dWw+ PGxpPicuam9pbignPC9saT48bGk+JywkaGFzaGRvd24pLic8L2xpPjwvdWw+JyA6ICcnKS4N CgkJCQkJCSgoJGhhc2htb2QpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFt YmxlX2hhc2htb2QnKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRoYXNobW9k KS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRub2spID8gJzxwPicuc21kX3Byb2du b3N0aWNzX2dUeHQoJ3ByZWFtYmxlX25vaycpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+ PGxpPicsJG5vaykuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJKCgkbWlzcykgPyAnPHA+ Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbWlzcycpLic8L3A+PHVsPjxsaT4n LmpvaW4oJzwvbGk+PGxpPicsJG1pc3MpLic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSgo JGFkZGVkKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9hZGRlZCcp Lic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxpPicsJGFkZGVkKS4nPC9saT48L3VsPicg OiAnJykuDQoJCQkJCQknPHA+PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9n bm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2du b3N0aWNzX3N1cHByZXNzPTEiPicuDQoJCQkJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9z dGFtYmxlJykuJzwvYT48L3A+PC9kaXY+JzsNCg0KCQkJCQlzZXRfcHJlZignc21kX3Byb2du b3N0aWNzX2xhc3RhY3QnLCAkbm93LicsJy4kbGFzdHNbMV0sICdzbWRfcHJvZ25vcycsIFBS RUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCQllY2hvICRvdXQ7DQoJCQkJfQ0KCQkJ fQ0KDQoJCQlpZiAoc3RycG9zKCR2aWEsICdlbWFpbCcpICE9PSBmYWxzZSkgew0KCQkJCWlm ICgkbGFzdGFjdF9tYWlsIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykpKSB7DQoJCQkJCSR0 byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJycpOw0KCQkJCQlpZiAo JHRvKSB7DQoJCQkJCQkkZG9tYWlucGFydHMgPSBkb19saXN0KGRvU3RyaXAoc2VydmVyU2V0 KCdTRVJWRVJfTkFNRScpKSwgJy4nKTsNCgkJCQkJCSRudW1wYXJ0cyA9IGNvdW50KCRkb21h aW5wYXJ0cyk7DQoJCQkJCQkkZG9tYWluID0gJGRvbWFpbnBhcnRzWyRudW1wYXJ0cy0yXSAu ICcuJyAuICRkb21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJCQkJCQkkcmVwbHlfdG8gPSAn bm9yZXBseUAnLiRkb21haW47DQoJCQkJCQkkdHhwZGlyID0gaHUudHJpbShkaXJuYW1lKCRf U0VSVkVSWydQSFBfU0VMRiddKSwgJy9cXCcpOw0KCQkJCQkJJHNlcCA9IGlzX3dpbmRvd3Mo KSA/ICJcclxuIiA6ICJcbiI7DQoJCQkJCQkkaGVhZGVycyA9ICJGcm9tOiBzbWRfcHJvZ25v c3RpY3MgPCRyZXBseV90bz4iLg0KCQkJCQkJCSRzZXAuJ1JlcGx5LVRvOiAnLiRyZXBseV90 by4NCgkJCQkJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRlcm4nLg0KCQkJCQkJCSRzZXAu J0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQnLg0KCQkJCQkJCSRzZXAuJ0NvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJCQkJCQkkc2VwOw0K CQkJCQkJJGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3Byb2dub3N0aWNz X2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRvd24pIDogJycp Lg0KCQkJCQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1i bGVfaGFzaG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJCQkJCSgoJG5v aykgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5uLm4uam9pbihu LCRub2spIDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9nbm9zdGljc19n VHh0KCdwcmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJykuDQoJCQkJCQkJ KCgkYWRkZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9hZGRlZCcp Lm4ubi5qb2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhyZWY9IicuJHR4 cGRpci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyZzdGVw PXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2dub3N0aWNzX3N1cHByZXNzPTEiPicuc21k X3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScpLic8L2E+JzsNCgkJCQkJCW1haWwoJHRv LCAkc3ViamVjdCwgJGJvZHksICRoZWFkZXJzKTsNCgkJCQkJfQ0KCQkJCQlzZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAkbGFzdHNbMF0uJywnLiRub3csICdzbWRfcHJv Z25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJCXNl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdG1zZycsIG1kNSgkbXNnKSwgJ3NtZF9wcm9n bm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQlpZiAoJGxhc3Rtc2cgIT0g bWQ1KCRtc2cpKSB7DQoJCQkJaWYgKCRkZXRlY3QgPT0gJycpIHsNCgkJCQkJc2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGRldGVjdCA9 IGV4cGxvZGUoJywnLCRkZXRlY3QpOw0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2xhc3RkZXRlY3QnLCAkZGV0ZWN0WzBdLicsJy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVG X0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0gIENhdGNoIHVuZXhwZWN0ZWQgcmVxdWVzdCBoZWFkZXJzDQpmdW5jdGlv biBzbWRfcHJvZ25vc3RpY3NfcmVxdWVzdF9oZWFkZXJzKCRldnQsICRzdHApIHsNCgkkYmxv Y2sgPSBleHBsb2RlKCd8JywgZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVy cycsICcnKSk7DQoJJGhkciA9IHNlcnZlclNldCgnUkVRVUVTVF9NRVRIT0QnKTsNCg0KCWlm IChpbl9hcnJheSgkaGRyLCAkYmxvY2spKSB7DQoJCWVjaG8gc21kX3Byb2dub3N0aWNzX2dU eHQoJ25pY2VfdHJ5X2hlYWRlcicpOw0KCQlleGl0KDEpOw0KLyoNCgkJLy8gU2VuZCB0aGUg Zm9yZW5zaWNzIG9mZg0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0 b19jc2knLCAnJyk7DQoJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N1Ympl Y3RfY3NpJyk7DQoJCSRkb21haW5wYXJ0cyA9IGRvX2xpc3QoZG9TdHJpcChzZXJ2ZXJTZXQo J1NFUlZFUl9OQU1FJykpLCAnLicpOw0KCQkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFy dHMpOw0KCQkkZG9tYWluID0gJGRvbWFpbnBhcnRzWyRudW1wYXJ0cy0yXSAuICcuJyAuICRk b21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJCSRyZXBseV90byA9ICdub3JlcGx5QCcuJGRv bWFpbjsNCgkJJHNlcCA9IGlzX3dpbmRvd3MoKSA/ICJcclxuIiA6ICJcbiI7DQoJCSRoZWFk ZXJzID0gIkZyb206IHNtZF9mcm9nbm9zdGljcyA8JHJlcGx5X3RvPiIuDQoJCQkkc2VwLidS ZXBseS1UbzogJy4kcmVwbHlfdG8uDQoJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRlcm4n Lg0KCQkJJHNlcC4nQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCcuDQoJCQkkc2Vw LidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04IicuDQoJCQkkc2Vw Ow0KCQkkYm9keSA9IG4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JlcV9ub3RfYWxsb3dlZCcs IGFycmF5KCd7cmVxfScgPT4gJGhkcikpLm47DQoJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9S RVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkkYm9keSAuPSBuLiRrZXku JzogJy4kdmFyOw0KCQl9DQoNCgkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhlYWRl cnMpOw0KKi8NCgl9DQoNCn0NCg0KLy8gLS0tLS0tLS0tLSAgU1FMIGluamVjdGlvbiBkZXRl Y3Rpb24NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0KCkgew0KCWdsb2Jh bCAkc21kX3Byb2dub3N0aWNzX3NxbHByb3Q7DQoJaWYoJHNtZF9wcm9nbm9zdGljc19zcWxw cm90LT5pc01hbGljaW91cygpKSB7DQoJCWVjaG8gc21kX3Byb2dub3N0aWNzX2dUeHQoJ25p Y2VfdHJ5X2luamVjdCcpOw0KDQoJCS8vIFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYNCgkJJHRv ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycpOw0KCQlpZiAo JHRvKSB7DQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0X2Nz aScpOw0KCQkJJGRvbWFpbnBhcnRzID0gZG9fbGlzdChkb1N0cmlwKHNlcnZlclNldCgnU0VS VkVSX05BTUUnKSksICcuJyk7DQoJCQkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFydHMp Ow0KCQkJJGRvbWFpbiA9ICRkb21haW5wYXJ0c1skbnVtcGFydHMtMl0gLiAnLicgLiAkZG9t YWlucGFydHNbJG51bXBhcnRzLTFdOw0KCQkJJHJlcGx5X3RvID0gJ25vcmVwbHlAJy4kZG9t YWluOw0KCQkJJHNlcCA9IGlzX3dpbmRvd3MoKSA/ICJcclxuIiA6ICJcbiI7DQoJCQkkaGVh ZGVycyA9ICJGcm9tOiBzbWRfZnJvZ25vc3RpY3MgPCRyZXBseV90bz4iLg0KCQkJCSRzZXAu J1JlcGx5LVRvOiAnLiRyZXBseV90by4NCgkJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRl cm4nLg0KCQkJCSRzZXAuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQnLg0KCQkJ CSRzZXAuJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJ CQkkc2VwOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9z cWxfaW5qZWN0JykubjsNCgkJCSRib2R5IC49ICdUWFA6ICcgLiB0eHBfdmVyc2lvbiAubi4g J1BIUDogJyAuIHBocHZlcnNpb24oKSAubi4gJ015U1FMOiAnIC4gbXlzcWxfZ2V0X3NlcnZl cl9pbmZvKCkgLm4uICgoaXNfY2FsbGFibGUoJ2FwYWNoZV9nZXRfdmVyc2lvbicpKSA/ICdB cGFjaGU6ICcgLiBhcGFjaGVfZ2V0X3ZlcnNpb24oKS5uIDogJycpOw0KCQkJZm9yZWFjaCAo JF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VOViBhcyAka2V5ID0+ICR2YXIpIHsNCgkJCQkk Ym9keSAuPSBuLiRrZXkuJzogJy4kdmFyOw0KCQkJfQ0KDQoJCQltYWlsKCR0bywgJHN1Ympl Y3QsICRib2R5LCAkaGVhZGVycyk7DQoJCX0NCgkJZXhpdCgxKTsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tDQovLyBBZG1pbi1zaWRlIHBhbmVscw0KLy8gLS0tLS0tLS0tLS0t LS0tLS0NCi8vIC0tLS0tLS0tLS0gIEFsYXJtIGFja25vd2xlZGdlbWVudA0KZnVuY3Rpb24g c21kX3Byb2dub3N0aWNzX2FjaygkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3Rp Y3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkcHJlZnM7DQoNCgkkc3Vi bWl0ID0gZ3BzKCdzdWJtaXQnKTsNCgkkaWdub3JlID0gZ3BzKCdpZ25vcmUnKTsNCgkkY3Np ID0gZ3BzKCdjc2knKTsNCg0KCSRhY2sgPSBncHMoJ3NlbGVjdGVkJyk7DQoJJHNtZF9wcm9n X2FjayA9IChpc19hcnJheSgkYWNrKSkgPyAkYWNrIDogKCgkYWNrKSA/IGFycmF5KCRhY2sp IDogYXJyYXkoKSk7DQoNCgkkb3V0ID0gYXJyYXkoKTsNCg0KCWlmICgkc3VibWl0ID09ICdB Y2tub3dsZWRnZScgfHwgJGlnbm9yZSA9PSAnSWdub3JlJykgew0KCQlpZiAoJGNzID0gQGZp bGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQlmb3JlYWNoICgkY3MgYXMg JGMpIHsNCgkJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0o JGMpLCAkbSkpIHsNCgkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJaWYgKCgk a2V5ID0gYXJyYXlfc2VhcmNoKCRmaWxlLCAkc21kX3Byb2dfYWNrKSkgIT09IGZhbHNlKSB7 DQoJCQkJCQlpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJGNvbnRlbnQgPSBz bWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkkb3V0W10gPSAkZmls ZS4nOiAoJy4oICgkaWdub3JlID09ICdJZ25vcmUnKSA/ICdOVUxMJyA6IG1kNSgkY29udGVu dCkgKS4nKSc7DQoJCQkJCQl9DQoJCQkJCQkvLyBSZW1vdmUgZmlsZXMgdGhhdCBhbHJlYWR5 IGhhdmUgY2hlY2tzdW1zIHNvIHdlJ3JlIGxlZnQgd2l0aCBhZGRpdGlvbnMNCgkJCQkJCXVu c2V0KCRzbWRfcHJvZ19hY2tbJGtleV0pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG91dFtd ID0gdHJpbSgkYyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFRhY2sgb24gYW55 IG5ldyBmaWxlcw0KCQkJZm9yZWFjaCAoJHNtZF9wcm9nX2FjayBhcyAkZmlsZSkgew0KCQkJ CWlmIChmaWxlX2V4aXN0cygkZmlsZSkgJiYgJGZpbGUgIT0gJHNtZF9wcm9nbm9zdGljc19j aGVja3N1bXMpIHsNCgkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxl KCRmaWxlKTsNCgkJCQkJJG91dFtdID0gJGZpbGUuJzogKCcuKCAoJGlnbm9yZSA9PSAnSWdu b3JlJykgPyAnTlVMTCcgOiBtZDUoJGNvbnRlbnQpICkuJyknOw0KCQkJCX0NCgkJCX0NCgkJ CSRmaCA9IGZvcGVuKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAidyIpOw0KCQkJZndy aXRlKCRmaCwgam9pbihuLCAkb3V0KSk7DQoJCQlmY2xvc2UoJGZoKTsNCgkJCXNtZF9wcm9n bm9zdGljc19zZWxmX2hhc2goKTsNCgkJCSRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn YWNrZWQnKTsNCgkJfQ0KCX0NCglpZiAoJGNzaSAmJiAkc21kX3Byb2dfYWNrKSB7DQoJCSAk bXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzaV9zZW50Jyk7DQoJfSBlbHNlIGlmICgk Y3NpKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vbmVfc2VsZWN0ZWQn KTsNCgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0K CWxpc3QoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhhc2hkb3duLCAkaGFzaG1vZCkgPSBzbWRf ZG9fcHJvZ25vc3RpY3MoMSk7DQoJJG5vayA9IGlzX2FycmF5KCRub2spID8gJG5vayA6IGFy cmF5KCk7DQoJJG1pc3MgPSBpc19hcnJheSgkbWlzcykgPyAkbWlzcyA6IGFycmF5KCk7DQoJ JGFkZGVkID0gaXNfYXJyYXkoJGFkZGVkKSA/ICRhZGRlZCA6IGFycmF5KCk7DQoJJGhhc2ht b2QgPSBpc19hcnJheSgkaGFzaG1vZCkgPyAkaGFzaG1vZCA6IGFycmF5KCk7DQoJJGVycm51 bSA9IGNvdW50KGFycmF5X21lcmdlKCRub2ssICRtaXNzLCAkYWRkZWQsICRoYXNobW9kKSk7 DQoJJGZvcmVuc2ljcyA9IGFycmF5KCk7DQoJJGxmb3JtID0gJ1ktbS1kIEg6aTpzJzsNCg0K CWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25n KHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfYWNrJykpLCAnIGNvbHNwYW49IjMiJykgLiB0 ZGEoJGJ0blNldHVwLiRidG5GaWxlcy4kYnRuQWR2aWNlLCAkYnRuU3R5bGUpICk7DQoJZWNo byAnPGZvcm0gbmFtZT0ibG9uZ2Zvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9 Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2Fj ayZzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+JzsNCglpZiAoJGVycm51bSA+IDApIHsN CgkJZm9yZWFjaCgkaGFzaG1vZCBhcyAkbmF1Z2h0eSkgew0KCQkJJHNlbCA9IGluX2FycmF5 KCRuYXVnaHR5LCAkc21kX3Byb2dfYWNrKTsNCgkJCWVjaG8gdHIodGQoY2hlY2tib3goJ3Nl bGVjdGVkW10nLCAkbmF1Z2h0eSwgJHNlbCksICcnLCAnbXVsdGktZWRpdCcpLnRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnbGJsX2hhc2htb2QnKSkudGRhKCRuYXVnaHR5KSk7DQoJCX0N CgkJZm9yZWFjaCgkbm9rIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5h dWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0 ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9n bm9zdGljc19nVHh0KCdsYmxfY2hhbmdlZCcpKS50ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgk c2VsKSB7DQoJCQkJJGZpID0gc3RhdCgkbmF1Z2h0eSk7DQoJCQkJJGZvcmVuc2ljc1snbm9r J11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJG5hdWdodHksICRmaSk7 DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVskbmF1Z2h0eV0gPSBjaHVua19zcGxpdChiYXNl NjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJ CWZvcmVhY2goJG1pc3MgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1 Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3Rl ZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2du b3N0aWNzX2dUeHQoJ2xibF9taXNzaW5nJykpLnRkYSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRz ZWwpIHsNCgkJCQkkZm9yZW5zaWNzWydtaXNzJ11bXSA9ICRuYXVnaHR5Ow0KCQkJfQ0KCQl9 DQoJCWZvcmVhY2goJGFkZGVkIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXko JG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2Vs ZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9w cm9nbm9zdGljc19nVHh0KCdsYmxfYWRkZWQnKSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAo JHNlbCkgew0KCQkJCSRmaSA9IHN0YXQoJG5hdWdodHkpOw0KCQkJCSRmb3JlbnNpY3NbJ2Fk ZGVkJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJG5hdWdodHksICRm aSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVskbmF1Z2h0eV0gPSBjaHVua19zcGxpdChi YXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9 DQoJCWlmICgkc21kX3Byb2dfYWNrICYmICRwcmVmc1snbG9nZ2luZyddICE9ICdub25lJykg ew0KCQkJJGRldGVjdCA9IGV4cGxvZGUoJywnLGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bGFzdGRldGVjdCcsIHRpbWUoKSkpOw0KCQkJaWYgKCFpc3NldCgkZGV0ZWN0WzFdKSkgew0K CQkJCSRkZXRlY3RbMV0gPSAkZGV0ZWN0WzBdOw0KCQkJfQ0KCQkJJHJzID0gc2FmZV9yb3dz KCcqJywgJ3R4cF9sb2cnLCAidGltZSBCRVRXRUVOICciIC4gZGF0ZSgkbGZvcm0sICgkZGV0 ZWN0WzBdIC0gJHByZWZzWydzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcSddKSkgLiAiJyBB TkQgJyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRlY3RbMV0gKyA1KSkgLiAiJyIpOw0KCQkJZm9y ZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkZm9yZW5zaWNzWyd0eHBfbG9nJ11bXSA9IGpv aW4oJywnLCRyb3cpOw0KCQkJfQ0KCQl9DQoJCWVjaG8gdHIodGRhKA0KCQkJCXNlbGVjdF9i dXR0b25zKCkNCgkJCSwnIGNsYXNzPSJtdWx0aS1lZGl0IiBjb2xzcGFuPSIzIiBzdHlsZT0i dGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9uZTsiJykpOw0KCQllY2hvIHRyKHRkYSgk YnRuQWNrSXQuJGJ0bklnbm9yZS4oKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRv X2NzaScsICcnKSkgPyAkYnRuQ1NJIDogJycpLCAkYnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0K CQllY2hvIHRyKHRkKHNtZF9wcm9nbm9zdGljc19nVHh0KCdub19hbGFybXMnKSkpOw0KCQlz ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RkZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9z JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0K CWVjaG8gZW5kVGFibGUoKTsNCg0KCWlmICgkY3NpICYmICRmb3JlbnNpY3MpIHsNCgkJLy8g U2VuZCB0aGUgZm9yZW5zaWNzIG9mZg0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX21haWx0b19jc2knLCAnJyk7DQoJCWlmICgkdG8pIHsNCgkJCSRzdWJqZWN0ID0gc21k X3Byb2dub3N0aWNzX2dUeHQoJ3N1YmplY3RfY3NpJyk7DQoJCQkkZG9tYWlucGFydHMgPSBk b19saXN0KGRvU3RyaXAoc2VydmVyU2V0KCdTRVJWRVJfTkFNRScpKSwgJy4nKTsNCgkJCSRu dW1wYXJ0cyA9IGNvdW50KCRkb21haW5wYXJ0cyk7DQoJCQkkZG9tYWluID0gJGRvbWFpbnBh cnRzWyRudW1wYXJ0cy0yXSAuICcuJyAuICRkb21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJ CQkkcmVwbHlfdG8gPSAnbm9yZXBseUAnLiRkb21haW47DQoJCQkkc2VwID0gaXNfd2luZG93 cygpID8gIlxyXG4iIDogIlxuIjsNCgkJCSRoZWFkZXJzID0gIkZyb206IHNtZF9mcm9nbm9z dGljcyA8JHJlcGx5X3RvPiIuDQoJCQkJJHNlcC4nUmVwbHktVG86ICcuJHJlcGx5X3RvLg0K CQkJCSRzZXAuJ1gtTWFpbGVyOiBUZXh0cGF0dGVybicuDQoJCQkJJHNlcC4nQ29udGVudC1U cmFuc2Zlci1FbmNvZGluZzogOGJpdCcuDQoJCQkJJHNlcC4nQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOyBjaGFyc2V0PSJVVEYtOCInLg0KCQkJCSRzZXA7DQoJCQkkYm9keSA9DQoJCQkJ bi4nVFhQOiAnIC4gdHhwX3ZlcnNpb24gLm4uICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkgLm4u ICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxhYmxl KCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92ZXJz aW9uKCkubiA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ25vayddKSkgPyBuLnNt ZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5uLmpvaW4obiwkZm9yZW5zaWNz Wydub2snXSkgOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydtaXNzJ10pKSA/IG4u bi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbWlzcycpLm4uam9pbihuLCRmb3Jl bnNpY3NbJ21pc3MnXSkgOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydhZGRlZCdd KSkgPyBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2FkZGVkJykubi5qb2lu KG4sJGZvcmVuc2ljc1snYWRkZWQnXSkgOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNz Wyd0eHBfbG9nJ10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfdHhw bG9nJykubi5qb2luKG4sJGZvcmVuc2ljc1sndHhwX2xvZyddKSA6IG4ubi5zbWRfcHJvZ25v c3RpY3NfZ1R4dCgnbm9fbG9nX2VudHJpZXMnKSk7DQoJCQlpZiAoaXNzZXQoJGZvcmVuc2lj c1snZmlsZXMnXSkpIHsNCgkJCQkkYm9keSAuPSBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQo J3ByZWFtYmxlX2ZpbGVzJyk7DQoJCQkJZm9yZWFjaCAoJGZvcmVuc2ljc1snZmlsZXMnXSBh cyAkZm4gPT4gJGNvbnRlbnQpIHsNCgkJCQkJJGJvZHkgLj0gbi5uLiRmbi5uLm4uJGNvbnRl bnQubjsNCgkJCQl9DQoJCQl9DQoJDQoJCQltYWlsKCR0bywgJHN1YmplY3QsICRib2R5LCAk aGVhZGVycyk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0gRmlsZSBtYW5hZ2VtZW50 DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfZmlsZXMoJG1zZz0nJykgew0KCWdsb2JhbCAk c21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0K CWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzdWJtaXQnKSkpKTsNCgkkc21kX3Byb2du b3N0aWNzX2ZpbGVzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfZmlsZXMnKTsNCglpZiAoIWlz X2FycmF5KCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMpKSB7DQoJCSRzbWRfcHJvZ25vc3RpY3Nf ZmlsZXMgPSBhcnJheSgpOw0KCX0NCg0KCSRhZGRzID0gKHN0cnBvcyhnZXRfcHJlZignc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZvcicpLCAnYWRkJykgIT09IGZhbHNlKTsNCgkkZmlsZWxp c3QgPSBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCk7DQoJJGFsbGNvdW50ID0gY291bnQo JGZpbGVsaXN0KTsNCg0KCWlmICgkc3VibWl0ID09ICdTYXZlJykgew0KCQkkb3V0ZmlsZSA9 IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMgYXMgJGZpbGUp IHsNCgkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJ CQkkb3V0ZmlsZVtdID0gJGZpbGUuJzogKCcubWQ1KCRjb250ZW50KS4nKSc7DQoJCX0NCg0K CQkkZmggPSBmb3Blbigkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgInciKTsNCgkJZndy aXRlKCRmaCwgam9pbihuLCAkb3V0ZmlsZSkpOw0KDQoJCWlmICgkYWRkcykgew0KCQkJJGFk ZGl0aW9ucyA9IGFycmF5X2RpZmYoJGZpbGVsaXN0LCAkc21kX3Byb2dub3N0aWNzX2ZpbGVz KTsNCgkJCSRhZGRlZCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkYWRkaXRpb25zIGFzICRh ZGRpdGlvbikgew0KCQkJCSRhZGRlZFtdID0gJGFkZGl0aW9uLic6IChOVUxMKSc7DQoJCQl9 DQoJCQlmd3JpdGUoJGZoLCBuLmpvaW4obiwgJGFkZGVkKSk7DQoJCX0NCgkJZmNsb3NlKCRm aCk7DQoJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hhc2goKTsNCgkJc21kX2RvX3Byb2dub3N0 aWNzKDIpOyAvLyBTaWxlbnRseSBhY2tub3dsZWRnZSBhbGwgdGhlIGZpbGVzDQoJCXNldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsICcnLCAnc21kX3Byb2dub3MnLCBQ UkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJJG1zZyA9IHNtZF9wcm9nbm9zdGljc19n VHh0KCdmaWxlc191cGRhdGVkJyk7DQoJfQ0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cpOw0KCWV4dHJhY3Qoc21kX3Byb2dub3N0 aWNzX2J1dHRvbnMoKSk7DQoNCgkkc21kX3Byb2dub3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsN CglpZiAoJGNzID0gQGZpbGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCWZv cmVhY2ggKCRjcyBhcyAkYykgew0KCQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4q KVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsN CgkJCQlpZiAoJG1kNSAhPSAnTlVMTCcpIHsNCgkJCQkJJHNtZF9wcm9nbm9zdGljc19maWxl c1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJJG1vbmNvdW50ID0gY291 bnQoJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoNCglpZiAoJGZpbGVsaXN0KSB7DQoJCSRm aWxleiA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGZpbGVsaXN0IGFzICRrZXkgPT4gJHZhbCkg ew0KCQkJJGZpbGV6WyR2YWxdID0gJGZpbGVsaXN0WyRrZXldOw0KCSAgIH0NCgkJJGZpbGVz ZWwgPSBzbWRfcHJvZ25vc3RpY3NfbXVsdGlzZWwoJ3NtZF9wcm9nbm9zdGljc19maWxlcycs ICRmaWxleiwgJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoJfQ0KCSRzaG93ZmlsZXMgPSAo aXNzZXQoJGZpbGVzZWwpICYmICRmaWxlc2VsKTsNCg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRh YmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0 KCd0dGxfZmlsZXMnKSkpIC4gdGRhKCRidG5TZXR1cC4kYnRuQWNrLiRidG5BZHZpY2UsICRi dG5TdHlsZSkgKTsNCgllY2hvIHRyKHRkY3Moc21kX3Byb2dub3N0aWNzX2dUeHQoJ2N1cnJt b24nLCBhcnJheSgne2N1cnJ9JyA9PiAkbW9uY291bnQsICd7b3V0b2Z9JyA9PiAkYWxsY291 bnQpKSAuKCgkc2hvd2ZpbGVzKSA/IGJyLmJyLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbW9u ZmlsZXNfZXhwbGFpbicpIDogJycpLCAxLCA0MDApKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtz dGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+JzsNCgllY2hvICgkc2hvd2ZpbGVzKSA/IHRy KHRkYSgkZmlsZXNlbCkpIDogdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdub19maWxl cycpKSk7DQoJZWNobyB0cih0ZGEoZklucHV0KCdoaWRkZW4nLCAnc21kX3Byb2dub3N0aWNz X3N1cHByZXNzJywgMSkuJGJ0blNhdmUsICRidG5TdHlsZSkpOw0KCWVjaG8gJzwvZm9ybT4n Ow0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLSBTZXR1cCAvIHByZWZz DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJG1zZz0nJykgew0KCWdsb2JhbCAk c21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgJHBy ZWZzOw0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNz JyksICRtc2cpOw0KDQoJJG9yaWdsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0KCSRvcmlnZGly ID0gcnRyaW0oZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19kaXInLCByZWFscGF0aCh0eHBh dGgpLCAxKSwgRFMpOw0KCSRvcmlncGZ4ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19w cmVmaXgnLCAnJywgMSk7DQoNCgkkcHJlZmxpc3QgPSBhcnJheSgNCgkJJ3NtZF9wcm9nbm9z dGljc19jaGVja19mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywNCgkJ J3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfbWFp bHRvJywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywNCgkJJ3NtZF9wcm9nbm9z dGljc19kaXInLA0KCQknc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsDQoJCSdzbWRfcHJvZ25v c3RpY3NfbGlzdGxvYycsDQoJCSdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLA0KCQknc21k X3Byb2dub3N0aWNzX2lnbm9yZXMnLA0KCSk7DQoNCgkkd2FybmxvYyA9ICcnOw0KCSRub3Rp ZnkgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhJyk7DQoJJGNoZm9yID0gZ3Bz KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yJyk7DQoJJHJlcXMgPSBncHMoJ3NtZF9wcm9n bm9zdGljc19yZXFfaGVhZGVycycpOw0KCSRzcWxpbiA9IGdwcygnc21kX3Byb2dub3N0aWNz X3NxbF9pbmplY3QnKTsNCgkkc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWEgPSBqb2luKCd8 JywgKChpc19hcnJheSgkbm90aWZ5KSkgPyAkbm90aWZ5IDogYXJyYXkoJG5vdGlmeSkpKTsN Cgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRj aGZvcikpID8gJGNoZm9yIDogYXJyYXkoJGNoZm9yKSkpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf cmVxX2hlYWRlcnMgPSBqb2luKCd8JywgKChpc19hcnJheSgkcmVxcykpID8gJHJlcXMgOiBh cnJheSgkcmVxcykpKTsNCgkkc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QgPSBqb2luKCd8 JywgKChpc19hcnJheSgkc3FsaW4pKSA/ICRzcWxpbiA6IGFycmF5KCRzcWxpbikpKTsNCg0K CS8vIEdyYWIgdGhlIHNhdmVkIHByZWYgdmFsdWVzIGFuZCB0YWNrIG9uIHRoZSBhcnJheSBp dGVtKHMpDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXlfbWVyZ2UoYXJyYXkoJ3N1Ym1p dCcpLCAkcHJlZmxpc3QpKSkpOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19u b3RpZnlfdmlhJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9y JzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnOw0KCSRw cmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0JzsNCgkkc21kX3Byb2du b3N0aWNzX2RpciA9IHJ0cmltKCRzbWRfcHJvZ25vc3RpY3NfZGlyLCBEUyk7DQoNCglpZiAo JHN1Ym1pdCA9PSAnU2F2ZScpIHsNCgkJaWYgKCgkc21kX3Byb2dub3N0aWNzX2RpciAhPSAk b3JpZ2RpcikgfHwgKCRzbWRfcHJvZ25vc3RpY3NfcHJlZml4ICE9ICRvcmlncGZ4KSkgew0K CQkJaWYgKGlzX2Rpcigkc21kX3Byb2dub3N0aWNzX2RpcikgJiYgaXNfd3JpdGFibGUoJHNt ZF9wcm9nbm9zdGljc19kaXIpKSB7DQoJCQkJLy8gRXZlcnl0aGluZyBPSyBzbyBkbyBub3Ro aW5nIGZvciBub3cNCgkJCX0gZWxzZSB7DQoJCQkJLy8gSWdub3JlIG5ldyBkaXIgYW5kIHJl c2V0IGl0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZQ0KCQkJCSRzbWRfcHJvZ25vc3RpY3NfZGly ID0gJG9yaWdkaXI7DQoJCQl9DQoNCgkJCS8vIFJvb20gZm9yIG1vcmUgY29uZmlnIGZpbGVz IGFzIGFuZCB3aGVuIHRoZXkgYXJlIHJlcXVpcmVkDQoJCQkkZmlsZWxpc3RbXSA9ICRzbWRf cHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJCQlmb3JlYWNoICgkZmlsZWxpc3QgYXMgJGZp bGUpIHsNCgkJCQkkZmlsZW5hbWUgPSAkc21kX3Byb2dub3N0aWNzX3ByZWZpeC5sdHJpbShi YXNlbmFtZSgkZmlsZSksICRvcmlncGZ4KTsNCgkJCQlyZW5hbWUoJGZpbGUsIHJ0cmltKCRz bWRfcHJvZ25vc3RpY3NfZGlyLCBEUykuRFMuJGZpbGVuYW1lKTsNCgkJCX0NCgkJfQ0KDQoJ CS8vIFdyaXRlIGFsbCB0aGUgcHJlZnMNCgkJZm9yZWFjaCAoJHByZWZsaXN0IGFzICRwcmVm dmFsKSB7DQoJCQlzZXRfcHJlZigkcHJlZnZhbCwgJCRwcmVmdmFsLCAnc21kX3Byb2dub3Mn LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJfQ0KCQlpZiAoJHNtZF9wcm9nbm9z dGljc19saXN0bG9jICE9ICRvcmlnbG9jKSB7DQoJCQkkd2FybmxvYyA9IHNtZF9wcm9nbm9z dGljc19nVHh0KCd3YXJuX2xvYycpOw0KCQl9DQoNCgl9DQoNCgkkc21kX3Byb2dub3N0aWNz X2RpciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZGlyJywgdHhwYXRoLCAxKTsNCgkk c21kX3Byb2dub3N0aWNzX3ByZWZpeCA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJl Zml4JywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19jaGVja19mb3InLCAnZGVsZXRlfG1vZGlmeScsIDEpOw0KCSRz bWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2NoZWNrX3doZXJlJywgJ2FkbWluJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19m cmVxID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19mcmVxJywgMzYwMCwgMSk7 DQoJJHNtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19hbGFybV9mcmVxJywgODY0MDAsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5 X3ZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScsICcnLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX21haWx0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bWFpbHRvJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaSA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnLCAxKTsNCgkkc21kX3Byb2du b3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCBy ZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf ZXhjbHVkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJywgJ2ltYWdl cywgZmlsZXMsIHRtcCcsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfaWdub3JlcyA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICdlcnJvcl9sb2cnLCAxKTsNCgkkc21k X3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19y ZXFfaGVhZGVycycsICdUUkFDRXxQVVR8REVMRVRFJywgMSk7DQoJJHNtZF9wcm9nbm9zdGlj c19zcWxfaW5qZWN0ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0Jywg JycsIDEpOw0KDQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRh ZGRzID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciwgJ2FkZCcpICE9PSBm YWxzZSk7DQoJJGRlbHMgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yLCAn ZGVsZXRlJykgIT09IGZhbHNlKTsNCgkkbW9kcyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGlj c19jaGVja19mb3IsICdtb2RpZnknKSAhPT0gZmFsc2UpOw0KCSRyaF90cmFjZSA9IChzdHJw b3MoJHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycywgJ1RSQUNFJykgIT09IGZhbHNlKTsN CgkkcmhfcHV0ID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzLCAnUFVU JykgIT09IGZhbHNlKTsNCgkkcmhfZGVsID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3Jl cV9oZWFkZXJzLCAnREVMRVRFJykgIT09IGZhbHNlKTsNCgkkc3FscHViID0gKHN0cnBvcygk c21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QsICdwdWJsaWMnKSAhPT0gZmFsc2UpOw0KCSRz cWxhZG0gPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCwgJ2FkbWluJykg IT09IGZhbHNlKTsNCgkkaGVscExpbmsgPSAiP2V2ZW50PXBsdWdpbiZzdGVwPXBsdWdpbl9o ZWxwJm5hbWU9JHNtZF9wcm9nbm9zdGljc19ldmVudCNzbWRfc2V0dXAiOw0KDQoJZWNobyAk YnRuQ1NTLnN0YXJ0VGFibGUoJ2xpc3QnLCAnJywgJ3NtZF9wcm9nbm9zdGljc19zZXR1cCcp Ow0KCWVjaG8gdHIodGRjcyhzdHJvbmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9zZXR1 cCcpKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaGVscF9saW5rJywgYXJyYXkoJ3tsaW5r fScgPT4gJGhlbHBMaW5rKSksIDIpIC4gdGRhKCRidG5GaWxlcy4kYnRuQWNrLiRidG5BZHZp Y2UsICRidG5TdHlsZSkgKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9z dGljc19zZXR1cCI+JzsNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGljc19nVHh0 KCd0dGxfbW9ub3B0cycpLCAzKSAsMikpOw0KCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCdjaGVja193aGVyZScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKHJhZGlv U2V0KGFycmF5KCdhZG1pbicgPT4gZ1R4dCgnbm8nKSwgJ2FkbWlufHB1YmxpYycgPT4gZ1R4 dCgneWVzJykpLCAnc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlJywgJHNtZF9wcm9nbm9z dGljc19jaGVja193aGVyZSksICcgaWQ9InNtZF9wcm9nbm9zdGljc19jaGVja193aGVyZSIn KSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoZWNrX2ZyZXEnKSwg JyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0 aWNzX2NoZWNrX2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEsICcnLCcnLCcn LDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKSk7DQoJZWNobyB0cih0 ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2FsYXJtX2ZyZXEnKSwgJyBjbGFzcz0ic21kX2xh YmVsIicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEn LCAkc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEsICcnLCcnLCcnLDE1KS5zcC5zbWRfcHJv Z25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0 aWNzX2dUeHQoJ25vdGlmeV92aWEnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYSgNCgkJ Y2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhW10nLCAndHhwJywgc3RycG9z KCRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSwgJ3R4cCcpICE9PSBmYWxzZSkgLg0KCQkn PGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV90eHAnKS4nPC9sYWJlbD4n Lg0KCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWFbXScsICdlbWFpbCcs IHN0cnBvcygkc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWEsICdlbWFpbCcpICE9PSBmYWxz ZSkuDQoJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm90aWZ5X2VtYWlsJyku JzwvbGFiZWw+Jw0KCSkpOw0KCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdt YWlsdG8nKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21k X3Byb2dub3N0aWNzX21haWx0bycsICRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvLCAnJywnJywn Jyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKSk7DQoJZWNobyB0cih0ZGEo c21kX3Byb2dub3N0aWNzX2dUeHQoJ21haWx0b19jc2knKSwgJyBjbGFzcz0ic21kX2xhYmVs IicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX21haWx0b19jc2knLCAk c21kX3Byb2dub3N0aWNzX21haWx0b19jc2ksICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25v c3RpY3NfZ1R4dCgnY3N2JykpKTsNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGlj c19nVHh0KCd0dGxfcmVhbG9wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJv Z25vc3RpY3NfZ1R4dCgncmVxX2hlYWRlcnMnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRk YSgNCgkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVyc1tdJywgJ1RSQUNF JywgJHJoX3RyYWNlKS4NCgkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdyaF90 cmFjZScpLic8L2xhYmVsPicuDQoJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hl YWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4NCgkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGlj c19nVHh0KCdyaF9wdXQnKS4nPC9sYWJlbD4nLg0KCQljaGVja2JveCgnc21kX3Byb2dub3N0 aWNzX3JlcV9oZWFkZXJzW10nLCAnREVMRVRFJywgJHJoX2RlbCkuDQoJCSc8bGFiZWw+Jy5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfZGVsJykuJzwvbGFiZWw+Jw0KCSkpOw0KCWVjaG8g dHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzcWxfaW5qZWN0JyksICcgY2xhc3M9InNt ZF9sYWJlbCInKS50ZGEoDQoJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVj dFtdJywgJ3B1YmxpYycsICRzcWxwdWIpIC4NCgkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGlj c19nVHh0KCdzcWxfaW5wdWInKS4nPC9sYWJlbD4nLg0KCQljaGVja2JveCgnc21kX3Byb2du b3N0aWNzX3NxbF9pbmplY3RbXScsICdhZG1pbicsICRzcWxhZG0pLg0KCQknPGxhYmVsPicu c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NxbF9pbmFkbScpLic8L2xhYmVsPicNCgkpKTsNCg0K CWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9maWxlb3B0cycp LCAzKSwgMikpOw0KCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19m b3InKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYSgNCgkJY2hlY2tib3goJ3NtZF9wcm9n bm9zdGljc19jaGVja19mb3JbXScsICdhZGQnLCAkYWRkcykgLg0KCQknPGxhYmVsPicuc21k X3Byb2dub3N0aWNzX2dUeHQoJ2NoX2FkZCcpLic8L2xhYmVsPicuDQoJCWNoZWNrYm94KCdz bWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnZGVsZXRlJywgJGRlbHMpLg0KCQknPGxh YmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoX2RlbCcpLic8L2xhYmVsPicuDQoJCWNo ZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnbW9kaWZ5JywgJG1vZHMp Lg0KCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoX21vZCcpLic8L2xhYmVs PicNCgkpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbGlzdGxvYycp LCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25v c3RpY3NfbGlzdGxvYycsICRzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYywgJycsJycsJycsNjAp LnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjc3YnKSkpOw0KCWVjaG8gdHIodGRhKHNtZF9w cm9nbm9zdGljc19nVHh0KCdleGNsdWRpcicpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRh KGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAkc21kX3Byb2du b3N0aWNzX2V4Y2x1ZGlyLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQo J2NzdicpKSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2lnbm9yZXMn KSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2du b3N0aWNzX2lnbm9yZXMnLCAkc21kX3Byb2dub3N0aWNzX2lnbm9yZXMsICcnLCcnLCcnLDYw KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpKTsNCgllY2hvICgkd2FybmxvYykg PyB0cih0ZCgnJm5ic3A7JykudGRhKCc8c3Ryb25nPicuJHdhcm5sb2MuJzwvc3Ryb25nPicp KSA6ICcnOw0KCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdwcm9nbG9jJyks ICcgY2xhc3M9InNtZF9sYWJlbCInKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9z dGljc19kaXInLCAkc21kX3Byb2dub3N0aWNzX2RpciwgJycsJycsJycsNjApKSk7DQoJZWNo byB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Byb2dwZngnKSwgJyBjbGFzcz0ic21k X2xhYmVsIicpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX3ByZWZpeCcs ICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4LCAnJywnJywnJyw2MCkpKTsNCgllY2hvIHRyKHRk YSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRU YWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tICBTZWN1cml0eSBhZHZpY2UNCmZ1bmN0aW9u IHNtZF9wcm9nbm9zdGljc19hZHZpY2UoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2du b3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkcHJlZnM7DQoNCglwYWdl dG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7DQoJ ZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRjaGVja3MgPSBhcnJh eSgpOw0KDQoJLy8gUHJvZ25vc3RpY3MgZGlyIGluIGRvY3Jvb3Q/DQoJaWYgKHN0cnBvcyhn ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCksICRwcmVmc1sncGF0aF90 b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnZG9jcm9vdF9wcm9nbm9zdGljcycpOw0KCX0NCg0KCS8vIFNldHVwIHN0aWxsIGV4 aXN0cz8NCglpZiAoQGlzX2Rpcih0eHBhdGggLiBEUy4gJ3NldHVwJykpIHsNCgkJJGNoZWNr c1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NldHVwX2V4aXN0cycpOw0KCX0NCg0KCS8v IEZpbGVzIGRpciBpbiBkb2Nyb290Pw0KCWlmIChzdHJwb3MoJHByZWZzWydmaWxlX2Jhc2Vf cGF0aCddLCAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSddKSAhPT0gZmFsc2UpIHsNCgkJJGNoZWNr c1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2RvY3Jvb3RfZmlsZXMnKTsNCgl9DQoNCgkv LyBUbXAgZGlyIGluIGRvY3Jvb3Q/DQoJaWYgKHN0cnBvcygkcHJlZnNbJ3RlbXBkaXInXSwg JHByZWZzWydwYXRoX3RvX3NpdGUnXSkgIT09IGZhbHNlKSB7DQoJCSRjaGVja3NbXSA9IHNt ZF9wcm9nbm9zdGljc19nVHh0KCdkb2Nyb290X3RtcCcpOw0KCX0NCg0KLyoNCgkvLyBUT0RP OiBjaGVjayB3aGF0IFNIT1cgR1JBTlRTIHJldHVybnMgYW5kIGRldGVybWluZSBpZiBpdCBj b3VsZCBiZSBhIHNlY3VyaXR5IHJpc2sNCgkkcmVzID0gc2FmZV9xdWVyeSgnU0hPVyBHUkFO VFMnKTsNCglpZiAobnVtUm93cygkcmVzKSA+IDApIHsNCgkJJGNoZWNrc1tdID0gc21kX3By b2dub3N0aWNzX2dUeHQoJ3Nob3dfZ3JhbnRzJyk7DQoJfQ0KKi8NCg0KCS8vIERvZXMgdGhp cyBNeVNRTCB1c2VyIGhhdmUgRklMRVMgcHJpdnM/DQoJJHJhbmRmaWxlID0gJHByZWZzWyd0 ZW1wZGlyJ10uRFMucmFuZCgpLnRpbWUoKS4nLnNxbCc7DQoJJHJlcyA9IEBzYWZlX3F1ZXJ5 KCdTRUxFQ1QgaWQgSU5UTyBPVVRGSUxFICInLiRyYW5kZmlsZS4nIiBGSUVMRFMgVEVSTUlO QVRFRCBCWSAiXHQiIExJTkVTIFRFUk1JTkFURUQgQlkgIlxuIiBGUk9NIHR4cF9pbWFnZSBX SEVSRSAxIExJTUlUIDEnKTsNCglpZiAobXlzcWxfZXJyb3IoKSA9PSAnJykgew0KCQkkY2hl Y2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3FsX2ZpbGVfcHJpdnMnKTsNCgkJaWYg KGlzX2ZpbGUoJHJhbmRmaWxlKSkgew0KCQkJQHVubGluaygkcmFuZGZpbGUpOw0KCQl9DQoJ fQ0KDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nf c3R5bGVbJ2FkdmljZSddLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVwJ10uJzwvc3R5 bGU+Jy5zdGFydFRhYmxlKCdsaXN0JywgJycsICdzbWRfcHJvZ19hZHZpY2UnKTsNCgllY2hv IHRyKHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9hZHZpY2UnKSkpIC4g dGRhKCRidG5TZXR1cC4kYnRuRmlsZXMuJGJ0bkFjaywgJGJ0blN0eWxlKSApOw0KCWlmICgk Y2hlY2tzKSB7DQoJCWZvcmVhY2goJGNoZWNrcyBhcyAkY2hlY2spIHsNCgkJCWVjaG8gdHIo dGRhKCRjaGVjaykpOw0KCQl9DQoJfSBlbHNlIHsNCgkJc21kX3Byb2dub3N0aWNzX2dUeHQo J3RpZ2h0Jyk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLSBI YXNoIHRoZSBoYXNoZmlsZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3NlbGZfaGFzaCgp IHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCglpZiAoZmlsZV9l eGlzdHMoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCSRjb250ZW50ID0gc21k X3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vtcyk7DQoJ CSRoYXNoID0gbWQ1KCRjb250ZW50KTsNCgl9IGVsc2Ugew0KCQkkaGFzaCA9IE5VTEw7DQoJ fQ0KCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3VtaGFzaCcsICRoYXNoLCAnc21kX3By b2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCn0NCg0KLy8gLS0tLS0tLS0t LSBDb21waWxlIGxpc3Qgb2YgZmlsZXMgdG8gbW9uaXRvcg0KZnVuY3Rpb24gc21kX3Byb2du b3N0aWNzX3JlYWRmaWxlcygpIHsNCgkkZmlsZWxpc3QgPSBhcnJheSgpOw0KDQoJJHNtZF9w cm9nbm9zdGljc19saXN0bG9jID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19saXN0bG9j JywgJycpOw0KCSRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBkb19saXN0KGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAnJykpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf aWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICcnKTsNCglp ZiAoJHNtZF9wcm9nbm9zdGljc19saXN0bG9jKSB7DQoJCWZvcmVhY2ggKGRvX2xpc3QoJHNt ZF9wcm9nbm9zdGljc19saXN0bG9jKSBhcyAkbG9jKSB7DQoJCQkvLyBOT1RFOiBub3QgdXNp bmcgR0xPQl9CUkFDRSB0byBncmFiIHJlZ3VsYXIgYW5kIGRvdCBmaWxlcywgc2luY2UgaXQn cyBub3QgYWx3YXlzIGF2YWlsYWJsZSBjcm9zcy1PUw0KCQkJJGZpbGVsaXN0ID0gYXJyYXlf bWVyZ2UoJGZpbGVsaXN0LCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoIioiLCBHTE9CX01BUkss ICRsb2MsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJvZ25vc3RpY3NfaWdu b3JlcyksIHNtZF9wcm9nbm9zdGljc19yZ2xvYigiLioiLCBHTE9CX01BUkssICRsb2MsICRz bWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJvZ25vc3RpY3NfaWdub3JlcykpOw0K CQl9DQoJfQ0KCXJldHVybiAkZmlsZWxpc3Q7DQp9DQoNCi8vIC0tLS0tLS0tLS0gUHJlcGFy ZSBmaWxlIGNvbnRlbnRzIGZvciBtZDUuIEFzc3VtZXMgZmlsZSBleGlzdHMNCmZ1bmN0aW9u IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpIHsNCgkkY29udGVudCA9IGZpbGVf Z2V0X2NvbnRlbnRzKCRmaWxlKTsNCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCckJy4nSGVh ZFVSTDogaHR0cDonLCAnJCcuJ0hlYWRVUkw6IGh0dHBzOicsIHN0cl9yZXBsYWNlKCJcclxu IiwgIlxuIiwgJGNvbnRlbnQpKTsNCglyZXR1cm4gJGNvbnRlbnQ7DQp9DQoJDQovLyBGcmFu a2Vuc3RlaW5lZCBmcm9tIGh0dHA6Ly9zbmlwcGxyLmNvbS92aWV3LzE2MjMzL3JlY3Vyc2l2 ZS1nbG9iLw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JnbG9iKCRwYXR0ZXJuLCAkZmxh Z3M9MCwgJHBhdGg9JycsICRleGNsPWFycmF5KCksICRpZ249JycpIHsNCglnbG9iYWwgJHNt ZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCgkvLyBBZGQgYW55IGZpbGVzIHRvIHBlcm1h bmVudGx5IGV4Y2x1ZGUgaGVyZSAoTk9UIGRpcnM6IHRoZXkncmUgaWdub3JlZCBhdXRvbWF0 aWNhbGx5KQ0KCSRpZ25hcnIgPSAoJGlnbikgPyBkb19saXN0KCRpZ24pIDogYXJyYXkoKTsN CgkkcGVybWV4Y2x1ZGUgPSBhcnJheV9tZXJnZShhcnJheShiYXNlbmFtZSgkc21kX3Byb2du b3N0aWNzX2NoZWNrc3VtcykpLCAkaWduYXJyKTsNCg0KCWlmICghJHBhdGggJiYgKCRkaXIg PSBkaXJuYW1lKCRwYXR0ZXJuKSkgIT0gJy4nKSB7DQoJCWlmICgkZGlyID09ICdcXCcgfHwg JGRpciA9PSBEUykgJGRpciA9ICcnOw0KCQlyZXR1cm4gc21kX3Byb2dub3N0aWNzX3JnbG9i KGJhc2VuYW1lKCRwYXR0ZXJuKSwgJGZsYWdzLCAkZGlyIC4gRFMsICRleGNsLCAkaWduKTsN Cgl9DQoJJHBhdGhzID0gZ2xvYigkcGF0aCAuICcqJywgR0xPQl9PTkxZRElSIHwgR0xPQl9O T1NPUlQpOw0KCSRmaWxlcyA9IGdsb2IoJHBhdGggLiAkcGF0dGVybiwgJGZsYWdzKTsNCglm b3JlYWNoICgkcGF0aHMgYXMgJHApIHsNCgkJJHBpbmZvID0gYXJyYXlfcG9wKGV4cGxvZGUo RFMsICRwKSk7DQoJCWlmICghaW5fYXJyYXkoJHBpbmZvLCAkZXhjbCkpIHsNCgkJCSRmaWxl cyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21kX3Byb2dub3N0aWNzX3JnbG9iKCRwYXR0ZXJu LCAkZmxhZ3MsICRwIC4gRFMsICRleGNsLCAkaWduKSk7DQoJCQlmb3JlYWNoKCRmaWxlcyBh cyAkaWR4ID0+ICR0aGVGaWxlKSB7DQoJCQkJJGZleCA9IGFycmF5X3BvcChleHBsb2RlKERT LCAkdGhlRmlsZSkpOw0KCQkJCWlmKCRmZXg9PScnIHx8IGluX2FycmF5KCRmZXgsICRwZXJt ZXhjbHVkZSkpIHsNCgkJCQkJdW5zZXQoJGZpbGVzWyRpZHhdKTsNCgkJCQl9DQoJCQl9DQoJ CX0NCgl9DQoJcmV0dXJuICRmaWxlczsNCn0NCg0KLy8gRm9ybWF0IGZvcmVuc2ljIGRhdGEg Zm9yIGEgZmlsZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2ZvcmVuc2ljX291dHB1dCgk ZmlsZSwgJGZpKSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRkZm9ybSA9ICRwcmVmc1snZGF0 ZWZvcm1hdCddOw0KCSRzZXAgPSBuOw0KCSRvdXQgPSAnJzsNCg0KCSRvdXQgLj0gJHNlcCAu IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdGF0X25hbWUnKSAuICRmaWxlOw0KCSRvdXQgLj0g JHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdGF0X3NpemUnKSAuICRmaVsnc2l6ZSdd Ow0KCSRvdXQgLj0gJHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdGF0X21vZCcpIC4g c3RyZnRpbWUoJGRmb3JtLCAkZmlbJ210aW1lJ10pOw0KCSRvdXQgLj0gJHNlcCAuIHNtZF9w cm9nbm9zdGljc19nVHh0KCdzdGF0X3VpZCcpIC4gJGZpWyd1aWQnXTsNCgkkb3V0IC49ICRz ZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9naWQnKSAuICRmaVsnZ2lkJ107DQoN CglyZXR1cm4gJG91dDsNCn0NCg0KLy8gQ29tbW9uIGJ1dHRvbnMNCmZ1bmN0aW9uIHNtZF9w cm9nbm9zdGljc19idXR0b25zKCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50 LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlOw0KDQoJJHJldCA9IGFycmF5ICgNCgkJJ2J0blNh dmUnID0+IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxp c2gnKSwNCgkJJ2J0bkFjaycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZl bnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNz X2FjayYjMzg7c21kX3Byb2dub3N0aWNzX3N1cHByZXNzPTEiPicuZklucHV0KCdzdWJtaXQn LCAnc3VibWl0Jywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9hY2snKSwgJ3NtYWxsZXJi b3gnKS4nPC9mb3JtPicsDQoJCSdidG5BY2tJdCcgPT4gZklucHV0KCdzdWJtaXQnLCAnc3Vi bWl0Jywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9hY2tpdCcpLCAncHVibGlzaCcpLA0K CQknYnRuSWdub3JlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdpZ25vcmUnLCBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgncG5sX2lnbm9yZScpLCAncHVibGlzaCcpLA0KCQknYnRuQ1NJJyA9PiBm SW5wdXQoJ3N1Ym1pdCcsICdjc2knLCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2NzaScp LCAncHVibGlzaCcpLA0KCQknYnRuQWR2aWNlJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRf cHJvZ25vc3RpY3NfYWR2aWNlIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9w cm9nbm9zdGljc19nVHh0KCdwbmxfYWR2aWNlJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4n LA0KCQknYnRuRmlsZXMnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50 PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19m aWxlcyI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncG5sX2ZpbGVzJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuU2V0dXAn ID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9z dGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19zZXR1cCI+Jy5mSW5wdXQo J3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX3NldHVwJyks ICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuU3R5bGUnID0+ICcgY2xhc3M9InNt ZF9wcm9nX2J0bnMiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweDsiJywNCgkJJ2J0bkNT UycgPT4gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy4kc21kX3Byb2dub3N0aWNzX3N0eWxl WydzZXR1cCddLic8L3N0eWxlPicsDQoJKTsNCglyZXR1cm4gJHJldDsNCn0NCg0KLy8gTXVs dGktZmlsZSBkcm9wZG93biBzZWxlY3Rpb24NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19t dWx0aXNlbCgkc2VsbmFtZT0nJywgJHRyZWU9YXJyYXkoKSwgJHNlbD1hcnJheSgpKSB7DQoJ JG91dFtdID0gJzxzZWxlY3QgaWQ9IicuJHNlbG5hbWUuJyIgbmFtZT0iJy4kc2VsbmFtZS4n W10iIGNsYXNzPSJsaXN0IiBzdHlsZT0iaGVpZ2h0OjQwMHB4OyIgbXVsdGlwbGU9Im11bHRp cGxlIj4nOw0KCWZvcmVhY2ggKCR0cmVlIGFzICRsZWFmKSB7DQoJCSRzZWxlY3RlZD0nJzsN CgkJaWYgKGluX2FycmF5KCRsZWFmLCAkc2VsKSkgew0KCQkJJHNlbGVjdGVkID0gJyBzZWxl Y3RlZD0ic2VsZWN0ZWQiJzsNCgkJfQ0KDQoJCSRvdXRbXSA9IHQuJzxvcHRpb24nLiRzZWxl Y3RlZC4nPicuaHRtbHNwZWNpYWxjaGFycygkbGVhZikuJzwvb3B0aW9uPicubjsNCgl9DQoJ JG91dFtdID0gJzwvc2VsZWN0Pic7DQoJcmV0dXJuIGpvaW4oJycsJG91dCk7DQp9DQoNCi8v IFBhc3N3b3JkIHN0cmVuZ3RoIG1ldGVyDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfY2hy b25vc3RyZW5ndGgoJGV2dCwgJHN0cCkgew0KCWdsb2JhbCAkZXZlbnQsICRzbWRfcHJvZ25v c3RpY3Nfc3R5bGU7DQoNCglpZiAoJGV2ZW50ICE9ICdhZG1pbicpIHsNCgkJcmV0dXJuIGZh bHNlOw0KCX0NCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnskc21k X3Byb2dub3N0aWNzX3N0eWxlWydtZXRlciddfTwvc3R5bGU+DQo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+DQovLzwhW0NEQVRBWw0KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKioNCioqICAgRnJh bmtlbnN0ZWluZWQgZnJvbSBhbiBvcmlnaW5hbCAoR1BMKSBzY3JpcHQNCioqICAgYnkgU21h bGwgSGFkcm9uIENvbGxpZGVyIC0tIFRoYW5rcyENCioqICAgaHR0cDovL3d3dy5zbWFsbGhh ZHJvbmNvbGxpZGVyLmNvbQ0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8vIFVzYWdlOiBQYXNzIHRoZSBw YXNzd29yZCBzdHJpbmcgdG8gcGFzc3dvcmRTdHJlbmd0aCBhbmQgc3RyaW5nIHdpdGggdGlt ZSBpdCB3aWxsIHRha2UgaXMgcmV0dXJuZWQNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19n VHh0KHdoYXQpIHsNCgl2YXIgbGFuZyA9IG5ldyBBcnJheSgpOw0KCWxhbmdbJ2Fib3V0J10g PSAnYWJvdXQgJzsNCglsYW5nWydkaWdpdHNlcCddID0gJywnOw0KCWxhbmdbJ3BsdXJhbCdd ID0gJ3MnOw0KCWxhbmdbJ3B3X2NvbW1vbiddID0gJ29uZSBvZiB0aGUgNTAwIG1vc3QgY29t bW9uIHBhc3N3b3Jkcyc7DQoJbGFuZ1sncHdfcG9zdGFtYmxlJ10gPSAnSXQgd291bGQgYmUg Y3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5JzsNCglsYW5nWydwd19wcmVhbWJsZSddID0gJ1lv dXIgcGFzc3dvcmQgaXMnOw0KCWxhbmdbJ3B3X3Rha2UnXSA9ICdJdCB3b3VsZCB0YWtlJzsN CglsYW5nWydwd19jcmFjayddID0gJ2ZvciBhIGRlc2t0b3AgUEMgdG8gY3JhY2sgeW91ciBw YXNzIGJ5IGJydXRlIGZvcmNlPGJyIC8+KHVubGVzcyB5b3UgPGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL2Jsb2cvY2hvb3NpbmctYS1icmlsbGlhbnQtcGFzc3dvcmQvIj5icm9r ZSB0aGUgcnVsZXM8L2E+LCBpbiB3aGljaCBjYXNlIGl0XCdkIGJlIGNyYWNrZWQgYWxtb3N0 IGluc3RhbnRseSknOw0KCWxhbmdbJ3NlY3MnXSA9ICcgc2Vjb25kcyc7DQoJbGFuZ1sndF9z ZWMnXSA9ICdzZWNvbmQnOw0KCWxhbmdbJ3RfbWluJ10gPSAnbWludXRlJzsNCglsYW5nWyd0 X2hyJ10gPSAnaG91cic7DQoJbGFuZ1sndF9kYXknXSA9ICdkYXknOw0KCWxhbmdbJ3RfeXIn XSA9ICd5ZWFyJzsNCglsYW5nWyd0X3Rob195J10gPSAndGhvdXNhbmQgeWVhcnMnOw0KCWxh bmdbJ3RfbWlsX3knXSA9ICdtaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X2JpbF95J10gPSAn YmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF90cmlfeSddID0gJ3RybGxpb24geWVhcnMnOw0K CWxhbmdbJ3RfcXVhX3knXSA9ICdxdWFkcmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9xdWlf eSddID0gJ3F1aW50aWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3NleF95J10gPSAnc2V4dGls bGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9zZXBfeSddID0gJ3NlcHRpbGxpb24geWVhcnMnOw0K CWxhbmdbJ3Rfb2N0X3knXSA9ICdvY3RpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfbm9uX3kn XSA9ICdub25pbGxpb24geWVhcnMnOw0KCXJldHVybiBsYW5nW3doYXRdOw0KfQ0KDQpmdW5j dGlvbiBzbWRfcHJvZ19jaHJvbm9TdHJlbmd0aChwdykgew0KCXZhciBzaXplID0gcHcubGVu Z3RoOw0KCXZhciBzbWRfcHJvZ19jb21tb25fcHcgPSBuZXcgQXJyYXkoKTsNCgl2YXIgcHJl Y2lzaW9uID0gNzsNCglzbWRfcHJvZ19jb21tb25fcHdbM10gPSBbJ2dvZCcsJ3NleCddOw0K CXNtZF9wcm9nX2NvbW1vbl9wd1s0XSA9IFsnMTIzNCcsJ2Nvb2wnLCcxMzEzJywnc3Rhcics J2dvbGYnLCdiZWFyJywnZGF2ZScsJ3Bhc3MnLCdhYWFhJywnNjk2OScsJ2pha2UnLCdtYXR0 JywnMTIxMicsJ2Zpc2gnLCdmdWNrJywncG9ybicsJzQzMjEnLCcyMDAwJywnNDEyOCcsJ3Rl c3QnLCdzaGl0JywnbG92ZScsJ2JhYnknLCdjdW50JywnbWFyaycsJzMzMzMnLCdqb2huJywn c2V4eScsJzUxNTAnLCc0NDQ0JywnMjExMicsJ2ZyZWQnLCdtaWtlJywnMTExMScsJ3RpdHMn LCdwYXVsJywnbWluZScsJ2tpbmcnLCdmaXJlJywnNTU1NScsJ3NsdXQnLCdnaXJsJywnMjIy MicsJ2FzZGYnLCd0aW1lJywnNzc3NycsJ3JvY2snLCd4eHh4JywnZm9yZCcsJ2RpY2snLCdi aWxsJywnd29sZicsJ2JsdWUnLCdhbGV4JywnY29jaycsJ2JlZXInLCdlcmljJywnNjY2Nics J2phY2snXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNV0gPSBbJ2JlYWNoJywnZ3JlYXQnLCdi bGFjaycsJ3B1c3N5JywnMTIzNDUnLCdmcmFuaycsJ3RpZ2VyJywnamFwYW4nLCdtb25leScs J25ha2VkJywnMTExMTEnLCdhbmdlbCcsJ3N0YXJzJywnYXBwbGUnLCdwb3JubycsJ3N0ZXZl JywndmlwZXInLCdob3JueScsJ291ODEyJywna2V2aW4nLCdidWRkeScsJ3RlZW5zJywneW91 bmcnLCdqYXNvbicsJ2x1Y2t5JywnZ2lybHMnLCdsb3ZlcicsJ2JyaWFuJywna2l0dHknLCdi dWJiYScsJ2hhcHB5JywnY3JlYW0nLCdqYW1lcycsJ3h4eHh4JywnYm9vdHknLCdrZWxseScs J2Jvb2JzJywncGVuaXMnLCdlYWdsZScsJ3doaXRlJywnZW50ZXInLCdjaGV2eScsJ3NtaXRo JywnY2hyaXMnLCdncmVlbicsJ3NhbW15Jywnc3VwZXInLCdtYWdpYycsJ3Bvd2VyJywnZW5q b3knLCdzY290dCcsJ2RhdmlkJywndmlkZW8nLCdxd2VydCcsJ3BhcmlzJywnd29tZW4nLCdq dWljZScsJ2RpcnR5JywnbXVzaWMnLCdwZXRlcicsJ2JpdGNoJywnaG91c2UnLCdoZWxsbycs J2JpbGx5JywnbW92aWUnXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNl0gPSBbJzEyMzQ1Nics J3ByaW5jZScsJ2d1aXRhcicsJ2J1dHRlcicsJ2phZ3VhcicsJ3VuaXRlZCcsJ3R1cnRsZScs J211ZmZpbicsJ2Nvb3BlcicsJ25hc2NhcicsJ3JlZHNveCcsJ2RyYWdvbicsJ3p4Y3Zibics J3F3ZXJ0eScsJ3RvbWNhdCcsJzY5Njk2OScsJzY1NDMyMScsJ211cnBoeScsJzk4NzY1NCcs J2FtYW5kYScsJ2JyYXppbCcsJ3dpemFyZCcsJ2hhbm5haCcsJ2xhdXJlbicsJ21hc3Rlcics J2RvY3RvcicsJ2VhZ2xlMScsJ2dhdG9ycycsJ3NxdWlydCcsJ3NoYWRvdycsJ21pY2tleScs J21vdGhlcicsJ21vbmtleScsJ2JhaWxleScsJ2p1bmlvcicsJ25hdGhhbicsJ2FiYzEyMycs J2tuaWdodCcsJ2FsZXhpcycsJ2ljZW1hbicsJ2Z1Y2ttZScsJ3RpZ2VycycsJ2JhZGJveScs J2Jvbm5pZScsJ3B1cnBsZScsJ2RlYmJpZScsJ2FuZ2VsYScsJ2pvcmRhbicsJ2FuZHJlYScs J3NwaWRlcicsJ2hhcmxleScsJ3JhbmdlcicsJ2Rha290YScsJ2Jvb2dlcicsJ2l3YW50dScs J2FhYWFhYScsJ2xvdmVycycsJ3BsYXllcicsJ2ZseWVycycsJ3N1Y2tpdCcsJ2h1bnRlcics J2JlYXZlcicsJ21vcmdhbicsJ21hdHJpeCcsJ2Jvb21lcicsJ3J1bm5lcicsJ2JhdG1hbics J3Njb29ieScsJ2Vkd2FyZCcsJ3Rob21hcycsJ3dhbHRlcicsJ2hlbHBtZScsJ2dvcmRvbics J3RpZ2dlcicsJ2phY2tpZScsJ2Nhc3BlcicsJ3JvYmVydCcsJ2Jvb2JvbycsJ2Jvc3Rvbics J21vbmljYScsJ3N0dXBpZCcsJ2FjY2VzcycsJ2NvZmZlZScsJ2JyYXZlcycsJ3h4eHh4eCcs J3lhbmtlZScsJ3NhdHVybicsJ2J1c3RlcicsJ2dlbWluaScsJ2Jhcm5leScsJ2FwcGxlcycs J3NvY2NlcicsJ3JhYmJpdCcsJ3ZpY3RvcicsJ2F1Z3VzdCcsJ2hvY2tleScsJ3BlYW51dCcs J3R1Y2tlcicsJ2tpbGxlcicsJ2NhbmFkYScsJ2dlb3JnZScsJ2pvaG5ueScsJ3NpZXJyYScs J2JsYXplcicsJ2FuZHJldycsJ3NwYW5reScsJ2RvZ2dpZScsJzIzMjMyMycsJ3dpbnRlcics J3p6enp6eicsJ2JyYW5keScsJ2d1bm5lcicsJ2JlYXZpcycsJ2NvbXBhcScsJ2hvcm5leScs JzExMjIzMycsJ2NhcmxvcycsJ2FydGh1cicsJ2RhbGxhcycsJ3Rlbm5pcycsJ3NvcGhpZScs J2xhZGllcycsJ2NhbHZpbicsJ3NoYXZlZCcsJ3BlcHBlcicsJ2dpYW50cycsJ3N1cmZlcics J2ZlbmRlcicsJ3NhbXNvbicsJ2F1c3RpbicsJ21lbWJlcicsJ2Jsb25kZScsJ2Jsb3dtZScs J2Z1Y2tlZCcsJ2RhbmllbCcsJ2RvbmFsZCcsJ2dvbGRlbicsJ2dvbGZlcicsJ2Nvb2tpZScs J3N1bW1lcicsJ2Jyb25jbycsJ3JhY2luZycsJ3NhbmRyYScsJ2hhbW1lcicsJ3Bvb2tpZScs J2pvc2VwaCcsJ2hlbnRhaScsJ2pvc2h1YScsJ2RpYWJsbycsJ2JpcmRpZScsJ21hZ2dpZScs J3NleHNleCcsJ2xpdHRsZScsJ2JpdGVtZScsJzY2NjY2NicsJ3RvcGd1bicsJ2FzaGxleScs J3dpbGxpZScsJ3N0aWNreScsJ2Nvd2JveScsJ2FuaW1hbCcsJ3NpbHZlcicsJ3lhbWFoYScs J3FhendzeCcsJ2Z1Y2tlcicsJ2p1c3RpbicsJ3NraXBweScsJ29yYW5nZScsJ2JhbmFuYScs J2xha2VycycsJ21hcnZpbicsJ21lcmxpbicsJ2RyaXZlcicsJ3JhY2hlbCcsJ21hcmluZScs J3NsYXllcicsJ2FuZ2VscycsJ2FzZGZnaCcsJ2JpZ2RvZycsJ3ZhZ2luYScsJ2Fwb2xsbycs J2NoZWVzZScsJ3RveW90YScsJ3BhcmtlcicsJ21hZGRvZycsJ3RyYXZpcycsJzEyMTIxMics J2xvbmRvbicsJ2hvdGRvZycsJ3dpbHNvbicsJ3N5ZG5leScsJ21hcnRpbicsJ2Rlbm5pcycs J3Zvb2RvbycsJ2dpbmdlcicsJ21hZ251bScsJ2FjdGlvbicsJ25pY29sZScsJ2NhcnRlcics J2Vyb3RpYycsJ3NwYXJreScsJ2phc3BlcicsJzc3Nzc3NycsJ3llbGxvdycsJ3Ntb2tleScs J2RyZWFtcycsJ2NhbWFybycsJ3hhdmllcicsJ3RlcmVzYScsJ2ZyZWRkeScsJ3NlY3JldCcs J3N0ZXZlbicsJ2plcmVteScsJ3Zpa2luZycsJ2ZhbGNvbicsJ3Nub29weScsJ3J1c3NpYScs J3RheWxvcicsJ25pcHBsZScsJzExMTExMScsJ2VhZ2xlcycsJzEzMTMxMycsJ3dpbm5lcics J3Rlc3RlcicsJzEyMzEyMycsJ21pbGxlcicsJ3JvY2tldCcsJ2xlZ2VuZCcsJ2Zsb3dlcics J3RoZW1hbicsJ3BsZWFzZScsJ29saXZlcicsJ2FsYmVydCddOw0KCXNtZF9wcm9nX2NvbW1v bl9wd1s3XSA9IFsncG9yc2NoZScsJ3Jvc2VidWQnLCdjaGVsc2VhJywnYW1hdGV1cicsJzc3 Nzc3NzcnLCdkaWFtb25kJywndGlmZmFueScsJ2phY2tzb24nLCdzY29ycGlvJywnY2FtZXJv bicsJ3Rlc3RpbmcnLCdzaGFubm9uJywnbWFkaXNvbicsJ211c3RhbmcnLCdib25kMDA3Jywn bGV0bWVpbicsJ21pY2hhZWwnLCdnYXRld2F5JywncGhvZW5peCcsJ3RoeDExMzgnLCdyYWlk ZXJzJywnZm9yZXZlcicsJ3BlYWNoZXMnLCdqYXNtaW5lJywnbWVsaXNzYScsJ2dyZWdvcnkn LCdjb3dib3lzJywnZG9scGhpbicsJ2NoYXJsZXMnLCdjdW1zaG90JywnY29sbGVnZScsJ2J1 bGxkb2cnLCcxMjM0NTY3JywnbmNjMTcwMScsJ2dhbmRhbGYnLCdsZWF0aGVyJywnY3VtbWlu ZycsJ2h1bnRpbmcnLCdjaGFybGllJywncmFpbmJvdycsJ2Fzc2hvbGUnLCdiaWdjb2NrJywn ZnVja3lvdScsJ2plc3NpY2EnLCdwYW50aWVzJywnam9obnNvbicsJ25hdWdodHknLCdicmFu ZG9uJywnYW50aG9ueScsJ3dpbGxpYW0nLCdmZXJyYXJpJywnY2hpY2tlbicsJ2hlYXRoZXIn LCdjaGljYWdvJywndm95YWdlcicsJ3lhbmtlZXMnLCdyYW5nZXJzJywncGFja2VycycsJ25l d3lvcmsnLCd0cm91YmxlJywnYmlndGl0cycsJ3dpbnN0b24nLCd0aHVuZGVyJywnd2VsY29t ZScsJ2JpdGNoZXMnLCd3YXJyaW9yJywncGFudGhlcicsJ2Jyb25jb3MnLCdyaWNoYXJkJywn ODY3NTMwOScsJ3ByaXZhdGUnLCd6eGN2Ym5tJywnbmlwcGxlcycsJ2Jsb25kZXMnLCdmaXNo aW5nJywnbWF0dGhldycsJ2hvb3RlcnMnLCdwYXRyaWNrJywnZnJlZWRvbScsJ2Z1Y2tpbmcn LCdleHRyZW1lJywnYmxvd2pvYicsJ2NhcHRhaW4nLCdiaWdkaWNrJywnYWJncnR5dScsJ2No ZXN0ZXInLCdtb25zdGVyJywnbWF4d2VsbCcsJ2Fyc2VuYWwnLCdjcnlzdGFsJywncmViZWNj YScsJ3B1c3NpZXMnLCdmbG9yaWRhJywncGhhbnRvbScsJ3Njb290ZXInLCdzdWNjZXNzJ107 DQoJc21kX3Byb2dfY29tbW9uX3B3WzhdID0gWydmaXJlYmlyZCcsJ3Bhc3N3b3JkJywnMTIz NDU2NzgnLCdzdGVlbGVycycsJ21vdW50YWluJywnY29tcHV0ZXInLCdiYXNlYmFsbCcsJ3h4 eHh4eHh4JywnZm9vdGJhbGwnLCdxd2VydHl1aScsJ2plbm5pZmVyJywnZGFuaWVsbGUnLCdz dW5zaGluZScsJ3N0YXJ3YXJzJywnd2hhdGV2ZXInLCduaWNob2xhcycsJ3N3aW1taW5nJywn dHJ1c3RubzEnLCdtaWRuaWdodCcsJ3ByaW5jZXNzJywnc3RhcnRyZWsnLCdtZXJjZWRlcycs J3N1cGVybWFuJywnYmlnZGFkZHknLCdtYXZlcmljaycsJ2VpbnN0ZWluJywnZG9scGhpbnMn LCdoYXJkY29yZScsJ3JlZHdpbmdzJywnY29jYWNvbGEnLCdtaWNoZWxsZScsJ3ZpY3Rvcmlh JywnY29ydmV0dGUnLCdidXR0aGVhZCcsJ21hcmxib3JvJywnc3Jpbml2YXMnLCdpbnRlcm5l dCcsJ3JlZHNraW5zJywnMTExMTExMTEnLCdhY2Nlc3MxNCcsJ3J1c2gyMTEyJywnc2NvcnBp b24nLCdpbG92ZXlvdScsJ3NhbWFudGhhJywnbWlzdHJlc3MnXTsNCg0KCS8vIENoZWNrIHB3 IGFnYWluc3QgY29tbW9uIHBhc3N3b3JkcyBvZiB0aGF0IGxlbmd0aCB0byBzZWUgaWYgaXQn cyBpbiB0b3AgNTAwDQoJaWYgKHNpemUgPiAyICYmIHNpemUgPCA5KSB7DQoJCXZhciB3aWR0 aCA9IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXS5sZW5ndGg7DQoJCWZvciAodmFyIGlkeD0w OyBpZHggPCB3aWR0aDsgaWR4KyspIHsNCgkJCWlmIChwdy50b0xvd2VyQ2FzZSgpID09IHNt ZF9wcm9nX2NvbW1vbl9wd1tzaXplXVtpZHhdKSB7DQoJCQkJcmV0dXJuIC0xOw0KCQkJfQ0K CQl9DQoJfQ0KDQoJLy8gQ2FsY3VsYXRpb25zIHBlciBzZWNvbmQuIFRlbiBtaWxsaW9uIGlz IHJvdWdobHkgdGhlIG51bWJlciBhIGRlY2VudCBQQyBjb3VsZCBtYW5hZ2UgdW5pbmhpYml0 ZWQgaW4gMjAxMC4NCgkvLyBBdXRvbWF0aWNhbGx5IGRvdWJsZWQgZXZlcnkgMTggbW9udGhz IGFjY29yZGluZyB0byBNb29yZSdzIGxhdywgYW1vcnRpc2VkIGJ5IG1vbnRoDQoJdmFyIGNh bGNzUGVyU2VjID0gMTAwMDAwMDA7DQoJdmFyIGR0ID0gbmV3IERhdGUoKTsNCgl2YXIgYmFz ZVllYXIgPSAnMjAxMCc7DQoJdmFyIHRoaXNZZWFyID0gZHQuZ2V0RnVsbFllYXIoKTsNCgl2 YXIgdGhpc01vbnRoID0gZHQuZ2V0TW9udGgoKTsgLy8gMC0xMQ0KCXZhciBtb250aHNTaW5j ZUJhc2UgPSAoKHRoaXNZZWFyIC0gYmFzZVllYXIpICogMTIpICsgdGhpc01vbnRoOw0KCXZh ciBtb29yZVBlcmlvZHMgPSBNYXRoLmZsb29yKG1vbnRoc1NpbmNlQmFzZSAvIDE4KSArIDE7 DQoJY2FsY3NQZXJTZWMgKj0gbW9vcmVQZXJpb2RzOw0KCXZhciBpbmNyZW1lbnRQZXJNb250 aCA9IGNhbGNzUGVyU2VjIC8gMTg7IC8vIEhvdyBtYW55IGNhbGNzIGl0IGdvZXMgdXAgYnkg aW4gdGhpcyBNb29yZSBwZXJpb2QsIHBlciBtb250aA0KCWNhbGNzUGVyU2VjICs9IChpbmNy ZW1lbnRQZXJNb250aCAqIChtb250aHNTaW5jZUJhc2UlMTgpKTsNCg0KCS8vIEtlZXAgdHJh Y2sgb2YgaG93IG1hbnkgY2hhcmFjdGVyIHNldHMgYXJlIHVzZWQNCgl2YXIgcG9zc0NoYXJz ID0gMDsNCgkvLyBMb3dlcmNhc2UNCglpZiAocHcubWF0Y2goL1thLXpdLykpIHsgcG9zc0No YXJzICs9IDI2OyB9DQoJLy8gVXBwZXJjYXNlDQoJaWYgKHB3Lm1hdGNoKC9bQS1aXS8pKSB7 IHBvc3NDaGFycyArPSAyNjsgfQ0KCS8vIE51bWJlcnMNCglpZiAocHcubWF0Y2goL1xkKy8p KSB7IHBvc3NDaGFycyArPSAxMDsgfQ0KCS8vIFN5bWJvbHMNCglpZiAocHcubWF0Y2goL1sh LEAsIyzCoywkLOKCrCzCpSwlLF4sJiwqLCssPSw/LF8sfixcLSwoLCksPCw+LFwsLFwuLFxb LFxdLFx7LFx9LFx8LFw6LFw7LFwnLFwiLFxgLFwvLFxcXCxcwqxdLykgKSB7cG9zc0NoYXJz ICs9IDM2fTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBudW1iZXIgb2YgcG9zc2libGUgY29tYmlu YXRpb25zOiBwb3NzaWJsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwb3dlciBvZiB0aGUgcGFzc3dv cmQgbGVuZ3RoDQoJdmFyIHBvc3NDb21ib3MgPSBNYXRoLnBvdyhwb3NzQ2hhcnMsIHNpemUp Ow0KDQoJLy8gRGl2aWRlIHRoZSBudW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIGJ5 IHRoZSBjYWxjdWxhdGlvbnMgYSBQQyBjYW4gZG8gcGVyIHNlY29uZA0KCXZhciBjcmFja1Rp bWVJblNlY3MgPSBwb3NzQ29tYm9zIC8gY2FsY3NQZXJTZWM7DQoNCgkvLyBTZXQgdXAgYW4g YXJyYXkgb2YgcGVyaW9kcyB3aXRoIHRoZWlyIGxlbmd0aHMgaW4gc2Vjb25kcw0KCXZhciBz bWRfcGVyaW9kcyA9IG5ldyBBcnJheSgpOw0KCXNtZF9wZXJpb2RzWyd0X21pbiddID0gNjA7 DQoJc21kX3BlcmlvZHNbJ3RfaHInXSA9IHNtZF9wZXJpb2RzWyd0X21pbiddICogNjA7DQoJ c21kX3BlcmlvZHNbJ3RfZGF5J10gPSBzbWRfcGVyaW9kc1sndF9ociddICogMjQ7DQoJc21k X3BlcmlvZHNbJ3RfeXInXSA9IHNtZF9wZXJpb2RzWyd0X2RheSddICogMzY1LjI1Ow0KCXNt ZF9wZXJpb2RzWyd0X3Rob195J10gPSBzbWRfcGVyaW9kc1sndF95ciddICogMTAwMDsNCglz bWRfcGVyaW9kc1sndF9taWxfeSddID0gc21kX3BlcmlvZHNbJ3RfdGhvX3knXSAqIDEwMDA7 DQoJc21kX3BlcmlvZHNbJ3RfYmlsX3knXSA9IHNtZF9wZXJpb2RzWyd0X21pbF95J10gKiAx MDAwOw0KCXNtZF9wZXJpb2RzWyd0X3RyaV95J10gPSBzbWRfcGVyaW9kc1sndF9iaWxfeSdd ICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9xdWFfeSddID0gc21kX3BlcmlvZHNbJ3RfdHJp X3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfcXVpX3knXSA9IHNtZF9wZXJpb2RzWyd0 X3F1YV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NleF95J10gPSBzbWRfcGVyaW9k c1sndF9xdWlfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9zZXBfeSddID0gc21kX3Bl cmlvZHNbJ3Rfc2V4X3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfb2N0X3knXSA9IHNt ZF9wZXJpb2RzWyd0X3NlcF95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X25vbl95J10g PSBzbWRfcGVyaW9kc1sndF9vY3RfeSddICogMTAwMDsNCg0KCS8vIFBlcmlvZCB0eXBlIGlz ICdzZWNvbmRzJyBieSBkZWZhdWx0DQoJdmFyIHBlcmlvZFR5cGUgPSAndF9zZWMnOw0KCXZh ciBzdHJlbmd0aCA9ICcnOw0KDQoJLy8gSWYgaXQgd2lsbCB0YWtlIGxlc3MgdGhhbiBhIHNl Y29uZCB0byBjcmFjayB0aGUgcGFzc3dvcmQsIHNob3cgZXhhY3RseSBob3cgbG9uZw0KCWlm IChjcmFja1RpbWVJblNlY3MgPCAxKSB7DQoJCXN0cmVuZ3RoID0gY3JhY2tUaW1lSW5TZWNz LnRvRml4ZWQocHJlY2lzaW9uKSArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNzJyk7DQoJ fSBlbHNlIHsNCgkJLy8gT3RoZXJ3aXNlIHNob3cgYSByb3VuZGVkLWRvd24gbnVtYmVyDQoJ CS8vIEFkZHMgdGhlIHBsdXJhbCBvbnRvIGFueXRoaW5nIGJlZm9yZSBhIHRob3VzYW5kIHll YXJzDQoJCXZhciBpbnRvVGhvdXNhbmRzID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BsdXJh bCcpOw0KDQoJCS8vIEFkZHMgdGhlICdBYm91dCcgdG8gYW55dGhpbmcgYWZ0ZXIgc2Vjb25k cw0KCQl2YXIgaW50b01pbnV0ZXMgPSAnJzsNCg0KCQkvLyBSb3VuZCBkb3duIHRoZSB0aW1l DQoJCXZhciBuZXdUaW1lID0gTWF0aC5mbG9vcihjcmFja1RpbWVJblNlY3MpOw0KDQoJCS8v IEdvIHRocm91Z2ggZGlmZmVyZW50IHBlcmlvZCBsZW5ndGhzDQoJCWZvciAodmFyIGpkeCBp biBzbWRfcGVyaW9kcykgew0KCQkJLy8gU3RvcCB3aGVuIHRoZSByaWdodCBwZXJpb2QgaXMg cmVhY2hlZA0KCQkJaWYgKGNyYWNrVGltZUluU2VjcyA8IHNtZF9wZXJpb2RzW2pkeF0pIHsg YnJlYWs7IH0NCgkJCWVsc2Ugew0KCQkJCWlmIChqZHggPT0gInRfdGhvX3kiKSB7IGludG9U aG91c2FuZHMgPSAnJzsgfQ0KCQkJCWlmIChqZHggPT0gInRfbWluIikgeyBpbnRvTWludXRl cyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhYm91dCcpOyB9DQoJCQkJbmV3VGltZSA9IE1h dGguZmxvb3IoY3JhY2tUaW1lSW5TZWNzIC8gc21kX3BlcmlvZHNbamR4XSk7DQoJCQkJcGVy aW9kVHlwZSA9IGpkeDsNCgkJCX0NCgkJfQ0KDQoJCS8vIElmIHNpbmd1bGFyDQoJCWlmIChu ZXdUaW1lID09IDEpIHsNCgkJCXN0cmVuZ3RoID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Fi b3V0JykgKyAnMSAnICsgc21kX3Byb2dub3N0aWNzX2dUeHQocGVyaW9kVHlwZSk7DQoJCX0g ZWxzZSB7DQoJCQkvLyBDb252ZXJ0IG5ld1RpbWUgdG8gc3RyaW5nDQoJCQluZXdUaW1lICs9 ICcnOw0KDQoJCQkvLyBTcGxpdCB3aXRoIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdpdHMNCgkJ CXZhciByZWdleCA9IC8oXGQrKShcZHszfSkvOw0KDQoJCQl3aGlsZSAocmVnZXgudGVzdChu ZXdUaW1lKSkgew0KCQkJCW5ld1RpbWUgPSBuZXdUaW1lLnJlcGxhY2UocmVnZXgsICckMScg KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZGlnaXRzZXAnKSArICckMicpOw0KCQkJfQ0KDQoJ CQkvLyBDb21iaW5lIHdpdGggJ2Fib3V0JyBpZiBuZWVkZWQsIHRoZSB0aW1lIGl0IHdpbGwg dGFrZSwgdGhlIHBlcmlvZCB0eXBlLCBhbmQgdGhlICdzJyBpZiBuZWVkZWQNCgkJCXN0cmVu Z3RoID0gaW50b01pbnV0ZXMgKyBuZXdUaW1lICsgIiAiICsgc21kX3Byb2dub3N0aWNzX2dU eHQocGVyaW9kVHlwZSkgKyBpbnRvVGhvdXNhbmRzOw0KCQl9DQoJfQ0KDQoJcmV0dXJuIHN0 cmVuZ3RoOw0KfQ0KDQpmdW5jdGlvbiBwYXNzd29yZENoZWNrKHRoYXQsIGUpIHsNCglpZiAo ZS5rZXlDb2RlID09IDI3IHx8IGUuY2hhckNvZGUgPT0gMjcpIHsNCgkJalF1ZXJ5KHRoYXQp LnZhbCgiIik7DQoJfQ0KDQoJdmFyIHBhc3N3b3JkID0galF1ZXJ5KHRoYXQpLnZhbCgpOw0K DQoJaWYgKHBhc3N3b3JkICE9ICIiKSB7DQoJCXZhciBzdHJlbmd0aCA9IHNtZF9wcm9nX2No cm9ub1N0cmVuZ3RoKHBhc3N3b3JkKTsNCg0KCQkvL1RPRE86IGdUeHQoKQ0KCQlpZiAoc3Ry ZW5ndGggPT0gLTEpIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIikuaHRtbChzbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHdfcHJlYW1ibGUnKSArICcgPGRpdiBjbGFzcz0ic21kX3By b2dfcGFzc19zdHJlbmd0aCI+JyArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwd19jb21tb24n KSArICc8L2Rpdj4gJysgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X3Bvc3RhbWJsZScpKS5m YWRlSW4oNTAwKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIiku aHRtbChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfdGFrZScpICsgJyA8ZGl2IGNsYXNzPSJz bWRfcHJvZ19wYXNzX3N0cmVuZ3RoIj4nICsgc3RyZW5ndGggKyAnPC9kaXY+ICcgKyBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHdfY3JhY2snKSkuZmFkZUluKDUwMCk7DQoJCX0NCgl9IGVs c2Ugew0KCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCgl9DQp9DQpqUXVl cnkoZnVuY3Rpb24oKSB7DQoJdmFyIHNtZF9wcm9nX21ldGVyID0gJzxkaXYgaWQ9InNtZF9w cm9nX21ldGVyIj48L2Rpdj4nOw0KCWpRdWVyeSgiI2NoYW5nZV9wYXNzd29yZCIpLmFwcGVu ZChzbWRfcHJvZ19tZXRlcik7DQoJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5oaWRlKCk7 DQoJalF1ZXJ5KCIjbmV3X3Bhc3MiKS5rZXlkb3duKGZ1bmN0aW9uKGUpIHsNCgkJaWYgKGUu a2V5Q29kZSA9PSAxMyB8fCBlLmNoYXJDb2RlID09IDEzKSB7DQoJCQlyZXR1cm4gZmFsc2U7 DQoJCX0NCgl9KTsNCglqUXVlcnkoIiNuZXdfcGFzcyIpLmtleXVwKGZ1bmN0aW9uKGUpew0K CQlwYXNzd29yZENoZWNrKHRoaXMsIGUpOw0KCX0pOw0KfSk7DQovL11dPg0KPC9zY3JpcHQ+ DQpFT1M7DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8gV2ViIHBhZ2UJCSA6IGh0dHA6Ly9jb2Rl Lmdvb2dsZS5jb20vcC9waHByb3RlY3Rvcg0KLy8gQXV0b3IJCQkJOiBIdWdvIFNvdXNhIAkJ YWRhbWFzdG9yNjY2QGdtYWlsLmNvbQ0KLy8gRGF0ZQkJCQkgOiAyMDEwLTAzLTI1DQovLyBW ZXJzaW9uCQkJOiAwLjMuMS4xDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmNsYXNzIHNtZF9wcm9nX1Bo UHJvdGVjdG9yIHsNCgl2YXIgJFNIT1dfRVJST1JTOw0KDQoJcHVibGljIGZ1bmN0aW9uIHNt ZF9wcm9nX1BoUHJvdGVjdG9yKCRzaG93X2Vycm9ycykgew0KCQkkdGhpcy0+U0hPV19FUlJP UlM9JHNob3dfZXJyb3JzOw0KCQlpZiAoJHRoaXMtPlNIT1dfRVJST1JTKSB7DQoJCQllcnJv cl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UpOwkgLy9TaG93IGVy cm9ycw0KCQkJaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAiMSIpOwkvL2Rpc3BsYXkgZXJy b3JzDQoJCX0gZWxzZSB7DQoJCQlpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICIwIik7IC8v ZGlzcGxheSBlcnJvcnMNCgkJCWluaV9zZXQoJ2xvZ19lcnJvcnMnLCAiMSIpOwkvL2xvZ19l cnJvcnMNCgkJfQ0KCX0NCg0KCS8qDQoJKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBp biBhIGluZGV4IHBhZ2UgdGhhdCByZWRpcmVjdHMgdG8gb3RoZXIgcGFnZXMNCgkqDQoJKi8N CglwdWJsaWMgZnVuY3Rpb24gaXNNYWxpY2lvdXMoKSB7DQoJCSRzcWxpID0gZmFsc2U7DQoN CgkJJG51bV9iYWRfd29yZHMxID0gJHRoaXMtPkNoZWNrR2V0KCk7DQoJCSRudW1fYmFkX3dv cmRzMiA9ICR0aGlzLT5DaGVja1Bvc3QoKTsNCg0KCQlpZiAoJG51bV9iYWRfd29yZHMxID4g MCkgew0KCQkJJHNxbGkgPSB0cnVlOw0KCQl9DQoNCgkJaWYgKCRudW1fYmFkX3dvcmRzMiA+ IDApIHsNCgkJCSRzcWxpID0gdHJ1ZTsNCgkJfQ0KDQoJCXJldHVybiAkc3FsaTsNCgl9DQoN CgkvL2NoZWNrIGZvciBzcWwgaW5qZWN0aW9uIGFuZCBYU1MgaW4gUG9zdCB2YXJpYWJsZXMN Cglwcml2YXRlIGZ1bmN0aW9uIENoZWNrUG9zdCgpIHsNCgkJJG51bV9iYWRfd29yZHMgPSAw Ow0KDQoJCWZvcmVhY2goJF9QT1NUIGFzICRjYW1wbyA9PiAkaW5wdXQpIHsNCgkJCSRfUE9T VFskY2FtcG9dPSBkb0FycmF5KCRfUE9TVFskY2FtcG9dLCAnaHRtbGVudGl0aWVzJyk7IC8v IFhTUyBQUk9URUNUSU9ODQoJCQkkbnVtX2JhZF93b3JkcyA9ICRudW1fYmFkX3dvcmRzICsg JHRoaXMtPndvcmRFeGlzdHMoJGlucHV0KTsgLy9TUUwgSU5KRUNUSU9ODQoJCX0NCg0KCQly ZXR1cm4gJG51bV9iYWRfd29yZHM7DQoJfQ0KDQoJLy9jaGVjayBmb3Igc3FsIGluamVjdGlv biBhbmQgWFNTIGluIEdFVCB2YXJpYWJsZXMNCglwcml2YXRlIGZ1bmN0aW9uIENoZWNrR2V0 KCkgew0KCQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJZm9yZWFjaCgkX0dFVCBhcyAkY2Ft cG8gPT4gJGlucHV0KXsNCgkJCSRfR0VUWyRjYW1wb109IGRvQXJyYXkoJF9HRVRbJGNhbXBv XSwgJ2h0bWxlbnRpdGllcycpOyAvLyBYU1MgUFJPVEVDVElPTg0KDQoJCQlpZigkdGhpcy0+ aXNJZEluamVjdGlvbigkY2FtcG8sJGlucHV0KSl7IC8vU1FMIElEIElOSkVDVElPTg0KCQkJ CSRudW1fYmFkX3dvcmRzID0JJG51bV9iYWRfd29yZHMgKyAwLjU7DQoJCQl9DQoNCgkJCSRu dW1fYmFkX3dvcmRzID0gJG51bV9iYWRfd29yZHMgKyAkdGhpcy0+d29yZEV4aXN0cygkaW5w dXQpOyAvL1NRTCBJTkpFQ1RJT04NCgkJfQ0KDQoJCXJldHVybiAkbnVtX2JhZF93b3JkczsN Cgl9DQoNCgkvKioNCgkqCXJldHVybiB0cnVlIGlmIGluamVjdGlvbiBzcWwgd29yZCBpcyBm b3VuZC4NCgkqCVRoZSBpbnB1dCBpcyB0ZXN0ZWQgaWYgaXMgZXF1YWwgdG8gYSBzcWwgaW5q ZWN0aW9uIHBhdHRlcm4NCgkqCVxiW15hLXpdKj9kcm9wW15hLXpdKj9cYg0KCSoJIGh0dHA6 Ly93d3cucGFnZWNvbHVtbi5jb20vdG9vbC9yZWd0ZXN0Lmh0bQ0KCSoqLy8qCQkgIi8qIiwi KyIJCQkJKi8NCglwcml2YXRlIGZ1bmN0aW9uIHdvcmRFeGlzdHMoJGlucHV0KSB7DQoJCSRu dW1fYmFkX3dvcmRzID0gMDsNCg0KCQkvKg0KCQkgV09SRCBBRlRFUg0KCQkqLw0KCQkkYmFk ZGVsaW0xID0gIlteYS16XSoiOwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8g ImIiIGFueXRoaW5nIGVsc2UgaXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRi YWRkZWxpbTIgPSAiW15hLXpdKyI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoInVuaW9uIiwgInNl bGVjdCIsICJzaG93IiwgImluc2VydCIsICJ1cGRhdGUiLCAiZGVsZXRlIiwgImRyb3AiLCAi dHJ1bmNhdGUiLCAiY3JlYXRlIiwgImxvYWRfZmlsZSIsICJleGVjIiwgIiMiLCAiLS0iKTsN CgkJLy8iLyoiDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFzICRiYWR3b3JkKSB7DQoJCQkkZXhw cmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRkZWxp bTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHByZXNzaW9uLCBzdHJ0b2xvd2VyKCRp bnB1dCkpKSB7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rpb24hIik7DQoJCQkJJG51bV9iYWRf d29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCS8qDQoJCUJFRk9SRSBXT1JEDQoJCSovDQoJCSRi YWRkZWxpbTEgPSAiW15hLXpdKyI7CS8vdGhlIGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0 byAiYiIgYW55dGhpbmcgZWxzZSBpcyBjb25zaWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJ JGJhZGRlbGltMiA9ICJbXmEtel0qIjsNCgkJJGJhZHdvcmRzPSBhcnJheSgiQEB2ZXJzaW9u IiwgIkBAZGF0YWRpciIsICJ1c2VyIiwgInZlcnNpb24iKTsNCg0KCQlmb3JlYWNoKCRiYWR3 b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAiLyIuJGJhZGRlbGltMS5z dHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJCWlmIChwcmVnX21hdGNo ICgkZXhwcmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0KCQkJCS8vZGllKCJzcWwg aW5qZWN0aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCg0KCQkv Kg0KCQlCRUZPUkUgV09SRCBBRlRFUg0KCQkqLw0KCQkkYmFkZGVsaW0xID0gIlteYS16XSsi OwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIiIGFueXRoaW5nIGVsc2Ug aXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRkZWxpbTIgPSAiW15hLXpd KyI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoImJlbmNobWFyayIsICItLSIsICJ2YXJjaGFyIiwg ImNvbnZlcnQiLCAiY2hhciIsICJsaW1pdCIsICJpbmZvcm1hdGlvbl9zY2hlbWEiLCJ0YWJs ZV9uYW1lIiwgImZyb20iLCAid2hlcmUiLCAib3JkZXIiKTsNCg0KCQlmb3JlYWNoKCRiYWR3 b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAiLyIuJGJhZGRlbGltMS5z dHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJCWlmIChwcmVnX21hdGNo ICgkZXhwcmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0KCQkJCS8vZGllKCJzcWwg aW5qZWN0aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCg0KCQly ZXR1cm4gJG51bV9iYWRfd29yZHM7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4gdHJ1ZSBpZiBh bmQgSUQgaXMgbm90IHJlYWxseSBhbiBJRCENCgkqDQoJKiovDQoJcHJpdmF0ZSBmdW5jdGlv biBpc0lESW5qZWN0aW9uKCRjYW1wbywkaW5wdXQpIHsNCgkJJHJlZz0iL15pZC8iOw0KDQoJ CWlmKHByZWdfbWF0Y2goJHJlZywgJGNhbXBvKSkgew0KCQkJaWYoISR0aGlzLT5zdHJpbmdJ c051bWJlck5vdFplcm8oJGlucHV0KSB8fCAkaW5wdXQgPT0gJycpIHsNCgkJCQlyZXR1cm4g dHJ1ZTsJIC8vIGlmIGlzIElEIGFuZCBOT1QgSU5URUdFUiBvciBOVUxMIC0+IFNRTCBJTkpF Q1RJT04hIQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSoJ cmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIG51bWJlciAoZGlmZXJlbnQgZnJvbSAw LCB0aGUgaWQgY291bGQgbm90IGJlIHplcm8hKQ0KCSoNCgkqKi8NCglwcml2YXRlIGZ1bmN0 aW9uIHN0cmluZ0lzTnVtYmVyTm90WmVybyggJHN0cmluZyApIHsNCgkJJGk9MDsNCgkJd2hp bGUgKCAkaSA8IHN0cmxlbigkc3RyaW5nKSApIHsNCgkJCWlmICgkc3RyaW5neyRpfSA9PSAi MCIgJiYgJGk9PTApDQoJCQkJcmV0dXJuIGZhbHNlOw0KDQoJCQkvL3ZlcmlmaWNhIHNlIMOp IG51bWVybw0KCQkJaWYgKCAkc3RyaW5neyRpfSAhPSAiMCIgJiYNCgkJCQkkc3RyaW5neyRp fSAhPSAiMSIgJiYNCgkJCQkkc3RyaW5neyRpfSAhPSAiMiIgJiYNCgkJCQkkc3RyaW5neyRp fSAhPSAiMyIgJiYNCgkJCQkkc3RyaW5neyRpfSAhPSAiNCIgJiYNCgkJCQkkc3RyaW5neyRp fSAhPSAiNSIgJiYNCgkJCQkkc3RyaW5neyRpfSAhPSAiNiIgJiYNCgkJCQkkc3RyaW5neyRp fSAhPSAiNyIgJiYNCgkJCQkkc3RyaW5neyRpfSAhPSAiOCIgJiYNCgkJCQkkc3RyaW5neyRp fSAhPSAiOSIpDQoJCQlyZXR1cm4gZmFsc2U7DQoJCQkkaSsrOw0KCQl9Ly93aGlsZQ0KDQoJ CXJldHVybiB0cnVlOw0KCX0NCn0gLy9lbmQgY2xhc3MNCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxv Y2FsaXNlIGFzIHJlcXVpcmVkDQovLyBUT0RPOiBUZXh0cGFjayB0aGlzDQpmdW5jdGlvbiBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJZ2xvYmFs ICRwcmVmcywgJHNtZF9wcm9nbm9zdGljc19ldmVudDsNCgkkbGFuZyA9IGFycmF5KA0KCQkn YWxhcm1fZnJlcScgPT4gJ0FsYXJtIG9uIGRldGVjdGlvbiBhbmQgZXZlcnk6ICcsDQoJCSdh Y2tlZCcgPT4gJ0FsYXJtcyBhY2tub3dsZWRnZWQuJywNCgkJJ2NoX2FkZCcgPT4gJ0FkZGl0 aW9ucycsDQoJCSdjaF9kZWwnID0+ICdEZWxldGlvbnMnLA0KCQknY2hfbW9kJyA9PiAnTW9k aWZpY2F0aW9ucycsDQoJCSdjaGVja19mb3InID0+ICdDaGVjayBmaWxlcyBmb3I6ICcsDQoJ CSdjaGVja19mcmVxJyA9PiAnQ2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5OiAnLA0KCQkn Y2hlY2tfd2hlcmUnID0+ICdDaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M6ICcs DQoJCSdjc2knID0+ICdHYXRoZXIgZm9yZW5zaWNzIGFuZCBzZW5kIGZvciBhbmFseXNpcycs DQoJCSdjc2lfc2VudCcgPT4gJyBGb3JlbnNpY3MgZGF0YSBzZW50JywNCgkJJ2NzdicgPT4g Jyhjb21tYS1zZXBhcmF0ZWQpJywNCgkJJ2N1cnJtb24nID0+ICdZb3UgYXJlIGN1cnJlbnRs eSBtb25pdG9yaW5nIHtjdXJyfSBvdXQgb2Yge291dG9mfSBhdmFpbGFibGUgZmlsZXMuJywN CgkJJ2RvY3Jvb3RfZmlsZXMnID0+ICdDb25zaWRlciBtb3ZpbmcgdGhlICJmaWxlcyIgZm9s ZGVyIG91dHNpZGUgb2YgeW91ciBzaXRlIHJvb3QgZm9sZGVyLiBZb3UgY2FuIGRvIHRoaXMg dmlhIHRoZSAiQWRtaW4gPiBQcmVmcyA+IEFkdmFuY2VkID4gRmlsZSBkaXJlY3RvcnkgcGF0 aCIgc2V0dGluZy4nLA0KCQknZG9jcm9vdF9wcm9nbm9zdGljcycgPT4gJ1BsZWFzZSBjaGFu Z2UgdGhlICJQcm9nbm9zdGljcyBmb2xkZXIiIHNldHRpbmcgdG8gYSBkaXJlY3Rvcnkgb3V0 c2lkZSB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuJywNCgkJJ2RvY3Jvb3RfdG1wJyA9PiAnQ29u c2lkZXIgbW92aW5nIHRoZSAidG1wIiBmb2xkZXIgb3V0c2lkZSBvZiB5b3VyIHNpdGUgcm9v dCBmb2xkZXIuIFlvdSBjYW4gZG8gdGhpcyB2aWEgdGhlICJBZG1pbiA+IFByZWZzID4gQWR2 YW5jZWQgPiBUZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGgiIHNldHRpbmcuJywNCgkJJ2V4Y2x1 ZGlyJyA9PiAnRXhjbHVkZSBmb2xkZXJzOiAnLA0KCQknZmlsZXNfdXBkYXRlZCcgPT4gJ0Zp bGUgbGlzdCB1cGRhdGVkJywNCgkJJ2hlbHBfbGluaycgPT4gJyg8YSBocmVmPSJ7bGlua30i PkhlbHA8L2E+KScsDQoJCSdpZ25vcmVzJyA9PiAnSWdub3JlIGZpbGVzOiAnLA0KCQknbGJs X2NoYW5nZWQnID0+ICdDaGFuZ2VkJywNCgkJJ2xibF9oYXNobW9kJyA9PiAnQ09NUFJPTUlT RUQnLA0KCQknbGJsX21pc3NpbmcnID0+ICdNaXNzaW5nJywNCgkJJ2xibF9hZGRlZCcgPT4g J0FkZGVkIChub3QgbW9uaXRvcmVkKScsDQoJCSdsaXN0bG9jJyA9PiAnRmlsZSBsb2NhdGlv bnM6ICcsDQoJCSdtYWlsdG8nID0+ICdTZW5kIGUtbWFpbCB0bzogJywNCgkJJ21haWx0b19j c2knID0+ICdTZW5kIGZvcmVuc2ljcyB0bzogJywNCgkJJ21vbmZpbGVzX2V4cGxhaW4nID0+ ICdTZWxlY3QgYWxsIHRoZSBmaWxlcyB5b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBjbGljayBT YXZlLiBBbHRlcmluZyB0aGlzIGxpc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFja25vd2xlZGdl IGFueSBvdXRzdGFuZGluZyBhbGFybXMgYWdhaW5zdCB0aGUgc2VsZWN0ZWQgZmlsZXMuJywN CgkJJ25pY2VfdHJ5X2hlYWRlcicgPT4gJ05pY2UgdHJ5LCBidXQgdGhhdCBIVFRQIHJlcXVl c3QgaXMgYmxvY2tlZC4nLA0KCQknbmljZV90cnlfaW5qZWN0JyA9PiAnWW91ciByZXF1ZXN0 IGhhcyBiZWVuIGRlbmllZCBieSBzbWRfcHJvZ25vc3RpY3MuIE5pY2UgdHJ5LicsDQoJCSdu b19hbGFybXMnID0+ICdObyBhbGFybXMgdG8gYWNrbm93bGVkZ2UgYXQgcHJlc2VudC4nLA0K CQknbm9fZmlsZXMnID0+ICdObyBmaWxlcyB0byBsaXN0LiBDaGVjayB0aGUgcGx1Z2luIHNl dHVwIChhbmQgU2F2ZSBpdCkuJywNCgkJJ25vX2xvZ19lbnRyaWVzJyA9PiAnTm8gbG9nIGFj dGl2aXR5IGFyb3VuZCB0aGUgdGltZSBvZiB0aGUgZGlmZmVyZW5jZXMuJywNCgkJJ25vbmVf c2VsZWN0ZWQnID0+ICdObyBmaWxlcyBzZWxlY3RlZCcsDQoJCSdub3RpZnlfZW1haWwnID0+ ICdFLW1haWwnLA0KCQknbm90aWZ5X3R4cCcgPT4gJ1RYUCBpbnRlcmZhY2UnLA0KCQknbm90 aWZ5X3ZpYScgPT4gJ05vdGlmeSB2aWE6ICcsDQoJCSdwcmVhbWJsZV9hZGRlZCcgPT4gJ1Ro ZXNlIGZpbGVzIGhhdmUgYmVlbiBhZGRlZDogJywNCgkJJ3ByZWFtYmxlX2ZpbGVzJyA9PiAn RmlsZSBjb250ZW50cyBmb2xsb3dzOiAnLA0KCQkncHJlYW1ibGVfaGFzaGRvd24nID0+ICdX QVJOSU5HISBUaGUgY2hlY2tzdW1zIGZpbGUgaXMgbWlzc2luZy4nLA0KCQkncHJlYW1ibGVf aGFzaG1vZCcgPT4gJ1dBUk5JTkchIFRoZSBjaGVja3N1bXMgZmlsZSBoYXMgYmVlbiBhbHRl cmVkOiAnLA0KCQkncHJlYW1ibGVfbWlzcycgPT4gJ1RoZXNlIGZpbGVzIGFyZSBtaXNzaW5n OiAnLA0KCQkncHJlYW1ibGVfbm9rJyA9PiAnVGhlc2UgZmlsZXMgZGlmZmVyIGZyb20gdGhl aXIgZXhwZWN0ZWQgY29udGVudDogJywNCgkJJ3ByZWFtYmxlX3NxbF9pbmplY3QnID0+ICdQ b3NzaWJsZSBTUUwgaW5qZWN0aW9uIGRldGVjdGVkJywNCgkJJ3ByZWFtYmxlX3R4cGxvZycg PT4gJ0xvZyBlbnRyaWVzIHByaW9yIHRvIHRoaXMgZGV0ZWN0aW9uOiAnLA0KCQkncHJvZ2xv YycgPT4gJ1Byb2dub3N0aWNzIGZvbGRlcjogJywNCgkJJ3Byb2dwZngnID0+ICdVbmlxdWUg cHJlZml4OiAnLA0KCQkncG5sX2FjaycgPT4gJ0FsYXJtcycsDQoJCSdwbmxfYWNraXQnID0+ ICdBY2tub3dsZWRnZScsDQoJCSdwbmxfYWR2aWNlJyA9PiAnQWR2aWNlJywNCgkJJ3BubF9j c2knID0+ICdTZW5kIEZvcmVuc2ljcycsDQoJCSdwbmxfZmlsZXMnID0+ICdGaWxlcycsDQoJ CSdwbmxfaWdub3JlJyA9PiAnSWdub3JlJywNCgkJJ3BubF9zZXR1cCcgPT4gJ1NldHVwJywN CgkJJ3Bvc3RhbWJsZScgPT4gJ0Fja25vd2xlZGdlIGFsYXJtcycsDQoJCSdyZXFfaGVhZGVy cycgPT4gJ0Jsb2NrIHJlcXVlc3QgaGVhZGVyczogJywNCgkJJ3JlcV9ub3RfYWxsb3dlZCcg PT4gJ1JFUVVFU1RfTUVUSE9EIG5vdCBhbGxvd2VkOiB7cmVxfScsDQoJCSdyaF9kZWwnID0+ ICdERUxFVEUnLA0KCQkncmhfcHV0JyA9PiAnUFVUJywNCgkJJ3JoX3RyYWNlJyA9PiAnVFJB Q0UnLA0KCQkndHRsX2FjaycgPT4gJ1Byb2dub3N0aWMgYWxhcm0gYWNrbm93bGVkZ2VtZW50 JywNCgkJJ3R0bF9hZHZpY2UnID0+ICdQcm9nbm9zdGljIGFkdmljZScsDQoJCSd0dGxfZmls ZXMnID0+ICdQcm9nbm9zdGljIGZpbGUgbW9uaXRvcmluZycsDQoJCSd0dGxfZmlsZW9wdHMn ID0+ICdGaWxlc3lzdGVtIG9wdGlvbnMnLA0KCQkndHRsX21vbm9wdHMnID0+ICdNb25pdG9y aW5nIG9wdGlvbnMnLA0KCQkndHRsX3JlYWxvcHRzJyA9PiAnUmVhbHRpbWUgb3B0aW9ucycs DQoJCSd0dGxfc2V0dXAnID0+ICdQcm9nbm9zdGljIHNldHVwJywNCgkJJ3NtZF9wcm9nbm9z dGljcycgPT4gJ1Byb2dub3N0aWNzJywNCgkJJ3NlY29uZHMnID0+ICcoc2Vjb25kcyknLA0K CQknc2V0dXBfZXhpc3RzJyA9PiAnVGhlIHNldHVwIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMu IFBsZWFzZSBkZWxldGUgaXQuJywNCgkJJ3Nob3dfZ3JhbnRzJyA9PiAnWW91ciBUWFAgdXNl ciBjYW4gYWNjZXNzIHRoZSBNeVNRTCBwcml2aWxlZ2VzIGluIHRoZSBEQi4gQ29uc2lkZXIg YWNjZXNzaW5nIHRoZSBEQiB1c2luZyBhIGxlc3MgcHJpdmlsZWdlZCB1c2VyLicsDQoJCSdz cWxfZmlsZV9wcml2cycgPT4gJ1lvdXIgTXlTUUwgdXNlciBoYXMgRklMRSBwcml2aWxlZ2Vz LiBDb25zaWRlciByZXZva2luZyB0aGlzIHJpZ2h0IHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vz c2FyeS4nLA0KCQknc3FsX2luYWRtJyA9PiAnQWRtaW4gc2lkZScsDQoJCSdzcWxfaW5qZWN0 JyA9PiAnKGV4cGVyaW1lbnRhbCkgQ2hlY2sgZm9yIFNRTCBpbmplY3Rpb24gYXR0YWNrcyBv bjogJywNCgkJJ3NxbF9pbnB1YicgPT4gJ1B1YmxpYyBzaWRlJywNCgkJJ3N0YXRfZ2lkJyA9 PiAnR3JvdXAgSUQ6ICcsDQoJCSdzdGF0X21vZCcgPT4gJ01vZGlmaWVkOiAnLA0KCQknc3Rh dF9uYW1lJyA9PiAnRmlsZW5hbWU6ICcsDQoJCSdzdGF0X3NpemUnID0+ICdTaXplOiAnLA0K CQknc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQknc3ViamVjdCcgPT4gJ1Byb2dub3N0 aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpJywNCgkJJ3N1YmplY3RfY3NpJyA9PiAnUHJv Z25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJykgZm9yZW5zaWNzJywNCgkJJ3RpZ2h0 JyA9PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlwLiBTdGF5IGZyb3N0eS4nLA0KCQkn d2Fybl9sb2MnID0+ICdGaWxlIGxvY2F0aW9ucyBoYXZlIGNoYW5nZWQuIEVuc3VyZSB5b3Ug dXBkYXRlIHlvdXIgPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9nbm9zdGlj c19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+bGlzdCBvZiBmaWxl czwvYT4gbm93JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsN Cn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjEiO3M6NToiZmxhZ3Mi O3M6MToiMSI7czo0OiJoZWxwIjtzOjE5NDczOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgx PnNtZF9wcm9nbm9zdGljczwvaDE+CgoJPHA+VGhlIDxlbT5BZG1pbiAtJmd0OyBEaWFnbm9z dGljczwvZW0+IHRhYiBpcyBncmVhdCBpZiB5b3UgcmVtZW1iZXIgdG8gbG9vayBhdCBpdCBm cm9tIHRpbWUgdG8gdGltZS4gQnV0IGlmIHlvdXIgc2VydmVyIGlzIGNvbXByb21pc2VkLCBo b3cgd291bGQgeW91IGtub3cgYWJvdXQgYSBzbmVha3kgVHJvamFuIG9yIG1hbHdhcmUgdW50 aWwgeW91ciB2aXNpdG9ycyBjb21wbGFpbiBvciB0aGUgc2VhcmNoIGVuZ2luZXMgYmxvY2sg eW91ciBzaXRlPzwvcD4KCgk8cD5UaGUgYW5zd2VyIGlzIHRvIHVzZSBzbWRfcHJvZ25vc3Rp Y3MgdG8gdGVsbCB5b3Ugd2hlbiB0aGluZ3MgaGF2ZSBjaGFuZ2VkIHNvIHlvdSBjYW4gdGFr ZSBhY3Rpb24gaW1tZWRpYXRlbHkuPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJ CTxsaT5Nb25pdG9yIGZpbGVzIGFuZCBhdHRhY2tzIGluIGFuZCBhcm91bmQgeW91ciA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnN0YWxsYXRpb248L2xpPgoJCTxsaT5BdXRv bWF0aWNhbGx5IGRldGVjdCBhbnkgY2hhbmdlcyBhbmQgZGlzcGxheS9zZW5kIG5vdGlmaWNh dGlvbiB0byBkZXNpZ25hdGVkIHVzZXIocyk8L2xpPgoJCTxsaT5DdXN0b21pc2Ugd2hlcmVh Ym91dHMgYW5kIGhvdyBvZnRlbiB0aGUgY2hlY2tzIGFyZSBwZXJmb3JtZWQ8L2xpPgoJCTxs aT5BY2tub3dsZWRnZSBrbm93biBhbHRlcmF0aW9ucyBhbmQgY29uZmlndXJlIHJlcGVhdCBh bGFybXMgaWYgdGhlIHNpdHVhdGlvbiByZW1haW5zIHVuY2hlY2tlZDwvbGk+CgkJPGxpPlJ1 ZGltZW50YXJ5IHBhc3N3b3JkIHN0cmVuZ3RoIG1ldGVyIGluY2x1ZGVkPC9saT4KCTwvdWw+ CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0 aGFua3MgdG8gS2V2aW4gUG90dHMgYW5kIFN0ZXZlIERpY2tpbnNvbiBmb3IgYmV0YSB0ZXN0 aW5nIGFuZCBmZWF0dXJlIGVuaGFuY2VtZW50cy4gQWxzbyBrdWRvcyB0byBzbWFsbGhhZHJv bmNvbGxpZGVyIGZvciB0aGUgYmFzaXMgb2YgdGhlIHBhc3N3b3JkIHN0cmVuZ3RoIGNhbGN1 bGF0b3IgYW5kIEh1Z28gU291c2EgZm9yIHRoZSBwaFByb3RlY3RvciBjbGFzcy48L3A+CgoJ PGgyPkluc3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1w b3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjMuMCsg YW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDU8L3A+CgoJPHA+RG93bmxvYWQg dGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3Jn L3BsdWdpbnMvMTE5NS9zbWRfcHJvZ25vc3RpY3MiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9y IHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8 L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUg cGx1Z2luLiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcGx1Z2luIHJ1 bnMgYXMgcHJpb3JpdHkgMSBzbyBpdCBjYW4gZGV0ZWN0IHRoaW5ncyBiZWZvcmUgb3RoZXIg cGx1Z2lucy48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgPGVtPkFk bWluIC0mZ3Q7IFBsdWdpbnM8L2VtPiBwYWdlLiBZb3UgbWF5IHVzZSBzbWRfcHJlZmFsaXpl ciB0byByZW1vdmUgYW55IDxjb2RlPnNtZF9wcm9nbm9zdGljc18qPC9jb2RlPiBwcmVmZXJl bmNlcyB0aGF0IHRoZSBwbHVnaW4gY3JlYXRlZC48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNDkz OCI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPlF1aWNrIHN0 YXJ0OiB0aGUgdGhyZWUgc3RlcHMgdG8gZGV0ZWN0aW9uPC9oMj4KCgk8b2w+CgkJPGxpPlZp c2l0IDxlbT5FeHRlbnNpb25zIC0mZ3Q7IFByb2dub3N0aWNzPC9lbT4sIGFsdGVyIHRoZSBz ZXR1cCBpbmZvcm1hdGlvbiB0byB0YXN0ZSBhbmQgPHN0cm9uZz5tYWtlIHN1cmUgeW91IDxl bT5TYXZlPC9lbT4gaXQ8L3N0cm9uZz48L2xpPgoJCTxsaT5DbGljayB0aGUgUHJvZ25vc3Rp YyB0YWImIzgyMTc7cyA8ZW0+RmlsZXM8L2VtPiBidXR0b24gKGlnbm9yZSBhbnkgd2Fybmlu ZyBhYm91dCBtaXNzaW5nIGNoZWNrc3VtcyBmb3Igbm93OiB0aGV5JiM4MjE3O3ZlIG5vdCBi ZWVuIGNyZWF0ZWQgeWV0KSBhbmQgY2hvb3NlIHRoZSBmaWxlcyB5b3Ugd2lzaCB0byBtb25p dG9yLiA8c3Ryb25nPk1ha2Ugc3VyZSB5b3UgPGVtPlNhdmU8L2VtPiB0aGUgY2hhbmdlczwv c3Ryb25nPjwvbGk+CgkJPGxpPkdvIGFib3V0IHlvdXIgYnVzaW5lc3MuIElmIHRoZSBmaWxl c3lzdGVtIGNoYW5nZXMgeW91JiM4MjE3O2xsIGJlIHRvbGQgYWJvdXQgaXQuIFBsZWFzZSBj b25zaWRlciBoZWxwaW5nIHRvIDxhIGhyZWY9IiNzbWRfYmV0dGVyIj5tYWtlIHRoZSBwbHVn aW4gYmV0dGVyPC9hPjwvbGk+Cgk8L29sPgoKCTxoMiBpZD0ic21kX3NldHVwIj5TZXR1cDwv aDI+CgoJPHA+VGhlIDxlbT5Qcm9nbm9zdGljIHNldHVwPC9lbT4gcGFnZSBob3VzZXMgdGhl IGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6PC9wPgoKCTxoMz5Nb25pdG9yaW5n IG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNoZWNrIGZp bGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczwvc3Bhbj4gOiBjaGVja3MgYXJlIGFsd2F5cyBw ZXJmb3JtZWQgd2hlbiBwZW9wbGUgdmlzaXQgYWRtaW4gc2lkZSB0YWJzLiBZb3UgbWF5IGFs c28gZWxlY3QgdG8gY2hlY2sgdGhlIGZpbGVzIHdoZW4gdmlzaXRvcnMvYm90cyBicm93c2Ug eW91ciB3ZWIgc2l0ZSBpZiB5b3UgcHJlZmVyIChzZWUgPGEgaHJlZj0iI3NtZF9ob3dpdHdv cmtzIj5ob3cgaXQgd29ya3M8L2E+IGZvciBkZXRhaWxzKS48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Y2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5PC9zcGFuPiA6IHRoZSBw bHVnaW4gZG9lcyBub3QgY2hlY2sgdGhlIGZpbGVzIGV2ZXJ5IGNsaWNrIGJlY2F1c2UgdGhh dCB3b3VsZCBwbGFjZSB1bm5lY2Vzc2FyeSBzdHJhaW4gb24gdGhlIHNlcnZlci4gSW5zdGVh ZCB5b3UgY2hvb3NlIGEgY29uZmlndXJhYmxlIHRpbWUgJiM4MjEyOyBpbiBzZWNvbmRzICYj ODIxMjsgYWZ0ZXIgd2hpY2ggdGhlIHZlcnkgbmV4dCBhZG1pbi0gb3IgcHVibGljLXNpZGUg Y2xpY2sgd2lsbCB0cmlnZ2VyIHRoZSBjaGVjay48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+YWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBldmVyeTwvc3Bhbj4gOiB3aGVuIHNvbWV0 aGluZyBoYXMgY2hhbmdlZCBhbmQgaXQmIzgyMTc7cyBkZXRlY3RlZCwgYW4gYWxhcm0gYWN0 aW9uIGlzIGFsd2F5cyB0YWtlbi4gQnV0IGlmIHRoZSBwbHVnaW4gY29udGludWFsbHkgYm9t YmFyZGVkIHlvdSB3aXRoIGluZm9ybWF0aW9uIGl0IHdvdWxkIGJlIGFubm95aW5nIGFuZCBu b3QgYXMgdXNlZnVsLiBUaGlzIHNldHRpbmcgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhl IGludGVydmFsIGJldHdlZW4gcmVwZWF0IG5hZ3Mgb2YgdGhlIHNhbWUgbWVzc2FnZS4gT25j ZSBhIGRheSAodGhlIGRlZmF1bHQgb2YgODY0MDAgc2Vjb25kcykgYnkgZS1tYWlsIGlzIHVz dWFsbHkgZW5vdWdoIHVubGVzcyB5b3UmIzgyMTc7cmUgYSBtYXNvY2hpc3QuIE5vdGUgdGhh dCBpZiBtb3JlIGZpbGVzIGFyZSBjaGFuZ2VkICYjODIxMjsgZXZlbiB3aGVuIHRoZSB0aW1l b3V0IHBlcmlvZCBoYXMgeWV0IHRvIGVsYXBzZSAmIzgyMTI7IHlvdSB3aWxsIHJlY2VpdmUg YW5vdGhlciBhbGVydC48ZGl2IGNsYXNzPSJzbWRfYnJlYWsiPllvdSBtYXkgc3BlY2lmeSB0 d28gdmFsdWVzIChjb21tYS1zZXBhcmF0ZWQpIGlmIHlvdSB3aXNoOiB0aGUgZmlyc3QgaXMg dGhlIHRpbWUgYmV0d2VlbiBub3RpZmljYXRpb25zIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlOyB0aGUgc2Vjb25kIGlzIHRoZSB0aW1lIGJldHdl ZW4gZS1tYWlscy4gSWYgeW91IHVzZSBvbmx5IG9uZSB2YWx1ZSB0aGVuIGl0IHdpbGwgYmUg YXBwbGllZCB0byBib3RoLjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5u b3RpZnkgdmlhPC9zcGFuPiA6IGNob29zZSBob3cgeW91IHdpc2ggdG8gYmUgbm90aWZpZWQ6 Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEludGVyZmFjZSB3 aWxsIGRpc3BsYXkgYSBtZXNzYWdlIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBhZG1pbiBzaWRlIHdoZW4gYSBjaGFuZ2UgaXMgZGV0ZWN0ZWQuPC9saT4KCQk8bGk+ RS1tYWlsIHdpbGwgc2VuZCBvdXQgYW4gZS1tYWlsIGFib3V0IHRoZSBjaGFuZ2VzLjwvbGk+ Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZW5kIGUtbWFpbCB0bzwv c3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlLW1haWwgYWRkcmVzcyByZWNpcGll bnRzLiBJZiB0aGlzIGlzIGVtcHR5IG5vIGUtbWFpbHMgd2lsbCBiZSBzZW50IGV2ZW4gaWYg eW91IGNob29zZSB0byBiZSBub3RpZmllZCB2aWEgZS1tYWlsLjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5zZW5kIGZvcmVuc2ljcyB0bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0 ZWQgbGlzdCBvZiBlLW1haWwgYWRkcmVzcyByZWNpcGllbnRzIHRvIHJlY2VpdmUgZm9yZW5z aWNzIGRhdGEgKHRoZSBuYXR0aWx5LXRpdGxlZCA8ZW0+ZnJvZ25vc3RpY3M8L2VtPikuIFlv dSBjYW4gY2hvb3NlIG5vYm9keSBpZiB5b3Ugd2lzaCB0byBkaXNhYmxlIHRoaXMgZmVhdHVy ZSwgb3Igc2VuZCB0aGVtIHRvIHlvdXJzZWxmLCBvciA8YSBocmVmPSIjc21kX2JldHRlciI+ dG8gbWUgZm9yIGFuYWxheXNpczwvYT4uIDxzdHJvbmc+UGxlYXNlIG5vdGUgdGhhdCBzb21l IGRhdGEgaXMgcXVpdGUgc2Vuc2l0aXZlIGFuZCBtYXkgZGl2dWxnZSBwYXRocyB0byB5b3Vy IGZpbGVzIG9yIHNpdGU8L3N0cm9uZz4uIElmIHlvdSBwcmVmZXIgdG8ga2VlcCBzdHVmZiBw cml2YXRlIGJ5IGFsbCBtZWFucyBzYW5pdGl6ZSB0aGUgZm9yZW5zaWNzIGFuZCBzZW5kIHRo ZSBlZGl0ZWQgaGlnaGxpZ2h0cyB0byBtZSBmb3IgYW5hbHlzaXMgaWYgeW91IHdpc2guPC9s aT4KCTwvdWw+CgoJPGgzPlJlYWx0aW1lIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmJsb2NrIHJlcXVlc3QgaGVhZGVyczwvc3Bhbj4gOiBpZiB5b3Ug ZW5hYmxlIHRoaXMgZmFjaWxpdHkgeW91IGNhbiBlbGVjdCB0byBibG9jayBvciBhbGxvdyBj ZXJ0YWluIHR5cGVzIG9mIHNwZWljYWwgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+ IHJlcXVlc3QuIEFueSByZXF1ZXN0IG9mIGEgY2hlY2tlZCB0eXBlIHdpbGwgYmUgYmxvY2tl ZCBhbmQgYSBtZXNzYWdlIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgcGFnZS4g VGhlIGNvcmUgdHlwZXMgPHNwYW4gY2xhc3M9ImNhcHMiPkdFVDwvc3Bhbj4sIDxzcGFuIGNs YXNzPSJjYXBzIj5QT1NUPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPkhFQUQ8L3NwYW4+ IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+T1BUSU9OUzwvc3Bhbj4gYXJlIGF1dG9tYXRpY2Fs bHkgYWxsb3dlZCBiZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHJlcXVp cmVzIHRoZW0uIFRoZSByZW1haW5pbmcgdGhyZWUgJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2Fw cyI+VFJBQ0U8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+UFVUPC9zcGFuPiBhbmQgPHNw YW4gY2xhc3M9ImNhcHMiPkRFTEVURTwvc3Bhbj4gJiM4MjEyOyBhcmUgc3BlY2lhbGlzdCBo ZWFkZXJzIHRoYXQgYXJlbiYjODIxNzt0IHVzZWQgYnkgdGhlIGNvcmUgYnV0IG1heSBiZSBy ZXF1aXJlZCBieSBzb21lIHBsdWdpbnMuIFBlcm1pdCB0aGVtIGlmIHlvdSB3aXNoIGJ5IGNs ZWFyaW5nIHRoZSByZWxldmFudCBjaGVjayBib3goZXMpLCBvdGhlcndpc2UgZm9yIG1heGlt dW0gcHJvdGVjdGlvbiBrZWVwIHRoaXMgZmVhdHVyZSBzd2l0Y2hlZCBvbiB3aXRoIGFsbCB0 aHJlZSB0eXBlcyBvZiBoZWFkZXIgY2hlY2tlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Y2hlY2sgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlv biBhdHRhY2tzIG9uPC9zcGFuPiA6IHRoaXMgKGV4cGVyaW1lbnRhbCkgZmVhdHVyZSBjaGVj a3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LWJhc2VkIDxzcGFuIGNsYXNz PSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbiBhdHRhY2tzIGFuZCBibG9ja3MgdGhlbS4g WW91IGNhbiBjaG9vc2UgaWYgeW91IHdpc2ggdG8gbW9uaXRvciB0aGUgcHVibGljIHNpdGUs IGFkbWluIGludGVyZmFjZSBvciBib3RoLiBOb3RlIGhvd2V2ZXIgdGhhdCBzb21ldGltZXMg aW5zdGFsbGluZyBwbHVnaW5zIG9yIHNhdmluZyBsYXJnZSBhcnRpY2xlcyBjYW4gdHJpZ2dl ciB0aGlzLCBzbyBpdCBtYXkgbm90IGJlIG9mIG11Y2ggdXNlIG9uIHRoZSBhZG1pbiBzaWRl LiBXaGVuIGFuIGF0dGFjayBpcyBkZXRlY3RlZCB0aGUgcmVxdWVzdCBpcyBibG9ja2VkIHdp dGggYSAmIzgyMTY7TmljZSB0cnkmIzgyMTc7IG1lc3NhZ2UgYW5kIHRoZSBjdXJyZW50IHN0 YXRlIG9mIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQgaXMgYXV0b21hdGljYWxseSBzZW50IHRv IHRoZSBmb3JlbnNpY3MgZS1tYWlsIHNvIHlvdSBjYW4gc2VlIHdoYXQgd2FzIHN1Ym1pdHRl ZC48L2xpPgoJPC91bD4KCgk8aDM+RmlsZXN5c3RlbSBvcHRpb25zPC9oMz4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jaGVjayBmaWxlcyBmb3I8L3NwYW4+IDogY2hvb3Nl IHdoYXQgdHlwZSBvZiBhbHRlcmF0aW9ucyB5b3Ugd2lzaCB0byBtb25pdG9yOiBuZXcgZmls ZXMgYWRkZWQsIGZpbGVzIGRlbGV0ZWQgb3IgZmlsZXMgbW9kaWZpZWQuIEJ5IGRlZmF1bHQs IGFkZGl0aW9ucyBhcmUgbm90IHNlbGVjdGVkIGJlY2F1c2UgaXQgaW5jdXJzIGEgKHRpbnkp IGV4dHJhIHByb2Nlc3NpbmcgcGVuYWx0eSB0byB0aGUgY2hlY2tzLiBUaGVyZWZvcmUgaWYg eW91IHdhbnQgdG8gbW9uaXRvciBmb3IgYWRkaXRpb25zLCB5b3UgbmVlZCB0byBvcHQtaW4u PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZpbGUgbG9jYXRpb25zPC9zcGFuPiA6 IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggeW91IHdp c2ggdG8gYmUgYWJsZSB0byBzZWxlY3QgZmlsZXMgZm9yIG1vbml0b3JpbmcuIENob29zZSBv bmx5IHRoZSB0b3AtbGV2ZWwgZm9sZGVyOyBldmVyeXRoaW5nIGJlbmVhdGggd2lsbCBhdXRv bWF0aWNhbGx5IGJlIHNlbGVjdGVkLiBJdCBkZWZhdWx0cyB0byB5b3VyIHNpdGUgcm9vdC4g SWYgdXNpbmcgYSBtdWx0aS1zaXRlIHNldHVwIHlvdSBtYXkgaGF2ZSB0byBhbHRlciB0aGlz LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leGNsdWRlIGZvbGRlcnM8L3NwYW4+ IDogc2luY2UgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgeW91ciBUZXh0cGF0dGVybiBpbnN0 YWxsYXRpb24gbWF5IHBvdGVudGlhbGx5IGJlIGxhcmdlIHlvdSBjYW4gZGVzaWduYXRlIHNv bWUgZm9sZGVycyB0byBiZSBhdXRvbWF0aWNhbGx5IGV4Y2x1ZGVkLCB3aGljaCBtYWtlcyB0 aGUgZmlsZSBsaXN0IHNob3J0ZXIuIERlZmF1bHQ6IDxjb2RlPmltYWdlcywgZmlsZXMsIHRt cDwvY29kZT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlnbm9yZSBmaWxlczwv c3Bhbj4gOiBzb21lIGZpbGVzLCBzdWNoIGFzIHRoZSBlcnJvcl9sb2cgZmlsZSBvbiB0eXBp Y2FsIExpbnV4IGhvc3RzLCBwb3AgdXAgdW5hbm5vdW5jZWQgYW5kIHlvdSBtYXkgcGVyaW9k aWNhbGx5IGRlbGV0ZSB0aGVtLiBPbiBkZXZlbG9wbWVudCBzaXRlcyB0aGlzIGNhbiBjYXVz ZSBleGNlc3NpdmUgYWxhcm1zIGR1cmluZyBkZWJ1Z2dpbmcuIFRvIG1pbmltaXNlIHRoaXMs IHlvdSBjYW4gbGlzdCBmaWxlcyBoZXJlIHRoYXQgeW91IGFsd2F5cyB3aXNoIHRvIGlnbm9y ZS4gTm8gcGF0aHMgYXJlIG5lY2Vzc2FyeToganVzdCBzdXBwbHkgYSBjb21tYS1zZXBhcmF0 ZWQgbGlzdCBvZiBmaWxlIG5hbWVzLiBOb3RlIHRoYXQgdGhlIHByb2dub3N0aWNzIGNoZWNr c3VtcyBmaWxlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIHNvIHRoZXJl JiM4MjE3O3Mgbm8gbmVlZCB0byBsaXN0IGl0IGV4cGxpY2l0bHkuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnByb2dub3N0aWNzIGRpcjwvc3Bhbj4gOiBUaGUgZm9sZGVyIHdo ZXJlIHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSB3aWxsIHJlc2lkZS4gVGhlIGRp cmVjdG9yeSBtdXN0IGFscmVhZHkgZXhpc3QgYW5kIGJlIHdyaXRhYmxlIG9yIHlvdXIgY2hv c2VuIGxvY2F0aW9uIHdpbGwgYmUgaWdub3JlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+dW5pcXVlIHByZWZpeDwvc3Bhbj4gOiBwcmVmaXggdGhlIGNoZWNrc3VtcyBmaWxl IHdpdGggdGhpcyBzdHJpbmcuIFVzZWZ1bCB0byBhdm9pZCBmaWxlcyBjbGFzaGluZyBpZiB5 b3UgYXJlIHVzaW5nIHRoZSBzYW1lIChub24tZG9jcm9vdCkgZm9sZGVyIHRvIHN0b3JlIHRo ZSBjaGVja3N1bXMgZnJvbSBtb3JlIHRoYW4gb25lIHNpdGUuPC9saT4KCTwvdWw+CgoJPGgy IGlkPSJzbWRfaG93aXR3b3JrcyI+SG93IGl0IHdvcmtzPC9oMj4KCgk8cD5JZGVhbGx5LCB0 aGUgcGx1Z2luIHdvdWxkIGJlIGEgdGltZWQgc2NyaXB0IHRoYXQgcnVucyBldmVyeSBOIHNl Y29uZHMuIEJ1dCB0aGF0IHJlcXVpcmVzIGEgcGFydGljdWxhciBwaWVjZSBvZiBzb2Z0d2Fy ZSAoY3Jvbikgb24geW91ciBob3N0IGFuZCB0aGVyZSYjODIxNztzIG5vIGd1YXJhbnRlZSBp dCBleGlzdHMuIFRodXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYW4gJiM4MjE2O3RyaWdnZXIm IzgyMTc7IHRoZSBwbHVnaW4gaXMgVGV4dHBhdHRlcm4gaXRzZWxmLiBUaGUgcGx1Z2luIHJ1 bnMgZXZlcnkgdGltZSB5b3UgaW50ZXJhY3Qgd2l0aCB0aGUgYWRtaW4gc2lkZSwgYnV0IGlm IGl0IGNoZWNrZWQgYWxsIHRoZSBmaWxlcyBhZ2FpbnN0IGFsbCB0aGUgY2hlY2tzdW1zIHlv dSBoYXZlIGNob3NlbiBvbiBldmVyeSBjbGljaywgeW91ciBhZG1pbiBzaWRlIHdvdWxkIHNs b3cgZG93biBhIGxvdC4gVGhlIGNvbXByb21pc2UgaXMgdG8gc3BlY2lmeSBhIHRpbWVvdXQg dmFsdWUgY2FsbGVkIDxjb2RlPmNoZWNrIGZpbGVzIChhdCBtb3N0KSBldmVyeTwvY29kZT4u IFRoaXMgaXMgaG93IGl0IHdvcmtzOjwvcD4KCgk8b2w+CgkJPGxpPldoZW4geW91IGNsaWNr IGEgdGFiIG9yIGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNpZGUsIHRoZSBwbHVnaW4gbG9v a3MgYXQgd2hlbiB5b3UgPGVtPmxhc3Q8L2VtPiBjbGlja2VkIHNvbWV0aGluZyBhbmQgYXNr cyAmIzgyMjA7aXMgaXQgZ3JlYXRlciB0aGFuIE4gKHNlY29uZHMpPyYjODIyMTs8L2xpPgoJ CTxsaT5JZiBzbywgaXQgcnVucyB0aGUgZmlsZSBjaGVja3MgYW5kIHJlc2V0cyB0aGUgY291 bnRlcjwvbGk+CgkJPGxpPklmIHRoZSB2YWx1ZSBvZiBOIGhhcyBub3QgeWV0IGJlZW4gcmVh Y2hlZCwgaXQgZG9lcyBub3RoaW5nLCB0aHVzIHNhdmluZyB5b3UgcHJlY2lvdXMgcHJvY2Vz c29yIGN5Y2xlczwvbGk+Cgk8L29sPgoKCTxwPkFsbCB0aGF0IGlzIGdyZWF0IGlmIHlvdSYj ODIxNztyZSBjb250aW51YWxseSB1c2luZyB0aGUgYWRtaW4gc2lkZSBhbmQgcHJvZHVjaW5n IGNsaWNrcyBmb3IgdGhlIHBsdWdpbiB0byBydW4uIEJ1dCBvbmNlIHlvdSBoYW5kIG92ZXIg dGhlIHNpdGUgdG8geW91ciBjbGllbnQsIHRoZXkgbWF5IG5vdCB1c2UgdGhlIGFkbWluIHNp ZGUgYXMgb2Z0ZW4gYXMgeW91ICYjODIxMjsgaWYgYXQgYWxsLiBUaHVzIHlvdXIgZmlsZXMg d291bGQgcmFyZWx5L25ldmVyIGJlIGNoZWNrZWQuIEhlbmNlIHlvdSBjYW4gYXNrIHRoZSBw bHVnaW4gdG8gcmVzcG9uZCB0byBwdWJsaWMgc2lkZSBjbGlja3MgYXMgd2VsbCBzbyB0aGF0 IGFueSB0aW1lIGEgdmlzaXRvciAob3IgYm90KSBjcmF3bHMgeW91ciBwYWdlcyB0aGUgcGx1 Z2luIHJ1bnMsIGNoZWNrcyBpZiB0aGUgdGltZW91dCBoYXMgYmVlbiBleGNlZWRlZCBhbmQs IGlmIHNvLCBjaGVja3MgdGhlIGZpbGVzIGFuZCByZXNldHMgdGhlIGNvdW50ZXIgKGV4YWN0 bHkgYXMgaXQgd291bGQgZG8gb24gdGhlIGFkbWluIHNpZGUpLjwvcD4KCgk8cD5UaGlzIHdp bGwgcHVzaCB0aGUgcHJvY2Vzc2luZyBsb2FkIG9udG8geW91ciBwdWJsaWMgc2l0ZSwgYnV0 IHNpbmNlIGl0JiM4MjE3O3Mgb25seSBydW4gYXQgbW9zdCBvbmNlIGV2ZXJ5IE4gc2Vjb25k cyB5b3UgY2FuIGNvbnRyb2wgaG93IG11Y2ggb2YgYW4gaW1wYWN0IGl0IGhhcyBieSBtYXRj aGluZyB0aGF0IHdpdGggeW91ciBkZXNpcmUgdG8ga25vdyAmIzgyMTY7aW5zdGFudGx5JiM4 MjE3OyB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCB2ZXJzdXMgdGhlIHZvbHVtZSBvZiB0 cmFmZmljIC8gdmlzaXRvcnMgdG8gdGhlIHNpdGUgYW5kIGhvdyBvZnRlbiB5b3Ugd2FudCB0 byBkZWxheSB0aGVpciBicm93c2luZy48L3A+CgoJPHA+VGhlIHBsdWdpbiBpcyB3cml0dGVu IHRvIGJlIGFzIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgaXQgcG9zc2libHkgY2FuIHRvIGF2 b2lkIGFueSBkZWxheXM7IHRoZXJlIG1heSBiZSA8YSBocmVmPSIjc21kX2JldHRlciI+cm9v bSBmb3IgaW1wcm92ZW1lbnQ8L2E+IG9mIGNvdXJzZSEgUGxlYXNlIGJlIGF3YXJlIHRoYXQg bm8gZGV0ZWN0aW9uIHN5c3RlbSBpcyBmb29scHJvb2YgYW5kIHRoZXJlIGlzIG5vIHN1YnN0 aXR1dGUgZm9yIHZpZ2lsYW5jZSBhbmQgPGEgaHJlZj0iI3NtZF9wd3N0cmVuZ3RoIj5nb29k IHBhc3N3b3JkczwvYT4gOi0pPC9wPgoKCTxoMiBpZD0ic21kX21vbmZpbGVzIj5Nb25pdG9y aW5nIGZpbGVzPC9oMj4KCgk8cD5DbGlja2luZyB0aGUgPGVtPkZpbGVzPC9lbT4gYnV0dG9u IHRha2VzIHlvdSB0byBhIHNjcmVlbiB3aXRoIGEgdGV4dGFyZWEgaW4gaXQgdGhhdCBhbGxv d3MgeW91IHRvIGNob29zZSB0aGUgZmlsZXMgeW91IHdpc2ggdG8gbW9uaXRvci4gQSBjb3Vu dCBvZiB0aGUgY3VycmVudCBudW1iZXIgb2YgbW9uaXRvcmVkIGZpbGVzIGlzIHNob3duIGF0 IHRoZSB0b3AsIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBmaWxlcyBhdmFpbGFibGUgaW4g eW91ciBjaG9zZW4gZmlsZSBsb2NhdGlvbihzKS4gVGhlIGZvbGxvd2luZyBmaWxlcyB3aWxs IGJlIGluIHRoZSBsaXN0OjwvcD4KCgk8b2w+CgkJPGxpPmFsbCBmaWxlcyBpbiBhbGwgc3Vi ZGlyZWN0b3JpZXMgZnJvbSBhbGwgPGNvZGU+RmlsZSBsb2NhdGlvbnM8L2NvZGU+IHlvdSBz cGVjaWZpZWQgdG8gbW9uaXRvciBpbiB0aGUgU2V0dXAgc2NyZWVuPC9saT4KCQk8bGk+PGVt PmV4Y2VwdDwvZW0+IGFueSBmaWxlcyBiZWxvdyB0aGUgZGlyZWN0b3JpZXMgeW91IGNob3Nl IHRvIGV4Y2x1ZGU8L2xpPgoJCTxsaT48ZW0+ZXhjZXB0PC9lbT4gYW55IGZpbGUgbmFtZXMg eW91IGV4cGxpY2l0bHkgY2hvc2UgdG8gaWdub3JlPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwv ZW0+IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZTwvbGk+Cgk8L29sPgoKCTxwPkF0 IGZpcnN0LCBubyBmaWxlcyB3aWxsIGJlIHNlbGVjdGVkIHNvIHlvdSB3aWxsIGJlIG1vbml0 b3Jpbmcgbm90aGluZy4gQ2hvb3NlIHdoaWNoIGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3Ig YW5kIHNhdmUgdGhlIGNoYW5nZXMuIFRoZSBwbHVnaW4gd2lsbCBrZWVwIHRhYnMgb24gdGhv c2UgZmlsZXMuPC9wPgoKCTxwPklmIHlvdSBoYXZlIGVsZWN0ZWQgdG8gd2F0Y2ggZm9yIGFk ZGl0aW9ucyB0byB0aGUgZmlsZSBzeXN0ZW0sIGFueSBmaWxlcyBpbiBhbnkgb2YgeW91ciBj aG9zZW4gbG9jYXRpb25zIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgaW4gdGhlIGxpc3QgYXQg dGhlIHRpbWUgeW91IGhpdCA8ZW0+U2F2ZTwvZW0+IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIg eW91IGFyZSBtb25pdG9yaW5nIHRoZW0gb3Igbm90KSB3aWxsIHRyaWdnZXIgYW4gYWxhcm0u IEdvIGFoZWFkIGFuZCB0cnkgaXQ6IGFkZCBzb21lIGZpbGVzIHRvIHlvdXIgc2VydmVyIG9y IGluc3RhbGwgYSBuZXcgdGhlbWUgb3Igc29tZXRoaW5nIGFuZCB0aGUgcGx1Z2luIHdpbGwg dGVsbCB5b3UuPC9wPgoKCTxoMiBpZD0ic21kX2FjayI+QWNrbm93bGVkZ2luZyBhbGFybXM8 L2gyPgoKCTxwPklmIG9uZSBvciBtb3JlIGZpbGVzIGFyZSBhbHRlcmVkLCBkZWxldGVkLCBv ciBuZXcgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIChkZXBlbmRpbmcgb24gd2hpY2ggYWN0aW9u cyB5b3UgaGF2ZSBlbGVjdGVkIHRvIG1vbml0b3IpIHRoZSBwbHVnaW4gd2lsbCBkZXRlY3Qg dGhpcyB3aGVuIHRoZSBuZXh0IGFkbWluLSBvciBwdWJsaWMtc2lkZSBjbGljayBpcyByZWNl aXZlZCBhbmQgdGhlIHRpbWVvdXQgY3ljbGUgaXMgZXhjZWVkZWQuIEl0IHdpbGwgdGhlbiB0 YWtlIHRoZSBhY3Rpb24geW91IGNob3NlLiBOb3RlIG9mIGNvdXJzZSB0aGF0IHlvdSB3b24m IzgyMTc7dCBzZWUgdGhlIGFkbWluLXNpZGUgd2FybmluZyBpZiBub3QgbG9nZ2VkIGluITwv cD4KCgk8cD5UaGUgbWVzc2FnZSBkZWxpdmVyZWQgdG8geW91IGNvbnRhaW5zIGEgbGluayB0 byB0aGUgQWNrbm93bGVkZ2VtZW50IHBhZ2UgKHdoaWNoIGNhbiBhbHNvIGJlIHJlYWNoZWQg YnkgY2xpY2tpbmcgdGhlIDxlbT5BbGFybXM8L2VtPiBidXR0b24gZnJvbSB0aGUgUHJvZ25v c3RpY3MgdGFiKS4gWW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgYWxsIHRoZSBm aWxlc3lzdGVtIGFsdGVyYXRpb25zLiBJZiB5b3Uga25vdyBhYm91dCB0aGUgY2hhbmdlcyAm IzgyMTI7IGUuZy4geW91IGluaXRpYXRlZCB0aGVtIGJ5IHVwbG9hZGluZyBzb21lIG5ldyBm aWxlIHZlcnNpb24ocykgJiM4MjEyOyB0aGVuIHlvdSBjYW4gYWNrbm93bGVnZGUgdGhpcyBi eSBwbGFjaW5nIGEgY2hlY2sgbWFyayBuZXh0IHRvIHRoZSBmaWxlcyB5b3Uga25vdyBjb250 YWluIGxlZ2l0aW1hdGUgYWx0ZXJhdGlvbnMuIFdoZW4geW91IGNsaWNrIHRoZSA8ZW0+QWNr bm93bGVkZ2U8L2VtPiBidXR0b24geW91IHNpZ25pZnkgdG8gdGhlIHBsdWdpbiB0aGF0IHlv dSBhY2NlcHQgdGhlIGNoYW5nZXMuIFRodXMgdGhlIG5ldyBmaWxlKHMpIGJlY29tZSB0aGUg YmFzZWxpbmUuPC9wPgoKCTxwPklmIHlvdSBhcmUgbW9uaXRvcmluZyBmaWxlIHN5c3RlbSBh ZGRpdGlvbnMsIHRoZSBhY3Qgb2YgYWNrbm93bGVkZ2luZyB0aGUgYWxhcm0gaW5kaWNhdGVz IHRoYXQgeW91IGFyZSBoYXBweSBmb3IgdGhlIG5ldyBmaWxlKHMpIHRvIGJlIG1vbml0b3Jl ZC4gVGhleSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgRmls ZXMgdG8gbW9uaXRvciAoeW91IGNhbiB2ZXJpZnkgdGhpcyBieSB2aXNpdGluZyB0aGUgUHJv Z25vc3RpYyB0YWImIzgyMTc7cyA8ZW0+RmlsZXM8L2VtPiBsaXN0KS4gSWYgeW91IGtub3cg YWJvdXQgc29tZSBvZiB0aGUgZmlsZXMgKHBlcmhhcHMgdGhleSBhcmUgbmV3IGFkZGl0aW9u cykgYW5kIHlvdSBkb24mIzgyMTc7dCB3YW50IHRvIG1vbml0b3IgdGhlbSwgc2VsZWN0IHRo ZSBmaWxlKHMpIGFuZCBjbGljayA8ZW0+SWdub3JlPC9lbT4uIFRoZSBhbGFybSB3aWxsIGJl IGFja25vd2xlZGdlZCBidXQgeW91IHdpbGwgbm90IGJlIG1vbml0b3JpbmcgdGhlIGZpbGUo cykuPC9wPgoKCTxwPklmIHlvdSBjaG9vc2Ugbm90IHRvIGFja25vd2xlZGdlL2lnbm9yZSBz b21lIG9yIGFsbCBvZiB0aGUgZmlsZXMsIHlvdSB3aWxsIGNvbnRpbnVlIHRvIGJlIG5hZ2dl ZCBhdCB5b3VyIGRlc2lnbmF0ZWQgYWxhcm0gZnJlcXVlbmN5IHVudGlsIHlvdSBhY2tub3ds ZWRnZSB0aGUgcHJvYmxlbXMgb3IgZml4IHRoZSBmaWxlc3lzdGVtIHRvIGl0cyBvcmlnaW5h bCBzdGF0ZS4gRG8gYmVhciBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgdGhlIGZyZXF1ZW5j eSB0aGF0IGFsZXJ0aW5nIHRvbyBvZnRlbiBjYW4gYWxpZW5hdGUgdXNlcnMgYW5kIG1ha2Ug YW4gYWxhcm0gc2l0dWF0aW9uIGxlc3MgZWZmZWN0aXZlLjwvcD4KCgk8aDIgaWQ9InNtZF9j c2kiPkZvcmVuc2ljczwvaDI+CgoJPHA+PHN0cm9uZz5CZWZvcmU8L3N0cm9uZz4gYWNrbm93 bGVkZ2luZyBhbGFybXMsIHlvdSBtYXkgY2hvb3NlIHRvIHNlbmQgb2ZmIGZvcmVuc2ljcyBp bmZvcm1hdGlvbiB0byBhIGRlc2lnbmF0ZWQgZS1tYWlsIGFkZHJlc3MuIFRoZSBmb2xsb3dp bmcgaW5mb3JtYXRpb24gaXMgc2VudDo8L3A+CgoJPHVsPgoJCTxsaT5GaWxlIGluZm9ybWF0 aW9uIGFib3V0IGVhY2ggY2hhbmdlZC9hZGRlZCBmaWxlLCBzdWNoIGFzIGl0cyBzaXplLCBt b2RpZmljYXRpb24gdGltZSwgYW5kIHVzZXIgLyBncm91cCBvd25lcnNoaXA8L2xpPgoJCTxs aT5UaGUgY29udGVudHMgb2YgdGhlIGZpbGVzIHRoZW1zZWx2ZXMsIDxzcGFuIGNsYXNzPSJj YXBzIj5CQVNFPC9zcGFuPi02NCBlbmNvZGVkIGluIHRoZSBib2R5IG9mIHRoZSBlLW1haWw8 L2xpPgoJCTxsaT5UaGUgbmFtZXMgJmFtcDsgcGF0aHMgb2YgYW55IGRlbGV0ZWQgZmlsZXM8 L2xpPgoJCTxsaT5BbnkgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbG9nIGVudHJp ZXMgdGhhdCBvY2N1cnJlZCBlaXRoZXIgc2lkZSBvZiB0aGUgYWxhcm0gY29uZGl0aW9uICg8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBsb2dnaW5nIG11c3QgYmUgZW5hYmxlZCBp biB5b3VyIDxlbT5BZG1pbiAtJmd0OyBQcmVmZXJlbmNlczwvZW0+KTwvbGk+Cgk8L3VsPgoK CTxwPllvdSBjYW4gc2VsZWN0IHdoaWNoIGZpbGUgaW5mb3JtYXRpb24gdG8gc2VuZCBvZmYg dmlhIHRoZSBjaGVjayBib3hlcy4gVGhlIG9uZXMgeW91IHNlbGVjdGVkIHdpbGwgcmVtYWlu IHNlbGVjdGVkIGZvciBjb252ZW5pZW5jZSBhZnRlciB0aGUgZm9yZW5zaWNzIGhhdmUgYmVl biBzZW50LCBzbyB5b3UgbWF5IGltbWVkaWF0ZWx5IGhpdCA8ZW0+QWNrbm93bGVkZ2U8L2Vt PiB0byBhY2tub3dsZWRnZSB0aGUgb25lcyB5b3Ugbm90aWZpZWQuPC9wPgoKCTxoMiBpZD0i c21kX2FkdmljZSI+QWR2aWNlPC9oMj4KCgk8cD5DbGlja2luZyB0aGUgPGVtPkFkdmljZTwv ZW0+IGJ1dHRvbiB3aWxsIHJ1biB0aHJvdWdoIGEgc2VyaWVzIG9mIGNoZWNrcyBhbmQgb2Zm ZXIgc3VnZ2VzdGlvbnMgb24gaG93IHRvIGhhcmRlbiB5b3VyIGluc3RhbGxhdGlvbi4gVGhl IG1vc3QgaW1wb3J0YW50IG9uZSB0byBmb2xsb3cgaXMgaWYgeW91IGFyZSB3YXJuZWQgYWJv dXQgdGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIGJlaW5nIGluIGRvY3Jvb3QuIEl0 IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBtb3ZlIGl0IHNvbWV3aGVyZSBub24td2ViIGFj Y2Vzc2libGUuPC9wPgoKCTxoMiBpZD0ic21kX3B3c3RyZW5ndGgiPlBhc3N3b3JkIHN0cmVu Z3RoPC9oMj4KCgk8cD5BcyBhbiBhaWQgdG8geW91ciB1c2VycywgYSBwYXNzd29yZCBzdHJl bmd0aCBtZXRlciBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIG9uIHRoZSA8ZW0+QWRtaW4g LSZndDsgVXNlcnM8L2VtPiB0YWIuIFdoZW4geW91IHR5cGUgdG8gY2hhbmdlIHlvdXIgcGFz c3dvcmQsIGFuIGluZGljYXRpb24gb2YgdGhlIHRpbWUgYSBjdXJyZW50IGRlc2t0b3AgUEMg d291bGQgdGFrZSB0byBjcmFjayBpdCBpcyBnaXZlbi4gSXQmIzgyMTc7cyBhIHZlcnkgcm91 Z2ggY2FsY3VsYXRpb24sIGFsdGhvdWdoIE1vb3JlJiM4MjE3O3MgTGF3IGlzIGF1dG9tYXRp Y2FsbHkgdGFrZW4gaW50byBhY2NvdW50ICh0aHVzIHlvdXIgcGFzc3dvcmQgd2lsbCBiZWNv bWUgd2Vha2VyIG92ZXIgdGltZSBpZiB5b3UgZG8gbm90IGNoYW5nZSBpdCkuPC9wPgoKCTxw PllvdSB3aWxsIGRvIHlvdXJzZWxmIGFuZCB5b3VyIHN5c3RlbSBhIGh1Z2UgZmF2b3VyIHRv IGNob29zZSBhIHBhc3NwaHJhc2UgdGhhdCB0YWtlcyBpbiBleGNlc3Mgb2YgYSBmZXcgdGhv dXNhbmQgeWVhcnMgdG8gY3JhY2suIFRoZSBsb25nZXIgdGhlIGJldHRlci4gUmVtZW1iZXIg dGhpcyBpcyBiYXNlZCBvbiBhIGJydXRlIGZvcmNlIGF0dGFjayB1c2luZyBhIHNpbmdsZSBk ZXNrdG9wIFBDICYjODIxMjsgbm90IGEgbWFpbmZyYW1lIG9yIGEgUEMgZmFybSAmIzgyMTI7 IGFuZCBpdCBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBob3cgZWFzeSB0aGUgcGFzc3dv cmQgaXMgdG8gZ3Vlc3MgaWYgeW91IHVzZSBkaWN0aW9uYXJ5IHdvcmRzIG9yIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9ibG9nL2Nob29zaW5nLWEtYnJpbGxpYW50LXBhc3N3 b3JkIj5zb21lIG90aGVyIGJhZCBwYXNzd29yZDwvYT4uIENob29zZSBhIGdvb2Qgb25lIGFu ZCB5b3UgPHN0cm9uZz5zaWduaWZpY2FudGx5PC9zdHJvbmc+IHJlZHVjZSB0aGUgcHJvYmFi aWxpdHkgb2YgYSBzdWNjZXNzZnVsIGF0dGFjay48L3A+CgoJPGgyIGlkPSJzbWRfYmV0dGVy Ij5IZWxwIG1ha2UgdGhlIHBsdWdpbiBiZXR0ZXI8L2gyPgoKCTxwPklmIHNtZF9wcm9nbm9z dGljcyBkb2VzIGRldGVjdCBzb21lIHJvZ3VlIGVsZW1lbnRzIGluIHlvdXIgZmlsZXN5c3Rl bSwgcGxlYXNlIGNvbnNpZGVyIHNlbmRpbmcgdGhlIGZvcmVuc2ljcyB0byBwcm9nbm9zdGlj cyBbYXRdIHN0ZWZkYXdzb24gW2RvdF0gY29tIHdpdGggYXMgbXVjaCBpbmZvcm1hdGlvbiBh cyB5b3UgcG9zc2libHkgY2FuLiBZb3UgY2FuIGVpdGhlciBkbyB0aGlzIGF1dG9tYXRpY2Fs bHkgZnJvbSB3aXRoaW4gdGhlIHBsdWdpbiAoc2VlIHRoZSBzZXR1cCBwYWdlLCB0aG91Z2gg bm90ZSB0aGUgc2Vuc2l0aXZpdHkgb2Ygc29tZSBvZiB0aGUgZGF0YSBzZW50KSBvciBjb3B5 IGFuZCBwYXN0ZSByZWxldmFudCBpbmZvcm1hdGlvbiBpbnRvIGFuIGUtbWFpbC4gVGhlIHNv cnQgb2Ygc3R1ZmYgdGhhdCBtaWdodCBiZSB1c2VmdWwgaXM6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gKGFuZC9vciBzZXJ2ZXIpIGxvZ3MgZm9y IHRoZSB0aW1lIG9mIHRoZSBhdHRhY2s8L2xpPgoJCTxsaT5UaGUgbGluZXMgb2YgdGhlIGZp bGUocykgdGhhdCB3ZXJlIGFmZmVjdGVkIChvciB0aGUgZmlsZXMgaW4gdGhlaXIgZW50aXJl dHkpPC9saT4KCQk8bGk+VGhlIGNvbnRlbnQgb2YgYW55IGFkZGl0aW9uYWwgbGluZXMgYWRk ZWQgb3IgYWx0ZXJlZCBpbiB0aGUgZmlsZXM8L2xpPgoJCTxsaT5Zb3VyIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiwgTXlT UUwgYW5kIEFwYWNoZSB2ZXJzaW9uczwvbGk+CgkJPGxpPllvdXIgaG9zdGVyIGNvbXBhbnkg bmFtZTwvbGk+Cgk8L3VsPgoKCTxwPmFuZCBzbyBvbi4gQW55IGFuZCBhbGwgaW5mb3JtYXRp b24gd2lsbCBiZSB0cmVhdGVkIGluIHRoZSBzdHJpY3Rlc3QgY29uZmlkZW5jZSBvZiBjb3Vy c2UuIEFuYWx5c2luZyB0aGlzIGRhdGEgbWF5IGFsbG93IG1lIHRvIGltcHJvdmUgdGhlIHBs dWdpbiBhbmQgcGVyaGFwcyBjbG9zZSBhbnkgc2VjdXJpdHkgaG9sZXMgaW4gPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gaXRzZWxmLCBvciBldmVuIGhlbHAgbWFrZSB0aGUgcGx1 Z2luIG1vcmUgcHJvLWFjdGl2ZSBieSBkZXRlY3RpbmcgdGhlIHZhcmlvdXMga2luZHMgb2Yg YXR0YWNrIGluIHByb2dyZXNzIGFuZCBtaW5pbWlzaW5nIGRhbWFnZSB0byB5b3VyIGZpbGUg c3lzdGVtLiBUaGFua3MgaW4gYWR2YW5jZSBmb3IgeW91IGhlbHAuPC9wPgoKCTxoMiBpZD0i Y2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTEgTm92IDEwIHwgMC4x MCB8IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjExIE5vdiAxMCB8IDAuMTEgfCBBZGRl ZCBJZ25vcmUgYnV0dG9uPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExV R0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxp bmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZv bnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tn cm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxv Y2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3Bs YXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRf aGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNh bnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5z LXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJh bnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hl bHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7 IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1h bmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9o ZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0 b206MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xp ZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5 cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRf aGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFr IHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1Mg KioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJhMmJlYTg2YTYxMzU3NWEzNjQ5M2FmOTNhZTVk MWFlNiI7fQ==