« Zurück

Lob und Kritik

Seiten fehler Geschlossen


Autor Nachricht

localhost`

Dabei seit: 08.04.2010

Beiträge: 41

Wohnort: Irhove
nach oben

Zitieren

verfasst am 03.07.2011 um 16:15:49 Uhr

Hey #musik team

ich wollte mal darauf hinweisen dass ich öfter beim öffnen der seite die werbebanner oder frames in klartext angezeigt bekomme z.B:
aWYoIU1vZGVybml6ci5mb3JtdmFsaWRhdGlvbil7CmpRdWVyeS53ZWJzaGltcy5yZWdpc3RlcigmIzAzOTtmb3JtLWV4dGVuZCYjMDM5OywgZnVuY3Rpb24oJCwgd2Vic2hpbXMsIHdpbmRvdywgZG9jdW1lbnQpewp3ZWJzaGltcy5pbnB1dFR5cGVzID0gd2Vic2hpbXMuaW5wdXRUeXBlcyB8fCB7fTsKLy9zb21lIGhlbHBlci1mdW5jdGlvbnMKdmFyIGNmZyA9IHdlYnNoaW1zLmNmZy5mb3JtczsKdmFyIGlzU3VibWl0Owp2YXIgZ2V0TmFtZXMgPSBmdW5jdGlvbihlbGVtKXsKCQlyZXR1cm4gKGVsZW0uZm9ybSAmYW1wOyZhbXA7IGVsZW0ubmFtZSkgPyBlbGVtLmZvcm1bZWxlbS5uYW1lXSA6IFtdOwoJfSwKCWlzTnVtYmVyID0gZnVuY3Rpb24oc3RyaW5nKXsKCQlyZXR1cm4gKHR5cGVvZiBzdHJpbmcgPT0gJiMwMzk7bnVtYmVyJiMwMzk7IHx8IChzdHJpbmcgJmFtcDsmYW1wOyBzdHJpbmcgPT0gc3RyaW5nICogMSkpOwoJfSwKCXR5cGVNb2RlbHMgPSB3ZWJzaGltcy5pbnB1dFR5cGVzLAoJY2hlY2tUeXBlcyA9IHsKCQlyYWRpbzogMSwKCQljaGVja2JveDogMQkJCgl9LAoJZ2V0VHlwZSA9IGZ1bmN0aW9uKGVsZW0pewoJCXJldHVybiAoZWxlbS5nZXRBdHRyaWJ1dGUoJiMwMzk7dHlwZSYjMDM5OykgfHwgZWxlbS50eXBlIHx8ICYjMDM5OyYjMDM5OykudG9Mb3dlckNhc2UoKTsKCX0KOwoKLy9BUEkgdG8gYWRkIG5ldyBpbnB1dCB0eXBlcwp3ZWJzaGltcy5hZGRJbnB1dFR5cGUgPSBmdW5jdGlvbih0eXBlLCBvYmopewoJdHlwZU1vZGVsc1t0eXBlXSA9IG9iajsKfTsKCi8vY29udHNyYWluLXZhbGlkYXRpb24tYXBpCnZhciB2YWxpZGl0eVByb3RvdHlwZSA9IHsKCWN1c3RvbUVycm9yOiBmYWxzZSwKCgl0eXBlTWlzbWF0Y2g6IGZhbHNlLAoJcmFuZ2VVbmRlcmZsb3c6IGZhbHNlLAoJcmFuZ2VPdmVyZmxvdzogZmFsc2UsCglzdGVwTWlzbWF0Y2g6IGZhbHNlLAoJdG9vTG9uZzogZmFsc2UsCglwYXR0ZXJuTWlzbWF0Y2g6IGZhbHNlLAoJdmFsdWVNaXNzaW5nOiBmYWxzZSwKCQoJdmFsaWQ6IHRydWUKfTsKCnZhciBpc1BsYWNlaG9sZGVyT3B0aW9uU2VsZWN0ZWQgPSBmdW5jdGlvbihzZWxlY3QpewoJaWYoc2VsZWN0LnR5cGUgPT0gJiMwMzk7c2VsZWN0LW9uZSYjMDM5OyAmYW1wOyZhbXA7IHNlbGVjdC5zaXplICZsdDsgMil7CgkJdmFyIG9wdGlvbiA9ICQoJiMwMzk7Jmd0OyBvcHRpb246Zmlyc3QtY2hpbGQmIzAzOTssIHNlbGVjdCk7CgkJcmV0dXJuICghb3B0aW9uLmF0dHIoJiMwMzk7ZGlzYWJsZWQmIzAzOTspICZhbXA7JmFtcDsgb3B0aW9uLmF0dHIoJiMwMzk7c2VsZWN0ZWQmIzAzOTspKTsKCX0gCglyZXR1cm4gZmFsc2U7Cn07Cgp2YXIgdmFsaWRpdHlSdWxlcyA9IHsKCQl2YWx1ZU1pc3Npbmc6IGZ1bmN0aW9uKGlucHV0LCB2YWwsIGNhY2hlKXsKCQkJaWYoIWlucHV0LmF0dHIoJiMwMzk7cmVxdWlyZWQmIzAzOTspKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQl2YXIgcmV0ID0gZmFsc2U7CgkJCWlmKCEoJiMwMzk7dHlwZSYjMDM5OyBpbiBjYWNoZSkpewoJCQkJY2FjaGUudHlwZSA9IGdldFR5cGUoaW5wdXRbMF0pOwoJCQl9CgkJCWlmKGNhY2hlLm5vZGVOYW1lID09ICYjMDM5O3NlbGVjdCYjMDM5Oyl7CgkJCQlyZXQgPSAoIXZhbCAmYW1wOyZhbXA7IChpbnB1dFswXS5zZWxlY3RlZEluZGV4ICZsdDsgMCB8fCBpc1BsYWNlaG9sZGVyT3B0aW9uU2VsZWN0ZWQoaW5wdXRbMF0pICkpOwoJCQl9IGVsc2UgaWYoY2hlY2tUeXBlc1tjYWNoZS50eXBlXSl7CgkJCQlyZXQgPSAoY2FjaGUudHlwZSA9PSAmIzAzOTtjaGVja2JveCYjMDM5OykgPyAhaW5wdXQuaXMoJiMwMzk7OmNoZWNrZWQmIzAzOTspIDogISQoZ2V0TmFtZXMoaW5wdXRbMF0pKS5maWx0ZXIoJiMwMzk7OmNoZWNrZWQmIzAzOTspWzBdOwoJCQl9IGVsc2UgewoJCQkJcmV0ID0gISh2YWwpOwoJCQl9CgkJCXJldHVybiByZXQ7CgkJfSwKCQl0b29Mb25nOiBmdW5jdGlvbihpbnB1dCwgdmFsLCBjYWNoZSl7CgkJCWlmKHZhbCA9PT0gJiMwMzk7JiMwMzk7IHx8IGNhY2hlLm5vZGVOYW1lID09ICYjMDM5O3NlbGVjdCYjMDM5Oyl7cmV0dXJuIGZhbHNlO30KCQkJdmFyIG1heExlbiAJPSBpbnB1dC5hdHRyKCYjMDM5O21heGxlbmd0aCYjMDM5OyksCgkJCQlyZXQgCT0gZmFsc2UsCgkJCQlsZW4gCT0gdmFsLmxlbmd0aAkKCQkJOwoJCQlpZihsZW4gJmFtcDsmYW1wOyBtYXhMZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IHZhbC5yZXBsYWNlICZhbXA7JmFtcDsgaXNOdW1iZXIobWF4TGVuKSl7CgkJCQlyZXQgPSAobGVuICZndDsgbWF4TGVuKTsKCQkJfQoJCQlyZXR1cm4gcmV0OwoJCX0sCgkJdHlwZU1pc21hdGNoOiBmdW5jdGlvbiAoaW5wdXQsIHZhbCwgY2FjaGUpewoJCQlpZih2YWwgPT09ICYjMDM5OyYjMDM5OyB8fCBjYWNoZS5ub2RlTmFtZSA9PSAmIzAzOTtzZWxlY3QmIzAzOTspe3JldHVybiBmYWxzZTt9CgkJCXZhciByZXQgPSBmYWxzZTsKCQkJaWYoISgmIzAzOTt0eXBlJiMwMzk7IGluIGNhY2hlKSl7CgkJCQljYWNoZS50eXBlID0gZ2V0VHlwZShpbnB1dFswXSk7CgkJCX0KCQkJCgkJCWlmKHR5cGVNb2RlbHNbY2FjaGUudHlwZV0gJmFtcDsmYW1wOyB0eXBlTW9kZWxzW2NhY2hlLnR5cGVdLm1pc21hdGNoKXsKCQkJCXJldCA9IHR5cGVNb2RlbHNbY2FjaGUudHlwZV0ubWlzbWF0Y2godmFsLCBpbnB1dCk7CgkJCX0KCQkJcmV0dXJuIHJldDsKCQl9LAoJCXBhdHRlcm5NaXNtYXRjaDogZnVuY3Rpb24oaW5wdXQsIHZhbCwgY2FjaGUpIHsKCQkJaWYodmFsID09PSAmIzAzOTsmIzAzOTsgfHwgY2FjaGUubm9kZU5hbWUgPT0gJiMwMzk7c2VsZWN0JiMwMzk7KXtyZXR1cm4gZmFsc2U7fQoJCQl2YXIgcGF0dGVybiA9IGlucHV0LmF0dHIoJiMwMzk7cGF0dGVybiYjMDM5Oyk7CgkJCWlmKCFwYXR0ZXJuKXtyZXR1cm4gZmFsc2U7fQoJCQlyZXR1cm4gIShuZXcgUmVnRXhwKCYjMDM5O14oPzomIzAzOTsgKyBwYXR0ZXJuICsgJiMwMzk7KSQmIzAzOTspLnRlc3QodmFsKSk7CgkJfQoJfQo7Cgp3ZWJzaGltcy5hZGRWYWxpZGl0eVJ1bGUgPSBmdW5jdGlvbih0eXBlLCBmbil7Cgl2YWxpZGl0eVJ1bGVzW3R5cGVdID0gZm47Cn07CgokLmV2ZW50LnNwZWNpYWwuaW52YWxpZCA9IHsKCWFkZDogZnVuY3Rpb24oKXsKCQkkLmV2ZW50LnNwZWNpYWwuaW52YWxpZC5zZXR1cC5jYWxsKHRoaXMuZm9ybSB8fCB0aGlzKTsKCX0sCglzZXR1cDogZnVuY3Rpb24oKXsKCQl2YXIgZm9ybSA9IHRoaXMuZm9ybSB8fCB0aGlzOwoJCWlmKCAkLmRhdGEoZm9ybSwgJiMwMzk7aW52YWxpZEV2ZW50U2hpbSYjMDM5OykgKXsKCQkJcmV0dXJuOwoJCX0KCQkkKGZvcm0pCgkJCS5kYXRhKCYjMDM5O2ludmFsaWRFdmVudFNoaW0mIzAzOTssIHRydWUpCgkJCS5iaW5kKCYjMDM5O3N1Ym1pdCYjMDM5OywgJC5ldmVudC5zcGVjaWFsLmludmFsaWQuaGFuZGxlcikKCQk7CgkJdmFyIHN1Ym1pdEV2ZW50cyA9ICQoZm9ybSkuZGF0YSgmIzAzOTtldmVudHMmIzAzOTspLnN1Ym1pdDsKCQlpZihzdWJtaXRFdmVudHMgJmFtcDsmYW1wOyBzdWJtaXRFdmVudHMubGVuZ3RoICZndDsgMSl7CgkJCXN1Ym1pdEV2ZW50cy51bnNoaWZ0KCBzdWJtaXRFdmVudHMucG9wKCkgKTsKCQl9Cgl9LAoJdGVhcmRvd246ICQubm9vcCwKCWhhbmRsZXI6IGZ1bmN0aW9uKGUsIGQpewoJCQoJCWlmKCBlLnR5cGUgIT0gJiMwMzk7c3VibWl0JiMwMzk7IHx8IGUudGVzdGVkVmFsaWRpdHkgfHwgISQubm9kZU5hbWUoZS50YXJnZXQsICYjMDM5O2Zvcm0mIzAzOTspIHx8ICQuYXR0cihlLnRhcmdldCwgJiMwMzk7bm92YWxpZGF0ZSYjMDM5OykgIT0gbnVsbCB8fCAkLmRhdGEoZS50YXJnZXQsICYjMDM5O25vdmFsaWRhdGUmIzAzOTspICl7cmV0dXJuO30KCQkKCQlpc1N1Ym1pdCA9IHRydWU7CgkJZS50ZXN0ZWRWYWxpZGl0eSA9IHRydWU7CgkJdmFyIG5vdFZhbGlkID0gISgkKGUudGFyZ2V0KS5jaGVja1ZhbGlkaXR5KCkpOwoJCWlmKG5vdFZhbGlkKXsKCQkJaWYodGhpcyA9PT0gZG9jdW1lbnQpewoJCQkJd2Vic2hpbXMud2FybigmIzAzOTthbHdheXMgZW1iZWQgSFRNTDUgY29udGVudCB1c2luZyAucHJlcGVuZFdlYnNoaW0sIC5hcHBlbmRXZWJzaGltLCAuaHRtbFdlYnNoaW0gZXRjLiYjMDM5Oyk7CgkJCX0KCQkJLy9Ub0RvCgkJCWlmKCFlLm9yaWdpbmFsRXZlbnQpewoJCQkJd2Vic2hpbXMud2FybigmIzAzOTt0cnllZCB0byBzdWJtaXQgaW52YWxpZCBmb3JtJiMwMzk7KTsKCQkJfQoJCQllLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwoJCQlpc1N1Ym1pdCA9IGZhbHNlOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWlzU3VibWl0ID0gZmFsc2U7Cgl9Cn07CgokKGRvY3VtZW50KS5iaW5kKCYjMDM5O2ludmFsaWQmIzAzOTssICQubm9vcCk7CiQuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSAkLmV2ZW50LnNwZWNpYWwuc3VibWl0IHx8IHtzZXR1cDogZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fX07CnZhciBzdWJtaXRTZXR1cCA9ICQuZXZlbnQuc3BlY2lhbC5zdWJtaXQuc2V0dXA7CiQuZXh0ZW5kKCQuZXZlbnQuc3BlY2lhbC5zdWJtaXQsIHsKCXNldHVwOiBmdW5jdGlvbigpewoJCWlmKCQubm9kZU5hbWUodGhpcywgJiMwMzk7Zm9ybSYjMDM5OykpewoJCQkkKHRoaXMpLmJpbmQoJiMwMzk7aW52YWxpZCYjMDM5OywgJC5ub29wKTsKCQl9IGVsc2UgewoJCQkkKCYjMDM5O2Zvcm0mIzAzOTssIHRoaXMpLmJpbmQoJiMwMzk7aW52YWxpZCYjMDM5OywgJC5ub29wKTsKCQl9CgkJcmV0dXJuIHN1Ym1pdFNldHVwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cgl9Cn0pOwoKCndlYnNoaW1zLmFkZElucHV0VHlwZSgmIzAzOTtlbWFpbCYjMDM5OywgewoJbWlzbWF0Y2g6IChmdW5jdGlvbigpewoJCS8vdGFrZW4gZnJvbSBzY290dCBnb256YWxlcwoJCXZhciB0ZXN0ID0gY2ZnLmVtYWlsUmVnIHx8IC9eKCgoW2Etel18XGR8WyEjXCQlJmFtcDsmIzAzOTtcKlwrXC1cLz1cP1xeX2B7XHx9fl18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKyhcLihbYS16XXxcZHxbISNcJCUmYW1wOyYjMDM5O1wqXCtcLVwvPVw/XF5fYHtcfH1+XXxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkrKSopfChceDIyKCgoKFx4MjB8XHgwOSkqKFx4MGRceDBhKSk/KFx4MjB8XHgwOSkrKT8oKFtceDAxLVx4MDhceDBiXHgwY1x4MGUtXHgxZlx4N2ZdfFx4MjF8W1x4MjMtXHg1Yl18W1x4NWQtXHg3ZV18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfChcXChbXHgwMS1ceDA5XHgwYlx4MGNceDBkLVx4N2ZdfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpKSooKChceDIwfFx4MDkpKihceDBkXHgwYSkpPyhceDIwfFx4MDkpKyk/XHgyMikpQCgoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKShbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkqKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpXC4pKigoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCgoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSooW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSlcLj8kL2k7CgkJcmV0dXJuIGZ1bmN0aW9uKHZhbCl7CgkJCXJldHVybiAhdGVzdC50ZXN0KHZhbCk7CgkJfTsKCX0pKCkKfSk7Cgp3ZWJzaGltcy5hZGRJbnB1dFR5cGUoJiMwMzk7dXJsJiMwMzk7LCB7CgltaXNtYXRjaDogKGZ1bmN0aW9uKCl7CgkJLy90YWtlbiBmcm9tIHNjb3R0IGdvbnphbGVzCgkJdmFyIHRlc3QgPSBjZmcudXJsUmVnIHx8IC9eKFthLXpdKFthLXpdfFxkfFwrfC18XC4pKik6KFwvXC8oKCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCZhbXA7JiMwMzk7XChcKVwqXCssOz1dfDopKkApPygoXFsofCh2W1xkYS1mXXsxLH1cLigoW2Etel18XGR8LXxcLnxffH4pfFshXCQmYW1wOyYjMDM5O1woXClcKlwrLDs9XXw6KSspKVxdKXwoKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSkpfCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCZhbXA7JiMwMzk7XChcKVwqXCssOz1dKSopKDpcZCopPykoXC8oKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmYW1wOyYjMDM5O1woXClcKlwrLDs9XXw6fEApKikqfChcLygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmYW1wOyYjMDM5O1woXClcKlwrLDs9XXw6fEApKyhcLygoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCZhbXA7JiMwMzk7XChcKVwqXCssOz1dfDp8QCkqKSopPyl8KCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCZhbXA7JiMwMzk7XChcKVwqXCssOz1dfDp8QCkrKFwvKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJmFtcDsmIzAzOTtcKFwpXCpcKyw7PV18OnxAKSopKil8KCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCZhbXA7JiMwMzk7XChcKVwqXCssOz1dfDp8QCkpezB9KShcPygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmYW1wOyYjMDM5O1woXClcKlwrLDs9XXw6fEApfFtcdUUwMDAtXHVGOEZGXXxcL3xcPykqKT8oXCMoKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJmFtcDsmIzAzOTtcKFwpXCpcKyw7PV18OnxAKXxcL3xcPykqKT8kL2k7CgkJcmV0dXJuIGZ1bmN0aW9uKHZhbCl7CgkJCXJldHVybiAhdGVzdC50ZXN0KHZhbCk7CgkJfTsKCX0pKCkKfSk7CgovLyBJRExzIGZvciBjb25zdHJhaW4gdmFsaWRhdGlvbiBBUEkKLy9Ub0RvOiBhZGQgb2JqZWN0IHRvIHRoaXMgbGlzdAp3ZWJzaGltcy5kZWZpbmVOb2RlTmFtZXNQcm9wZXJ0aWVzKFsmIzAzOTtidXR0b24mIzAzOTssICYjMDM5O2ZpZWxkc2V0JiMwMzk7LCAmIzAzOTtvdXRwdXQmIzAzOTtdLCB7CgljaGVja1ZhbGlkaXR5OiB7CgkJdmFsdWU6IGZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fQoJfSwKCXdpbGxWYWxpZGF0ZTogewoJCXZhbHVlOiBmYWxzZQoJfSwKCXNldEN1c3RvbVZhbGlkaXR5OiB7CgkJdmFsdWU6ICQubm9vcAoJfSwKCXZhbGlkaXR5OiB7CgkJd3JpdGVhYmxlOiBmYWxzZSwKCQlnZXQ6IGZ1bmN0aW9uKCl7CgkJCXJldHVybiAkLmV4dGVuZCh7fSwgdmFsaWRpdHlQcm90b3R5cGUpOwoJCX0KCX0KfSwgJiMwMzk7cHJvcCYjMDM5Oyk7CgoKCndlYnNoaW1zLmRlZmluZU5vZGVOYW1lc1Byb3BlcnRpZXMoWyYjMDM5O2lucHV0JiMwMzk7LCAmIzAzOTt0ZXh0YXJlYSYjMDM5OywgJiMwMzk7c2VsZWN0JiMwMzk7LCAmIzAzOTtmb3JtJiMwMzk7XSwgewoJY2hlY2tWYWxpZGl0eTogewoJCXZhbHVlOiAoZnVuY3Rpb24oKXsKCQkJdmFyIHVuaGFuZGxlZEludmFsaWRzOwoJCQl2YXIgdGVzdFZhbGlkaXR5ID0gZnVuY3Rpb24oZWxlbSl7CgkJCQkKCQkJCXZhciBlLAoJCQkJCXYgPSAkLnByb3AoZWxlbSwgJiMwMzk7dmFsaWRpdHkmIzAzOTspCgkJCQk7CgkJCQlpZih2KXsKCQkJCQkkLmRhdGEoZWxlbSwgJiMwMzk7Y2FjaGVkVmFsaWRpdHkmIzAzOTssIHYpOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJCWlmKCAhdi52YWxpZCApewoJCQkJCWUgPSAkLkV2ZW50KCYjMDM5O2ludmFsaWQmIzAzOTspOwoJCQkJCXZhciBqRWxtID0gJChlbGVtKS50cmlnZ2VyKGUpOwoJCQkJCWlmKGlzU3VibWl0ICZhbXA7JmFtcDsgIXVuaGFuZGxlZEludmFsaWRzICZhbXA7JmFtcDsgIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpewoJCQkJCQl3ZWJzaGltcy52YWxpZGl0eUFsZXJ0LnNob3dGb3IoakVsbSk7CgkJCQkJCXVuaGFuZGxlZEludmFsaWRzID0gdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCQkkLnJlbW92ZURhdGEoZWxlbSwgJiMwMzk7Y2FjaGVkVmFsaWRpdHkmIzAzOTssIGZhbHNlKTsKCQkJCXJldHVybiB2LnZhbGlkOwoJCQl9OwoJCQlyZXR1cm4gZnVuY3Rpb24oKXsKCQkJCXVuaGFuZGxlZEludmFsaWRzID0gZmFsc2U7CgkJCQlpZigkLm5vZGVOYW1lKHRoaXMsICYjMDM5O2Zvcm0mIzAzOTspKXsKCQkJCQl2YXIgcmV0ID0gdHJ1ZSwKCQkJCQkJZWxlbXMgPSB0aGlzLmVsZW1lbnRzIHx8ICQoICYjMDM5O2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0JiMwMzk7LCB0aGlzKTsKCQkJCQkKCQkJCQlmb3IodmFyIGkgPSAwLCBsZW4gPSBlbGVtcy5sZW5ndGg7IGkgJmx0OyBsZW47IGkrKyl7CgkJCQkJCWlmKCAhdGVzdFZhbGlkaXR5KGVsZW1zW2ldKSApewoJCQkJCQkJcmV0ID0gZmFsc2U7CgkJCQkJCX0KCQkJCQl9CgkJCQkJcmV0dXJuIHJldDsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIHRlc3RWYWxpZGl0eSh0aGlzKTsKCQkJCX0KCQkJfTsKCQl9KSgpCgl9LAoJc2V0Q3VzdG9tVmFsaWRpdHk6IHsKCQl2YWx1ZTogZnVuY3Rpb24oZXJyb3IpewoJCQl3ZWJzaGltcy5kYXRhKHRoaXMsICYjMDM5O2N1c3RvbXZhbGlkYXRpb25NZXNzYWdlJiMwMzk7LCAmIzAzOTsmIzAzOTsrZXJyb3IpOwoJCX0KCX0sCgl3aWxsVmFsaWRhdGU6IHsKCQlzZXQ6ICQubm9vcCwKCQlnZXQ6IChmdW5jdGlvbigpewoJCQl2YXIgdHlwZXMgPSB7CgkJCQkJYnV0dG9uOiAxLAoJCQkJCXJlc2V0OiAxLAoJCQkJCWhpZGRlbjogMQoJCQkJfQoJCQk7CgkJCXJldHVybiBmdW5jdGlvbigpewoJCQkJdmFyIGVsZW0gPSB0aGlzOwoJCQkJLy9lbGVtLm5hbWUgJmFtcDsmYW1wOyAmbHQ7LSB3ZSBkb24mIzAzOTt0IHVzZSB0byBtYWtlIGl0IGVhc2llciBmb3IgZGV2ZWxvcGVycwoJCQkJcmV0dXJuICEhKCFlbGVtLmRpc2FibGVkICZhbXA7JmFtcDsgIWVsZW0ucmVhZE9ubHkgJmFtcDsmYW1wOyAhdHlwZXNbZWxlbS50eXBlXSAmYW1wOyZhbXA7ICggIWVsZW0uZm9ybSB8fCAkLmF0dHIoZWxlbS5mb3JtLCAmIzAzOTtub3ZhbGlkYXRlJiMwMzk7KSA9PSBudWxsKSApOwoJCQl9OwoJCX0pKCkKCX0sCgl2YWxpZGl0eTogewoJCXNldDogJC5ub29wLAoJCWdldDogZnVuY3Rpb24oKXsKCQkJdmFyIGVsZW0gPSB0aGlzOwoJCQl2YXIgdmFsaWRpdHlTdGF0ZSA9ICQuZGF0YShlbGVtLCAmIzAzOTtjYWNoZWRWYWxpZGl0eSYjMDM5Oyk7CgkJCWlmKHZhbGlkaXR5U3RhdGUpewoJCQkJcmV0dXJuIHZhbGlkaXR5U3RhdGU7CgkJCX0KCQkJdmFsaWRpdHlTdGF0ZSAJPSAkLmV4dGVuZCh7fSwgdmFsaWRpdHlQcm90b3R5cGUpOwoJCQkKCQkJaWYoICEkLnByb3AoZWxlbSwgJiMwMzk7d2lsbFZhbGlkYXRlJiMwMzk7KSB8fCBlbGVtLnR5cGUgPT0gJiMwMzk7c3VibWl0JiMwMzk7ICl7CgkJCQlyZXR1cm4gdmFsaWRpdHlTdGF0ZTsKCQkJfQoJCQl2YXIgakVsbSAJCQk9ICQoZWxlbSksCgkJCQl2YWwJCQkJPSBqRWxtLnZhbCgpLAoJCQkJY2FjaGUgCQkJPSB7bm9kZU5hbWU6IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0KCQkJOwoJCQkKCQkJdmFsaWRpdHlTdGF0ZS5jdXN0b21FcnJvciA9ICEhKHdlYnNoaW1zLmRhdGEoZWxlbSwgJiMwMzk7Y3VzdG9tdmFsaWRhdGlvbk1lc3NhZ2UmIzAzOTspKTsKCQkJaWYoIHZhbGlkaXR5U3RhdGUuY3VzdG9tRXJyb3IgKXsKCQkJCXZhbGlkaXR5U3RhdGUudmFsaWQgPSBmYWxzZTsKCQkJfQoJCQkJCQkJCgkJCSQuZWFjaCh2YWxpZGl0eVJ1bGVzLCBmdW5jdGlvbihydWxlLCBmbil7CgkJCQlpZiAoZm4oakVsbSwgdmFsLCBjYWNoZSkpIHsKCQkJCQl2YWxpZGl0eVN0YXRlW3J1bGVdID0gdHJ1ZTsKCQkJCQl2YWxpZGl0eVN0YXRlLnZhbGlkID0gZmFsc2U7CgkJCQl9CgkJCX0pOwoJCQllbGVtLnNldEF0dHJpYnV0ZSgmIzAzOTthcmlhLWludmFsaWQmIzAzOTssICB2YWxpZGl0eVN0YXRlLnZhbGlkID8gJiMwMzk7ZmFsc2UmIzAzOTsgOiAmIzAzOTt0cnVlJiMwMzk7KTsKCQkJcmV0dXJuIHZhbGlkaXR5U3RhdGU7CgkJfQoJfQp9LCAmIzAzOTtwcm9wJiMwMzk7KTsKCndlYnNoaW1zLmRlZmluZU5vZGVOYW1lc0Jvb2xlYW5Qcm9wZXJ0eShbJiMwMzk7aW5wdXQmIzAzOTssICYjMDM5O3RleHRhcmVhJiMwMzk7LCAmIzAzOTtzZWxlY3QmIzAzOTtdLCAmIzAzOTtyZXF1aXJlZCYjMDM5OywgewoJc2V0OiBmdW5jdGlvbih2YWx1ZSl7CgkJdmFyIGVsZW0gPSB0aGlzOwoJCWVsZW0uc2V0QXR0cmlidXRlKCYjMDM5O2FyaWEtcmVxdWlyZWQmIzAzOTssICEhKHZhbHVlKSsmIzAzOTsmIzAzOTspOwoJfSwKCWluaXRBdHRyOiB0cnVlCn0pOwoKd2Vic2hpbXMucmVmbGVjdFByb3BlcnRpZXMoWyYjMDM5O2lucHV0JiMwMzk7XSwgWyYjMDM5O3BhdHRlcm4mIzAzOTtdKTsKCndlYnNoaW1zLmRlZmluZU5vZGVOYW1lUHJvcGVydHkoJiMwMzk7dGV4dGFyZWEmIzAzOTssICYjMDM5O21heGxlbmd0aCYjMDM5OywgewoJYXR0cjogewoJCXNldDogZnVuY3Rpb24odmFsKXsKCQkJdGhpcy5zZXRBdHRyaWJ1dGUoJiMwMzk7bWF4bGVuZ3RoJiMwMzk7LCAmIzAzOTsmIzAzOTsrdmFsKTsKCQl9LAoJCWdldDogZnVuY3Rpb24oKXsKCQkJdmFyIHJldCA9IHRoaXMuZ2V0QXR0cmlidXRlKCYjMDM5O21heGxlbmd0aCYjMDM5Oyk7CgkJCXJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKCQl9Cgl9LAoJcHJvcDogewoJCXNldDogZnVuY3Rpb24odmFsKXsKCQkJaWYoaXNOdW1iZXIodmFsKSl7CgkJCQlpZih2YWwgJmx0OyAwKXsKCQkJCQl0aHJvdygmIzAzOTtJTkRFWF9TSVpFX0VSUiYjMDM5Oyk7CgkJCQl9CgkJCQl0aGlzLnNldEF0dHJpYnV0ZSgmIzAzOTttYXhsZW5ndGgmIzAzOTssIHBhcnNlSW50KHZhbCwgMTApKTsKCQkJCXJldHVybjsKCQkJfQoJCQl0aGlzLnNldEF0dHJpYnV0ZSgmIzAzOTttYXhsZW5ndGgmIzAzOTssICYjMDM5OyYjMDM5OysgMCk7CgkJfSwKCQlnZXQ6IGZ1bmN0aW9uKCl7CgkJCXZhciB2YWwgPSB0aGlzLmdldEF0dHJpYnV0ZSgmIzAzOTttYXhsZW5ndGgmIzAzOTspOwoJCQlyZXR1cm4gKGlzTnVtYmVyKHZhbCkgJmFtcDsmYW1wOyB2YWwgJmd0Oz0gMCkgPyBwYXJzZUludCh2YWwsIDEwKSA6IC0xOyAKCQkJCgkJfQoJfQp9KTsKd2Vic2hpbXMuZGVmaW5lTm9kZU5hbWVQcm9wZXJ0eSgmIzAzOTt0ZXh0YXJlYSYjMDM5OywgJiMwMzk7bWF4TGVuZ3RoJiMwMzk7LCB7Cglwcm9wOiB7CgkJc2V0OiBmdW5jdGlvbih2YWwpewoJCQkkLnByb3AodGhpcywgJiMwMzk7bWF4bGVuZ3RoJiMwMzk7LCB2YWwpOwoJCX0sCgkJZ2V0OiBmdW5jdGlvbigpewoJCQlyZXR1cm4gJC5wcm9wKHRoaXMsICYjMDM5O21heGxlbmd0aCYjMDM5Oyk7CgkJfQoJfQp9KTsKCmlmKCEkLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlICZhbXA7JmFtcDsgJCgmIzAzOTsmbHQ7Zm9ybSBub3ZhbGlkYXRlJmd0OyZsdDsvZm9ybSZndDsmIzAzOTspLmF0dHIoJiMwMzk7bm92YWxpZGF0ZSYjMDM5OykgPT0gbnVsbCl7Cgl3ZWJzaGltcy5kZWZpbmVOb2RlTmFtZVByb3BlcnR5KCYjMDM5O2Zvcm0mIzAzOTssICYjMDM5O25vdmFsaWRhdGUmIzAzOTssIHsKCQlhdHRyOiB7CgkJCXNldDogZnVuY3Rpb24odmFsKXsKCQkJCXRoaXMuc2V0QXR0cmlidXRlKCYjMDM5O25vdmFsaWRhdGUmIzAzOTssICYjMDM5OyYjMDM5Oyt2YWwpOwoJCQl9LAoJCQlnZXQ6IGZ1bmN0aW9uKCl7CgkJCQl2YXIgcmV0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJiMwMzk7bm92YWxpZGF0ZSYjMDM5Oyk7CgkJCQlyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7CgkJCX0KCQl9Cgl9KTsKfQoKdmFyIG5vVmFsaWRhdGUgPSBmdW5jdGlvbigpewoJCXZhciBlbGVtID0gdGhpczsKCQlpZighZWxlbS5mb3JtKXtyZXR1cm47fQoJCSQuZGF0YShlbGVtLmZvcm0sICYjMDM5O25vdmFsaWRhdGUmIzAzOTssIHRydWUpOwoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJJC5yZW1vdmVEYXRhKGVsZW0uZm9ybSwgJiMwMzk7bm92YWxpZGF0ZSYjMDM5Oyk7CgkJfSwgMSk7Cgl9LCAKCXN1Ym1pdHRlclR5cGVzID0ge3N1Ym1pdDogMSwgYnV0dG9uOiAxfQo7CgokKGRvY3VtZW50KS5iaW5kKCYjMDM5O2NsaWNrJiMwMzk7LCBmdW5jdGlvbihlKXsKCWlmKGUudGFyZ2V0ICZhbXA7JmFtcDsgZS50YXJnZXQuZm9ybSAmYW1wOyZhbXA7IHN1Ym1pdHRlclR5cGVzW2UudGFyZ2V0LnR5cGVdICZhbXA7JmFtcDsgJC5hdHRyKGUudGFyZ2V0LCAmIzAzOTtmb3Jtbm92YWxpZGF0ZSYjMDM5OykgIT0gbnVsbCl7CgkJbm9WYWxpZGF0ZS5jYWxsKGUudGFyZ2V0KTsKCX0KfSk7Cgp3ZWJzaGltcy5hZGRSZWFkeShmdW5jdGlvbihjb250ZXh0LCBjb250ZXh0RWxlbSl7CgkvL3N0YXJ0IGNvbnN0cmFpbi12YWxpZGF0aW9uCgl2YXIgZm9ybSA9ICQoJiMwMzk7Zm9ybSYjMDM5OywgY29udGV4dCkKCQkuYWRkKGNvbnRleHRFbGVtLmZpbHRlcigmIzAzOTtmb3JtJiMwMzk7KSkKCQkuYmluZCgmIzAzOTtpbnZhbGlkJiMwMzk7LCAkLm5vb3ApCgkJLmZpbmQoJiMwMzk7YnV0dG9uW2Zvcm1ub3ZhbGlkYXRlXSYjMDM5OykKCQkuYmluZCgmIzAzOTtjbGljayYjMDM5Oywgbm9WYWxpZGF0ZSkKCQkuZW5kKCkKCTsKCQoJc2V0VGltZW91dChmdW5jdGlvbigpewoJCXRyeSB7CgkJCWlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICZhbXA7JmFtcDsgJiMwMzk7Zm9ybSYjMDM5OyBpbiBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7CgkJCQlyZXR1cm47CgkJCX0KCQl9IGNhdGNoKGVyKXsKCQkJcmV0dXJuOwoJCX0KCQkJdmFyIGZpcnN0ID0gdHJ1ZTsKCQkJJCgmIzAzOTtpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSYjMDM5OywgZm9ybSkuZWFjaChmdW5jdGlvbihpKXsKCQkJCWlmKCFmaXJzdCl7cmV0dXJuIGZhbHNlO30KCQkJCWlmKHRoaXMuZ2V0QXR0cmlidXRlKCYjMDM5O2F1dG9mb2N1cyYjMDM5OykgPT0gbnVsbCl7cmV0dXJuO30JCgkJCQlmaXJzdCA9IGZhbHNlOwoJCQkJdmFyIGVsZW0gPSB3ZWJzaGltcy5nZXRWaXN1YWxJbnB1dCh0aGlzKTsKCQkJCXZhciBmb2N1c0VsZW0gPSAkKCYjMDM5O2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCAudWktc2xpZGVyLWhhbmRsZSYjMDM5OywgZWxlbSkuZmlsdGVyKCYjMDM5Ozp2aXNpYmxlOmZpcnN0JiMwMzk7KTsKCQkJCWlmICghZm9jdXNFbGVtWzBdKSB7CgkJCQkJZm9jdXNFbGVtID0gZWxlbTsKCQkJCX0KCQkJCXRyeSB7CgkJCQkJZm9jdXNFbGVtWzBdLmZvY3VzKCk7CgkJCQl9IGNhdGNoIChlKSB7fQoJCQl9KTsKCQkKCX0sIDApOwoJCn0pOwoKfSk7IC8vd2Vic2hpbXMucmVhZHkgZW5kCn0vL2VuZCBmb3JtdmFsaWRhdGlvbgovKgogKiBIVE1MNSBwbGFjZWhvbGRlci1lbmhhbmNlcgogKiB2ZXJzaW9uOiAyLjAuMgogKiBpbmNsdWRpbmcgYTExeS1uYW1lIGZhbGxiYWNrCiAqIAogKiAKICovCgoKalF1ZXJ5LndlYnNoaW1zLnJlYWR5KCYjMDM5O2RvbS1zdXBwb3J0IGZvcm0tY29yZSYjMDM5OywgZnVuY3Rpb24oJCwgd2Vic2hpbXMsIHdpbmRvdywgZG9jLCB1bmRlZmluZWQpewoJTW9kZXJuaXpyLnRleHRhcmVhUGxhY2Vob2xkZXIgPSAhISgmIzAzOTtwbGFjZWhvbGRlciYjMDM5OyBpbiAkKCYjMDM5OyZsdDt0ZXh0YXJlYSAvJmd0OyYjMDM5OylbMF0pOwoJaWYoTW9kZXJuaXpyLmlucHV0LnBsYWNlaG9sZGVyICZhbXA7JmFtcDsgTW9kZXJuaXpyLnRleHRhcmVhUGxhY2Vob2xkZXIpe3JldHVybjt9Cgl2YXIgaXNPdmVyID0gKHdlYnNoaW1zLmNmZy5mb3Jtcy5wbGFjZWhvbGRlclR5cGUgPT0gJiMwMzk7b3ZlciYjMDM5Oyk7Cgl2YXIgcG9seWZpbGxFbGVtZW50cyA9IFsmIzAzOTt0ZXh0YXJlYSYjMDM5O107CglpZighTW9kZXJuaXpyLmlucHV0LnBsYWNlaG9sZGVyKXsKCQlwb2x5ZmlsbEVsZW1lbnRzLnB1c2goJiMwMzk7aW5wdXQmIzAzOTspOwoJfQoJCgl2YXIgaGlkZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24oZWxlbSwgZGF0YSwgdmFsdWUpewoJCQlpZighaXNPdmVyICZhbXA7JmFtcDsgZWxlbS50eXBlICE9ICYjMDM5O3Bhc3N3b3JkJiMwMzk7KXsKCQkJCWlmKHZhbHVlID09PSBmYWxzZSl7CgkJCQkJdmFsdWUgPSAkLnByb3AoZWxlbSwgJiMwMzk7dmFsdWUmIzAzOTspOwoJCQkJfQoJCQkJZWxlbS52YWx1ZSA9IHZhbHVlOwoJCQl9CgkJCWRhdGEuYm94LnJlbW92ZUNsYXNzKCYjMDM5O3BsYWNlaG9sZGVyLXZpc2libGUmIzAzOTspOwoJCX0sCgkJc2hvd1BsYWNlaG9sZGVyID0gZnVuY3Rpb24oZWxlbSwgZGF0YSwgcGxhY2Vob2xkZXJUeHQpewoJCQlpZihwbGFjZWhvbGRlclR4dCA9PT0gZmFsc2UpewoJCQkJcGxhY2Vob2xkZXJUeHQgPSAkLmF0dHIoZWxlbSwgJiMwMzk7cGxhY2Vob2xkZXImIzAzOTspIHx8ICYjMDM5OyYjMDM5OzsKCQkJfQoJCQkKCQkJaWYoIWlzT3ZlciAmYW1wOyZhbXA7IGVsZW0udHlwZSAhPSAmIzAzOTtwYXNzd29yZCYjMDM5Oyl7CgkJCQllbGVtLnZhbHVlID0gcGxhY2Vob2xkZXJUeHQ7CgkJCX0KCQkJZGF0YS5ib3guYWRkQ2xhc3MoJiMwMzk7cGxhY2Vob2xkZXItdmlzaWJsZSYjMDM5Oyk7CgkJfSwKCQljaGFuZ2VQbGFjZWhvbGRlclZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtLCB2YWx1ZSwgcGxhY2Vob2xkZXJUeHQsIGRhdGEsIHR5cGUpewoJCQlpZighZGF0YSl7CgkJCQlkYXRhID0gJC5kYXRhKGVsZW0sICYjMDM5O3BsYWNlSG9sZGVyJiMwMzk7KTsKCQkJCWlmKCFkYXRhKXtyZXR1cm47fQoJCQl9CgkJCWlmKHR5cGUgPT0gJiMwMzk7Zm9jdXMmIzAzOTsgfHwgKCF0eXBlICZhbXA7JmFtcDsgZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpewoJCQkJaWYoZWxlbS50eXBlID09ICYjMDM5O3Bhc3N3b3JkJiMwMzk7IHx8IGlzT3ZlciB8fCAkKGVsZW0pLmhhc0NsYXNzKCYjMDM5O3BsYWNlaG9sZGVyLXZpc2libGUmIzAzOTspKXsKCQkJCQloaWRlUGxhY2Vob2xkZXIoZWxlbSwgZGF0YSwgJiMwMzk7JiMwMzk7KTsKCQkJCX0KCQkJCXJldHVybjsKCQkJfQoJCQlpZih2YWx1ZSA9PT0gZmFsc2UpewoJCQkJdmFsdWUgPSAkLnByb3AoZWxlbSwgJiMwMzk7dmFsdWUmIzAzOTspOwoJCQl9CgkJCWlmKHZhbHVlKXsKCQkJCWhpZGVQbGFjZWhvbGRlcihlbGVtLCBkYXRhLCB2YWx1ZSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJaWYocGxhY2Vob2xkZXJUeHQgPT09IGZhbHNlKXsKCQkJCXBsYWNlaG9sZGVyVHh0ID0gJC5hdHRyKGVsZW0sICYjMDM5O3BsYWNlaG9sZGVyJiMwMzk7KSB8fCAmIzAzOTsmIzAzOTs7CgkJCX0KCQkJaWYocGxhY2Vob2xkZXJUeHQgJmFtcDsmYW1wOyAhdmFsdWUpewoJCQkJc2hvd1BsYWNlaG9sZGVyKGVsZW0sIGRhdGEsIHBsYWNlaG9sZGVyVHh0KTsKCQkJfSBlbHNlIHsKCQkJCWhpZGVQbGFjZWhvbGRlcihlbGVtLCBkYXRhLCB2YWx1ZSk7CgkJCX0KCQl9LAoJCWNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24oZWxlbSl7CgkJCWVsZW0gPSAkKGVsZW0pOwoJCQl2YXIgaWQgCQkJPSBlbGVtLnByb3AoJiMwMzk7aWQmIzAzOTspLAoJCQkJaGFzTGFiZWwJPSAhIShlbGVtLmF0dHIoJiMwMzk7dGl0bGUmIzAzOTspIHx8IGVsZW0uYXR0cigmIzAzOTthcmlhLWxhYmVsZWRieSYjMDM5OykpLAoJCQkJcEhvbGRlclR4dAoJCQk7CgkJCWlmKCFoYXNMYWJlbCAmYW1wOyZhbXA7IGlkKXsKCQkJCWhhc0xhYmVsID0gISEoICQoJiMwMzk7bGFiZWxbZm9yPSZxdW90OyYjMDM5OysgaWQgKyYjMDM5OyZxdW90O10mIzAzOTssIGVsZW1bMF0uZm9ybSlbMF0gKTsKCQkJfQoJCQlyZXR1cm4gJCggaGFzTGFiZWwgPyAmIzAzOTsmbHQ7c3BhbiBjbGFzcz0mcXVvdDtwbGFjZWhvbGRlci10ZXh0JnF1b3Q7Jmd0OyZsdDsvc3BhbiZndDsmIzAzOTsgOiAmIzAzOTsmbHQ7bGFiZWwgZm9yPSZxdW90OyYjMDM5OysgKGlkIHx8ICQud2Vic2hpbXMuZ2V0SUQoZWxlbSkpICsmIzAzOTsmcXVvdDsgY2xhc3M9JnF1b3Q7cGxhY2Vob2xkZXItdGV4dCZxdW90OyZndDsmbHQ7L2xhYmVsJmd0OyYjMDM5Oyk7CgkJfSwKCQlwSG9sZGVyID0gKGZ1bmN0aW9uKCl7CgkJCXZhciBkZWxSZWcgCT0gL1xufFxyfFxmfFx0L2csCgkJCQlhbGxvd2VkUGxhY2Vob2xkZXIgPSB7CgkJCQkJdGV4dDogMSwKCQkJCQlzZWFyY2g6IDEsCgkJCQkJdXJsOiAxLAoJCQkJCWVtYWlsOiAxLAoJCQkJCXBhc3N3b3JkOiAxLAoJCQkJCXRlbDogMQoJCQkJfQoJCQk7CgkJCQoJCQlyZXR1cm4gewoJCQkJY3JlYXRlOiBmdW5jdGlvbihlbGVtKXsKCQkJCQl2YXIgZGF0YSA9ICQuZGF0YShlbGVtLCAmIzAzOTtwbGFjZUhvbGRlciYjMDM5Oyk7CgkJCQkJaWYoZGF0YSl7cmV0dXJuIGRhdGE7fQoJCQkJCWRhdGEgPSAkLmRhdGEoZWxlbSwgJiMwMzk7cGxhY2VIb2xkZXImIzAzOTssIHsKCQkJCQkJdGV4dDogY3JlYXRlUGxhY2Vob2xkZXIoZWxlbSkKCQkJCQl9KTsKCQkJCQkKCQkJCQkkKGVsZW0pLmJpbmQoJiMwMzk7Zm9jdXMucGxhY2Vob2xkZXIgYmx1ci5wbGFjZWhvbGRlciYjMDM5OywgZnVuY3Rpb24oZSl7CgkJCQkJCWNoYW5nZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSh0aGlzLCBmYWxzZSwgZmFsc2UsIGRhdGEsIGUudHlwZSApOwoJCQkJCX0pOwoJCQkJCWlmKGVsZW0uZm9ybSl7CgkJCQkJCSQoZWxlbS5mb3JtKS5iaW5kKCYjMDM5O3Jlc2V0LnBsYWNlaG9sZGVyJiMwMzk7LCBmdW5jdGlvbihlKXsKCQkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCQkJCQljaGFuZ2VQbGFjZWhvbGRlclZpc2liaWxpdHkoZWxlbSwgZmFsc2UsIGZhbHNlLCBkYXRhLCBlLnR5cGUgKTsKCQkJCQkJCX0sIDApOwoJCQkJCQl9KTsKCQkJCQl9CgkJCQkJCgkJCQkJaWYoZWxlbS50eXBlID09ICYjMDM5O3Bhc3N3b3JkJiMwMzk7IHx8IGlzT3Zlcil7CgkJCQkJCWRhdGEuYm94ID0gJChlbGVtKQoJCQkJCQkJLndyYXAoJiMwMzk7Jmx0O3NwYW4gY2xhc3M9JnF1b3Q7cGxhY2Vob2xkZXItYm94IHBsYWNlaG9sZGVyLWJveC0mIzAzOTsrIChlbGVtLm5vZGVOYW1lIHx8ICYjMDM5OyYjMDM5OykudG9Mb3dlckNhc2UoKSArJiMwMzk7JnF1b3Q7IC8mZ3Q7JiMwMzk7KQoJCQkJCQkJLnBhcmVudCgpCgkJCQkJCTsKCQoJCQkJCQlkYXRhLnRleHQKCQkJCQkJCS5pbnNlcnRBZnRlcihlbGVtKQoJCQkJCQkJLmJpbmQoJiMwMzk7bW91c2Vkb3duLnBsYWNlaG9sZGVyJiMwMzk7LCBmdW5jdGlvbigpewoJCQkJCQkJCWNoYW5nZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSh0aGlzLCBmYWxzZSwgZmFsc2UsIGRhdGEsICYjMDM5O2ZvY3VzJiMwMzk7KTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJCQkJCQllbGVtLmZvY3VzKCk7CgkJCQkJCQkJCX0sIDApOwoJCQkJCQkJCX0gY2F0Y2goZSl7fQoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCX0pCgkJCQkJCTsKCQkJCQkJCgkJCQkJCQoJCQoJCQkJCQkkLmVhY2goWyYjMDM5O0xlZnQmIzAzOTssICYjMDM5O1RvcCYjMDM5O10sIGZ1bmN0aW9uKGksIHNpZGUpewoJCQkJCQkJdmFyIHNpemUgPSAocGFyc2VJbnQoJC5jdXJDU1MoZWxlbSwgJiMwMzk7cGFkZGluZyYjMDM5Oysgc2lkZSksIDEwKSB8fCAwKSArIE1hdGgubWF4KChwYXJzZUludCgkLmN1ckNTUyhlbGVtLCAmIzAzOTttYXJnaW4mIzAzOTsrIHNpZGUpLCAxMCkgfHwgMCksIDApICsgKHBhcnNlSW50KCQuY3VyQ1NTKGVsZW0sICYjMDM5O2JvcmRlciYjMDM5Oysgc2lkZSArJiMwMzk7V2lkdGgmIzAzOTspLCAxMCkgfHwgMCk7CgkJCQkJCQlkYXRhLnRleHQuY3NzKCYjMDM5O3BhZGRpbmcmIzAzOTsrIHNpZGUsIHNpemUpOwoJCQkJCQl9KTsKCQkJCQkJdmFyIGxpbmVIZWlnaHQgCT0gJC5jdXJDU1MoZWxlbSwgJiMwMzk7bGluZUhlaWdodCYjMDM5OyksCgkJCQkJCQlkaW1zIAkJPSB7CgkJCQkJCQkJd2lkdGg6ICQoZWxlbSkud2lkdGgoKSwKCQkJCQkJCQloZWlnaHQ6ICQoZWxlbSkuaGVpZ2h0KCkKCQkJCQkJCX0sCgkJCQkJCQljc3NGbG9hdCAJCT0gJC5jdXJDU1MoZWxlbSwgJiMwMzk7ZmxvYXQmIzAzOTspCgkJCQkJCTsKCQkJCQkJJC5lYWNoKFsmIzAzOTtsaW5lSGVpZ2h0JiMwMzk7LCAmIzAzOTtmb250U2l6ZSYjMDM5OywgJiMwMzk7Zm9udEZhbWlseSYjMDM5OywgJiMwMzk7Zm9udFdlaWdodCYjMDM5O10sIGZ1bmN0aW9uKGksIHN0eWxlKXsKCQkJCQkJCXZhciBwcm9wID0gJC5jdXJDU1MoZWxlbSwgc3R5bGUpOwoJCQkJCQkJaWYoZGF0YS50ZXh0LmNzcyhzdHlsZSkgIT0gcHJvcCl7CgkJCQkJCQkJZGF0YS50ZXh0LmNzcyhzdHlsZSwgcHJvcCk7CgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCQkKCQkJCQkJaWYoZGltcy53aWR0aCAmYW1wOyZhbXA7IGRpbXMuaGVpZ2h0KXsKCQkJCQkJCWRhdGEudGV4dC5jc3MoZGltcyk7CgkJCQkJCX0KCQkJCQkJaWYoY3NzRmxvYXQgIT09ICYjMDM5O25vbmUmIzAzOTspewoJCQkJCQkJZGF0YS5ib3guYWRkQ2xhc3MoJiMwMzk7cGxhY2Vob2xkZXItYm94LSYjMDM5Oytjc3NGbG9hdCk7CgkJCQkJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQl2YXIgcmVzZXQgPSBmdW5jdGlvbihlKXsKCQkJCQkJCWlmKCQoZWxlbSkuaGFzQ2xhc3MoJiMwMzk7cGxhY2Vob2xkZXItdmlzaWJsZSYjMDM5OykpewoJCQkJCQkJCWhpZGVQbGFjZWhvbGRlcihlbGVtLCBkYXRhLCAmIzAzOTsmIzAzOTspOwoJCQkJCQkJCWlmKGUgJmFtcDsmYW1wOyBlLnR5cGUgPT0gJiMwMzk7c3VibWl0JiMwMzk7KXsKCQkJCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJCQkJCQkJaWYoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7CgkJCQkJCQkJCQkJY2hhbmdlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGVsZW0sIGZhbHNlLCBmYWxzZSwgZGF0YSApOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9LCA5KTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX07CgkJCQkJCWlmKCQubm9kZU5hbWUoZGF0YS50ZXh0WzBdLCAmIzAzOTtsYWJlbCYjMDM5OykpewoJCQkJCQkJLy9pZiBsYWJlbCBpcyBkeW5hbWljYWxseSBzZXQgYWZ0ZXIgd2UgZW5zdXJlIHRoYXQgb3VyIGxhYmVsIGlzbiYjMDM5O3QgZXhwb3NlZCBhbnltb3JlCgkJCQkJCQkvL2llIGFsd2F5cyBleHBvc2VzIGxhc3QgbGFiZWwgYW5kIGZmIGFsd2F5cyBmaXJzdAoJCQkJCQkJZGF0YS50ZXh0LmhpZGUoKVskLmJyb3dzZXIubXNpZSA/ICYjMDM5O2luc2VydEJlZm9yZSYjMDM5OyA6ICYjMDM5O2luc2VydEFmdGVyJiMwMzk7XShlbGVtKTsKCQkJCQkJfQoJCQkJCQkkKHdpbmRvdykuYmluZCgmIzAzOTtiZWZvcmV1bmxvYWQmIzAzOTssIHJlc2V0KTsKCQkJCQkJZGF0YS5ib3ggPSAkKGVsZW0pOwoJCQkJCQlpZihlbGVtLmZvcm0pewoJCQkJCQkJJChlbGVtLmZvcm0pLnN1Ym1pdChyZXNldCk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJCgkJCQkJcmV0dXJuIGRhdGE7CgkJCQl9LAoJCQkJdXBkYXRlOiBmdW5jdGlvbihlbGVtLCB2YWwpewoJCQkJCWlmKCFhbGxvd2VkUGxhY2Vob2xkZXJbJC5wcm9wKGVsZW0sICYjMDM5O3R5cGUmIzAzOTspXSAmYW1wOyZhbXA7ICEkLm5vZGVOYW1lKGVsZW0sICYjMDM5O3RleHRhcmVhJiMwMzk7KSl7cmV0dXJuO30KCQkJCQkKCQkJCQl2YXIgZGF0YSA9IHBIb2xkZXIuY3JlYXRlKGVsZW0pOwoJCQkJCQoJCQkJCWRhdGEudGV4dC50ZXh0KHZhbCk7CgkJCQkJCgkJCQkJY2hhbmdlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGVsZW0sIGZhbHNlLCB2YWwsIGRhdGEpOwoJCQkJfQoJCQl9OwoJCX0pKCkKCTsKCQoJJC53ZWJzaGltcy5wdWJsaWNNZXRob2RzID0gewoJCXBIb2xkZXI6IHBIb2xkZXIKCX07Cglwb2x5ZmlsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24obm9kZU5hbWUpewoJCXZhciBkZXNjID0gd2Vic2hpbXMuZGVmaW5lTm9kZU5hbWVQcm9wZXJ0eShub2RlTmFtZSwgJiMwMzk7cGxhY2Vob2xkZXImIzAzOTssIHsKCQkJYXR0cjogewoJCQkJc2V0OiBmdW5jdGlvbih2YWwpewoJCQkJCXZhciBlbGVtID0gdGhpczsKCQkJCQl3ZWJzaGltcy5jb250ZW50QXR0cihlbGVtLCAmIzAzOTtwbGFjZWhvbGRlciYjMDM5OywgdmFsKTsKCQkJCQlwSG9sZGVyLnVwZGF0ZShlbGVtLCB2YWwpOwoJCQkJfSwKCQkJCWdldDogZnVuY3Rpb24oKXsKCQkJCQlyZXR1cm4gd2Vic2hpbXMuY29udGVudEF0dHIodGhpcywgJiMwMzk7cGxhY2Vob2xkZXImIzAzOTspOwoJCQkJfQoJCQl9LAoJCQlyZWZsZWN0OiB0cnVlLAoJCQlpbml0QXR0cjogdHJ1ZQoJCX0pOwoJfSk7CgkKCQoJcG9seWZpbGxFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpewoJCXZhciBwbGFjZWhvbGRlclZhbHVlRGVzYyA9ICB7fTsKCQl2YXIgZGVzYzsKCQlbJiMwMzk7YXR0ciYjMDM5OywgJiMwMzk7cHJvcCYjMDM5O10uZm9yRWFjaChmdW5jdGlvbihwcm9wVHlwZSl7CgkJCXBsYWNlaG9sZGVyVmFsdWVEZXNjW3Byb3BUeXBlXSA9IHsKCQkJCXNldDogZnVuY3Rpb24odmFsKXsKCQkJCQl2YXIgZWxlbSA9IHRoaXM7CgkJCQkJdmFyIHBsYWNlaG9sZGVyID0gd2Vic2hpbXMuY29udGVudEF0dHIoZWxlbSwgJiMwMzk7cGxhY2Vob2xkZXImIzAzOTspOwoJCQkJCXZhciByZXQgPSBkZXNjW3Byb3BUeXBlXS5fc3Vwc2V0LmNhbGwoZWxlbSwgdmFsKTsKCQkJCQlpZihwbGFjZWhvbGRlciAmYW1wOyZhbXA7ICYjMDM5O3ZhbHVlJiMwMzk7IGluIGVsZW0pewoJCQkJCQljaGFuZ2VQbGFjZWhvbGRlclZpc2liaWxpdHkoZWxlbSwgdmFsLCBwbGFjZWhvbGRlcik7CgkJCQkJfQoJCQkJCXJldHVybiByZXQ7CgkJCQl9LAoJCQkJZ2V0OiBmdW5jdGlvbigpewoJCQkJCXZhciBlbGVtID0gdGhpczsKCQkJCQlyZXR1cm4gJChlbGVtKS5oYXNDbGFzcygmIzAzOTtwbGFjZWhvbGRlci12aXNpYmxlJiMwMzk7KSA/ICYjMDM5OyYjMDM5OyA6IGRlc2NbcHJvcFR5cGVdLl9zdXBnZXQuY2FsbChlbGVtKTsKCQkJCX0KCQkJfTsKCQl9KTsKCQlkZXNjID0gd2Vic2hpbXMuZGVmaW5lTm9kZU5hbWVQcm9wZXJ0eShuYW1lLCAmIzAzOTt2YWx1ZSYjMDM5OywgcGxhY2Vob2xkZXJWYWx1ZURlc2MpOwoJfSk7CgkKfSk7CgpqUXVlcnkud2Vic2hpbXMucmVhZHkoJiMwMzk7ZG9tLXN1cHBvcnQmIzAzOTssIGZ1bmN0aW9uKCQsIHdlYnNoaW1zLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpewoJdmFyIGRvYyA9IGRvY3VtZW50OwkKCQoJLyoKCSAqIGltcGxlbWVudCBwcm9wVHlwZSAmcXVvdDtlbGVtZW50JnF1b3Q7IGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGxpc3QtYXR0cmlidXRlICh3aWxsIGJlIG1vdmVkIHRvIGRvbS1leHRlbmQsIGlmIG5lZWRlZCkKCSAqLwoJd2Vic2hpbXMucHJvcFR5cGVzLmVsZW1lbnQgPSBmdW5jdGlvbihkZXNjcyl7CgkJd2Vic2hpbXMuY3JlYXRlUHJvcERlZmF1bHQoZGVzY3MsICYjMDM5O2F0dHImIzAzOTspOwoJCWlmKGRlc2NzLnByb3Ape3JldHVybjt9CgkJZGVzY3MucHJvcCA9IHsKCQkJZ2V0OiBmdW5jdGlvbigpewoJCQkJdmFyIGVsZW0gPSBkZXNjcy5hdHRyLmdldC5jYWxsKHRoaXMpOwoJCQkJaWYoZWxlbSl7CgkJCQkJZWxlbSA9ICQoJiMwMzk7IyYjMDM5OytlbGVtKVswXTsKCQkJCQlpZihlbGVtICZhbXA7JmFtcDsgZGVzY3MucHJvcE5vZGVOYW1lICZhbXA7JmFtcDsgISQubm9kZU5hbWUoZWxlbSwgZGVzY3MucHJvcE5vZGVOYW1lKSl7CgkJCQkJCWVsZW0gPSBudWxsOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBlbGVtIHx8IG51bGw7CgkJCX0sCgkJCXdyaXRlYWJsZTogZmFsc2UKCQl9OwoJfTsKCQoJCgkoZnVuY3Rpb24oKXsKCQlpZiggJiMwMzk7dmFsdWUmIzAzOTsgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgmIzAzOTtvdXRwdXQmIzAzOTspICl7cmV0dXJuO30KCQkKCQl3ZWJzaGltcy5kZWZpbmVOb2RlTmFtZVByb3BlcnR5KCYjMDM5O291dHB1dCYjMDM5OywgJiMwMzk7dmFsdWUmIzAzOTssIHsKCQkJcHJvcDogewoJCQkJc2V0OiBmdW5jdGlvbih2YWx1ZSl7CgkJCQkJdmFyIHNldFZhbCA9ICQuZGF0YSh0aGlzLCAmIzAzOTtvdXRwdXRTaGltJiMwMzk7KTsKCQkJCQlpZighc2V0VmFsKXsKCQkJCQkJc2V0VmFsID0gb3V0cHV0Q3JlYXRlKHRoaXMpOwoJCQkJCX0KCQkJCQlzZXRWYWwodmFsdWUpOwoJCQkJfSwKCQkJCWdldDogZnVuY3Rpb24oKXsKCQkJCQlyZXR1cm4gd2Vic2hpbXMuY29udGVudEF0dHIodGhpcywgJiMwMzk7dmFsdWUmIzAzOTspIHx8ICQodGhpcykudGV4dCgpIHx8ICYjMDM5OyYjMDM5OzsKCQkJCX0KCQkJfQoJCX0pOwoJCQoJCQoJCXdlYnNoaW1zLm9uTm9kZU5hbWVzUHJvcGVydHlNb2RpZnkoJiMwMzk7aW5wdXQmIzAzOTssICYjMDM5O3ZhbHVlJiMwMzk7LCBmdW5jdGlvbih2YWx1ZSwgYm9vbFZhbCwgdHlwZSl7CgkJCWlmKHR5cGUgPT0gJiMwMzk7cmVtb3ZlQXR0ciYjMDM5Oyl7cmV0dXJuO30KCQkJdmFyIHNldFZhbCA9ICQuZGF0YSh0aGlzLCAmIzAzOTtvdXRwdXRTaGltJiMwMzk7KTsKCQkJaWYoc2V0VmFsKXsKCQkJCXNldFZhbCh2YWx1ZSk7CgkJCX0KCQl9KTsKCQkKCQl2YXIgb3V0cHV0Q3JlYXRlID0gZnVuY3Rpb24oZWxlbSl7CgkJCWlmKGVsZW0uZ2V0QXR0cmlidXRlKCYjMDM5O2FyaWEtbGl2ZSYjMDM5Oykpe3JldHVybjt9CgkJCWVsZW0gPSAkKGVsZW0pOwoJCQl2YXIgdmFsdWUgPSAoZWxlbS50ZXh0KCkgfHwgJiMwMzk7JiMwMzk7KS50cmltKCk7CgkJCXZhcglpZCAJPSBlbGVtLmF0dHIoJiMwMzk7aWQmIzAzOTspOwoJCQl2YXIJaHRtbEZvciA9IGVsZW0uYXR0cigmIzAzOTtmb3ImIzAzOTspOwoJCQl2YXIgc2hpbSA9ICQoJiMwMzk7Jmx0O2lucHV0IGNsYXNzPSZxdW90O291dHB1dC1zaGltJnF1b3Q7IHR5cGU9JnF1b3Q7aGlkZGVuJnF1b3Q7IG5hbWU9JnF1b3Q7JiMwMzk7KyAoZWxlbS5hdHRyKCYjMDM5O25hbWUmIzAzOTspIHx8ICYjMDM5OyYjMDM5OykrJiMwMzk7JnF1b3Q7IHZhbHVlPSZxdW90OyYjMDM5Oyt2YWx1ZSsmIzAzOTsmcXVvdDsgc3R5bGU9JnF1b3Q7ZGlzcGxheTogbm9uZSZxdW90OyAvJmd0OyYjMDM5OykuaW5zZXJ0QWZ0ZXIoZWxlbSk7CgkJCXZhciBmb3JtID0gc2hpbVswXS5mb3JtIHx8IGRvYzsKCQkJdmFyIHNldFZhbHVlID0gZnVuY3Rpb24odmFsKXsKCQkJCXNoaW1bMF0udmFsdWUgPSB2YWw7CgkJCQl2YWwgPSBzaGltWzBdLnZhbHVlOwoJCQkJZWxlbS50ZXh0KHZhbCk7CgkJCQl3ZWJzaGltcy5jb250ZW50QXR0cihlbGVtWzBdLCAmIzAzOTt2YWx1ZSYjMDM5OywgdmFsKTsKCQkJfTsKCQkJCgkJCWVsZW1bMF0uZGVmYXVsdFZhbHVlID0gdmFsdWU7CgkJCXdlYnNoaW1zLmNvbnRlbnRBdHRyKGVsZW1bMF0sICYjMDM5O3ZhbHVlJiMwMzk7LCB2YWx1ZSk7CgkJCQoJCQllbGVtLmF0dHIoeyYjMDM5O2FyaWEtbGl2ZSYjMDM5OzogJiMwMzk7cG9saXRlJiMwMzk7fSk7CgkJCWlmKGlkKXsKCQkJCXNoaW0uYXR0cigmIzAzOTtpZCYjMDM5OywgaWQpOwoJCQkJZWxlbS5hdHRyKCYjMDM5O2FyaWEtbGFiZWxkYnkmIzAzOTssIHdlYnNoaW1zLmdldElEKCQoJiMwMzk7bGFiZWxbZm9yPSZxdW90OyYjMDM5OytpZCsmIzAzOTsmcXVvdDtdJiMwMzk7LCBmb3JtKSkpOwoJCQl9CgkJCWlmKGh0bWxGb3IpewoJCQkJaWQgPSB3ZWJzaGltcy5nZXRJRChlbGVtKTsKCQkJCWh0bWxGb3Iuc3BsaXQoJiMwMzk7ICYjMDM5OykuZm9yRWFjaChmdW5jdGlvbihjb250cm9sKXsKCQkJCQljb250cm9sID0gZm9ybS5nZXRFbGVtZW50QnlJZChjb250cm9sKTsKCQkJCQlpZihjb250cm9sKXsKCQkJCQkJY29udHJvbC5zZXRBdHRyaWJ1dGUoJiMwMzk7YXJpYS1jb250cm9scyYjMDM5OywgaWQpOwoJCQkJCX0KCQkJCX0pOwoJCQl9CgkJCWVsZW0uZGF0YSgmIzAzOTtvdXRwdXRTaGltJiMwMzk7LCBzZXRWYWx1ZSApOwoJCQlzaGltLmRhdGEoJiMwMzk7b3V0cHV0U2hpbSYjMDM5Oywgc2V0VmFsdWUgKTsKCQkJcmV0dXJuIHNldFZhbHVlOwoJCX07CgkJCQkJCQoJCXdlYnNoaW1zLmFkZFJlYWR5KGZ1bmN0aW9uKGNvbnRleHQsIGNvbnRleHRFbGVtKXsKCQkJJCgmIzAzOTtvdXRwdXQmIzAzOTssIGNvbnRleHQpLmFkZChjb250ZXh0RWxlbS5maWx0ZXIoJiMwMzk7b3V0cHV0JiMwMzk7KSkuZWFjaChmdW5jdGlvbigpewoJCQkJb3V0cHV0Q3JlYXRlKHRoaXMpOwoJCQl9KTsKCQl9KTsKCX0pKCk7CgkKCQoJCgkKCS8qCgkgKiBJbXBsZW1lbnRzIGRhdGFsaXN0IGVsZW1lbnQgYW5kIGxpc3QgYXR0cmlidXRlCgkgKi8KCQoJKGZ1bmN0aW9uKCl7CgkJaWYoTW9kZXJuaXpyLmRhdGFsaXN0KXtyZXR1cm47fQoJCQoJCQl2YXIgaW5pdGlhbGl6ZURhdGFsaXN0ID0gIGZ1bmN0aW9uKCl7CgkJCQkKCQkJCXdlYnNoaW1zLmRlZmluZU5vZGVOYW1lUHJvcGVydGllcygmIzAzOTtpbnB1dCYjMDM5OywgewoJCQkJJiMwMzk7bGlzdCYjMDM5OzogewoJCQkJCWF0dHI6IHsKCQkJCQkJZ2V0OiBmdW5jdGlvbigpewoJCQkJCQkJdmFyIHZhbCA9IHdlYnNoaW1zLmNvbnRlbnRBdHRyKHRoaXMsICYjMDM5O2xpc3QmIzAzOTspOwoJCQkJCQkJcmV0dXJuICh2YWwgPT0gbnVsbCkgPyB1bmRlZmluZWQgOiB2YWw7CgkJCQkJCX0sCgkJCQkJCXNldDogZnVuY3Rpb24odmFsdWUpewoJCQkJCQkJdmFyIGVsZW0gPSB0aGlzOwoJCQkJCQkJd2Vic2hpbXMuY29udGVudEF0dHIoZWxlbSwgJiMwMzk7bGlzdCYjMDM5OywgdmFsdWUpOwoJCQkJCQkJd2Vic2hpbXMub2JqZWN0Q3JlYXRlKHNoYWRvd0xpc3RQcm90bywgdW5kZWZpbmVkLCB7aW5wdXQ6IGVsZW0sIGlkOiB2YWx1ZSwgZGF0YWxpc3Q6ICQucHJvcChlbGVtLCAmIzAzOTtsaXN0JiMwMzk7KX0pOwoJCQkJCQl9CgkJCQkJfSwKCQkJCQlpbml0QXR0cjogdHJ1ZSwKCQkJCQlyZWZsZWN0OiB0cnVlLAoJCQkJCXByb3BUeXBlOiAmIzAzOTtlbGVtZW50JiMwMzk7LAoJCQkJCXByb3BOb2RlTmFtZTogJiMwMzk7ZGF0YWxpc3QmIzAzOTsKCQkJCX0sCgkJCQkKCQkJCS8vY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgeC1icm93c2VyIChGRjQgaGFzIG5vdCBpbXBsZW1lbnRlZCBhbmQgaXMgbm90IHBvbHlmaWxsZWQgKQoJCQkJc2VsZWN0ZWRPcHRpb246IHsKCQkJCQlwcm9wOiB7CgkJCQkJCXdyaXRlYWJsZTogZmFsc2UsCgkJCQkJCWdldDogZnVuY3Rpb24oKXsKCQkJCQkJCXZhciBlbGVtID0gdGhpczsKCQkJCQkJCXZhciBsaXN0ID0gJC5wcm9wKGVsZW0sICYjMDM5O2xpc3QmIzAzOTspOwoJCQkJCQkJdmFyIHJldCA9IG51bGw7CgkJCQkJCQl2YXIgdmFsdWUsIG9wdGlvbnM7CgkJCQkJCQlpZighbGlzdCl7cmV0dXJuIHJldDt9CgkJCQkJCQl2YWx1ZSA9ICQuYXR0cihlbGVtLCAmIzAzOTt2YWx1ZSYjMDM5Oyk7CgkJCQkJCQlpZighdmFsdWUpe3JldHVybiByZXQ7fQoJCQkJCQkJb3B0aW9ucyA9ICQucHJvcChsaXN0LCAmIzAzOTtvcHRpb25zJiMwMzk7KTsKCQkJCQkJCWlmKCFvcHRpb25zLmxlbmd0aCl7cmV0dXJuIHJldDt9CgkJCQkJCQkkLmVhY2gob3B0aW9ucywgZnVuY3Rpb24oaSwgb3B0aW9uKXsKCQkJCQkJCQlpZih2YWx1ZSA9PSAkLnByb3Aob3B0aW9uLCAmIzAzOTt2YWx1ZSYjMDM5OykpewoJCQkJCQkJCQlyZXQgPSBvcHRpb247CgkJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJCQkJCXJldHVybiByZXQ7CgkJCQkJCX0KCQkJCQl9CgkJCQl9LAoJCQkJCgkJCQkvL292ZXJyaWRlIGF1dG9jb21wbGV0ZQoJCQkJYXV0b2NvbXBsZXRlOiB7CgkJCQkJYXR0cjogewoJCQkJCQlnZXQ6IGZ1bmN0aW9uKCl7CgkJCQkJCQl2YXIgZWxlbSA9IHRoaXM7CgkJCQkJCQl2YXIgZGF0YSA9ICQuZGF0YShlbGVtLCAmIzAzOTtkYXRhbGlzdFdpZGdldCYjMDM5Oyk7CgkJCQkJCQlpZihkYXRhKXsKCQkJCQkJCQlyZXR1cm4gZGF0YS5fYXV0b2NvbXBsZXRlOwoJCQkJCQkJfQoJCQkJCQkJcmV0dXJuICgmIzAzOTthdXRvY29tcGxldGUmIzAzOTsgaW4gZWxlbSkgPyBlbGVtLmF1dG9jb21wbGV0ZSA6IGVsZW0uZ2V0QXR0cmlidXRlKCYjMDM5O2F1dG9jb21wbGV0ZSYjMDM5Oyk7CgkJCQkJCX0sCgkJCQkJCXNldDogZnVuY3Rpb24odmFsdWUpewoJCQkJCQkJdmFyIGVsZW0gPSB0aGlzOwoJCQkJCQkJdmFyIGRhdGEgPSAkLmRhdGEoZWxlbSwgJiMwMzk7ZGF0YWxpc3RXaWRnZXQmIzAzOTspOwoJCQkJCQkJaWYoZGF0YSl7CgkJCQkJCQkJZGF0YS5fYXV0b2NvbXBsZXRlID0gdmFsdWU7CgkJCQkJCQkJaWYodmFsdWUgPT0gJiMwMzk7b2ZmJiMwMzk7KXsKCQkJCQkJCQkJZGF0YS5oaWRlTGlzdCgpOwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJaWYoJiMwMzk7YXV0b2NvbXBsZXRlJiMwMzk7IGluIGVsZW0pewoJCQkJCQkJCQllbGVtLmF1dG9jb21wbGV0ZSA9IHZhbHVlOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCYjMDM5O2F1dG9jb21wbGV0ZSYjMDM5OywgdmFsdWUpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfSk7CgkJCQkJCQoJCQl3ZWJzaGltcy5kZWZpbmVOb2RlTmFtZVByb3BlcnR5KCYjMDM5O2RhdGFsaXN0JiMwMzk7LCAmIzAzOTtvcHRpb25zJiMwMzk7LCB7CgkJCQlwcm9wOiB7CgkJCQkJd3JpdGVhYmxlOiBmYWxzZSwKCQkJCQlnZXQ6IGZ1bmN0aW9uKCl7CgkJCQkJCXZhciBlbGVtID0gdGhpczsKCQkJCQkJdmFyIHNlbGVjdCA9ICQoJiMwMzk7c2VsZWN0JiMwMzk7LCBlbGVtKTsKCQkJCQkJcmV0dXJuIChzZWxlY3RbMF0pID8gc2VsZWN0WzBdLm9wdGlvbnMgOiBbXTsKCQkJCQl9CgkJCQl9CgkJCX0pOwoJCQkKCQkJCgkJCQoJCQl3ZWJzaGltcy5hZGRSZWFkeShmdW5jdGlvbihjb250ZXh0LCBjb250ZXh0RWxlbSl7CgkJCQljb250ZXh0RWxlbS5maWx0ZXIoJiMwMzk7c2VsZWN0LCBvcHRpb24mIzAzOTspLmVhY2goZnVuY3Rpb24oKXsKCQkJCQl2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwoJCQkJCXZhciBpc0RhdGFsaXN0ID0gJC5ub2RlTmFtZShwYXJlbnQsICYjMDM5O2RhdGFsaXN0JiMwMzk7KTsKCQkJCQlpZihwYXJlbnQgJmFtcDsmYW1wOyAhaXNEYXRhbGlzdCl7CgkJCQkJCXBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwoJCQkJCQlpc0RhdGFsaXN0ID0gJC5ub2RlTmFtZShwYXJlbnQsICYjMDM5O2RhdGFsaXN0JiMwMzk7KTsKCQkJCQl9CgkJCQkJaWYocGFyZW50ICZhbXA7JmFtcDsgaXNEYXRhbGlzdCl7CgkJCQkJCSQocGFyZW50KS50cmlnZ2VySGFuZGxlcigmIzAzOTt1cGRhdGVEYXRhbGlzdCYjMDM5Oyk7CgkJCQkJfQoJCQkJfSk7CgkJCX0pOwoJCQkKCQkJCgkJfTsKCQkKCQkKCQkvKgoJCSAqIFNoYWRvd0xpc3QKCQkgKi8KCQl2YXIgbGlzdGlkSW5kZXggPSAwOwoJCQoJCXZhciBub0RhdGFsaXN0U3VwcG9ydCA9IHsKCQkJc3VibWl0OiAxLAoJCQlidXR0b246IDEsCgkJCXJlc2V0OiAxLCAKCQkJaGlkZGVuOiAxLAoJCQkKCQkJLy9Ub0RvCgkJCXJhbmdlOiAxLAoJCQlkYXRlOiAxCgkJfTsKCQl2YXIgbHRlaWU2ID0gKCQuYnJvd3Nlci5tc2llICZhbXA7JmFtcDsgcGFyc2VJbnQoJC5icm93c2VyLnZlcnNpb24sIDEwKSAmbHQ7IDcpOwoJCXZhciBnbG9iU3RvcmVkT3B0aW9ucyA9IHt9OwoJCXZhciBnZXRTdG9yZWRPcHRpb25zID0gZnVuY3Rpb24obmFtZSl7CgkJCWlmKCFuYW1lKXtyZXR1cm4gW107fQoJCQlpZihnbG9iU3RvcmVkT3B0aW9uc1tuYW1lXSl7CgkJCQlyZXR1cm4gZ2xvYlN0b3JlZE9wdGlvbnNbbmFtZV07CgkJCX0KCQkJdmFyIGRhdGE7CgkJCXdlYnNoaW1zLnJlYWR5KCYjMDM5O2pzb24tc3RvcmFnZSYjMDM5OywgZnVuY3Rpb24oKXsKCQkJCXRyeSB7CgkJCQkJZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJiMwMzk7c3RvcmVkRGF0YWxpc3RPcHRpb25zJiMwMzk7K25hbWUpKTsKCQkJCX0gY2F0Y2goZSl7fQoJCQkJZ2xvYlN0b3JlZE9wdGlvbnNbbmFtZV0gPSBkYXRhIHx8IFtdOwoJCQl9KTsKCQkJcmV0dXJuIGRhdGEgfHwgW107CgkJfTsKCQl2YXIgc3RvcmVPcHRpb25zID0gZnVuY3Rpb24obmFtZSwgdmFsKXsKCQkJaWYoIW5hbWUpe3JldHVybjt9CgkJCXZhbCA9IHZhbCB8fCBbXTsKCQkJdHJ5IHsKCQkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCAmIzAzOTtzdG9yZWREYXRhbGlzdE9wdGlvbnMmIzAzOTsrbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsKSApOwoJCQl9IGNhdGNoKGUpe30KCQl9OwoJCXZhciBnZXRUeXBlID0gZnVuY3Rpb24oZWxlbSl7CgkJCXJldHVybiAoZWxlbS5nZXRBdHRyaWJ1dGUoJiMwMzk7dHlwZSYjMDM5OykgfHwgJiMwMzk7JiMwMzk7KS50b0xvd2VyQ2FzZSgpIHx8IGVsZW0udHlwZTsKCQl9OwoJCXZhciBnZXRUZXh0ID0gZnVuY3Rpb24oZWxlbSl7CgkJCXJldHVybiAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCAkLnRleHQoWyBlbGVtIF0pIHx8ICYjMDM5OyYjMDM5Oyk7CgkJfTsKCQkKCQl2YXIgc2hhZG93TGlzdFByb3RvID0gewoJCQlfY3JlYXRlOiBmdW5jdGlvbihvcHRzKXsKCQkJCQoJCQkJaWYobm9EYXRhbGlzdFN1cHBvcnRbZ2V0VHlwZShvcHRzLmlucHV0KV0pe3JldHVybjt9CgkJCQl2YXIgZGF0YWxpc3QgPSBvcHRzLmRhdGFsaXN0OwoJCQkJdmFyIGRhdGEgPSAkLmRhdGEob3B0cy5pbnB1dCwgJiMwMzk7ZGF0YWxpc3RXaWRnZXQmIzAzOTspOwoJCQkJaWYoZGF0YWxpc3QgJmFtcDsmYW1wOyBkYXRhICZhbXA7JmFtcDsgZGF0YS5kYXRhbGlzdCAhPT0gZGF0YWxpc3QpewoJCQkJCWRhdGEuZGF0YWxpc3QgPSBkYXRhbGlzdDsKCQkJCQlkYXRhLmlkID0gb3B0cy5pZDsKCQkJCQlkYXRhLl9yZXNldExpc3RDYWNoZWQoKTsKCQkJCQlyZXR1cm47CgkJCQl9IGVsc2UgaWYoIWRhdGFsaXN0KXsKCQkJCQlpZihkYXRhKXsKCQkJCQkJZGF0YS5kZXN0cm95KCk7CgkJCQkJfQoJCQkJCXJldHVybjsKCQkJCX0gZWxzZSBpZihkYXRhICZhbXA7JmFtcDsgZGF0YS5kYXRhbGlzdCA9PT0gZGF0YWxpc3QpewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWxpc3RpZEluZGV4Kys7CgkJCQl2YXIgdGhhdCA9IHRoaXM7CgkJCQl0aGlzLnRpbWVkSGlkZSA9IGZ1bmN0aW9uKCl7CgkJCQkJY2xlYXJUaW1lb3V0KHRoYXQuaGlkZVRpbWVyKTsKCQkJCQl0aGF0LmhpZGVUaW1lciA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGF0LCAmIzAzOTtoaWRlTGlzdCYjMDM5OyksIDkpOwoJCQkJfTsKCQkJCXRoaXMuZGF0YWxpc3QgPSBkYXRhbGlzdDsKCQkJCXRoaXMuaWQgPSBvcHRzLmlkOwoJCQkJdGhpcy5sYXp5SURpbmRleCA9IGxpc3RpZEluZGV4OwoJCQkJdGhpcy5oYXNWaWV3YWJsZURhdGEgPSB0cnVlOwoJCQkJdGhpcy5fYXV0b2NvbXBsZXRlID0gJC5hdHRyKG9wdHMuaW5wdXQsICYjMDM5O2F1dG9jb21wbGV0ZSYjMDM5Oyk7CgkJCQkkLmRhdGEob3B0cy5pbnB1dCwgJiMwMzk7ZGF0YWxpc3RXaWRnZXQmIzAzOTssIHRoaXMpOwoJCQkJdGhpcy5zaGFkb3dMaXN0ID0gJCgmIzAzOTsmbHQ7ZGl2IGNsYXNzPSZxdW90O2RhdGFsaXN0LXBvbHlmaWxsJnF1b3Q7IC8mZ3Q7JiMwMzk7KS5hcHBlbmRUbygmIzAzOTtib2R5JiMwMzk7KTsKCQkJCQoJCQkJdGhpcy5pbmRleCA9IC0xOwoJCQkJdGhpcy5pbnB1dCA9IG9wdHMuaW5wdXQ7CgkJCQl0aGlzLmFycmF5T3B0aW9ucyA9IFtdOwoJCQkJCgkJCQl0aGlzLnNoYWRvd0xpc3QKCQkJCQkuZGVsZWdhdGUoJiMwMzk7bGkmIzAzOTssICYjMDM5O21vdXNlb3Zlci5kYXRhbGlzdFdpZGdldCBtb3VzZWRvd24uZGF0YWxpc3RXaWRnZXQgY2xpY2suZGF0YWxpc3RXaWRnZXQmIzAzOTssIGZ1bmN0aW9uKGUpewoJCQkJCQl2YXIgaXRlbXMgPSAkKCYjMDM5O2xpOm5vdCguaGlkZGVuLWl0ZW0pJiMwMzk7LCB0aGF0LnNoYWRvd0xpc3QpOwoJCQkJCQl2YXIgc2VsZWN0ID0gKGUudHlwZSA9PSAmIzAzOTttb3VzZWRvd24mIzAzOTsgfHwgZS50eXBlID09ICYjMDM5O2NsaWNrJiMwMzk7KTsKCQkJCQkJdGhhdC5tYXJrSXRlbShpdGVtcy5pbmRleChlLnRhcmdldCksIHNlbGVjdCwgaXRlbXMpOwoJCQkJCQlpZihlLnR5cGUgPT0gJiMwMzk7Y2xpY2smIzAzOTspewoJCQkJCQkJdGhhdC5oaWRlTGlzdCgpOwoJCQkJCQl9CgkJCQkJCXJldHVybiAoZS50eXBlICE9ICYjMDM5O21vdXNlZG93biYjMDM5Oyk7CgkJCQkJfSkKCQkJCQkuYmluZCgmIzAzOTtmb2N1c291dCYjMDM5OywgdGhpcy50aW1lZEhpZGUpCgkJCQk7CgkJCQkKCQkJCW9wdHMuaW5wdXQuc2V0QXR0cmlidXRlKCYjMDM5O2F1dG9jb21wbGV0ZSYjMDM5OywgJiMwMzk7b2ZmJiMwMzk7KTsKCQkJCQoJCQkJJChvcHRzLmlucHV0KQoJCQkJCS5hdHRyKHsKCQkJCQkJLy9yb2xlOiAmIzAzOTtjb21ib2JveCYjMDM5OywKCQkJCQkJJiMwMzk7YXJpYS1oYXNwb3B1cCYjMDM5OzogJiMwMzk7dHJ1ZSYjMDM5OwoJCQkJCX0pCgkJCQkJLmJpbmQoJiMwMzk7aW5wdXQuZGF0YWxpc3RXaWRnZXQmIzAzOTssICQucHJveHkodGhpcywgJiMwMzk7c2hvd0hpZGVPcHRpb25zJiMwMzk7KSkKCQkJCQkuYmluZCgmIzAzOTtrZXlkb3duLmRhdGFsaXN0V2lkZ2V0JiMwMzk7LCBmdW5jdGlvbihlKXsKCQkJCQkJdmFyIGtleUNvZGUgPSBlLmtleUNvZGU7CgkJCQkJCXZhciBpdGVtczsKCQkJCQkJaWYoa2V5Q29kZSA9PSA0MCAmYW1wOyZhbXA7ICF0aGF0LnNob3dMaXN0KCkpewoJCQkJCQkJdGhhdC5tYXJrSXRlbSh0aGF0LmluZGV4ICsgMSwgdHJ1ZSk7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQkJCgkJCQkJCWlmKCF0aGF0LmlzTGlzdFZpc2libGUpe3JldHVybjt9CgkJCQkJCQoJCQkJCQkgCgkJCQkJCWlmKGtleUNvZGUgPT0gMzgpewoJCQkJCQkJdGhhdC5tYXJrSXRlbSh0aGF0LmluZGV4IC0gMSwgdHJ1ZSk7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0gCgkJCQkJCWlmKCFlLnNoaWZ0S2V5ICZhbXA7JmFtcDsgKGtleUNvZGUgPT0gMzMgfHwga2V5Q29kZSA9PSAzNikpewoJCQkJCQkJdGhhdC5tYXJrSXRlbSgwLCB0cnVlKTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfSAKCQkJCQkJaWYoIWUuc2hpZnRLZXkgJmFtcDsmYW1wOyAoa2V5Q29kZSA9PSAzNCB8fCBrZXlDb2RlID09IDM1KSl7CgkJCQkJCQlpdGVtcyA9ICQoJiMwMzk7bGk6bm90KC5oaWRkZW4taXRlbSkmIzAzOTssIHRoYXQuc2hhZG93TGlzdCk7CgkJCQkJCQl0aGF0Lm1hcmtJdGVtKGl0ZW1zLmxlbmd0aCAtIDEsIHRydWUsIGl0ZW1zKTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfSAKCQkJCQkJaWYoa2V5Q29kZSA9PSAxMyB8fCBrZXlDb2RlID09IDI3KXsKCQkJCQkJCWlmIChrZXlDb2RlID09IDEzKXsKCQkJCQkJCQl2YXIgYWN0aXZlSXRlbSA9ICQoJiMwMzk7bGkuYWN0aXZlLWl0ZW06bm90KC5oaWRkZW4taXRlbSkmIzAzOTssIHRoYXQuc2hhZG93TGlzdCk7CgkJCQkJCQkJaWYoYWN0aXZlSXRlbVswXSl7CgkJCQkJCQkJCSQuYXR0cih0aGF0LmlucHV0LCAmIzAzOTt2YWx1ZSYjMDM5OywgYWN0aXZlSXRlbS5hdHRyKCYjMDM5O2RhdGEtdmFsdWUmIzAzOTspKTsKCQkJCQkJCQkJJCh0aGF0LmlucHV0KS50cmlnZ2VySGFuZGxlcigmIzAzOTt1cGRhdGVJbnB1dCYjMDM5Oyk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJdGhhdC5oaWRlTGlzdCgpOwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9CgkJCQkJfSkKCQkJCQkuYmluZCgmIzAzOTtmb2N1cy5kYXRhbGlzdFdpZGdldCYjMDM5OywgZnVuY3Rpb24oKXsKCQkJCQkJaWYoJCh0aGlzKS5oYXNDbGFzcygmIzAzOTtsaXN0LWZvY3VzJiMwMzk7KSl7CgkJCQkJCQl0aGF0LnNob3dMaXN0KCk7CgkJCQkJCX0KCQkJCQl9KQoJCQkJCS5iaW5kKCYjMDM5O2JsdXIuZGF0YWxpc3RXaWRnZXQmIzAzOTssIHRoaXMudGltZWRIaWRlKQoJCQkJOwoJCQkJCgkJCQkKCQkJCSQodGhpcy5kYXRhbGlzdCkKCQkJCQkudW5iaW5kKCYjMDM5O3VwZGF0ZURhdGFsaXN0LmRhdGFsaXN0V2lkZ2V0JiMwMzk7KQoJCQkJCS5iaW5kKCYjMDM5O3VwZGF0ZURhdGFsaXN0LmRhdGFsaXN0V2lkZ2V0JiMwMzk7LCAkLnByb3h5KHRoaXMsICYjMDM5O19yZXNldExpc3RDYWNoZWQmIzAzOTspKQoJCQkJOwoJCQkJCgkJCQl0aGlzLl9yZXNldExpc3RDYWNoZWQoKTsKCQkJCQoJCQkJaWYob3B0cy5pbnB1dC5mb3JtICZhbXA7JmFtcDsgb3B0cy5pbnB1dC5pZCl7CgkJCQkJJChvcHRzLmlucHV0LmZvcm0pLmJpbmQoJiMwMzk7c3VibWl0LmRhdGFsaXN0V2lkZ2V0JiMwMzk7K29wdHMuaW5wdXQuaWQsIGZ1bmN0aW9uKCl7CgkJCQkJCXZhciB2YWwgPSAkLnByb3Aob3B0cy5pbnB1dCwgJiMwMzk7dmFsdWUmIzAzOTspOwoJCQkJCQl0aGF0LnN0b3JlZE9wdGlvbnMgPSBnZXRTdG9yZWRPcHRpb25zKG9wdHMuaW5wdXQubmFtZSB8fCBvcHRzLmlucHV0LmlkKTsKCQkJCQkJaWYodmFsICZhbXA7JmFtcDsgJC5pbkFycmF5KHZhbCwgdGhhdC5zdG9yZWRPcHRpb25zKSA9PSAtMSl7CgkJCQkJCQl0aGF0LnN0b3JlZE9wdGlvbnMucHVzaCh2YWwpOwoJCQkJCQkJc3RvcmVPcHRpb25zKG9wdHMuaW5wdXQubmFtZSB8fCBvcHRzLmlucHV0LmlkLCB0aGF0LnN0b3JlZE9wdGlvbnMgKTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJfQoJCQkJJCh3aW5kb3cpLmJpbmQoJiMwMzk7dW5sb2FkJiMwMzk7LCBmdW5jdGlvbigpewoJCQkJCXRoYXQuZGVzdHJveSgpOwoJCQkJfSk7CgkJCX0sCgkJCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CgkJCQl2YXIgYXV0b2NvbXBsZXRlID0gJC5hdHRyKHRoaXMuaW5wdXQsICYjMDM5O2F1dG9jb21wbGV0ZSYjMDM5Oyk7CgkJCQkkKHRoaXMuaW5wdXQpCgkJCQkJLnVuYmluZCgmIzAzOTsuZGF0YWxpc3RXaWRnZXQmIzAzOTspCgkJCQkJLnJlbW92ZURhdGEoJiMwMzk7ZGF0YWxpc3RXaWRnZXQmIzAzOTspCgkJCQk7CgkJCQl0aGlzLnNoYWRvd0xpc3QucmVtb3ZlKCk7CgkJCQkkKGRvY3VtZW50KS51bmJpbmQoJiMwMzk7LmRhdGFsaXN0JiMwMzk7K3RoaXMuaWQpOwoJCQkJaWYodGhpcy5pbnB1dC5mb3JtICZhbXA7JmFtcDsgdGhpcy5pbnB1dC5pZCl7CgkJCQkJJCh0aGlzLmlucHV0LmZvcm0pLnVuYmluZCgmIzAzOTtzdWJtaXQuZGF0YWxpc3RXaWRnZXQmIzAzOTsrdGhpcy5pbnB1dC5pZCk7CgkJCQl9CgkJCQl0aGlzLmlucHV0LnJlbW92ZUF0dHJpYnV0ZSgmIzAzOTthcmlhLWhhc3BvcHVwJiMwMzk7KTsKCQkJCWlmKGF1dG9jb21wbGV0ZSA9PT0gdW5kZWZpbmVkKXsKCQkJCQl0aGlzLmlucHV0LnJlbW92ZUF0dHJpYnV0ZSgmIzAzOTthdXRvY29tcGxldGUmIzAzOTspOwoJCQkJfSBlbHNlIHsKCQkJCQkkKHRoaXMuaW5wdXQpLmF0dHIoJiMwMzk7YXV0b2NvbXBsZXRlJiMwMzk7LCBhdXRvY29tcGxldGUpOwoJCQkJfQoJCQl9LAoJCQlfcmVzZXRMaXN0Q2FjaGVkOiBmdW5jdGlvbigpewoJCQkJdmFyIHRoYXQgPSB0aGlzOwoJCQkJdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCQl0aGlzLmxhc3RVcGRhdGVkVmFsdWUgPSBmYWxzZTsKCQkJCXRoaXMubGFzdFVuZm91bmRWYWx1ZSA9ICYjMDM5OyYjMDM5OzsKCQkJCQoJCQkJCgkJCQlpZighdGhpcy51cGRhdGVUaW1lcil7CgkJCQkJdGhpcy51cGRhdGVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCQkJdGhhdC51cGRhdGVMaXN0T3B0aW9ucygpOwoJCQkJCX0sIHRoaXMuaXNMaXN0VmlzaWJsZSB8fCB3aW5kb3cuUVVuaXQgPyAwIDogNDAgKiB0aGlzLmxhenlJRGluZGV4KTsKCQkJCX0KCQkJfSwKCQkJdXBkYXRlTGlzdE9wdGlvbnM6IGZ1bmN0aW9uKCl7CgkJCQl0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7CgkJCQljbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lcik7CgkJCQl0aGlzLnVwZGF0ZVRpbWVyID0gZmFsc2U7CgkJCQl0aGlzLnNoYWRvd0xpc3QKCQkJCQkuY3NzKHsKCQkJCQkJZm9udFNpemU6ICQuY3VyQ1NTKHRoaXMuaW5wdXQsICYjMDM5O2ZvbnRTaXplJiMwMzk7KSwKCQkJCQkJZm9udEZhbWlseTogJC5jdXJDU1ModGhpcy5pbnB1dCwgJiMwMzk7Zm9udEZhbWlseSYjMDM5OykKCQkJCQl9KQoJCQkJOwoJCQkJdmFyIGxpc3QgPSAmIzAzOTsmbHQ7dWwgcm9sZT0mcXVvdDtsaXN0JnF1b3Q7IGNsYXNzPSZxdW90OyYjMDM5OysgKHRoaXMuZGF0YWxpc3QuY2xhc3NOYW1lIHx8ICYjMDM5OyYjMDM5OykgKyAmIzAzOTsgJiMwMzk7KyB0aGlzLmRhdGFsaXN0LmlkICsmIzAzOTstc2hhZG93ZG9tJiMwMzk7ICsmIzAzOTsmcXVvdDsmZ3Q7JiMwMzk7OwoJCQkJCgkJCQl2YXIgdmFsdWVzID0gW107CgkJCQl2YXIgYWxsT3B0aW9ucyA9IFtdOwoJCQkJJCgmIzAzOTtvcHRpb24mIzAzOTssIHRoaXMuZGF0YWxpc3QpLmVhY2goZnVuY3Rpb24oaSl7CgkJCQkJaWYodGhpcy5kaXNhYmxlZCl7cmV0dXJuO30KCQkJCQl2YXIgaXRlbSA9IHsKCQkJCQkJdmFsdWU6ICQodGhpcykudmFsKCkgfHwgJiMwMzk7JiMwMzk7LAoJCQkJCQl0ZXh0OiAkLnRyaW0oJC5hdHRyKHRoaXMsICYjMDM5O2xhYmVsJiMwMzk7KSB8fCBnZXRUZXh0KHRoaXMpKSwKCQkJCQkJY2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSB8fCAmIzAzOTsmIzAzOTssCgkJCQkJCXN0eWxlOiAkLmF0dHIodGhpcywgJiMwMzk7c3R5bGUmIzAzOTspIHx8ICYjMDM5OyYjMDM5OwoJCQkJCX07CgkJCQkJaWYoIWl0ZW0udGV4dCl7CgkJCQkJCWl0ZW0udGV4dCA9IGl0ZW0udmFsdWU7CgkJCQkJfQoJCQkJCXZhbHVlc1tpXSA9IGl0ZW0udmFsdWU7CgkJCQkJYWxsT3B0aW9uc1tpXSA9IGl0ZW07CgkJCQl9KTsKCQkJCXRoaXMuc3RvcmVkT3B0aW9ucyA9IGdldFN0b3JlZE9wdGlvbnModGhpcy5pbnB1dC5uYW1lIHx8IHRoaXMuaW5wdXQuaWQpOwoJCQkJdGhpcy5zdG9yZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24odmFsLCBpKXsKCQkJCQlpZigkLmluQXJyYXkodmFsLCB2YWx1ZXMpID09IC0xKXsKCQkJCQkJYWxsT3B0aW9ucy5wdXNoKHt2YWx1ZTogdmFsLCB0ZXh0OiB2YWwsIGNsYXNzTmFtZTogJiMwMzk7JiMwMzk7LCBzdHlsZTogJiMwMzk7JiMwMzk7fSk7CgkJCQkJfQoJCQkJfSk7CgkJCQkKCQkJCWFsbE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpKXsKCQkJCQl2YXIgdmFsID0gaXRlbS52YWx1ZS5pbmRleE9mKCYjMDM5OyZxdW90OyYjMDM5OykgIT0gLTEgPyAmcXVvdDsmIzAzOTsmcXVvdDsrIGl0ZW0udmFsdWUgKyZxdW90OyYjMDM5OyZxdW90OyA6ICYjMDM5OyZxdW90OyYjMDM5OyArIGl0ZW0udmFsdWUgKyYjMDM5OyZxdW90OyYjMDM5OzsKCQkJCQlsaXN0ICs9ICYjMDM5OyZsdDtsaSBkYXRhLXZhbHVlPSYjMDM5OysgdmFsICsmIzAzOTsgY2xhc3M9JnF1b3Q7JiMwMzk7KyBpdGVtLmNsYXNzTmFtZSArJiMwMzk7JnF1b3Q7IHN0eWxlPSZxdW90OyYjMDM5OysgaXRlbS5zdHlsZSArJiMwMzk7JnF1b3Q7IHRhYmluZGV4PSZxdW90Oy0xJnF1b3Q7IHJvbGU9JnF1b3Q7bGlzdGl0ZW0mcXVvdDsmZ3Q7JiMwMzk7KyBpdGVtLnRleHQgKyYjMDM5OyZsdDsvbGkmZ3Q7JiMwMzk7OwoJCQkJfSk7CgkJCQkKCQkJCWxpc3QgKz0gJiMwMzk7Jmx0Oy91bCZndDsmIzAzOTs7CgkJCQl0aGlzLmFycmF5T3B0aW9ucyA9IGFsbE9wdGlvbnM7CgkJCQl0aGlzLnNoYWRvd0xpc3QuaHRtbChsaXN0KTsKCQkJCQoJCQkJaWYoJC5mbi5iZ0lmcmFtZSAmYW1wOyZhbXA7IGx0ZWllNil7CgkJCQkJdGhpcy5zaGFkb3dMaXN0LmJnSWZyYW1lKCk7CgkJCQl9CgkJCQkKCQkJCWlmKHRoaXMuaXNMaXN0VmlzaWJsZSl7CgkJCQkJdGhpcy5zaG93SGlkZU9wdGlvbnMoKTsKCQkJCX0KCQkJfSwKCQkJc2hvd0hpZGVPcHRpb25zOiBmdW5jdGlvbigpewoJCQkJdmFyIHZhbHVlID0gJC5hdHRyKHRoaXMuaW5wdXQsICYjMDM5O3ZhbHVlJiMwMzk7KS50b0xvd2VyQ2FzZSgpOwoJCQkJLy9maXJzdCBjaGVjayBwcmV2ZW50IGluZmluaXRlIGxvb3AsIHNlY29uZCBjcmVhdGVzIHNpbXBsZSBsYXp5IG9wdGltaXphdGlvbgoJCQkJaWYodmFsdWUgPT09IHRoaXMubGFzdFVwZGF0ZWRWYWx1ZSB8fCAodGhpcy5sYXN0VW5mb3VuZFZhbHVlICZhbXA7JmFtcDsgdmFsdWUuaW5kZXhPZih0aGlzLmxhc3RVbmZvdW5kVmFsdWUpID09PSAwKSl7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJCgkJCQl0aGlzLmxhc3RVcGRhdGVkVmFsdWUgPSB2YWx1ZTsKCQkJCXZhciBmb3VuZCA9IGZhbHNlOwoJCQkJdmFyIGxpcyA9ICQoJiMwMzk7bGkmIzAzOTssIHRoaXMuc2hhZG93TGlzdCk7CgkJCQlpZih2YWx1ZSl7CgkJCQkJdGhpcy5hcnJheU9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpKXsKCQkJCQkJaWYoISgmIzAzOTtsb3dlclRleHQmIzAzOTsgaW4gaXRlbSkpewoJCQkJCQkJaXRlbS5sb3dlclRleHQgPSBpdGVtLnRleHQudG9Mb3dlckNhc2UoKTsKCQkJCQkJCWl0ZW0ubG93ZXJWYWx1ZSA9IGl0ZW0udmFsdWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYoaXRlbS5sb3dlclRleHQuaW5kZXhPZih2YWx1ZSkgIT09IC0xIHx8IGl0ZW0ubG93ZXJWYWx1ZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpewoJCQkJCQkJJChsaXNbaV0pLnJlbW92ZUNsYXNzKCYjMDM5O2hpZGRlbi1pdGVtJiMwMzk7KTsKCQkJCQkJCWZvdW5kID0gdHJ1ZTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSQobGlzW2ldKS5hZGRDbGFzcygmIzAzOTtoaWRkZW4taXRlbSYjMDM5Oyk7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCX0gZWxzZSB7CgkJCQkJbGlzLnJlbW92ZUNsYXNzKCYjMDM5O2hpZGRlbi1pdGVtJiMwMzk7KTsKCQkJCQlmb3VuZCA9IHRydWU7CgkJCQl9CgkJCQkKCQkJCXRoaXMuaGFzVmlld2FibGVEYXRhID0gZm91bmQ7CgkJCQkKCQkJCWlmKGZvdW5kKXsKCQkJCQl0aGlzLnNob3dMaXN0KCk7CgkJCQl9IGVsc2UgewoJCQkJCXRoaXMubGFzdFVuZm91bmRWYWx1ZSA9IHZhbHVlOwoJCQkJCXRoaXMuaGlkZUxpc3QoKTsKCQkJCX0KCQkJfSwKCQkJc2hvd0xpc3Q6IGZ1bmN0aW9uKCl7CgkJCQlpZih0aGlzLmlzTGlzdFZpc2libGUpe3JldHVybiBmYWxzZTt9CgkJCQlpZih0aGlzLm5lZWRzVXBkYXRlKXsKCQkJCQl0aGlzLnVwZGF0ZUxpc3RPcHRpb25zKCk7CgkJCQl9CgkJCQl0aGlzLnNob3dIaWRlT3B0aW9ucygpOwoJCQkJaWYoIXRoaXMuaGFzVmlld2FibGVEYXRhKXtyZXR1cm4gZmFsc2U7fQoJCQkJdmFyIHRoYXQgPSB0aGlzOwoJCQkJdmFyIGNzcyA9ICQodGhpcy5pbnB1dCkub2Zmc2V0KCk7CgkJCQljc3MudG9wICs9ICQodGhpcy5pbnB1dCkub3V0ZXJIZWlnaHQoKTsKCQkJCQoJCQkJY3NzLndpZHRoID0gJCh0aGlzLmlucHV0KS5vdXRlcldpZHRoKCkgLSAocGFyc2VJbnQodGhpcy5zaGFkb3dMaXN0LmNzcygmIzAzOTtib3JkZXJMZWZ0V2lkdGgmIzAzOTspLCAxMCkgIHx8IDApIC0gKHBhcnNlSW50KHRoaXMuc2hhZG93TGlzdC5jc3MoJiMwMzk7Ym9yZGVyUmlnaHRXaWR0aCYjMDM5OyksIDEwKSAgfHwgMCk7CgkJCQkKCQkJCWlmKGx0ZWllNil7CgkJCQkJdGhpcy5zaGFkb3dMaXN0LmNzcygmIzAzOTtoZWlnaHQmIzAzOTssICYjMDM5O2F1dG8mIzAzOTspOwoJCQkJCWlmKHRoaXMuc2hhZG93TGlzdC5oZWlnaHQoKSAmZ3Q7IDI1MCl7CgkJCQkJCXRoaXMuc2hhZG93TGlzdC5jc3MoJiMwMzk7aGVpZ2h0JiMwMzk7LCAyMjApOwoJCQkJCX0KCQkJCX0KCQkJCXRoaXMuc2hhZG93TGlzdC5jc3MoY3NzKS5hZGRDbGFzcygmIzAzOTtkYXRhbGlzdC12aXNpYmxlJiMwMzk7KTsKCQkJCXRoaXMuaXNMaXN0VmlzaWJsZSA9IHRydWU7CgkJCQkvL3RvZG8KCQkJCSQoZG9jdW1lbnQpLmJpbmQoJiMwMzk7bW91c2Vkb3duLmRhdGFsaXN0JiMwMzk7K3RoaXMuaWQgKyYjMDM5OyBmb2N1c2luLmRhdGFsaXN0JiMwMzk7K3RoaXMuaWQsIGZ1bmN0aW9uKGUpewoJCQkJCWlmKGUudGFyZ2V0ID09PSB0aGF0LmlucHV0IHx8ICB0aGF0LnNoYWRvd0xpc3RbMF0gPT09IGUudGFyZ2V0IHx8ICQuY29udGFpbnMoIHRoYXQuc2hhZG93TGlzdFswXSwgZS50YXJnZXQgKSl7CgkJCQkJCWNsZWFyVGltZW91dCh0aGF0LmhpZGVUaW1lcik7CgkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCQkJCWNsZWFyVGltZW91dCh0aGF0LmhpZGVUaW1lcik7CgkJCQkJCX0sIDApOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXRoYXQudGltZWRIaWRlKCk7CgkJCQkJfQoJCQkJfSk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSwKCQkJaGlkZUxpc3Q6IGZ1bmN0aW9uKCl7CgkJCQlpZighdGhpcy5pc0xpc3RWaXNpYmxlKXtyZXR1cm4gZmFsc2U7fQoJCQkJdGhpcy5zaGFkb3dMaXN0CgkJCQkJLnJlbW92ZUNsYXNzKCYjMDM5O2RhdGFsaXN0LXZpc2libGUgbGlzdC1pdGVtLWFjdGl2ZSYjMDM5OykKCQkJCQkuc2Nyb2xsVG9wKDApCgkJCQkJLmZpbmQoJiMwMzk7bGkuYWN0aXZlLWl0ZW0mIzAzOTspLnJlbW92ZUNsYXNzKCYjMDM5O2FjdGl2ZS1pdGVtJiMwMzk7KQoJCQkJOwoJCQkJdGhpcy5pbmRleCA9IC0xOwoJCQkJdGhpcy5pc0xpc3RWaXNpYmxlID0gZmFsc2U7CgkJCQkkKHRoaXMuaW5wdXQpLnJlbW92ZUF0dHIoJiMwMzk7YXJpYS1hY3RpdmVkZXNjZW5kYW50JiMwMzk7KTsKCQkJCSQoZG9jdW1lbnQpLnVuYmluZCgmIzAzOTsuZGF0YWxpc3QmIzAzOTsrdGhpcy5pZCk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSwKCQkJc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uKGVsZW0pewoJCQkJdmFyIHVsID0gJCgmIzAzOTsmZ3Q7IHVsJiMwMzk7LCB0aGlzLnNoYWRvd0xpc3QpOwoJCQkJdmFyIGVsZW1Qb3MgPSBlbGVtLnBvc2l0aW9uKCk7CgkJCQl2YXIgY29udGFpbmVySGVpZ2h0OwoJCQkJZWxlbVBvcy50b3AgLT0gIChwYXJzZUludCh1bC5jc3MoJiMwMzk7cGFkZGluZ1RvcCYjMDM5OyksIDEwKSB8fCAwKSArIChwYXJzZUludCh1bC5jc3MoJiMwMzk7bWFyZ2luVG9wJiMwMzk7KSwgMTApIHx8IDApICsgKHBhcnNlSW50KHVsLmNzcygmIzAzOTtib3JkZXJUb3BXaWR0aCYjMDM5OyksIDEwKSB8fCAwKTsKCQkJCWlmKGVsZW1Qb3MudG9wICZsdDsgMCl7CgkJCQkJdGhpcy5zaGFkb3dMaXN0LnNjcm9sbFRvcCggdGhpcy5zaGFkb3dMaXN0LnNjcm9sbFRvcCgpICsgZWxlbVBvcy50b3AgLSAyKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQllbGVtUG9zLnRvcCArPSBlbGVtLm91dGVySGVpZ2h0KCk7CgkJCQljb250YWluZXJIZWlnaHQgPSB0aGlzLnNoYWRvd0xpc3QuaGVpZ2h0KCk7CgkJCQlpZihlbGVtUG9zLnRvcCAmZ3Q7IGNvbnRhaW5lckhlaWdodCl7CgkJCQkJdGhpcy5zaGFkb3dMaXN0LnNjcm9sbFRvcCggdGhpcy5zaGFkb3dMaXN0LnNjcm9sbFRvcCgpICsgKGVsZW1Qb3MudG9wIC0gY29udGFpbmVySGVpZ2h0KSArIDIpOwoJCQkJfQoJCQl9LAoJCQltYXJrSXRlbTogZnVuY3Rpb24oaW5kZXgsIGRvVmFsdWUsIGl0ZW1zKXsKCQkJCXZhciBhY3RpdmVJdGVtOwoJCQkJdmFyIGdvZXNVcDsKCQkJCWl0ZW1zID0gaXRlbXMgfHwgJCgmIzAzOTtsaTpub3QoLmhpZGRlbi1pdGVtKSYjMDM5OywgdGhpcy5zaGFkb3dMaXN0KTsKCQkJCWlmKCFpdGVtcy5sZW5ndGgpe3JldHVybjt9CgkJCQlpZihpbmRleCAmbHQ7IDApewoJCQkJCWluZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTsKCQkJCX0gZWxzZSBpZihpbmRleCAmZ3Q7PSBpdGVtcy5sZW5ndGgpewoJCQkJCWluZGV4ID0gMDsKCQkJCX0KCQkJCWl0ZW1zLnJlbW92ZUNsYXNzKCYjMDM5O2FjdGl2ZS1pdGVtJiMwMzk7KTsKCQkJCXRoaXMuc2hhZG93TGlzdC5hZGRDbGFzcygmIzAzOTtsaXN0LWl0ZW0tYWN0aXZlJiMwMzk7KTsKCQkJCWFjdGl2ZUl0ZW0gPSBpdGVtcy5maWx0ZXIoJiMwMzk7OmVxKCYjMDM5OysgaW5kZXggKyYjMDM5OykmIzAzOTspLmFkZENsYXNzKCYjMDM5O2FjdGl2ZS1pdGVtJiMwMzk7KTsKCQkJCQoJCQkJaWYoZG9WYWx1ZSl7CgkJCQkJJC5hdHRyKHRoaXMuaW5wdXQsICYjMDM5O3ZhbHVlJiMwMzk7LCBhY3RpdmVJdGVtLmF0dHIoJiMwMzk7ZGF0YS12YWx1ZSYjMDM5OykpOwoJCQkJCSQuYXR0cih0aGlzLmlucHV0LCAmIzAzOTthcmlhLWFjdGl2ZWRlc2NlbmRhbnQmIzAzOTssICQud2Vic2hpbXMuZ2V0SUQoYWN0aXZlSXRlbSkpOwoJCQkJCSQodGhpcy5pbnB1dCkudHJpZ2dlckhhbmRsZXIoJiMwMzk7dXBkYXRlSW5wdXQmIzAzOTspOwoJCQkJCXRoaXMuc2Nyb2xsSW50b1ZpZXcoYWN0aXZlSXRlbSk7CgkJCQl9CgkJCQl0aGlzLmluZGV4ID0gaW5kZXg7CgkJCX0KCQl9OwoJCQoJCS8vaW5pdCBkYXRhbGlzdCB1cGRhdGUKCQlpbml0aWFsaXplRGF0YWxpc3QoKTsKCQkJCgl9KSgpOwoJCgkKCS8qCgkgKiBJbXBsZW1lbnRzIGlucHV0IGV2ZW50IGluIGFsbCBicm93c2VycwoJICovCgkoZnVuY3Rpb24oKXsKCQl2YXIgZWxlbWVudHMgPSB7CgkJCQlpbnB1dDogMQoJCQl9LAoJCQlub0lucHV0VHJpZ2dlckV2dHMgPSB7dXBkYXRlSW5wdXQ6IDEsIGlucHV0OiAxfSwKCQkJbm9JbnB1dFR5cGVzID0gewoJCQkJcmFkaW86IDEsCgkJCQljaGVja2JveDogMSwKCQkJCXN1Ym1pdDogMSwKCQkJCWJ1dHRvbjogMSwKCQkJCWltYWdlOiAxLAoJCQkJcmVzZXQ6IDEsCgkJCQlmaWxlOiAxCgkJCQkKCQkJCS8vcHJvIGZvcm1hCgkJCQksY29sb3I6IDEKCQkJCS8vLHJhbmdlOiAxCgkJCX0sCgkJCW9ic2VydmUgPSBmdW5jdGlvbihpbnB1dCl7CgkJCQl2YXIgdGltZXIsCgkJCQkJbGFzdFZhbCA9IGlucHV0LmF0dHIoJiMwMzk7dmFsdWUmIzAzOTspLAoJCQkJCXRyaWdnZXIgPSBmdW5jdGlvbihlKXsKCQkJCQkJLy9pbnB1dCA9PT0gbnVsbAoJCQkJCQlpZighaW5wdXQpe3JldHVybjt9CgkJCQkJCXZhciBuZXdWYWwgPSBpbnB1dC5hdHRyKCYjMDM5O3ZhbHVlJiMwMzk7KTsKCQkJCQkJCgkJCQkJCWlmKG5ld1ZhbCAhPT0gbGFzdFZhbCl7CgkJCQkJCQlsYXN0VmFsID0gbmV3VmFsOwoJCQkJCQkJaWYoIWUgfHwgIW5vSW5wdXRUcmlnZ2VyRXZ0c1tlLnR5cGVdKXsKCQkJCQkJCQl3ZWJzaGltcy50cmlnZ2VySW5saW5lRm9ybSAmYW1wOyZhbXA7IHdlYnNoaW1zLnRyaWdnZXJJbmxpbmVGb3JtKGlucHV0WzBdLCAmIzAzOTtpbnB1dCYjMDM5Oyk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9LAoJCQkJCXVuYmluZCA9IGZ1bmN0aW9uKCl7CgkJCQkJCWlucHV0LnVuYmluZCgmIzAzOTtmb2N1c291dCYjMDM5OywgdW5iaW5kKS51bmJpbmQoJiMwMzk7aW5wdXQmIzAzOTssIHRyaWdnZXIpLnVuYmluZCgmIzAzOTtjaGFuZ2UmIzAzOTssIHRyaWdnZXIpLnVuYmluZCgmIzAzOTt1cGRhdGVJbnB1dCYjMDM5OywgdHJpZ2dlcik7CgkJCQkJCWNsZWFySW50ZXJ2YWwodGltZXIpOwoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJCQl0cmlnZ2VyKCk7CgkJCQkJCQlpbnB1dCA9IG51bGw7CgkJCQkJCX0sIDEpOwoJCQkJCQkKCQkJCQl9CgkJCQk7CgkJCQkKCQkJCWNsZWFySW50ZXJ2YWwodGltZXIpOwoJCQkJdGltZXIgPSBzZXRJbnRlcnZhbCh0cmlnZ2VyLCAoJC5icm93c2VyLm1vemlsbGEpID8gMTIwIDogOTkpOwoJCQkJc2V0VGltZW91dCh0cmlnZ2VyLCA5KTsKCQkJCWlucHV0LmJpbmQoJiMwMzk7Zm9jdXNvdXQmIzAzOTssIHVuYmluZCkuYmluZCgmIzAzOTtpbnB1dCB1cGRhdGVJbnB1dCBjaGFuZ2UmIzAzOTssIHRyaWdnZXIpOwoJCQl9CgkJOwoJCQkKCQkKCQkkKGRvYykKCQkJLmJpbmQoJiMwMzk7Zm9jdXNpbiYjMDM5OywgZnVuY3Rpb24oZSl7CgkJCQlpZiggZS50YXJnZXQgJmFtcDsmYW1wOyBlLnRhcmdldC50eXBlICZhbXA7JmFtcDsgIWUudGFyZ2V0LnJlYWRPbmx5ICZhbXA7JmFtcDsgIWUudGFyZ2V0LmRpc2FibGVkICZhbXA7JmFtcDsgZWxlbWVudHNbKGUudGFyZ2V0Lm5vZGVOYW1lIHx8ICYjMDM5OyYjMDM5OykudG9Mb3dlckNhc2UoKV0gJmFtcDsmYW1wOyAhbm9JbnB1dFR5cGVzW2UudGFyZ2V0LnR5cGVdICl7CgkJCQkJb2JzZXJ2ZSgkKGUudGFyZ2V0KSk7CgkJCQl9CgkJCX0pCgkJOwoJfSkoKTsKCQoJaWYod2Vic2hpbXMubW9kdWxlc1smIzAzOTtmb3JtLW91dHB1dC1kYXRhbGlzdCYjMDM5O10pewoJCXdlYnNoaW1zLmlzUmVhZHkoJiMwMzk7Zm9ybS1vdXRwdXQtZGF0YWxpc3QmIzAzOTssIHRydWUpOwoJfQp9KTs=

ich denke mal das das nicht beabsichtigt ist

ich nutze
firefox prtable firefox neuste vers.
IE6
auf OS: Ubuntu und Win XP

lg euer localhost`

00

Dabei seit: 20.10.2010

Beiträge: 5346

nach oben

Zitieren

verfasst am 03.07.2011 um 16:19:56 Uhr

Wow! DAS nenn ich ma nen langen Text

RalfKrause

:: Leitung ::

Dabei seit: 28.03.2011

Beiträge: 210

Wohnort: Essen
nach oben

Zitieren

verfasst am 03.07.2011 um 16:57:02 Uhr

Das ist mehr wie manch andere seid bestehen von #Musik geschrieben haben

YvoS

Dabei seit: 10.11.2010

Beiträge: 46

nach oben

Zitieren

verfasst am 03.07.2011 um 17:00:39 Uhr

Naja Ralf, er hat es ja hoffentlich nicht alles abgetippt ;D

RalfKrause

:: Leitung ::

Dabei seit: 28.03.2011

Beiträge: 210

Wohnort: Essen
nach oben

Zitieren

verfasst am 03.07.2011 um 17:02:27 Uhr

Lach das hoffe ich natürlich auch

00

Dabei seit: 20.10.2010

Beiträge: 5346

nach oben

Zitieren

verfasst am 03.07.2011 um 17:16:39 Uhr

Wenn doch, dann Hut ab

dj-corny

Dabei seit: 20.02.2005

Beiträge: 214

nach oben

Zitieren

verfasst am 03.07.2011 um 17:46:07 Uhr

@00: ich hoffe du weißt nun, was ich mit "Offtopic-Smalltalk Scheiss" meinte...

Topic: Javascript deaktiviert? Adblocker aktiviert?

netmikey

:: Projektadministration ::

Dabei seit: 08.01.2010

Beiträge: 71

Wohnort: Aachen
nach oben

Zitieren

verfasst am 04.07.2011 um 00:01:40 Uhr

IE6 und Firefox Mobile werden nicht unterstützt, sorry!